| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <title>Updating the document must invalidate the style cache and change the results of getComputedStyle</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <link rel="help" href="https://drafts.csswg.org/cssom/#dom-window-getcomputedstyle"> | |
| <style> | |
| .my-link { | |
| font-size: 17px; | |
| } | |
| .my-link[href] { | |
| font-size: 18px; | |
| } | |
| .my-link[href="#a"] { | |
| font-size: 19px; | |
| } | |
| .my-link[href="#b"] { | |
| font-size: 20px; | |
| } | |
| .my-box ~ .my-link { | |
| font-size: 21px; | |
| } | |
| .my-box.bigger ~ .my-link { | |
| font-size: 22px; | |
| } | |
| .my-link:empty { | |
| font-size: 23px; | |
| } | |
| </style> | |
| <a class="my-link">Hello world</a> | |
| <script> | |
| "use strict"; | |
| const link = document.querySelector(".my-link"); | |
| test(() => { | |
| assert_equals(getComputedStyle(link).fontSize, "17px"); | |
| }, "Initial style value"); | |
| test(() => { | |
| link.href = "#x"; // appendAttribute | |
| assert_equals(getComputedStyle(link).fontSize, "18px"); | |
| }, "Assigning to attribute updates the computed style"); | |
| test(() => { | |
| link.setAttribute("href", "#a"); // changeAttribute | |
| assert_equals(getComputedStyle(link).fontSize, "19px"); | |
| }, "Setting an attribute updates the computed style"); | |
| test(() => { | |
| const attr = document.createAttribute("href"); | |
| attr.value = "#b"; | |
| link.attributes.setNamedItem(attr); // replaceAttribute | |
| assert_equals(getComputedStyle(link).fontSize, "20px"); | |
| }, "Replacing an attribute updates the computed style"); | |
| test(() => { | |
| link.removeAttribute("href"); // removeAttribute | |
| assert_equals(getComputedStyle(link).fontSize, "17px"); | |
| }, "Removing an attribute updates the computed style"); | |
| test(() => { | |
| const box = document.createElement("div"); | |
| box.className = "my-box"; | |
| link.before(box); | |
| assert_equals(getComputedStyle(link).fontSize, "21px"); | |
| }, "Inserting an element updates the computed style"); | |
| test(() => { | |
| const biggerBox = document.createElement("div"); | |
| biggerBox.className = "my-box bigger"; | |
| document.querySelector(".my-box").replaceWith(biggerBox); | |
| assert_equals(getComputedStyle(link).fontSize, "22px"); | |
| }, "Replacing an element updates the computed style"); | |
| test(() => { | |
| const box = document.querySelector(".my-box"); | |
| document.body.removeChild(box); | |
| assert_equals(getComputedStyle(link).fontSize, "17px"); | |
| }, "Removing an element updates the computed style"); | |
| test(() => { | |
| link.textContent = ""; | |
| assert_equals(getComputedStyle(link).fontSize, "23px"); | |
| }, "Emptying an element updates the computed style"); | |
| </script> |