OLD | NEW |
(Empty) | |
| 1 <!doctype html> |
| 2 <html> |
| 3 <head> |
| 4 <script src="../../../resources/js-test.js"></script> |
| 5 <script src="../../dom/shadow/resources/shadow-dom.js"></script> |
| 6 <script> |
| 7 shouldBeDefined("window.internals"); |
| 8 |
| 9 var borderColor; |
| 10 |
| 11 function borderColorShouldBe(node, color) |
| 12 { |
| 13 borderColor = document.defaultView.getComputedStyle(node, null).getPropertyV
alue('border-color'); |
| 14 shouldBeEqualToString('borderColor', color); |
| 15 } |
| 16 |
| 17 function cleanUp() |
| 18 { |
| 19 document.getElementById('sandbox').innerHTML = ''; |
| 20 } |
| 21 |
| 22 function testBasic() |
| 23 { |
| 24 debug('test a scoped style in document is applied to a node in shadow dom su
btree when apply-author-styles is true.'); |
| 25 document.getElementById('sandbox').appendChild( |
| 26 createDOM('div', {}, |
| 27 createDOM('style', {'scoped': 'scoped'}, |
| 28 document.createTextNode('div { border: 1px solid red; }')), |
| 29 createDOM('div', {'id': 'host'}, |
| 30 createShadowRoot( |
| 31 createDOM('div', {'id': 'target'}))))); |
| 32 |
| 33 // before |
| 34 getNodeInTreeOfTrees('host/').applyAuthorStyles = false; |
| 35 borderColorShouldBe(getNodeInTreeOfTrees('host/target'), 'rgb(0, 0, 0)'); |
| 36 |
| 37 // after |
| 38 getNodeInTreeOfTrees('host/').applyAuthorStyles = true; |
| 39 borderColorShouldBe(getNodeInTreeOfTrees('host/target'), 'rgb(255, 0, 0)'); |
| 40 |
| 41 cleanUp(); |
| 42 } |
| 43 |
| 44 function testEnclosingShadow() |
| 45 { |
| 46 debug('test a style in an enclosing shadow dom tree is applied to a node in
shadow subtree when apply-author-styles is true.'); |
| 47 document.getElementById('sandbox').appendChild( |
| 48 createDOM('div', {'id': 'host'}, |
| 49 createShadowRoot( |
| 50 createDOM('style', {}, |
| 51 document.createTextNode('div { border: 1px solid red; }')), |
| 52 createDOM('div', {'id': 'enclosed'}, |
| 53 createShadowRoot( |
| 54 createDOM('div', {'id': 'target'})))))); |
| 55 |
| 56 // before |
| 57 getNodeInTreeOfTrees('host/enclosed/').applyAuthorStyles = false; |
| 58 borderColorShouldBe(getNodeInTreeOfTrees('host/enclosed/target'), 'rgb(0, 0,
0)'); |
| 59 |
| 60 // after |
| 61 getNodeInTreeOfTrees('host/enclosed/').applyAuthorStyles = true; |
| 62 borderColorShouldBe(getNodeInTreeOfTrees('host/enclosed/target'), 'rgb(255,
0, 0)'); |
| 63 |
| 64 cleanUp(); |
| 65 } |
| 66 |
| 67 function testEnclosingShadowWithScoped() |
| 68 { |
| 69 debug('test a scoped style in an enclosing shadow dom tree is applied to a n
ode in shadow subtree when apply-author-styles is true and the node is in the sc
ope.'); |
| 70 document.getElementById('sandbox').appendChild( |
| 71 createDOM('div', {'id': 'host'}, |
| 72 createShadowRoot( |
| 73 createDOM('div', {}, |
| 74 createDOM('style', {'scoped': 'scoped'}, |
| 75 document.createTextNode('div { border: 1px solid red; }'
)), |
| 76 createDOM('div', {'id': 'outerInScope'}, |
| 77 createShadowRoot( |
| 78 createDOM('div', {'id': 'targetInScope'})))), |
| 79 createDOM('div', {'id': 'outerOutOfScope'}, |
| 80 createShadowRoot( |
| 81 createDOM('div', {'id': 'targetOutOfScope'})))))); |
| 82 |
| 83 |
| 84 // before |
| 85 getNodeInTreeOfTrees('host/outerInScope/').applyAuthorStyles = false; |
| 86 getNodeInTreeOfTrees('host/outerOutOfScope/').applyAuthorStyles = false; |
| 87 |
| 88 borderColorShouldBe(getNodeInTreeOfTrees('host/outerInScope/targetInScope'),
'rgb(0, 0, 0)'); |
| 89 borderColorShouldBe(getNodeInTreeOfTrees('host/outerOutOfScope/targetOutOfSc
ope'), 'rgb(0, 0, 0)'); |
| 90 |
| 91 // after |
| 92 getNodeInTreeOfTrees('host/outerInScope/').applyAuthorStyles = true; |
| 93 getNodeInTreeOfTrees('host/outerOutOfScope/').applyAuthorStyles = true; |
| 94 borderColorShouldBe(getNodeInTreeOfTrees('host/outerInScope/targetInScope'),
'rgb(255, 0, 0)'); |
| 95 borderColorShouldBe(getNodeInTreeOfTrees('host/outerOutOfScope/targetOutOfSc
ope'), 'rgb(0, 0, 0)'); |
| 96 |
| 97 cleanUp(); |
| 98 } |
| 99 |
| 100 function testNestedShadow() |
| 101 { |
| 102 debug('test styles declared in enclosing shadow trees should be applied to a
n enclosed shadow tree whose apply-atur-styles is true.'); |
| 103 document.getElementById('sandbox').appendChild( |
| 104 createDOM('div', |
| 105 createDOM('style', {'scoped': 'scoped'}, |
| 106 document.createTextNode('div { border: 1px solid red; }')), |
| 107 createDOM('div', {'id': 'host'}, |
| 108 createShadowRoot( |
| 109 createDOM('style', {}, |
| 110 document.createTextNode('div { border: 1px solid blue; }
')), |
| 111 createDOM('div', {'id': 'outerMost'}, |
| 112 createShadowRoot( |
| 113 createDOM('div', {'id': 'outer'}, |
| 114 createShadowRoot( |
| 115 createDOM('div', {'id': 'target'}))))))))); |
| 116 |
| 117 getNodeInTreeOfTrees('host/').applyAuthorStyles = false; |
| 118 getNodeInTreeOfTrees('host/outerMost/').applyAuthorStyles = false; |
| 119 getNodeInTreeOfTrees('host/outerMost/outer/').applyAuthorStyles = false; |
| 120 |
| 121 // No styles should be applied. |
| 122 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(0, 0, 0)'); |
| 123 |
| 124 getNodeInTreeOfTrees('host/outerMost/outer/').applyAuthorStyles = true; |
| 125 // A style in document should be applied. |
| 126 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(0, 0, 255)'); |
| 127 |
| 128 getNodeInTreeOfTrees('host/outerMost/').applyAuthorStyles = true; |
| 129 // Not depend on apply-author-styles flags of parent shadow trees. |
| 130 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(0, 0, 255)'); |
| 131 |
| 132 cleanUp(); |
| 133 } |
| 134 |
| 135 function testMultipleShadow() |
| 136 { |
| 137 debug('test a style in document is applied to nodes in multiple shadow subtr
ees when apply-author-styles is true.'); |
| 138 document.getElementById('sandbox').appendChild( |
| 139 createDOM('div', {'id': 'host'}, |
| 140 createShadowRoot( |
| 141 createDOM('shadow', {}), |
| 142 createDOM('div', {'id': 'oldestShadow'})), |
| 143 createShadowRoot( |
| 144 createDOM('style', {'scoped': 'scoped'}, |
| 145 document.createTextNode('div { border: 1px solid blue }')), |
| 146 createDOM('shadow', {}), |
| 147 createDOM('div', {'id': 'olderShadow'})), |
| 148 createShadowRoot( |
| 149 createDOM('shadow', {}), |
| 150 createDOM('div', {'id': 'target'})), |
| 151 |
| 152 createDOM('style', {'scoped': 'scoped'}, |
| 153 document.createTextNode('div { border: 1px solid red; }')), |
| 154 createDOM('div', {}))); |
| 155 |
| 156 getNodeInTreeOfTrees('host/').applyAuthorStyles = false; |
| 157 getNodeInTreeOfTrees('host//').applyAuthorStyles = false; |
| 158 getNodeInTreeOfTrees('host///').applyAuthorStyles = false; |
| 159 |
| 160 // before |
| 161 borderColorShouldBe(getNodeInTreeOfTrees('host/oldestShadow'), 'rgb(0, 0, 0)
'); |
| 162 borderColorShouldBe(getNodeInTreeOfTrees('host//olderShadow'), 'rgb(0, 0, 25
5)'); |
| 163 borderColorShouldBe(getNodeInTreeOfTrees('host///target'), 'rgb(0, 0, 0)'); |
| 164 |
| 165 // document ---+--- oldestShadow |
| 166 // | |
| 167 // +--- olderShadow |
| 168 // | |
| 169 // +--- shadow |
| 170 |
| 171 // apply-author-styles affects between shadow and document. |
| 172 getNodeInTreeOfTrees('host///').applyAuthorStyles = true; |
| 173 borderColorShouldBe(getNodeInTreeOfTrees('host/oldestShadow'), 'rgb(0, 0, 0)
'); |
| 174 borderColorShouldBe(getNodeInTreeOfTrees('host//olderShadow'), 'rgb(0, 0, 25
5)'); |
| 175 borderColorShouldBe(getNodeInTreeOfTrees('host///target'), 'rgb(255, 0, 0)')
; |
| 176 |
| 177 // apply-author-styles affects between older shadow and document. |
| 178 getNodeInTreeOfTrees('host///').applyAuthorStyles = false; |
| 179 getNodeInTreeOfTrees('host//').applyAuthorStyles = true; |
| 180 borderColorShouldBe(getNodeInTreeOfTrees('host/oldestShadow'), 'rgb(0, 0, 0)
'); |
| 181 borderColorShouldBe(getNodeInTreeOfTrees('host//olderShadow'), 'rgb(0, 0, 25
5)'); |
| 182 borderColorShouldBe(getNodeInTreeOfTrees('host///target'), 'rgb(0, 0, 0)'); |
| 183 |
| 184 // apply-author-styles affects between oldest shadow and document. |
| 185 getNodeInTreeOfTrees('host//').applyAuthorStyles = false; |
| 186 getNodeInTreeOfTrees('host/').applyAuthorStyles = true; |
| 187 borderColorShouldBe(getNodeInTreeOfTrees('host/oldestShadow'), 'rgb(255, 0,
0)'); |
| 188 borderColorShouldBe(getNodeInTreeOfTrees('host//olderShadow'), 'rgb(0, 0, 25
5)'); |
| 189 borderColorShouldBe(getNodeInTreeOfTrees('host///target'), 'rgb(0, 0, 0)'); |
| 190 |
| 191 cleanUp(); |
| 192 } |
| 193 |
| 194 function testOrderOfApplyStyle() |
| 195 { |
| 196 debug('test a style is applied in document order.'); |
| 197 |
| 198 document.getElementById('sandbox').appendChild( |
| 199 createDOM('div', {}, |
| 200 createDOM('style', {'scoped': 'scoped'}, |
| 201 document.createTextNode('div { border: 1px solid red }')), |
| 202 createDOM('div', {'id': 'host'}, |
| 203 createShadowRoot( |
| 204 createDOM('style', {}, |
| 205 document.createTextNode('div { border: 1px solid blue; }
')), |
| 206 createDOM('div', {'id': 'outerMost'}, |
| 207 createShadowRoot( |
| 208 createDOM('style', {}, |
| 209 document.createTextNode('div { border: 1px solid
green; }')), |
| 210 createDOM('div', {'id': 'outer'}, |
| 211 createShadowRoot( |
| 212 createDOM('style', {}, |
| 213 document.createTextNode('div { border: 1
px solid yellow; }')), |
| 214 createDOM('div', {'id': 'target'}))))))))); |
| 215 |
| 216 getNodeInTreeOfTrees('host/').applyAuthorStyles = true; |
| 217 getNodeInTreeOfTrees('host/outerMost/').applyAuthorStyles = true; |
| 218 getNodeInTreeOfTrees('host/outerMost/outer/').applyAuthorStyles = true; |
| 219 |
| 220 // The last scoped style should be applied. |
| 221 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(255, 255, 0)'); |
| 222 |
| 223 getNodeInTreeOfTrees('host/outerMost/outer/').innerHTML = '<div id="target">
target</div>'; |
| 224 // The outer's scoped style should be applied. |
| 225 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(0, 128, 0)'); |
| 226 |
| 227 cleanUp(); |
| 228 } |
| 229 |
| 230 function runTests() { |
| 231 testBasic(); |
| 232 testEnclosingShadow(); |
| 233 testEnclosingShadowWithScoped(); |
| 234 testNestedShadow(); |
| 235 testMultipleShadow(); |
| 236 testOrderOfApplyStyle(); |
| 237 } |
| 238 </script> |
| 239 </head> |
| 240 <body onload="runTests()"> |
| 241 <div id='sandbox'></div> |
| 242 </body> |
| 243 </html> |
OLD | NEW |