4 <script src="resources/shadow-dom.js"></script>
5 <script src="../../../resources/js-test.js"></script>
8 <div id='sandbox'></div>
9 <pre id='console'></pre>
15 function borderColorOf(node)
17 return document.defaultView.getComputedStyle(node, null).getPropertyValue('border-color');
20 function borderColorShouldBe(selector, color)
22 var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))';
23 shouldBeEqualToString(text, color);
26 function borderColorShouldNotBe(selector, color)
28 var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))';
29 var unevaledString = '"' + color.replace(/\\/g, "\\\\").replace(/"/g, "\"") + '"';
30 shouldNotBe(text, unevaledString);
35 document.getElementById('sandbox').innerHTML = '';
38 description('Test for ^ combinator, http://crbug.com/309504.');
40 var sandbox = document.getElementById('sandbox');
44 createDOM('style', {},
45 document.createTextNode('div ^ span { border: 1px solid green; }')),
46 createDOM('div', {'id': 'host'},
48 createDOM('span', {'id': 'target'},
49 document.createTextNode('green border, because of hat.'))))));
51 borderColorShouldBe('host/target', 'rgb(0, 128, 0)');
58 createDOM('style', {},
59 document.createTextNode('div ^ span { border: 1px solid green; }')),
60 createDOM('div', {'id': 'host'},
62 createDOM('style', {},
63 document.createTextNode('span { border: 1px solid red; }')),
64 createDOM('span', {'id': 'target'},
65 document.createTextNode('green border, because of hat.'))))));
67 borderColorShouldBe('host/target', 'rgb(0, 128, 0)');
73 createDOM('style', {},
74 document.createTextNode('div ^ span { border: 1px solid green; }')),
75 createDOM('div', {'id': 'host'},
77 createDOM('style', {},
78 document.createTextNode('span#target { border: 1px solid red; }')),
79 createDOM('span', {'id': 'target'},
80 document.createTextNode('green border, because of hat.'))))));
82 // Need to clarify the spec, i.e. using specificity? Currently rgb(255,0,0).
83 borderColorShouldBe('host/target', 'rgb(255, 0, 0)');
89 createDOM('style', {},
90 document.createTextNode('div#sandbox > div > div ^ span { border: 1px solid green; }')),
91 createDOM('div', {'id': 'host'},
93 createDOM('span', {'id': 'target'},
94 document.createTextNode('green border, because of hat.'))))));
96 borderColorShouldBe('host/target', 'rgb(0, 128, 0)');
102 createDOM('style', {},
103 document.createTextNode('div ^ span { border: 1px solid green; }')),
104 createDOM('div', {'id': 'host'},
106 createDOM('style', {},
107 document.createTextNode('div > span { border: 1px solid red; }')),
109 createDOM('span', {'id': 'target'},
110 document.createTextNode('green border, because parent hat wins.')))))));
112 borderColorShouldBe('host/target', 'rgb(0, 128, 0)');
118 createDOM('style', {},
119 document.createTextNode('div ^ span { border: 1px solid green; }')),
120 createDOM('div', {'id': 'host'},
122 createDOM('style', {},
123 document.createTextNode(':host > span { border: 1px solid red; }')),
124 createDOM('span', {'id': 'target'},
125 document.createTextNode('red border because of specificity.'))))));
127 // Since :host's specificity is the same as *, div ^^ span wins.
128 borderColorShouldBe('host/target', 'rgb(0, 128, 0)');
133 createDOM('div', {'id': 'host'},
135 createDOM('style', {},
136 document.createTextNode(':host ^ span { border: 1px solid green; }')),
137 createDOM('span', {},
138 document.createTextNode('some text'))),
140 createDOM('shadow', {}),
141 createDOM('span', {'id': 'target'},
142 document.createTextNode('green border')))));
144 borderColorShouldBe('host//target', 'rgb(0, 128, 0)');
148 // div ^ span's div cannot match a shadow host whose shadow tree contains the style.
150 createDOM('div', {'id': 'host'},
152 createDOM('style', {},
153 document.createTextNode('div ^ span { border: 1px solid green; }')),
154 createDOM('span', {},
155 document.createTextNode('some text'))),
157 createDOM('shadow', {}),
158 createDOM('span', {'id': 'target'},
159 document.createTextNode('no border')))));
161 borderColorShouldBe('host//target', 'rgb(0, 0, 0)');
166 // div ^ span can match [div -- sr -- span] in its sibling shadow tree.
168 createDOM('div', {'id': 'host'},
170 createDOM('style', {},
171 document.createTextNode('div ^ span { border: 1px solid green; }')),
172 createDOM('span', {},
173 document.createTextNode('some text'))),
175 createDOM('shadow', {}),
176 createDOM('div', {'id': 'host2'},
178 createDOM('span', {'id': 'target'},
179 document.createTextNode('green border')))))));
181 borderColorShouldBe('host//host2/target', 'rgb(0, 128, 0)');
185 // :host div ^ div should match.
187 createDOM('div', {'id': 'host'},
189 createDOM('style', {},
190 document.createTextNode(':host div ^ div { border: 1px solid green; }')),
191 createDOM('div', {'id': 'host2'},
193 createDOM('div', {'id': 'target'},
194 document.createTextNode('green border')))))));
196 borderColorShouldBe('host/host2/target', 'rgb(0, 128, 0)');
202 createDOM('div', {'id': 'host'},
204 createDOM('style', {},
205 document.createTextNode('div:host ^ span { border: 1px solid green; }')),
206 createDOM('span', {'id': 'target'},
207 document.createTextNode('no border, because div:host matches nothing.')))));
209 borderColorShouldBe('host/target', 'rgb(0, 0, 0)');
213 // div (=shadow host) div ^ div should not match.
216 createDOM('div', {'id': 'host'},
218 createDOM('style', {},
219 document.createTextNode('div > div ^ div { border: 1px solid green; }')),
220 createDOM('div', {'id': 'host2'},
222 createDOM('div', {'id': 'target'},
223 document.createTextNode('no border')))))));
225 borderColorShouldBe('host/host2/target', 'rgb(0, 0, 0)');
229 // div + div ^ div should match.
232 createDOM('div', {'id': 'host'},
234 createDOM('style', {},
235 document.createTextNode('div + div ^ div { border: 1px solid green; }')),
237 document.createTextNode('sibling')),
238 createDOM('div', {'id': 'host2'},
240 createDOM('div', {'id': 'target'},
241 document.createTextNode('green border')))))));
243 borderColorShouldBe('host/host2/target', 'rgb(0, 128, 0)');
247 // :host + div ^ div should not match.
250 createDOM('div', {'id': 'host'},
252 createDOM('style', {},
253 document.createTextNode(':host + div ^ div { border: 1px solid green; }')),
254 createDOM('div', {'id': 'siblingShadow'},
257 document.createTextNode('sibling')))),
258 createDOM('div', {'id': 'host2'},
260 createDOM('div', {'id': 'target'},
261 document.createTextNode('no border')))))));
263 borderColorShouldBe('host/host2/target', 'rgb(0, 0, 0)');
267 // div ^ span in an insert shadow tree cannot match any element in active shadow tree.
269 createDOM('div', {'id': 'host'},
271 createDOM('style', {},
272 document.createTextNode('div ^ span { border: 1px solid red; }')),
273 createDOM('span', {},
274 document.createTextNode('some text'))),
276 createDOM('div', {'id': 'host2'},
278 createDOM('span', {'id': 'target'},
279 document.createTextNode('green border')))))));
281 borderColorShouldNotBe('host//host2/target', 'rgb(255, 0, 0)');