| <!DOCTYPE html> |
| <html> |
| <head> |
| <style> |
| div.resetTest { |
| background-color: #eef; |
| color: #fee; |
| } |
| </style> |
| <script src="../../../resources/js-test-pre.js"></script> |
| <script src="resources/polyfill.js"></script> |
| <script> |
| function testNoResetStyleInheritance() { |
| debug("Test case: no reset-style-inheritance. color value should be inherited from the shadow host."); |
| var div = document.getElementById('no-reset-style-inheritance'); |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| shadowRoot.innerHTML = '<content id="content"></content>'; |
| |
| shadowRoot.getElementById('content').resetStyleInheritance = false; |
| shouldBe('window.getComputedStyle(document.getElementById("no-reset-style-inheritance").firstChild).color', '"rgb(255, 238, 238)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("no-reset-style-inheritance").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| } |
| |
| function testResetStyleInheritance() { |
| debug("Test case: reset-style-inhertiace basic test. color value should be initial because insertion point's resetStyleInheritance is true."); |
| var div = document.getElementById('reset-style-inheritance'); |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| shadowRoot.innerHTML = '<content id="content"></content>'; |
| |
| shadowRoot.getElementById('content').resetStyleInheritance = true; |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance").firstChild).color', '"rgb(0, 0, 0)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| } |
| |
| function testResetStyleInheritanceWithAttribute() { |
| debug("Test case: make a content element reset-style-inhertiace by using its attribute. color value should be initial because insertion point's resetStyleInheritance is true."); |
| var div = document.getElementById('reset-style-inheritance'); |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| shadowRoot.innerHTML = '<content id="content" reset-style-inheritance></content>'; |
| |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance").firstChild).color', '"rgb(0, 0, 0)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| } |
| |
| function testShadowResetStyleInheritanceWithAttribute() { |
| debug("Test case: make a shadow element reset-style-inhertiace by using its attribute. color value should be initial because insertion point's resetStyleInheritance is true."); |
| var div = document.getElementById('reset-style-inheritance'); |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| shadowRoot.innerHTML = '<shadow id="content" reset-style-inheritance></content>'; |
| |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance").firstChild).color', '"rgb(0, 0, 0)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| } |
| |
| function testResetStyleInheritanceDynamic() { |
| debug("Test case: reset-style-inhertiace changes dynamically. Firstly color value should be inherited. Next, initial. At last, inherited."); |
| var div = document.getElementById('reset-style-inheritance-dynamic'); |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| shadowRoot.innerHTML = '<content id="content"></content>'; |
| |
| shadowRoot.getElementById('content').resetStyleInheritance = false; |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance-dynamic").firstChild).color', '"rgb(255, 238, 238)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance-dynamic").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| |
| shadowRoot.getElementById('content').resetStyleInheritance = true; |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance-dynamic").firstChild).color', '"rgb(0, 0, 0)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance-dynamic").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| |
| shadowRoot.getElementById('content').resetStyleInheritance = false; |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance-dynamic").firstChild).color', '"rgb(255, 238, 238)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("reset-style-inheritance-dynamic").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| } |
| |
| function testResetStyleInheritanceWithoutCrossingUpperBoundary() { |
| debug("Test case: the parent node of the distributed node is in the same shadow dom subtree as the insertion point. color value should be initial. reset-style-inheritance doesn't depend on whether parent style node is in the same treescope or not."); |
| var div = document.getElementById('reset-but-not-cross-upper-boundary'); |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| |
| shadowRoot.innerHTML = '<div style="color:blue; background-color:green;"><content id="content"></content></div>'; |
| |
| shadowRoot.getElementById('content').resetStyleInheritance = true; |
| shouldBe('window.getComputedStyle(document.getElementById("reset-but-not-cross-upper-boundary").firstChild).color', '"rgb(0, 0, 0)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("reset-but-not-cross-upper-boundary").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| } |
| |
| function testResetStyleInheritanceWithMultipleShadowRoots() { |
| debug("Test case: reset-style-inheritance with multiple shadow roots. color value should be initial, because reset-style-inheritance of the insertion point in the youngest shadow root is true."); |
| var div = document.getElementById('multiple-shadow-roots'); |
| var oldestShadowRoot = div.webkitCreateShadowRoot(); |
| oldestShadowRoot.innerHTML = '<content id="content"></content>'; |
| |
| var youngerShadowRoot = div.webkitCreateShadowRoot(); |
| youngerShadowRoot.innerHTML = '<shadow id="shadow"></shadow>'; |
| |
| var youngestShadowRoot = div.webkitCreateShadowRoot(); |
| youngestShadowRoot.innerHTML = '<shadow id="shadow"></shadow>'; |
| |
| oldestShadowRoot.getElementById('content').resetStyleInheritance = false; |
| youngerShadowRoot.getElementById('shadow').resetStyleInheritance = false; |
| youngestShadowRoot.getElementById('shadow').resetStyleInheritance = true; |
| shouldBe('window.getComputedStyle(document.getElementById("multiple-shadow-roots").firstChild).color', '"rgb(0, 0, 0)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("multiple-shadow-roots").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| } |
| |
| function testResetStyleInheritanceWithMultipleInsertionPoints() { |
| debug("Test case: multiple insertion points in the same shadow dom subtree.. Each reset-style-inheritance should be checked."); |
| var div = document.getElementById('multiple-insertion-points'); |
| var oldestShadowRoot = div.webkitCreateShadowRoot(); |
| oldestShadowRoot.innerHTML = '<content id="content"></content>'; |
| |
| var youngestShadowRoot = div.webkitCreateShadowRoot(); |
| youngestShadowRoot.innerHTML = '<content select=":first-child" id="content"></content><shadow id="shadow"></shadow>'; |
| |
| youngestShadowRoot.getElementById('content').resetStyleInheritance = false; |
| youngestShadowRoot.getElementById('shadow').resetStyleInheritance = true; |
| |
| shouldBe('window.getComputedStyle(document.getElementById("multiple-insertion-points").firstChild).color', '"rgb(255, 238, 238)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("multiple-insertion-points").firstChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("multiple-insertion-points").lastChild).color', '"rgb(0, 0, 0)"'); |
| shouldBe('window.getComputedStyle(document.getElementById("multiple-insertion-points").lastChild).backgroundColor', '"rgba(0, 0, 0, 0)"'); |
| } |
| |
| function runTests() { |
| testNoResetStyleInheritance(); |
| testResetStyleInheritance(); |
| testResetStyleInheritanceWithAttribute(); |
| testShadowResetStyleInheritanceWithAttribute(); |
| testResetStyleInheritanceDynamic(); |
| testResetStyleInheritanceWithoutCrossingUpperBoundary() |
| testResetStyleInheritanceWithMultipleShadowRoots(); |
| testResetStyleInheritanceWithMultipleInsertionPoints(); |
| document.getElementById('test-cases').innerHTML = 'DONE'; |
| } |
| </script> |
| </head> |
| <body onload="runTests()"> |
| <div id="test-cases"> |
| <div id="no-reset-style-inheritance" class="resetTest"><span>first-child</span></div> |
| <div id="reset-style-inheritance" class="resetTest"><span>first-child</span></div> |
| <div id="reset-style-inheritance-dynamic" class="resetTest"><span>first-child</span></div> |
| <div id="reset-but-not-cross-upper-boundary" class="resetTest"><span>first-child</span></div> |
| <div id="multiple-shadow-roots" class="resetTest"><span>first-child</span></div> |
| <div id="multiple-insertion-points" class="resetTest"><span>first-child</span><span>last-child</span></div> |
| </div> |
| </body> |
| </html> |