summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-color/system-color-compute.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/css-color/system-color-compute.html')
-rw-r--r--testing/web-platform/tests/css/css-color/system-color-compute.html112
1 files changed, 112 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-color/system-color-compute.html b/testing/web-platform/tests/css/css-color/system-color-compute.html
new file mode 100644
index 0000000000..ed4f3b947e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-color/system-color-compute.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<title>CSS Color 4: System colors compute to absolute colors</title>
+<link rel="help" href="https://www.w3.org/TR/css-color-4/#resolving-color-values">
+<meta name="assert" content="Tests that system color keywords resolve to absolute colors at computed value time">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+.parent {
+ border: 1px solid black;
+ width: 100px;
+ height: 170px;
+ margin: 5px;
+ padding: 5px;
+ color-scheme: light;
+}
+
+.child {
+ position: relative;
+ border: 1px solid black;
+ width: 80px;
+ height: 50px;
+ margin: 4px;
+ padding: 4px;
+ color-scheme: dark;
+}
+
+.specified {
+ color: Menu;
+ background-color: Menu;
+ box-shadow: 2px 2px Menu;
+ text-shadow: 2px 2px Menu;
+ border-color: Menu;
+ column-rule-color: Menu;
+ outline-color: Menu;
+ caret-color: Menu;
+ fill: Menu;
+ stroke: Menu;
+}
+
+.inherit {
+ color: inherit;
+ background-color: inherit;
+ box-shadow: inherit;
+ text-shadow: inherit;
+ border-color: inherit;
+ column-rule-color: inherit;
+ outline-color: inherit;
+ caret-color: inherit;
+ fill: inherit;
+ stroke: inherit;
+}
+</style>
+
+<div id="parent" class="specified parent">Parent
+ <div id="specified" class="specified child">Specified Child</div>
+ <div id="inherited" class="inherit child">Inherit Child</div>
+</div>
+
+<script>
+ // The premise behind this test is that if a system color keyword were to
+ // compute to itself, then child elements inheriting a system color value
+ // will incorrectly inherit the keyword, not the color it resolves to. We can
+ // detect whether this is happening by applying different color schemes to
+ // parent and child, then comparing the results we get between a child that
+ // inherited a system color versus a child that received the system color
+ // directly.
+
+ // As a precondition check, validate that the color-scheme property results
+ // in a different resolved color.
+ test(function() {
+ let light_value =
+ getComputedStyle(document.getElementById("parent")).backgroundColor;
+ let dark_value =
+ getComputedStyle(document.getElementById("specified")).backgroundColor;
+ assert_not_equals(light_value, dark_value);
+ }, "color-scheme property affects Menu system color keyword");
+
+ // Test several color properties.
+ const properties_to_test = [
+ "color",
+ "background-color",
+ "box-shadow",
+ "text-shadow",
+ "border-left-color",
+ "border-top-color",
+ "border-right-color",
+ "border-bottom-color",
+ "column-rule-color",
+ "outline-color",
+ "caret-color",
+ "fill",
+ "stroke",
+ ];
+
+ for (let property of properties_to_test) {
+ test(function() {
+ let specified_value =
+ getComputedStyle(document.getElementById("specified"))
+ .getPropertyValue(property);
+ let inherited_value =
+ getComputedStyle(document.getElementById("inherited"))
+ .getPropertyValue(property);
+ assert_not_equals(inherited_value, specified_value);
+ }, "System color doesn't compute to itself on " + property);
+ test(function() {
+ let inherited_value =
+ document.getElementById("inherited").computedStyleMap()
+ .get(property);
+ assert_false(/menu/i.test(inherited_value));
+ }, "Inherited system color keyword is observable on " + property);
+ }
+</script>