File: test_isUsedColorSchemeDark.html

package info (click to toggle)
firefox 141.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,550,616 kB
  • sloc: cpp: 7,426,508; javascript: 6,367,238; ansic: 3,707,354; python: 1,368,984; xml: 623,983; asm: 426,916; java: 184,324; sh: 64,488; makefile: 19,203; objc: 13,059; perl: 12,955; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,071; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (59 lines) | stat: -rw-r--r-- 1,896 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<!doctype html>
<meta charset="utf-8">
<title>Test InspectorUtils::isUsedColorSchemeDark</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
<meta name="color-scheme" content="light dark">

<div id="dark" style="color-scheme: dark"></div>
<div id="light" style="color-scheme: light"></div>
<div id="preferred" style="color-scheme: light dark"></div>
<div id="default"></div>

<script>
const InspectorUtils = SpecialPowers.InspectorUtils;

function testElement(id, dark) {
  is(InspectorUtils.isUsedColorSchemeDark(document.getElementById(id)), dark, id + " should " + (dark ? "" : "not ") + "be dark");
}

const meta = document.querySelector('meta[name="color-scheme"]');

function runTests() {
  const prefersDark = matchMedia("(prefers-color-scheme: dark)").matches;
  info(`testing with meta ${meta.content} and preference ${prefersDark ? "dark" : "light"}`);

  testElement("dark", true);
  testElement("light", false);
  testElement("preferred", prefersDark);
  testElement("default", meta.content.includes("dark") && (!meta.content.includes("light") || prefersDark));
}

function waitForColorSchemeToBe(scheme) {
  return new Promise(resolve => {
    let mq = matchMedia(`(prefers-color-scheme: ${scheme})`);
    if (mq.matches) {
      resolve();
    } else {
      mq.addEventListener("change", resolve, { once: true });
    }
  });
}

async function switchColorScheme(dark) {
  await SpecialPowers.pushPrefEnv({ set: [["layout.css.prefers-color-scheme.content-override", dark ? 0 : 1]] });
  await waitForColorSchemeToBe(dark ? "dark" : "light");
}

add_task(async function() {
  runTests();

  for (let dark of [false, true]) {
    for (let metaValue of ["light", "dark", "light dark"]) {
      meta.setAttribute("content", metaValue);
      await switchColorScheme(dark);
      runTests();
    }
  }
});
</script>