From 6f73e436fb8eae5fbf02df2c4477db4403f14ea7 Mon Sep 17 00:00:00 2001 From: david adamson Date: Thu, 11 Jul 2024 09:16:22 +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 f93e43e2abc86..17a55cd65aef6 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 @@ public function get_fontsize(string $fontsize): int { $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 4f739f0b6f62e..d98d6b54e795d 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 @@ * 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 @@ class css_text_has_contrast_test extends all_checks { 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 @@ public function test_good_backgroundcssrgba(): void { $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); + } }