| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>cssText reflects changes after it has been read</title> |
| <link rel="help" href="https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-csstext"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| "use strict"; |
| |
| for (const kind of ["inline", "rule"]) { |
| test(() => { |
| let style; |
| if (kind === "inline") { |
| style = document.createElement("div").style; |
| } else { |
| const sheet = new CSSStyleSheet(); |
| sheet.insertRule("div {}"); |
| style = sheet.cssRules[0].style; |
| } |
| |
| assert_equals(style.cssText, ""); |
| style.color = "red"; |
| assert_equals(style.cssText, "color: red;"); |
| style.color = "blue"; |
| assert_equals(style.cssText, "color: blue;"); |
| style.setProperty("color", "blue", "important"); |
| assert_equals(style.cssText, "color: blue !important;"); |
| style.setProperty("color", "blue"); |
| assert_equals(style.cssText, "color: blue;"); |
| style.removeProperty("color"); |
| assert_equals(style.cssText, ""); |
| |
| style.setProperty("--custom", "one", "important"); |
| assert_equals(style.cssText, "--custom: one !important;"); |
| style.setProperty("--custom", "two"); |
| assert_equals(style.cssText, "--custom: two;"); |
| style.setProperty("--custom", ""); |
| assert_equals(style.cssText, ""); |
| |
| style.margin = "1px"; |
| assert_equals(style.cssText, "margin: 1px;"); |
| style.marginLeft = "2px"; |
| assert_equals(style.cssText, "margin: 1px 1px 1px 2px;"); |
| style.cssText = "color: green !important;"; |
| assert_equals(style.cssText, "color: green !important;"); |
| style.cssText = "invalid"; |
| assert_equals(style.cssText, ""); |
| style.color = "red"; |
| assert_equals(style.cssText, "color: red;"); |
| style.cssText = ""; |
| assert_equals(style.cssText, ""); |
| }, `${kind} cssText reflects property, priority, shorthand, and declaration replacements`); |
| } |
| |
| test(() => { |
| const div = document.createElement("div"); |
| div.style.color = "red"; |
| assert_equals(div.style.cssText, "color: red;"); |
| div.setAttribute("style", "color:blue!important"); |
| assert_equals(div.style.cssText, "color: blue !important;"); |
| assert_equals(div.getAttribute("style"), "color:blue!important"); |
| div.removeAttribute("style"); |
| assert_equals(div.style.cssText, ""); |
| div.style.color = "green"; |
| assert_equals(div.getAttribute("style"), "color: green;"); |
| }, "cssText reflects style attribute replacement and removal"); |
| |
| test(t => { |
| const div = document.createElement("div"); |
| div.style.color = "red"; |
| assert_equals(div.style.cssText, "color: red;"); |
| const observer = new MutationObserver(() => {}); |
| t.add_cleanup(() => observer.disconnect()); |
| observer.observe(div, { attributes: true, attributeOldValue: true }); |
| |
| div.style.color = "red"; |
| assert_equals(observer.takeRecords().length, 0); |
| div.style.color = "blue"; |
| assert_equals(div.style.cssText, "color: blue;"); |
| div.style.removeProperty("color"); |
| assert_equals(div.style.cssText, ""); |
| const records = observer.takeRecords(); |
| assert_array_equals(records.map(record => record.oldValue), ["color: red;", "color: blue;"]); |
| assert_equals(div.getAttribute("style"), ""); |
| }, "Reading cssText preserves style mutation records"); |
| </script> |