<!DOCTYPE html>

<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>

<style>
div {
    background-color: red;
    color: text;
}

@media (prefers-color-scheme: light) {
    #test1 {
        background-color: lime;
    }
}

@media (prefers-color-scheme: dark) {
    #test1 {
        background-color: blue;
    }
}

@media not (prefers-color-scheme) {
    /* This is valid, but should not apply for us since there is no option for no user preference. */
    #test1 {
        background-color: cyan;
    }
}

@media (prefers-color-scheme: foo) {
    /* This is invalid and should not apply. */
    #test1 {
        background-color: yellow;
    }
}

@media (prefers-color-scheme) {
    /* This is valid and should always apply for us, since there is always a user preference currently. */
    #test2 {
        background-color: lime;
    }
}
</style>

<div id="test1"></div>
<div id="test2"></div>

<script>
function test_prop(id, prop, expected) {
    assert_equals(window.getComputedStyle(document.getElementById(id)).getPropertyValue(prop).trim(), expected);
}

test(function() {
    // Styled background-color in media query should be lime green.
    test_prop("test1", "background-color", "rgb(0, 255, 0)");

    // The semantic text color should be black.
    test_prop("test1", "color", "rgb(0, 0, 0)");
}, "Element colors are correct in light color scheme");

test(function() {
    // Styled background-color in media query should be lime green.
    test_prop("test2", "background-color", "rgb(0, 255, 0)");

    // The semantic text color should be black.
    test_prop("test2", "color", "rgb(0, 0, 0)");
}, "Element colors are correct in light color scheme with boolean context query");

test(function() {
    if (window.internals)
        internals.settings.setUseDarkAppearance(true);
}, "Dark color scheme enabled");

test(function() {
    // Styled background-color in media query should be blue.
    test_prop("test1", "background-color", "rgb(0, 0, 255)");

    // The semantic text color should be black, and not change.
    test_prop("test1", "color", "rgb(0, 0, 0)");
}, "Element colors are correct in dark color scheme");

test(function() {
    // Styled background-color in media query should be lime green.
    test_prop("test2", "background-color", "rgb(0, 255, 0)");

    // The semantic text color should be black.
    test_prop("test2", "color", "rgb(0, 0, 0)");
}, "Element colors are correct in dark color scheme with boolean context query");
</script>
