<!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 (prefers-color-scheme: no-preference) {
    /* 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>
