summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-variables/variable-invalidation.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/css-variables/variable-invalidation.html')
-rw-r--r--testing/web-platform/tests/css/css-variables/variable-invalidation.html106
1 files changed, 106 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-variables/variable-invalidation.html b/testing/web-platform/tests/css/css-variables/variable-invalidation.html
new file mode 100644
index 0000000000..677f217c88
--- /dev/null
+++ b/testing/web-platform/tests/css/css-variables/variable-invalidation.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Tests css variable invalidation</title>
+
+ <meta rel="author" title="Kevin Babbitt">
+ <meta rel="author" title="Greg Whitworth">
+ <link rel="author" title="Microsoft Corporation" href="http://microsoft.com" />
+ <!-- This is not directly specified in the spec but should work -->
+ <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>
+ #test1 {
+ --var1:red;
+ }
+ #test2 {
+ --var2:red!important;
+ }
+ </style>
+</head>
+<body>
+ <div id="test1"><div><div><div class="testElem"></div></div></div></div>
+ <div id="test2"><div><div><div class="testElem"></div></div></div></div>
+ <div id="test3" style="--var3:red"><div><div><div class="testElem"></div></div></div></div>
+ <div id="test4" style="--var4:red!important"><div><div><div class="testElem"></div></div></div></div>
+
+ <script type="text/javascript">
+ "use strict";
+
+ // This is a helper function to avoid repitition
+ function testExpectations(testProperty, cssStyle, testElement, testDescription, expectedValue, expectedCssText, expectedPriority, expectedLength, expectedItem0) {
+ assert_equals(cssStyle.cssText, expectedCssText, "cssText " + testDescription + ".");
+ assert_equals(cssStyle.getPropertyValue(testProperty), expectedValue, "Value " + testDescription + ".");
+ assert_equals(cssStyle.getPropertyPriority(testProperty), expectedPriority, "Priority " + testDescription + ".");
+ assert_equals(cssStyle.length, expectedLength, "style length " + testDescription + ".");
+ assert_equals(cssStyle.item(0), expectedItem0, "item(0) " + testDescription + ".");
+
+ var computedStyle = window.getComputedStyle(testElement);
+ assert_equals(computedStyle.getPropertyValue(testProperty), expectedValue, "Computed Style value " + testDescription + ".");
+ }
+
+ // This is a boilerplate to build a testcase and then test the expected outcome
+ function testCase(cssStyle, testProperty, testElement, testImportant) {
+ var initialCssText = testProperty + (testImportant ? ": red !important;" : ": red;");
+
+ testExpectations(testProperty, cssStyle, testElement, "initial", "red", initialCssText, testImportant ? "important" : "", 1, testProperty);
+
+ cssStyle.setProperty(testProperty, "blue");
+
+ if (!testImportant) {
+ testExpectations(testProperty, cssStyle, testElement, "after setProperty", "blue", testProperty + ": blue;", "", 1, testProperty);
+ }
+
+ if (testProperty) {
+ cssStyle.setProperty(testProperty, "pink", 'important');
+ testExpectations(testProperty, cssStyle, testElement, "after setProperty important", "pink", testProperty + ": pink !important;", "important", 1, testProperty);
+ }
+
+ cssStyle.removeProperty(testProperty);
+ testExpectations(testProperty, cssStyle, testElement, "after removeProperty", "", "", "", 0, "");
+
+ var cssText = testProperty + (testImportant ? ":green!important;" : ":green;");
+ var expectedCssText = testProperty + (testImportant ? ": green !important;" : ": green;");
+ cssStyle.cssText = cssText;
+ testExpectations(testProperty, cssStyle, testElement, "after setting cssText", "green", expectedCssText, testImportant ? "important" : "", 1, testProperty);
+ }
+
+ // The actual tests that utilize the boilerplate & helper methods above
+ test( function () {
+ var cssStyle = document.styleSheets[0].cssRules[0].style;
+ var testProperty = "--var1";
+ var testElement = document.querySelectorAll("#test1 .testElem")[0];
+
+ testCase(cssStyle, testProperty, testElement, false);
+ }, "css rule test");
+
+ test( function () {
+ var cssStyle = document.styleSheets[0].cssRules[1].style;
+ var testProperty = "--var2";
+ var testElement = document.querySelectorAll("#test2 .testElem")[0];
+
+ testCase(cssStyle, testProperty, testElement, true);
+ }, "css rule test important");
+
+ test( function () {
+ var element = document.getElementById("test3");
+ var cssStyle = element.style;
+ var testProperty = "--var3";
+ var testElement = document.querySelectorAll("#test3 .testElem")[0];
+
+ testCase(cssStyle, testProperty, testElement, false);
+ }, "inline style test");
+
+ test( function () {
+ var element = document.getElementById("test4");
+ var cssStyle = element.style;
+ var testProperty = "--var4";
+ var testElement = document.querySelectorAll("#test4 .testElem")[0];
+
+ testCase(cssStyle, testProperty, testElement, true);
+ }, "inline style test important");
+ </script>
+</body>
+</html> \ No newline at end of file