From 29bdc66fc2581bf2b9f4fda837a9a4ebd32f7d76 Mon Sep 17 00:00:00 2001 From: david adamson Date: Wed, 10 Jul 2024 14:41:29 +1000 Subject: [PATCH] MDL-82429 tool_brickfield: Process calculated fontsizes --- .../brickfield_accessibility_color_test.php | 6 ++-- .../checks/css_text_has_contrast_test.php | 30 ++++++++++++++++++- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/admin/tool/brickfield/classes/local/htmlchecker/common/brickfield_accessibility_color_test.php b/admin/tool/brickfield/classes/local/htmlchecker/common/brickfield_accessibility_color_test.php index f93e43e2abc..17a55cd65ae 100644 --- a/admin/tool/brickfield/classes/local/htmlchecker/common/brickfield_accessibility_color_test.php +++ b/admin/tool/brickfield/classes/local/htmlchecker/common/brickfield_accessibility_color_test.php @@ -410,13 +410,13 @@ class brickfield_accessibility_color_test extends brickfield_accessibility_test $pos3 = stripos($fontsize, 'px'); if ($pos1 !== false) { $rem = substr($fontsize, 0, -3); - $newfontsize = $newfontsize * $rem; + $newfontsize = is_numeric($rem) ? $newfontsize * $rem : $newfontsize; } else if ($pos2 !== false) { $em = substr($fontsize, 0, -2); - $newfontsize = $newfontsize * $em; + $newfontsize = is_numeric($em) ? $newfontsize * $em : $newfontsize; } else if ($pos3 !== false) { $px = substr($fontsize, 0, -2); - $newfontsize = 0.75 * $px; + $newfontsize = is_numeric($px) ? 0.75 * $px : $newfontsize; } else if (in_array($fontsize, array_keys($this->fontsizenames))) { $newfontsize = $this->fontsizenames[$fontsize]; } else { diff --git a/admin/tool/brickfield/tests/local/htmlchecker/common/checks/css_text_has_contrast_test.php b/admin/tool/brickfield/tests/local/htmlchecker/common/checks/css_text_has_contrast_test.php index 4f739f0b6f6..d98d6b54e79 100644 --- a/admin/tool/brickfield/tests/local/htmlchecker/common/checks/css_text_has_contrast_test.php +++ b/admin/tool/brickfield/tests/local/htmlchecker/common/checks/css_text_has_contrast_test.php @@ -32,7 +32,7 @@ require_once('all_checks.php'); * Class test_css_text_has_contrast_test * @covers \tool_brickfield\local\htmlchecker\brickfield_accessibility */ -class css_text_has_contrast_test extends all_checks { +final class css_text_has_contrast_test extends all_checks { /** @var string The check type. */ protected $checktype = 'css_text_has_contrast'; @@ -227,6 +227,18 @@ EOD; This is contrasty enough.

EOD; + /** @var string HTML with calculated size colour values. */ + private $calculatedfail = <<

+ This is not contrasty enough.

+EOD; + + /** @var string HTML with calculated size colour values. */ + private $calculatedpass = <<

+ This is contrasty enough.

+EOD; + /** * Test for the area assign intro */ @@ -458,4 +470,20 @@ EOD; $results = $this->get_checker_results($html); $this->assertEmpty($results); } + + /** + * Test for calculated (12pt) text with insufficient contrast of 4.49. + */ + public function test_check_for_calculated_fail(): void { + $results = $this->get_checker_results($this->calculatedfail); + $this->assertTrue($results[0]->element->tagName == 'p'); + } + + /** + * Test for calculated (12pt) text with sufficient contrast of 4.81. + */ + public function test_check_for_calculated_pass(): void { + $results = $this->get_checker_results($this->calculatedpass); + $this->assertEmpty($results); + } }