<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/mediaqueries-5/#prefers-color-scheme" />
<script type="text/javascript" src="/resources/testharness.js"></script>
<script type="text/javascript" src="/resources/testharnessreport.js"></script>
<style id="testStyle"> </style>
<script>
  var sheet = testStyle.sheet;

  function query_is_parseable(query) {
    try {
      sheet.insertRule("@media " + query + "{}", 0);
      return sheet.cssRules.length == 1 &&
          sheet.cssRules[0].media.mediaText != "not all";
    } finally {
      while (sheet.cssRules.length)
        sheet.deleteRule(0);
    }
  }

  function query_should_be_parseable(query) {
    test(() => {
      assert_true(query_is_parseable(query));
    }, "Should be parseable: '" + query + "'");
  }

  function query_should_not_be_parseable(query) {
    test(() => {
      assert_false(query_is_parseable(query));
    }, "Should not be parseable: '" + query + "'");
  }

  query_should_be_parseable("(prefers-color-scheme)");
  query_should_be_parseable("(prefers-color-scheme: no-preference)");
  query_should_be_parseable("(prefers-color-scheme: light)");
  query_should_be_parseable("(prefers-color-scheme: dark)");

  query_should_not_be_parseable("(prefers-color-scheme: 0)");
  query_should_not_be_parseable("(prefers-color-scheme: none)");
  query_should_not_be_parseable("(prefers-color-scheme: 10px)");
  query_should_not_be_parseable("(prefers-color-scheme: dark 0)");
  query_should_not_be_parseable("(prefers-color-scheme: dark light)");
  query_should_not_be_parseable("(prefers-color-scheme: light/dark)");

  test(() => {
    let booleanContext = window.matchMedia("(prefers-color-scheme)");
    let noPreference = window.matchMedia("(prefers-color-scheme: no-preference)");
    assert_equals(booleanContext.matches, !noPreference.matches);
  }, "Check that no-preference evaluates to false in the boolean context");
</script>
