<!DOCTYPE html>

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

<style>
#test1 {
    color: text;
}
</style>

<meta id="meta" name="supported-color-schemes" content="light">

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

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

function test_color_is_white(id) {
    test_prop("test1", "color", "rgb(255, 255, 255)");
}

function test_color_is_black(id) {
    test_prop("test1", "color", "rgb(0, 0, 0)");
}

test(function() {
    // The semantic text color should be black.
    test_color_is_black("test1");
}, "Element colors are correct in light color scheme with only light color scheme");

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

test(function() {
    // The semantic text color should be black, and not change.
    test_color_is_black("test1");
}, "Element colors are correct in dark color scheme with only light color scheme");

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

test(function() {
    document.getElementById("meta").content = "light dark";
}, "Supported color schemes changed to light and dark");

test(function() {
    // The semantic text color should be black.
    test_color_is_black("test1");
}, "Element colors are correct in light color scheme with light and dark color scheme");

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

test(function() {
    // The semantic text color should be white.
    test_color_is_white("test1");
}, "Element colors are correct in dark color scheme with light and dark color scheme");

test(function() {
    if (window.internals)
        internals.settings.setUseDarkAppearance(false);
}, "Light color scheme enabled 2");

test(function() {
    document.getElementById("meta").content = "dark";
}, "Supported color schemes changed to dark");

test(function() {
    // The semantic text color should be white.
    test_color_is_white("test1");
}, "Element colors are correct in light color scheme with only dark color scheme");

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

test(function() {
    // The semantic text color should be white still.
    test_color_is_white("test1");
}, "Element colors are correct in dark color scheme with only dark color scheme");

test(function() {
    document.getElementById("meta").content = "light ,foo ";
}, "Supported color schemes changed to light and a bogus value");

test(function() {
    // The semantic text color should be black again.
    test_color_is_black("test1");
}, "Element colors are correct in dark color scheme with only light color scheme 2");

test(function() {
    document.getElementById("meta").content = "";
}, "Supported color schemes changed to empty value");

test(function() {
    // The semantic text color should be black still.
    test_color_is_black("test1");
}, "Element colors are correct in dark color scheme with implicit light color scheme");

test(function() {
    document.getElementById("meta").content = "   light,dark ";
}, "Supported color schemes changed to light,dark");

test(function() {
    // The semantic text color should be black now.
    test_color_is_black("test1");
}, "Element colors are in light color scheme since comma is not an allowed seperator");

test(function() {
    document.getElementById("meta").content = "  foo dark";
}, "Supported color schemes changed to a bogus value and dark");

test(function() {
    // The semantic text color should be white still.
    test_color_is_white("test1");
}, "Element colors are correct in dark color scheme with dark color scheme");
</script>
