OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <script src="resources/shadow-dom.js"></script> | 4 <script src="resources/shadow-dom.js"></script> |
5 <script src="../../../resources/js-test.js"></script> | 5 <script src="../../../resources/js-test.js"></script> |
6 </head> | 6 </head> |
7 <body> | 7 <body> |
8 <div id='sandbox'></div> | 8 <div id='sandbox'></div> |
9 <pre id='console'></pre> | 9 <pre id='console'></pre> |
10 </body> | 10 </body> |
(...skipping 17 matching lines...) Expand all Loading... |
28 var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))'; | 28 var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))'; |
29 var unevaledString = '"' + color.replace(/\\/g, "\\\\").replace(/"/g, "\"")
+ '"'; | 29 var unevaledString = '"' + color.replace(/\\/g, "\\\\").replace(/"/g, "\"")
+ '"'; |
30 shouldNotBe(text, unevaledString); | 30 shouldNotBe(text, unevaledString); |
31 } | 31 } |
32 | 32 |
33 function cleanUp() | 33 function cleanUp() |
34 { | 34 { |
35 document.getElementById('sandbox').innerHTML = ''; | 35 document.getElementById('sandbox').innerHTML = ''; |
36 } | 36 } |
37 | 37 |
38 description('Test for ^ combinator, http://crbug.com/309504.'); | 38 description('Test for /shadow-all/ combinator, http://crbug.com/309504.'); |
39 | 39 |
40 var sandbox = document.getElementById('sandbox'); | 40 var sandbox = document.getElementById('sandbox'); |
41 | 41 |
42 sandbox.appendChild( | 42 sandbox.appendChild( |
43 createDOM('div', {}, | 43 createDOM('div', {}, |
44 createDOM('style', {}, | 44 createDOM('style', {}, |
45 document.createTextNode('div ^ span { border: 1px solid green; }')), | 45 document.createTextNode('div /shadow-all/ span { border: 1px solid g
reen; }')), |
46 createDOM('div', {'id': 'host'}, | 46 createDOM('div', {'id': 'host'}, |
47 createShadowRoot( | 47 createShadowRoot( |
48 createDOM('span', {'id': 'target'}, | 48 createDOM('span', {'id': 'target'}, |
49 document.createTextNode('green border, because of hat.')))))
); | 49 document.createTextNode('green border, because of hat.')))))
); |
50 | 50 |
51 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); | 51 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); |
52 | 52 |
53 cleanUp(); | 53 cleanUp(); |
54 | 54 |
55 // Cascade order | 55 // Cascade order |
56 sandbox.appendChild( | 56 sandbox.appendChild( |
57 createDOM('div', {}, | 57 createDOM('div', {}, |
58 createDOM('style', {}, | 58 createDOM('style', {}, |
59 document.createTextNode('div ^ span { border: 1px solid green; }')), | 59 document.createTextNode('div /shadow-all/ span { border: 1px solid g
reen; }')), |
60 createDOM('div', {'id': 'host'}, | 60 createDOM('div', {'id': 'host'}, |
61 createShadowRoot( | 61 createShadowRoot( |
62 createDOM('style', {}, | 62 createDOM('style', {}, |
63 document.createTextNode('span { border: 1px solid red; }')), | 63 document.createTextNode('span { border: 1px solid red; }')), |
64 createDOM('span', {'id': 'target'}, | 64 createDOM('span', {'id': 'target'}, |
65 document.createTextNode('green border, because of hat.')))))
); | 65 document.createTextNode('green border, because of hat.')))))
); |
66 | 66 |
67 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); | 67 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); |
68 | 68 |
69 cleanUp(); | 69 cleanUp(); |
70 | 70 |
71 sandbox.appendChild( | 71 sandbox.appendChild( |
72 createDOM('div', {}, | 72 createDOM('div', {}, |
73 createDOM('style', {}, | 73 createDOM('style', {}, |
74 document.createTextNode('div ^ span { border: 1px solid green; }')), | 74 document.createTextNode('div /shadow-all/ span { border: 1px solid g
reen; }')), |
75 createDOM('div', {'id': 'host'}, | 75 createDOM('div', {'id': 'host'}, |
76 createShadowRoot( | 76 createShadowRoot( |
77 createDOM('style', {}, | 77 createDOM('style', {}, |
78 document.createTextNode('span#target { border: 1px solid red
; }')), | 78 document.createTextNode('span#target { border: 1px solid red
; }')), |
79 createDOM('span', {'id': 'target'}, | 79 createDOM('span', {'id': 'target'}, |
80 document.createTextNode('green border, because of hat.')))))
); | 80 document.createTextNode('green border, because of hat.')))))
); |
81 | 81 |
82 // Need to clarify the spec, i.e. using specificity? Currently rgb(255,0,0). | 82 // Need to clarify the spec, i.e. using specificity? Currently rgb(255,0,0). |
83 borderColorShouldBe('host/target', 'rgb(255, 0, 0)'); | 83 borderColorShouldBe('host/target', 'rgb(255, 0, 0)'); |
84 | 84 |
85 cleanUp(); | 85 cleanUp(); |
86 | 86 |
87 sandbox.appendChild( | 87 sandbox.appendChild( |
88 createDOM('div', {}, | 88 createDOM('div', {}, |
89 createDOM('style', {}, | 89 createDOM('style', {}, |
90 document.createTextNode('div#sandbox > div > div ^ span { border: 1p
x solid green; }')), | 90 document.createTextNode('div#sandbox > div > div /shadow-all/ span {
border: 1px solid green; }')), |
91 createDOM('div', {'id': 'host'}, | 91 createDOM('div', {'id': 'host'}, |
92 createShadowRoot( | 92 createShadowRoot( |
93 createDOM('span', {'id': 'target'}, | 93 createDOM('span', {'id': 'target'}, |
94 document.createTextNode('green border, because of hat.')))))
); | 94 document.createTextNode('green border, because of hat.')))))
); |
95 | 95 |
96 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); | 96 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); |
97 | 97 |
98 cleanUp(); | 98 cleanUp(); |
99 | 99 |
100 sandbox.appendChild( | 100 sandbox.appendChild( |
101 createDOM('div', {}, | 101 createDOM('div', {}, |
102 createDOM('style', {}, | 102 createDOM('style', {}, |
103 document.createTextNode('div ^ span { border: 1px solid green; }')), | 103 document.createTextNode('div /shadow-all/ span { border: 1px solid g
reen; }')), |
104 createDOM('div', {'id': 'host'}, | 104 createDOM('div', {'id': 'host'}, |
105 createShadowRoot( | 105 createShadowRoot( |
106 createDOM('style', {}, | 106 createDOM('style', {}, |
107 document.createTextNode('div > span { border: 1px solid red;
}')), | 107 document.createTextNode('div > span { border: 1px solid red;
}')), |
108 createDOM('div', {}, | 108 createDOM('div', {}, |
109 createDOM('span', {'id': 'target'}, | 109 createDOM('span', {'id': 'target'}, |
110 document.createTextNode('green border, because parent ha
t wins.'))))))); | 110 document.createTextNode('green border, because parent ha
t wins.'))))))); |
111 | 111 |
112 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); | 112 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); |
113 | 113 |
114 cleanUp(); | 114 cleanUp(); |
115 | 115 |
116 sandbox.appendChild( | 116 sandbox.appendChild( |
117 createDOM('div', {}, | 117 createDOM('div', {}, |
118 createDOM('style', {}, | 118 createDOM('style', {}, |
119 document.createTextNode('div ^ span { border: 1px solid green; }')), | 119 document.createTextNode('div /shadow-all/ span { border: 1px solid g
reen; }')), |
120 createDOM('div', {'id': 'host'}, | 120 createDOM('div', {'id': 'host'}, |
121 createShadowRoot( | 121 createShadowRoot( |
122 createDOM('style', {}, | 122 createDOM('style', {}, |
123 document.createTextNode(':host > span { border: 1px solid re
d; }')), | 123 document.createTextNode(':host > span { border: 1px solid re
d; }')), |
124 createDOM('span', {'id': 'target'}, | 124 createDOM('span', {'id': 'target'}, |
125 document.createTextNode('red border because of specificity.'
)))))); | 125 document.createTextNode('red border because of specificity.'
)))))); |
126 | 126 |
127 // Since :host's specificity is the same as *, div ^^ span wins. | 127 // Since :host's specificity is the same as *, div /shadow-all/ span wins. |
128 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); | 128 borderColorShouldBe('host/target', 'rgb(0, 128, 0)'); |
129 | 129 |
130 cleanUp(); | 130 cleanUp(); |
131 | 131 |
132 sandbox.appendChild( | 132 sandbox.appendChild( |
133 createDOM('div', {'id': 'host'}, | 133 createDOM('div', {'id': 'host'}, |
134 createShadowRoot( | 134 createShadowRoot( |
135 createDOM('style', {}, | 135 createDOM('style', {}, |
136 document.createTextNode(':host ^ span { border: 1px solid green;
}')), | 136 document.createTextNode(':host /shadow-all/ span { border: 1px s
olid green; }')), |
137 createDOM('span', {}, | 137 createDOM('span', {}, |
138 document.createTextNode('some text'))), | 138 document.createTextNode('some text'))), |
139 createShadowRoot( | 139 createShadowRoot( |
140 createDOM('shadow', {}), | 140 createDOM('shadow', {}), |
141 createDOM('span', {'id': 'target'}, | 141 createDOM('span', {'id': 'target'}, |
142 document.createTextNode('green border'))))); | 142 document.createTextNode('green border'))))); |
143 | 143 |
144 borderColorShouldBe('host//target', 'rgb(0, 128, 0)'); | 144 borderColorShouldBe('host//target', 'rgb(0, 128, 0)'); |
145 | 145 |
146 cleanUp(); | 146 cleanUp(); |
147 | 147 |
148 // div ^ span's div cannot match a shadow host whose shadow tree contains the st
yle. | 148 // div /shadow-all/ span's div cannot match a shadow host whose shadow tree cont
ains the style. |
149 sandbox.appendChild( | 149 sandbox.appendChild( |
150 createDOM('div', {'id': 'host'}, | 150 createDOM('div', {'id': 'host'}, |
151 createShadowRoot( | 151 createShadowRoot( |
152 createDOM('style', {}, | 152 createDOM('style', {}, |
153 document.createTextNode('div ^ span { border: 1px solid green; }
')), | 153 document.createTextNode('div /shadow-all/ span { border: 1px sol
id green; }')), |
154 createDOM('span', {}, | 154 createDOM('span', {}, |
155 document.createTextNode('some text'))), | 155 document.createTextNode('some text'))), |
156 createShadowRoot( | 156 createShadowRoot( |
157 createDOM('shadow', {}), | 157 createDOM('shadow', {}), |
158 createDOM('span', {'id': 'target'}, | 158 createDOM('span', {'id': 'target'}, |
159 document.createTextNode('no border'))))); | 159 document.createTextNode('no border'))))); |
160 | 160 |
161 borderColorShouldBe('host//target', 'rgb(0, 0, 0)'); | 161 borderColorShouldBe('host//target', 'rgb(0, 0, 0)'); |
162 | 162 |
163 cleanUp(); | 163 cleanUp(); |
164 | 164 |
165 | 165 |
166 // div ^ span can match [div -- sr -- span] in its sibling shadow tree. | 166 // div /shadow-all/ span can match [div -- sr -- span] in its sibling shadow tre
e. |
167 sandbox.appendChild( | 167 sandbox.appendChild( |
168 createDOM('div', {'id': 'host'}, | 168 createDOM('div', {'id': 'host'}, |
169 createShadowRoot( | 169 createShadowRoot( |
170 createDOM('style', {}, | 170 createDOM('style', {}, |
171 document.createTextNode('div ^ span { border: 1px solid green; }
')), | 171 document.createTextNode('div /shadow-all/ span { border: 1px sol
id green; }')), |
172 createDOM('span', {}, | 172 createDOM('span', {}, |
173 document.createTextNode('some text'))), | 173 document.createTextNode('some text'))), |
174 createShadowRoot( | 174 createShadowRoot( |
175 createDOM('shadow', {}), | 175 createDOM('shadow', {}), |
176 createDOM('div', {'id': 'host2'}, | 176 createDOM('div', {'id': 'host2'}, |
177 createShadowRoot( | 177 createShadowRoot( |
178 createDOM('span', {'id': 'target'}, | 178 createDOM('span', {'id': 'target'}, |
179 document.createTextNode('green border'))))))); | 179 document.createTextNode('green border'))))))); |
180 | 180 |
181 borderColorShouldBe('host//host2/target', 'rgb(0, 128, 0)'); | 181 borderColorShouldBe('host//host2/target', 'rgb(0, 128, 0)'); |
182 | 182 |
183 cleanUp(); | 183 cleanUp(); |
184 | 184 |
185 // :host div ^ div should match. | 185 // :host div /shadow-all/ div should match. |
186 sandbox.appendChild( | 186 sandbox.appendChild( |
187 createDOM('div', {'id': 'host'}, | 187 createDOM('div', {'id': 'host'}, |
188 createShadowRoot( | 188 createShadowRoot( |
189 createDOM('style', {}, | 189 createDOM('style', {}, |
190 document.createTextNode(':host div ^ div { border: 1px solid gre
en; }')), | 190 document.createTextNode(':host div /shadow-all/ div { border: 1p
x solid green; }')), |
191 createDOM('div', {'id': 'host2'}, | 191 createDOM('div', {'id': 'host2'}, |
192 createShadowRoot( | 192 createShadowRoot( |
193 createDOM('div', {'id': 'target'}, | 193 createDOM('div', {'id': 'target'}, |
194 document.createTextNode('green border'))))))); | 194 document.createTextNode('green border'))))))); |
195 | 195 |
196 borderColorShouldBe('host/host2/target', 'rgb(0, 128, 0)'); | 196 borderColorShouldBe('host/host2/target', 'rgb(0, 128, 0)'); |
197 | 197 |
198 cleanUp(); | 198 cleanUp(); |
199 | 199 |
200 // div:host | 200 // div:host |
201 sandbox.appendChild( | 201 sandbox.appendChild( |
202 createDOM('div', {'id': 'host'}, | 202 createDOM('div', {'id': 'host'}, |
203 createShadowRoot( | 203 createShadowRoot( |
204 createDOM('style', {}, | 204 createDOM('style', {}, |
205 document.createTextNode('div:host ^ span { border: 1px solid gre
en; }')), | 205 document.createTextNode('div:host /shadow-all/ span { border: 1p
x solid green; }')), |
206 createDOM('span', {'id': 'target'}, | 206 createDOM('span', {'id': 'target'}, |
207 document.createTextNode('no border, because div:host matches not
hing.'))))); | 207 document.createTextNode('no border, because div:host matches not
hing.'))))); |
208 | 208 |
209 borderColorShouldBe('host/target', 'rgb(0, 0, 0)'); | 209 borderColorShouldBe('host/target', 'rgb(0, 0, 0)'); |
210 | 210 |
211 cleanUp(); | 211 cleanUp(); |
212 | 212 |
213 // div (=shadow host) div ^ div should not match. | 213 // div (=shadow host) div /shadow-all/ div should not match. |
214 | 214 |
215 sandbox.appendChild( | 215 sandbox.appendChild( |
216 createDOM('div', {'id': 'host'}, | 216 createDOM('div', {'id': 'host'}, |
217 createShadowRoot( | 217 createShadowRoot( |
218 createDOM('style', {}, | 218 createDOM('style', {}, |
219 document.createTextNode('div > div ^ div { border: 1px solid gre
en; }')), | 219 document.createTextNode('div > div /shadow-all/ div { border: 1p
x solid green; }')), |
220 createDOM('div', {'id': 'host2'}, | 220 createDOM('div', {'id': 'host2'}, |
221 createShadowRoot( | 221 createShadowRoot( |
222 createDOM('div', {'id': 'target'}, | 222 createDOM('div', {'id': 'target'}, |
223 document.createTextNode('no border'))))))); | 223 document.createTextNode('no border'))))))); |
224 | 224 |
225 borderColorShouldBe('host/host2/target', 'rgb(0, 0, 0)'); | 225 borderColorShouldBe('host/host2/target', 'rgb(0, 0, 0)'); |
226 | 226 |
227 cleanUp(); | 227 cleanUp(); |
228 | 228 |
229 // div + div ^ div should match. | 229 // div + div /shadow-all/ div should match. |
230 | 230 |
231 sandbox.appendChild( | 231 sandbox.appendChild( |
232 createDOM('div', {'id': 'host'}, | 232 createDOM('div', {'id': 'host'}, |
233 createShadowRoot( | 233 createShadowRoot( |
234 createDOM('style', {}, | 234 createDOM('style', {}, |
235 document.createTextNode('div + div ^ div { border: 1px solid gre
en; }')), | 235 document.createTextNode('div + div /shadow-all/ div { border: 1p
x solid green; }')), |
236 createDOM('div', {}, | 236 createDOM('div', {}, |
237 document.createTextNode('sibling')), | 237 document.createTextNode('sibling')), |
238 createDOM('div', {'id': 'host2'}, | 238 createDOM('div', {'id': 'host2'}, |
239 createShadowRoot( | 239 createShadowRoot( |
240 createDOM('div', {'id': 'target'}, | 240 createDOM('div', {'id': 'target'}, |
241 document.createTextNode('green border'))))))); | 241 document.createTextNode('green border'))))))); |
242 | 242 |
243 borderColorShouldBe('host/host2/target', 'rgb(0, 128, 0)'); | 243 borderColorShouldBe('host/host2/target', 'rgb(0, 128, 0)'); |
244 | 244 |
245 cleanUp(); | 245 cleanUp(); |
246 | 246 |
247 // :host + div ^ div should not match. | 247 // :host + div /shadow-all/ div should not match. |
248 | 248 |
249 sandbox.appendChild( | 249 sandbox.appendChild( |
250 createDOM('div', {'id': 'host'}, | 250 createDOM('div', {'id': 'host'}, |
251 createShadowRoot( | 251 createShadowRoot( |
252 createDOM('style', {}, | 252 createDOM('style', {}, |
253 document.createTextNode(':host + div ^ div { border: 1px solid g
reen; }')), | 253 document.createTextNode(':host + div /shadow-all/ div { border:
1px solid green; }')), |
254 createDOM('div', {'id': 'siblingShadow'}, | 254 createDOM('div', {'id': 'siblingShadow'}, |
255 createShadowRoot( | 255 createShadowRoot( |
256 createDOM('div', {}, | 256 createDOM('div', {}, |
257 document.createTextNode('sibling')))), | 257 document.createTextNode('sibling')))), |
258 createDOM('div', {'id': 'host2'}, | 258 createDOM('div', {'id': 'host2'}, |
259 createShadowRoot( | 259 createShadowRoot( |
260 createDOM('div', {'id': 'target'}, | 260 createDOM('div', {'id': 'target'}, |
261 document.createTextNode('no border'))))))); | 261 document.createTextNode('no border'))))))); |
262 | 262 |
263 borderColorShouldBe('host/host2/target', 'rgb(0, 0, 0)'); | 263 borderColorShouldBe('host/host2/target', 'rgb(0, 0, 0)'); |
264 | 264 |
265 cleanUp(); | 265 cleanUp(); |
266 | 266 |
267 // div ^ span in an insert shadow tree cannot match any element in active shadow
tree. | 267 // div /shadow-all/ span in an insert shadow tree cannot match any element in ac
tive shadow tree. |
268 sandbox.appendChild( | 268 sandbox.appendChild( |
269 createDOM('div', {'id': 'host'}, | 269 createDOM('div', {'id': 'host'}, |
270 createShadowRoot( | 270 createShadowRoot( |
271 createDOM('style', {}, | 271 createDOM('style', {}, |
272 document.createTextNode('div ^ span { border: 1px solid red; }')
), | 272 document.createTextNode('div /shadow-all/ span { border: 1px sol
id red; }')), |
273 createDOM('span', {}, | 273 createDOM('span', {}, |
274 document.createTextNode('some text'))), | 274 document.createTextNode('some text'))), |
275 createShadowRoot( | 275 createShadowRoot( |
276 createDOM('div', {'id': 'host2'}, | 276 createDOM('div', {'id': 'host2'}, |
277 createShadowRoot( | 277 createShadowRoot( |
278 createDOM('span', {'id': 'target'}, | 278 createDOM('span', {'id': 'target'}, |
279 document.createTextNode('green border'))))))); | 279 document.createTextNode('green border'))))))); |
280 | 280 |
281 borderColorShouldNotBe('host//host2/target', 'rgb(255, 0, 0)'); | 281 borderColorShouldNotBe('host//host2/target', 'rgb(255, 0, 0)'); |
282 | 282 |
283 cleanUp(); | 283 cleanUp(); |
284 | 284 |
285 </script> | 285 </script> |
286 </html> | 286 </html> |
287 | 287 |
OLD | NEW |