| <!DOCTYPE html> |
| <title>CSS Color 4: System colors should compute to themselves</title> |
| <link rel="help" href="https://www.w3.org/TR/css-color-4/#resolving-color-values"> |
| <meta name="assert" content="Tests if system color keywords compute to themselves"> |
| <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 computes to |
| // itself, then child elements inheriting a system color value will inherit |
| // the keyword, not the color it resolves to. We can detect this 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_equals(inherited_value, specified_value); |
| }, "System color computes to itself on " + property); |
| test(function() { |
| let inherited_value = |
| document.getElementById("inherited").computedStyleMap() |
| .get(property); |
| assert_regexp_match(inherited_value, /menu/i); |
| }, "Inherited system color keyword is observable on " + property); |
| } |
| </script> |