| <!doctype html> |
| <html> |
| <head> |
| <style> |
| span { |
| background-color: green; |
| } |
| </style> |
| <script src="../../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <div> |
| <div> |
| <style id="existingStyle" scoped> |
| .target { background-color: red; } |
| </style> |
| <span id="target" class="target">Hello, World!</span> |
| </div> |
| </div> |
| </body> |
| <script> |
| description("Tests that <style scoped> is correctly applied after DOM operations, i.e. insertBefore, appendChild, and removeChild."); |
| |
| var target = document.getElementById('target'); |
| |
| var existingStyle = document.getElementById('existingStyle'); |
| var newStyle = document.createElement('style'); |
| |
| newStyle.setAttribute('scoped', 'scoped'); |
| newStyle.innerHTML = ".target { background-color: blue; }"; |
| |
| debug("Insert a new scoped style before an existing scoped style."); |
| existingStyle.parentNode.insertBefore(newStyle, existingStyle); |
| shouldBe("window.getComputedStyle(target).backgroundColor", '"rgb(255, 0, 0)"'); |
| |
| debug("Move an inserted scoped style after an existing scoped style."); |
| existingStyle.parentNode.appendChild(newStyle); |
| shouldBe("window.getComputedStyle(target).backgroundColor", '"rgb(0, 0, 255)"'); |
| |
| debug("Move an inserted scoped style into grandparent of an existing scoped style."); |
| document.body.children[0].appendChild(newStyle); |
| shouldBe("window.getComputedStyle(target).backgroundColor", '"rgb(255, 0, 0)"'); |
| |
| debug("Remove an inserted scoped style."); |
| newStyle.parentNode.removeChild(newStyle); |
| shouldBe("window.getComputedStyle(target).backgroundColor", '"rgb(255, 0, 0)"'); |
| |
| debug("Remove an existing scoped style."); |
| existingStyle.parentNode.removeChild(existingStyle); |
| shouldBe("window.getComputedStyle(target).backgroundColor", '"rgb(0, 128, 0)"'); |
| </script> |
| <script src="../../../resources/js-test-post.js"></script> |
| </html> |