| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>test basic variable substitution</title> |
| |
| <meta rel="author" title="Kevin Babbitt"> |
| <meta rel="author" title="Greg Whitworth"> |
| <link rel="author" title="Microsoft Corporation" href="http://microsoft.com" /> |
| <link rel="help" href="http://www.w3.org/TR/css-variables-1/#defining-variables"> |
| |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style> |
| #testArea { |
| color: orange; |
| } |
| #testArea > div { |
| width: 50px !important; |
| } |
| </style> |
| </head> |
| <body> |
| <div id="log"></div> |
| <div id="testArea"></div> |
| <script type="text/javascript"> |
| "use strict"; |
| |
| let templates = [ |
| { |
| testName:"Simple substitution test", |
| propertyName:"border-spacing", |
| expectedValue:"20px 20px", |
| style:"--gap: 20px;border-spacing: var(--gap);" |
| }, |
| { |
| testName:"You can't build up a single token where part of it is provided by a variable", |
| propertyName:"border-spacing", |
| expectedValue:"0px 0px", |
| style:"--gap: 20;border-spacing: var(--gap)px;" |
| }, |
| { |
| testName:"You can't build up a single token where part of it is provided by a variable (percentages)", |
| propertyName:"text-indent", |
| expectedValue:"0px", |
| style:"--v: 20;text-indent: var(--v)%;" |
| }, |
| { |
| testName:"Multiple variable references in a single property", |
| propertyName:"border-spacing", |
| expectedValue:"19px 47px", |
| style:"--gap1: 19px;--gap2: 47px;border-spacing: var(--gap1) var(--gap2);" |
| }, |
| { |
| testName:"Multiple variable references in a single property (no spaces)", |
| propertyName:"border-spacing", |
| expectedValue:"23px 59px", |
| style:"--gap1:23px;--gap2:59px;border-spacing:var(--gap1)var(--gap2);" |
| }, |
| { |
| testName:"Fallback value", |
| propertyName:"border-spacing", |
| expectedValue:"11px 11px", |
| style:"border-spacing:var(--gap,11px);" |
| }, |
| { |
| testName:"Fallback value which is also a variable reference", |
| propertyName:"border-spacing", |
| expectedValue:"27px 27px", |
| style:"--gap2: 27px; border-spacing:var(--gap,var(--gap2));" |
| }, |
| { |
| testName:"Multiple var references in fallback value", |
| propertyName:"border-spacing", |
| expectedValue:"66px 92px", |
| style:"--gap2: 66px; --gap3: 92px; border-spacing:var(--gap,var(--gap2)var(--gap3));" |
| }, |
| { |
| testName:"Multiple nested fallbacks", |
| propertyName:"border-spacing", |
| expectedValue:"98px 18px", |
| style:"--gap4: 98px 18px; border-spacing:var(--gap1,var(--gap2,var(--gap3,var(--gap4,var(--gap5)))));" |
| }, |
| { |
| testName:"Bad variable reference that should inherit by default", |
| propertyName:"color", |
| expectedValue:"rgb(255, 165, 0)", |
| style:"color: var(--colorVar) pink;" |
| }, |
| { |
| testName:"Test that var reference doesn’t overwrite !important", |
| propertyName:"width", |
| expectedValue:"50px", |
| style:"--varWidth: 28px; width: var(--varWidth);" |
| }, |
| { |
| testName:"Test that !important on a property that has a variable reference can overwrite !important", |
| propertyName:"width", |
| expectedValue:"28px", |
| style:"--varWidth: 28px; width: var(--varWidth) !important;" |
| }, |
| { |
| testName:"Test that !important inside of var reference can't overwrite !important on property", |
| propertyName:"width", |
| expectedValue:"50px", |
| style:"--varWidth: 28px !important; width: var(--varWidth);" |
| }, |
| ]; |
| |
| let testArea = document.getElementById("testArea"); |
| |
| templates.forEach(function (template) { |
| test( function () { |
| let div = document.createElement("div"); |
| div.style.cssText = template.style; |
| testArea.appendChild(div); |
| let computedStyle = window.getComputedStyle(div); |
| let value = computedStyle.getPropertyValue(template.propertyName); |
| assert_equals(value, template.expectedValue, "Expected Value should match actual value"); |
| testArea.removeChild(div); |
| }, template.testName); |
| }); |
| </script> |
| </body> |
| </html> |