blob: 45b33819dbcb526080d97c3613ef80097d67ebb5 [file] [log] [blame]
<!DOCTYPE html><!-- webkit-test-runner [ CSSColorContrastEnabled=true ] -->
<html>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Test the parsing of CSS Color 5 color-contrast().");
function computedStyle(property, value)
{
var div = document.createElement("div");
document.body.appendChild(div);
div.style.setProperty(property, value);
var computedValue = getComputedStyle(div).getPropertyValue(property);
document.body.removeChild(div);
return computedValue;
}
function testComputedProperty(property, value, expected)
{
shouldBeEqualToString('computedStyle("' + property + '", "' + value + '")', expected);
}
function testComputed(value, expected)
{
testComputedProperty("background-color", value, expected);
}
debug('color-contrast(... vs ..., ... [to ...])');
debug('');
debug('Test with no specified target contrast')
testComputed(`color-contrast(white vs red, blue)`, `rgb(0, 0, 255)`);
testComputed(`color-contrast(white vs blue, red)`, `rgb(0, 0, 255)`);
testComputed(`color-contrast(white vs red, blue, green)`, `rgb(0, 0, 255)`);
testComputed(`color-contrast(white vs white, white)`, `rgb(255, 255, 255)`);
testComputed(`color-contrast(blue vs red, white)`, `rgb(255, 255, 255)`);
testComputed(`color-contrast(red vs blue, white, red)`, `rgb(255, 255, 255)`);
testComputed(`color-contrast(black vs red, blue)`, `rgb(255, 0, 0)`);
testComputed(`color-contrast(black vs blue, red)`, `rgb(255, 0, 0)`);
testComputed(`color-contrast(black vs white, white)`, `rgb(255, 255, 255)`);
testComputed(`color-contrast(red vs blue, rgb(255, 255, 255, .5))`, `rgba(255, 255, 255, 0.5)`);
debug('');
debug('Test with specified target contrast')
testComputed(`color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AA)`, `rgb(0, 100, 0)`); // darkgreen
testComputed(`color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AA-large)`, `rgb(128, 128, 0)`); // olive
testComputed(`color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AAA)`, `rgb(128, 0, 0)`); // maroon
testComputed(`color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AAA-large)`, `rgb(0, 100, 0)`); // darkgreen
testComputed(`color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to 5.8)`, `rgb(128, 0, 0)`); // maroon
debug('');
debug('Test with specified target contrast that none meet')
testComputed(`color-contrast(wheat vs bisque, darkgoldenrod, olive to 100)`, `rgb(0, 0, 0)`); // black
testComputed(`color-contrast(green vs bisque, darkgoldenrod, olive to 100)`, `rgb(255, 255, 255)`); // white
debug('');
debug('Test non-sRGB colors');
testComputed(`color-contrast(green vs color(display-p3 0 1 0), color(display-p3 0 0 1))`, `color(display-p3 0 1 0)`);
testComputed(`color-contrast(color(display-p3 1 1 0) vs color(display-p3 0 1 0), color(display-p3 0 0 1))`, `color(display-p3 0 0 1)`);
testComputed(`color-contrast(green vs lab(50% -160 160), lch(20% 50 20deg))`, `lch(20% 50 20)`);
testComputed(`color-contrast(lab(50% -160 160) vs green, lch(20% 50 20deg))`, `lch(20% 50 20)`);
debug('');
debug('Test invalid values');
testComputed(`color-contrast(white vs red)`, `rgba(0, 0, 0, 0)`);
testComputed(`color-contrast(white vs red,)`, `rgba(0, 0, 0, 0)`);
testComputed(`color-contrast(white vs )`, `rgba(0, 0, 0, 0)`);
testComputed(`color-contrast(white)`, `rgba(0, 0, 0, 0)`);
testComputed(`color-contrast(white vs red green)`, `rgba(0, 0, 0, 0)`);
testComputed(`color-contrast(white vs red, green to)`, `rgba(0, 0, 0, 0)`);
testComputed(`color-contrast(white vs red, green to invalid)`, `rgba(0, 0, 0, 0)`);
testComputed(`color-contrast(white vs red to AA)`, `rgba(0, 0, 0, 0)`);
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>