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 textColor; |
| 10 |
| 11 function shouldHaveTextColor(node, col) |
| 12 { |
| 13 textColor = document.defaultView.getComputedStyle(node, null).getPropertyVal
ue('color'); |
| 14 shouldBeEqualToString('textColor', col); |
| 15 } |
| 16 |
| 17 function cleanUp() |
| 18 { |
| 19 document.getElementById('sandbox').innerHTML = ''; |
| 20 } |
| 21 |
| 22 function testScopedStyle() |
| 23 { |
| 24 debug('test a scoped style in shadow tree.'); |
| 25 document.getElementById('sandbox').appendChild( |
| 26 createDOM('div', {'id': 'host'}, |
| 27 createShadowRoot( |
| 28 createDOM('div', {}, |
| 29 createDOM('style', {'scoped': 'scoped'}, |
| 30 document.createTextNode('div { color: red; }')), |
| 31 createDOM('div', {'id': 'E'})), |
| 32 createDOM('div', {'id': 'F'})))); |
| 33 |
| 34 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 35 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 36 cleanUp(); |
| 37 } |
| 38 |
| 39 function testStyle() |
| 40 { |
| 41 debug('test a style in shadow tree.'); |
| 42 document.getElementById('sandbox').appendChild( |
| 43 createDOM('div', {'id': 'host'}, |
| 44 createShadowRoot( |
| 45 createDOM('div', {}, |
| 46 createDOM('div', {'id': 'E'}, |
| 47 createDOM('style', {}, |
| 48 document.createTextNode('div { color: red; }')))), |
| 49 createDOM('div', {'id': 'F'})))); |
| 50 |
| 51 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 52 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)'); |
| 53 cleanUp(); |
| 54 } |
| 55 |
| 56 function testStyleWithMultipleShadowRoots() |
| 57 { |
| 58 debug('test styles in multiple shadow trees.'); |
| 59 |
| 60 document.getElementById('sandbox').appendChild( |
| 61 createDOM('div', {'id': 'host'}, |
| 62 createShadowRoot( |
| 63 createDOM('div', {}, |
| 64 createDOM('style', {}, |
| 65 document.createTextNode('div { color: red; }')), |
| 66 createDOM('div', {'id': 'E'})), |
| 67 createDOM('div', {'id': 'F'})), |
| 68 |
| 69 createShadowRoot( |
| 70 createDOM('div', {}, |
| 71 createDOM('style', {'scoped': 'scoped'}, |
| 72 document.createTextNode('div { color: blue; }')), |
| 73 createDOM('shadow', {}), |
| 74 createDOM('div', {'id': 'G'}))))); |
| 75 |
| 76 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 77 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)'); |
| 78 shouldHaveTextColor(getNodeInTreeOfTrees('host//G'), 'rgb(0, 0, 255)'); |
| 79 cleanUp(); |
| 80 } |
| 81 |
| 82 function testScopedStyleWithNestedShadowRoots() |
| 83 { |
| 84 debug('test a scoped style in nested shadow tree.'); |
| 85 document.getElementById('sandbox').appendChild( |
| 86 createDOM('div', {'id': 'host'}, |
| 87 createShadowRoot( |
| 88 createDOM('div', {}, |
| 89 createDOM('style', {'scoped': 'scoped'}, |
| 90 document.createTextNode('div { color: red; }')), |
| 91 createDOM('div', {'id': 'E'}, |
| 92 createShadowRoot( |
| 93 createDOM('div', {}, |
| 94 createDOM('style', {'scoped': 'scoped'}, |
| 95 document.createTextNode('div { color: blue;
}')), |
| 96 createDOM('div', {'id': 'G'})), |
| 97 createDOM('div', {'id': 'H'})))), |
| 98 createDOM('div', {'id': 'F'})))); |
| 99 |
| 100 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 101 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 102 shouldHaveTextColor(getNodeInTreeOfTrees('host/E/G'), 'rgb(0, 0, 255)'); |
| 103 shouldHaveTextColor(getNodeInTreeOfTrees('host/E/H'), 'rgb(255, 0, 0)'); |
| 104 cleanUp(); |
| 105 } |
| 106 |
| 107 function testStyleWithNestedShadowRoots() |
| 108 { |
| 109 debug('test a style in nested shadow tree.'); |
| 110 document.getElementById('sandbox').appendChild( |
| 111 createDOM('div', {'id': 'host'}, |
| 112 createShadowRoot( |
| 113 createDOM('div', {}, |
| 114 createDOM('style', {}, |
| 115 document.createTextNode('div { color: red; }')), |
| 116 createDOM('div', {'id': 'E'}, |
| 117 createShadowRoot( |
| 118 createDOM('div', {}, |
| 119 createDOM('style', {}, |
| 120 document.createTextNode('div { color: blue;
}')), |
| 121 createDOM('div', {'id': 'G'})), |
| 122 createDOM('div', {'id': 'H'})))), |
| 123 createDOM('div', {'id': 'F'})))); |
| 124 |
| 125 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 126 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)'); |
| 127 shouldHaveTextColor(getNodeInTreeOfTrees('host/E/G'), 'rgb(0, 0, 255)'); |
| 128 shouldHaveTextColor(getNodeInTreeOfTrees('host/E/H'), 'rgb(0, 0, 255)'); |
| 129 cleanUp(); |
| 130 } |
| 131 |
| 132 function testChangeScopedAttributeOnline() |
| 133 { |
| 134 debug('test changing scoped attribute online.'); |
| 135 document.getElementById('sandbox').appendChild( |
| 136 createDOM('div', {'id': 'host'}, |
| 137 createShadowRoot( |
| 138 createDOM('div', {}, |
| 139 createDOM('style', {'id': 'style-in-shadow', 'scoped': 'scop
ed'}, |
| 140 document.createTextNode('div { color: red; }')), |
| 141 createDOM('div', {'id': 'E'})), |
| 142 createDOM('div', {'id': 'F'})))); |
| 143 |
| 144 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 145 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 146 document.body.offsetLeft; |
| 147 |
| 148 // changing from scoped to scoped. |
| 149 getNodeInTreeOfTrees('host/style-in-shadow').setAttribute('scoped', 'scoped'
); |
| 150 |
| 151 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 152 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 153 |
| 154 // removing scoped. |
| 155 getNodeInTreeOfTrees('host/style-in-shadow').removeAttribute('scoped'); |
| 156 |
| 157 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 158 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)'); |
| 159 |
| 160 // changing from not scoped to scoped. |
| 161 getNodeInTreeOfTrees('host/style-in-shadow').setAttribute('scoped', 'scoped'
); |
| 162 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 163 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 164 cleanUp(); |
| 165 } |
| 166 |
| 167 function testRemoveScopedStyle() |
| 168 { |
| 169 debug('test removing a scoped style from shadow tree.'); |
| 170 document.getElementById('sandbox').appendChild( |
| 171 createDOM('div', {'id': 'host'}, |
| 172 createShadowRoot( |
| 173 createDOM('div', {}, |
| 174 createDOM('style', {'id': 'style-in-shadow', 'scoped': 'scop
ed'}, |
| 175 document.createTextNode('div { color: red; }')), |
| 176 createDOM('div', {'id': 'E'})), |
| 177 createDOM('div', {'id': 'F'})))); |
| 178 |
| 179 // before |
| 180 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 181 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 182 |
| 183 var styleInShadow = getNodeInTreeOfTrees('host/style-in-shadow'); |
| 184 styleInShadow.parentNode.removeChild(styleInShadow); |
| 185 |
| 186 // after |
| 187 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(0, 0, 0)'); |
| 188 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 189 cleanUp(); |
| 190 } |
| 191 |
| 192 function testRemoveStyle() |
| 193 { |
| 194 debug('test removing a style from shadow tree.'); |
| 195 document.getElementById('sandbox').appendChild( |
| 196 createDOM('div', {'id': 'host'}, |
| 197 createShadowRoot( |
| 198 createDOM('div', {}, |
| 199 createDOM('style', {'id': 'style-in-shadow'}, |
| 200 document.createTextNode('div { color: red; }')), |
| 201 createDOM('div', {'id': 'E'})), |
| 202 createDOM('div', {'id': 'F'})))); |
| 203 |
| 204 // before |
| 205 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 206 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)'); |
| 207 |
| 208 var styleInShadow = getNodeInTreeOfTrees('host/style-in-shadow'); |
| 209 styleInShadow.parentNode.removeChild(styleInShadow); |
| 210 |
| 211 // after |
| 212 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(0, 0, 0)'); |
| 213 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 214 cleanUp(); |
| 215 } |
| 216 |
| 217 function testInsertScopedStyle() |
| 218 { |
| 219 debug('test inserting a scoped style into shadow tree.'); |
| 220 document.getElementById('sandbox').appendChild( |
| 221 createDOM('div', {'id': 'host'}, |
| 222 createShadowRoot( |
| 223 createDOM('div', {'id': 'D'}, |
| 224 createDOM('div', {'id': 'E'})), |
| 225 createDOM('div', {'id': 'F'})))); |
| 226 |
| 227 var style = document.createElement('style'); |
| 228 style.innerHTML = 'div { color: red; }'; |
| 229 style.setAttribute('scoped', 'scoped'); |
| 230 getNodeInTreeOfTrees('host/D').appendChild(style); |
| 231 |
| 232 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 233 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 234 cleanUp(); |
| 235 } |
| 236 |
| 237 function testInsertStyle() |
| 238 { |
| 239 debug('test inserting a style into shadow tree.'); |
| 240 document.getElementById('sandbox').appendChild( |
| 241 createDOM('div', {'id': 'host'}, |
| 242 createShadowRoot( |
| 243 createDOM('div', {'id': 'D'}, |
| 244 createDOM('div', {'id': 'E'})), |
| 245 createDOM('div', {'id': 'F'})))); |
| 246 |
| 247 var style = document.createElement('style'); |
| 248 style.innerHTML = 'div { color: red; }'; |
| 249 getNodeInTreeOfTrees('host/D').appendChild(style); |
| 250 |
| 251 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 252 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)'); |
| 253 cleanUp(); |
| 254 } |
| 255 |
| 256 function testChangeScopedAttributeOffline() |
| 257 { |
| 258 debug('test re-inserting a style after changing scoped attribute offline.'); |
| 259 document.getElementById('sandbox').appendChild( |
| 260 createDOM('div', {'id': 'host'}, |
| 261 createShadowRoot( |
| 262 createDOM('div', {'id': 'D'}, |
| 263 createDOM('style', {'id': 'style-in-shadow', 'scoped': 'scop
ed'}, |
| 264 document.createTextNode('div { color: red; }')), |
| 265 createDOM('div', {'id': 'E'})), |
| 266 createDOM('div', {'id': 'F'})))); |
| 267 |
| 268 var style = getNodeInTreeOfTrees('host/style-in-shadow'); |
| 269 style.parentNode.removeChild(style); |
| 270 style.removeAttribute('scoped'); |
| 271 getNodeInTreeOfTrees('host/D').appendChild(style); |
| 272 |
| 273 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 274 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)'); |
| 275 |
| 276 style.parentNode.removeChild(style); |
| 277 style.setAttribute('scoped', 'scoped'); |
| 278 getNodeInTreeOfTrees('host/D').appendChild(style); |
| 279 |
| 280 shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)'); |
| 281 shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)'); |
| 282 cleanUp(); |
| 283 } |
| 284 |
| 285 function runTests() |
| 286 { |
| 287 testScopedStyle(); |
| 288 testStyle(); |
| 289 testStyleWithMultipleShadowRoots(); |
| 290 testScopedStyleWithNestedShadowRoots(); |
| 291 testStyleWithNestedShadowRoots(); |
| 292 testChangeScopedAttributeOnline(); |
| 293 testRemoveScopedStyle(); |
| 294 testRemoveStyle(); |
| 295 testInsertScopedStyle(); |
| 296 testInsertStyle(); |
| 297 testChangeScopedAttributeOffline(); |
| 298 } |
| 299 </script> |
| 300 </head> |
| 301 <body onload="runTests()"> |
| 302 <div id='sandbox'></div> |
| 303 </body> |
| 304 </html> |
OLD | NEW |