@@ -317,12 +317,17 @@ public function testConvertToHexConvert(): void
317317 self ::assertEquals ('#00BFFF ' , Utils::convertToHex ('deep sky blue ' ));
318318 self ::assertEquals ('#FFD700 ' , Utils::convertToHex ('GOLD ' ));
319319 self ::assertEquals ('#B8860B ' , Utils::convertToHex ('darkgoldenrod ' ));
320+ self ::assertEquals ('#aabbcc ' , Utils::convertToHex ('#aabbcc ' ));
321+ self ::assertEquals ('#aaabbbccc ' , Utils::convertToHex ('#aaabbbccc ' ));
322+ self ::assertEquals ('#def ' , Utils::convertToHex ('#def ' ));
323+ self ::assertEquals ('#f1A ' , Utils::convertToHex ('#f1A ' ));
320324 }
321325
322326 public function testParseHexColor (): void
323327 {
324328 self ::assertEquals ([255 , 255 , 255 ], Utils::parseHexColor ('#ffffff ' ));
325329 self ::assertEquals ([0 , 0 , 0 ], Utils::parseHexColor ('#000000 ' ));
330+ self ::assertEquals ([0 , 0 , 0 ], Utils::parseHexColor ('#000 ' ));
326331 self ::assertEquals ([171 , 205 , 239 ], Utils::parseHexColor ('#abcdef ' ));
327332 self ::assertEquals ([254 , 220 , 186 ], Utils::parseHexColor ('#FEDCBA ' ));
328333 }
@@ -343,6 +348,34 @@ public function testRgbToHex(): void
343348 self ::assertEquals ('#fedcba ' , Utils::rgbToHex ([254 , 220 , 186 ]));
344349 }
345350
351+ public function testRelativeLuminance (): void
352+ {
353+ self ::assertEquals (0.0 , Utils::relativeLuminance ("#000000 " ));
354+ self ::assertEquals (1.0 , Utils::relativeLuminance ("#FFFfff " ));
355+ self ::assertEquals (0.00751604342389449 , Utils::relativeLuminance ("#123 " ));
356+ }
357+
358+ /**
359+ * Test that the APCA contrast function returns the correct data
360+ */
361+ public function testApcaContrast (): void
362+ {
363+ self ::assertEquals (-114.0 , Utils::apcaContrast ("#fff " , "#000000 " ));
364+ self ::assertEquals (-114.0 , Utils::apcaContrast ("#ffffff " , "#000000 " ));
365+ self ::assertEquals (-114.0 , Utils::apcaContrast ("#fffffffff " , "#000 " ));
366+ self ::assertEquals (114.0 , Utils::apcaContrast ("#000000 " , "#ffffff " ));
367+ self ::assertEquals (0.0 , Utils::apcaContrast ("#fffFFF " , "#FFFfff " ));
368+ self ::assertEquals (-0.36 , Utils::apcaContrast ("#111 " , "#111 " ));
369+ }
370+
371+ public function testHexToForegroundAndBorder (): void
372+ {
373+ self ::assertEquals (["#000000 " , "#bfbd9d " ], Utils::hexToForegroundAndBorder ("#fffDDD " ));
374+ self ::assertEquals (["#ffffff " , "#000000 " ], Utils::hexToForegroundAndBorder ("#000000 " ));
375+ self ::assertEquals (["#000000 " , "#6a7b8c " ], Utils::hexToForegroundAndBorder ("#ABC " ));
376+ self ::assertEquals (["#000000 " , "#6a7b8c " ], Utils::hexToForegroundAndBorder ("#AAABBBCCC " ));
377+ }
378+
346379 /**
347380 * Test function that converts colour name to hex notation.
348381 * Returns null for unknown values.
@@ -351,7 +384,9 @@ public function testConvertToHexUnknown(): void
351384 {
352385 self ::assertNull (Utils::convertToHex ('doesnotexist ' ));
353386 self ::assertNull (Utils::convertToHex ('#aabbccdd ' ));
354- self ::assertNull (Utils::convertToHex ('#12346h ' ));
387+ self ::assertNull (Utils::convertToHex ('#12345h ' ));
388+ self ::assertNull (Utils::convertToHex ('#1234 ' ));
389+ self ::assertNull (Utils::convertToHex ('#12 ' ));
355390 }
356391
357392 /**
@@ -770,7 +805,7 @@ public function testSanitizeSvg(): void
770805 <a xlink:href="javascript:alert(2)">test 2</a>
771806 <a href="#test3">test 3</a>
772807 <a xlink:href="#test">test 4</a>
773-
808+
774809 <a href="data:data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' onload='alert(88)'%3E%3C/svg%3E">test 5</a>
775810 <a xlink:href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' onload='alert(88)'%3E%3C/svg%3E">test 6</a>
776811 <use xlink:href="defs.svg#icon-1"/>
@@ -783,7 +818,7 @@ public function testSanitizeSvg(): void
783818 <this>shouldn't be here</this>
784819 <script>alert(1);</script>
785820 <line fill="none" stroke="#000000" stroke-miterlimit="10" x1="541.54" y1="299.573" x2="543.179" y2="536.458"/>
786-
821+
787822 </svg>
788823 EOF ;
789824 $ clean = Utils::sanitizeSvg ($ dirty );
0 commit comments