| <!DOCTYPE html> |
| <html> |
| <head> |
| <style> |
| div.resetTest { |
| background-color: #eef; |
| border: solid; |
| margin: 4px; |
| padding: 16px; |
| color: #fee; |
| font-family: Serif; |
| font-size: 24px; |
| font-style: italic; |
| font-variant: small-caps; |
| font-weight: bold; |
| letter-spacing: 2px; |
| line-height: 200%; |
| text-align: start; |
| text-indent: 50px; |
| text-transform: uppercase; |
| white-space: nowrap; |
| word-spacing: 30px; |
| } |
| </style> |
| <script> |
| function assertTrue(id, actual) { |
| if (!actual) |
| throw "failure:" + id + ": assertTrue failed"; |
| } |
| |
| function assertFalse(id, actual) { |
| if (actual) |
| throw "failure:" + id + ": assertFalse failed"; |
| } |
| |
| function shouldBe(a, b) |
| { |
| if (a != b) |
| throw "failure:" + a + ": should be " + b; |
| } |
| |
| function shouldNotBe(a, b) |
| { |
| if (a == b) |
| throw "failure:" + a + ": should not be " + b; |
| } |
| </script> |
| <script src="resources/polyfill.js"></script> |
| </head> |
| <body> |
| <div id="reset-style-inheritance"></div> |
| <div id="no-reset-style-inheritance"></div> |
| <div id="reset-style-inheritance-true-to-false"></div> |
| <div id="reset-style-inheritance-false-to-true"></div> |
| <div id="reset-style-inheritance-for-content"></div> |
| <div id="no-reset-style-inheritance-for-content"></div> |
| |
| <script> |
| function renderWithNoResetStyleInheritance() { |
| var div = document.createElement('div'); |
| div.className = 'resetTest'; |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| assertFalse('default resetStyleInheritance should be false', shadowRoot.resetStyleInheritance); |
| shadowRoot.innerHTML = '<div>text</div>'; |
| |
| document.getElementById('no-reset-style-inheritance').appendChild(div); |
| } |
| |
| function renderWithResetStyleInheritance() { |
| var div = document.createElement('div'); |
| div.className = 'resetTest'; |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| assertFalse('default resetStyleInheritance should be false', shadowRoot.resetStyleInheritance); |
| shadowRoot.resetStyleInheritance = true; |
| shadowRoot.innerHTML = '<div>text</div>'; |
| assertTrue('resetStyleInheritance should be true as explicitly set', shadowRoot.resetStyleInheritance); |
| |
| document.getElementById('reset-style-inheritance').appendChild(div); |
| } |
| |
| function renderWithChangingResetStyleInheritanceFromTrueToFalse() { |
| var div = document.createElement('div'); |
| div.className = 'resetTest'; |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| assertFalse('default resetStyleInheritance should be false', shadowRoot.resetStyleInheritance); |
| shadowRoot.resetStyleInheritance = true; |
| shadowRoot.innerHTML = '<div id="test1">text</div>'; |
| assertTrue('resetStyleInheritance should be true', shadowRoot.resetStyleInheritance); |
| |
| document.getElementById('reset-style-inheritance-true-to-false').appendChild(div); |
| div.offsetLeft; |
| var target = shadowRoot.getElementById('test1'); |
| shouldNotBe(window.getComputedStyle(target).getPropertyValue('font-family'), 'serif'); |
| shouldNotBe(window.getComputedStyle(target).getPropertyValue('line-height'), '48px'); |
| |
| shadowRoot.resetStyleInheritance = false; |
| assertFalse('resetStyleInheritance should be false', shadowRoot.resetStyleInheritance); |
| div.offsetLeft; |
| shouldBe(window.getComputedStyle(target).getPropertyValue('font-family'), 'serif'); |
| shouldBe(window.getComputedStyle(target).getPropertyValue('line-height'), '48px'); |
| } |
| |
| function renderWithChangingResetStyleInheritanceFromFalseToTrue() { |
| var div = document.createElement('div'); |
| div.className = 'resetTest'; |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| assertFalse('default resetStyleInheritance should be false', shadowRoot.resetStyleInheritance); |
| shadowRoot.resetStyleInheritance = false; |
| shadowRoot.innerHTML = '<div id="test2">text</div>'; |
| assertFalse('default resetStyleInheritance should be false', shadowRoot.resetStyleInheritance); |
| |
| document.getElementById('reset-style-inheritance-false-to-true').appendChild(div); |
| div.offsetLeft; |
| var target = shadowRoot.getElementById('test2'); |
| shouldBe(window.getComputedStyle(target).getPropertyValue('font-family'), 'serif'); |
| shouldBe(window.getComputedStyle(target).getPropertyValue('line-height'), '48px'); |
| |
| shadowRoot.resetStyleInheritance = true; |
| assertTrue('resetStyleInheritance should be true', shadowRoot.resetStyleInheritance); |
| div.offsetLeft; |
| shouldNotBe(window.getComputedStyle(target).getPropertyValue('font-family'), 'serif'); |
| shouldNotBe(window.getComputedStyle(target).getPropertyValue('line-height'), '48px'); |
| } |
| |
| function createDivWithText(text) { |
| var div = document.createElement('div'); |
| div.appendChild(document.createTextNode(text)); |
| return div; |
| } |
| |
| function renderResetStyleInheritanceForContent() { |
| var div = document.createElement('div'); |
| div.className = 'resetTest'; |
| div.appendChild(createDivWithText('text')); |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| shadowRoot.innerHTML = '<content select="div"></content>'; |
| shadowRoot.resetStyleInheritance = true; |
| assertTrue('resetStyleInheritance should be true', shadowRoot.resetStyleInheritance); |
| document.getElementById('reset-style-inheritance-for-content').appendChild(div); |
| div.offsetLeft; |
| } |
| |
| function renderNoResetStyleInheritanceForContent() { |
| var div = document.createElement('div'); |
| div.className = 'resetTest'; |
| div.appendChild(createDivWithText('text')); |
| |
| var shadowRoot = div.webkitCreateShadowRoot(); |
| shadowRoot.innerHTML = '<content select="div"></content>'; |
| shadowRoot.resetStyleInheritance = false; |
| assertFalse('resetStyleInheritance should be false', shadowRoot.resetStyleInheritance); |
| document.getElementById('no-reset-style-inheritance-for-content').appendChild(div); |
| div.offsetLeft; |
| } |
| |
| renderWithNoResetStyleInheritance(); |
| renderWithResetStyleInheritance(); |
| renderWithChangingResetStyleInheritanceFromTrueToFalse(); |
| renderWithChangingResetStyleInheritanceFromFalseToTrue(); |
| renderResetStyleInheritanceForContent(); |
| renderNoResetStyleInheritanceForContent(); |
| </script> |
| </body> |
| </html> |