<!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>
