| 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 |