OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <html> | |
3 <head> | |
4 <script src="../../../resources/js-test.js"></script> | |
5 <script src="resources/shadow-dom.js"></script> | |
6 </head> | |
7 <body> | |
8 <div id="console"></div> | |
9 <div id="sandbox"></div> | |
10 <script> | |
11 description("Tests for Composed Shadow DOM Tree Traversal APIs. Can only run wit
hin DRT"); | |
12 | |
13 function testComposedShadowTree(node) | |
14 { | |
15 var sandbox = document.getElementById('sandbox'); | |
16 sandbox.innerHTML = ''; | |
17 sandbox.appendChild(node); | |
18 document.body.offsetLeft; | |
19 showComposedShadowTree(node); | |
20 } | |
21 | |
22 debug('ShadowRoot should be used.'); | |
23 testComposedShadowTree( | |
24 createDOM('div', {'id': 'a'}, | |
25 createShadowRoot(createDOM('div', {'id': 'b'})), | |
26 createDOM('div', {'id': 'c'}))); | |
27 | |
28 debug('A content element should select light children'); | |
29 testComposedShadowTree( | |
30 createDOM('div', {'id': 'a'}, | |
31 createShadowRoot(createDOM('div', {'id': 'b'}), | |
32 createDOM('content')), | |
33 createDOM('div', {'id': 'c'}), | |
34 createDOM('div', {'id': 'd'}))); | |
35 | |
36 debug('Test for content element selector.'); | |
37 testComposedShadowTree( | |
38 createDOM('div', {'id': 'a'}, | |
39 createShadowRoot(createDOM('div', {'id': 'b'}), | |
40 createDOM('content', {'select': '#d'})), | |
41 createDOM('div', {'id': 'c'}), | |
42 createDOM('div', {'id': 'd'}), | |
43 createDOM('div', {'id': 'e'}))); | |
44 | |
45 debug('Light children should be selected only at once.'); | |
46 testComposedShadowTree( | |
47 createDOM('div', {'id': 'a'}, | |
48 createShadowRoot(createDOM('div', {'id': 'b'}), | |
49 createDOM('content', {'select': '#d'}), | |
50 createDOM('content')), | |
51 createDOM('div', {'id': 'c'}), | |
52 createDOM('div', {'id': 'd'}), | |
53 createDOM('div', {'id': 'e'}))); | |
54 | |
55 debug('A content element can have fallback elements.'); | |
56 testComposedShadowTree( | |
57 createDOM('div', {'id': 'a'}, | |
58 createShadowRoot(createDOM('div', {'id': 'b'}), | |
59 createDOM('content', {'select': '#z'}, | |
60 createDOM('div', {'id': 'f1'}), | |
61 createDOM('div', {'id': 'f2'}))), | |
62 createDOM('div', {'id': 'c'}))); | |
63 | |
64 debug('Fallback elements should not be used if a content element selects an elem
ent.'); | |
65 testComposedShadowTree( | |
66 createDOM('div', {'id': 'a'}, | |
67 createShadowRoot(createDOM('div', {'id': 'b'}), | |
68 createDOM('content', {'select': '#c'}, | |
69 createDOM('div', {'id': 'f1'}, | |
70 createDOM('div', {'id': 'f2'}
)))), | |
71 createDOM('div', {'id': 'c'}))); | |
72 | |
73 debug('Test for traversal, starting with a fallback element which is not used.')
; | |
74 showComposedShadowTree(getNodeInTreeOfTrees('a/f1')); | |
75 showNextNode(getNodeInTreeOfTrees('a/f1')); | |
76 showNextNode(getNodeInTreeOfTrees('a/f2')); | |
77 debug(''); | |
78 | |
79 debug('Test for Nested ShadowRoots.'); | |
80 testComposedShadowTree( | |
81 createDOM('div', {'id': 'a'}, | |
82 createShadowRoot(createDOM('div', {'id': 'b'}, | |
83 createShadowRoot(createDOM('div', {'id'
: 'c'}), | |
84 createDOM('content'), | |
85 createDOM('div', {'id'
: 'd'})), | |
86 createDOM('div', {'id': 'e'})), | |
87 createDOM('div', {'id': 'f'}), | |
88 createDOM('content'), | |
89 createDOM('div', {'id': 'g'})), | |
90 createDOM('div', {'id': 'h'}), | |
91 createDOM('div', {'id': 'i'}))); | |
92 | |
93 debug('Test for Multiple ShadowRoots.'); | |
94 testComposedShadowTree( | |
95 createDOM('div', {'id': 'a'}, | |
96 createShadowRoot(createDOM('div', {'id': 'b'}), | |
97 createDOM('content'), | |
98 createDOM('div', {'id': 'c'})), | |
99 createShadowRoot(createDOM('div', {'id': 'd'}), | |
100 createDOM('shadow', {}), | |
101 createDOM('div', {'id': 'e'})), | |
102 createDOM('div', {'id': 'f'}))); | |
103 | |
104 debug('Test for inactive insertion points.'); | |
105 testComposedShadowTree( | |
106 createDOM('div', {'id': 'a'}, | |
107 createDOM('content', {'id': 'b'}, | |
108 createDOM('content', {'id': 'c'})))); | |
109 | |
110 debug('Test for an orphaned shadow subtree.'); | |
111 testComposedShadowTree( | |
112 createDOM('div', {'id': 'a'}, | |
113 createShadowRoot( | |
114 createDOM('div', {'id': 'b'}, | |
115 createDOM('div', {'id': 'c'}))), | |
116 createShadowRoot( | |
117 createDOM('div', {'id': 'd'})))); | |
118 | |
119 debug('Test for traversal, starting with a node in an orphaned shadow subtree.')
; | |
120 showComposedShadowTree(getNodeInTreeOfTrees('a/b')); | |
121 | |
122 debug('Test for a content element which does not select any nodes nor have fallb
ack elements.'); | |
123 testComposedShadowTree( | |
124 createDOM('div', {'id': 'a'}, | |
125 createShadowRoot(createDOM('content', {'select': '#none'}), | |
126 createDOM('div', {'id': 'b'}), | |
127 createDOM('content', {'select': '#none'}), | |
128 createDOM('div', {'id': 'c'}), | |
129 createDOM('content', {'select': '#none'})))); | |
130 | |
131 debug('Test for a nested insertion point.'); | |
132 testComposedShadowTree( | |
133 createDOM('div', {'id': 'a'}, | |
134 createShadowRoot(createDOM('div', {'id': 'b'}, | |
135 createShadowRoot(createDOM('content', {
})), | |
136 createDOM('content', {}))), | |
137 createDOM('div', {'id': 'c'}))); | |
138 | |
139 debug('Test for nested insertion points. Some of them are either empty insertion
points or inactive insertion points.'); | |
140 testComposedShadowTree( | |
141 createDOM('div', {'id': 'a'}, | |
142 createShadowRoot(createDOM('content', {'select': '#none'}), | |
143 createDOM('div', {'id': 'b'}, | |
144 createShadowRoot(createDOM('content', {
'select': '.select-1'}), | |
145 createDOM('div', {'id'
: 'c'}), | |
146 createDOM('content', {
'select': '.select-2'})), | |
147 createDOM('content', {'class': 'select-
1', 'select': '.select-4'}), | |
148 createDOM('content', {'class': 'select-
2', 'select': '#none'}), | |
149 createDOM('div', {'id': 'd', 'class': '
select-2'}), | |
150 createDOM('content', {'class': 'select-
2', 'select': '#none'}), | |
151 createDOM('div', {'id': 'e', 'class': '
select-2'}), | |
152 createDOM('content', {'class': 'select-
2', 'select': '#none'}))), | |
153 createDOM('content', {'id': 'inactive-insertion-point', 'class': '
select-4'}), | |
154 createDOM('div', {'id': 'should-not-be-selected'}), | |
155 createDOM('div', {'id': 'f', 'class': 'select-4'}))); | |
156 | |
157 debug('Test for a re-projection.'); | |
158 testComposedShadowTree( | |
159 createDOM('div', {'id': 'a'}, | |
160 createShadowRoot( | |
161 createDOM('div', {'id': 'b'}, | |
162 createShadowRoot(createDOM('content', {'select': '#c
'})), | |
163 createDOM('content', {'select': '#c'}))), | |
164 createDOM('div', {'id': 'c'}))); | |
165 | |
166 debug('Test for a content element which is selected by another content element.'
); | |
167 testComposedShadowTree( | |
168 createDOM('div', {'id': 'a'}, | |
169 createShadowRoot( | |
170 createDOM('div', {'id': 'b'}, | |
171 createShadowRoot(createDOM('content', {'select': '#c
ontent'}), | |
172 createDOM('div', {'id': 'most-inner
-child'}), | |
173 createDOM('content', {'select': '#h
ost-child'})), | |
174 createDOM('content', {'id': 'content', 'select': '#h
ost-child'}, | |
175 createDOM('div', {'id': 'should-not-be-use
d'})), | |
176 createDOM('div', {'id': 'inner-child', 'class': 'foo
'}))), | |
177 createDOM('div', {'id': 'host-child'}))); | |
178 | |
179 debug('Test for a reprojection. Content elements should be used in document orde
r.'); | |
180 testComposedShadowTree( | |
181 createDOM('div', {'id': 'a'}, | |
182 createShadowRoot( | |
183 createDOM('content', {'select': '#host-child1'}), | |
184 createDOM('div', {'id': 'b'}, | |
185 createShadowRoot(createDOM('content', {'select': '.c
hild'})), | |
186 createDOM('content', {'select': '.child'}))), | |
187 createDOM('div', {'id': 'host-child1', 'class': 'child'}), | |
188 createDOM('div', {'id': 'host-child2', 'class': 'child'}))); | |
189 | |
190 debug('Test for complex re-projections.'); | |
191 testComposedShadowTree( | |
192 createDOM('div', {'id': 'a'}, | |
193 createShadowRoot( | |
194 createDOM('div', {'id': 'b'}, | |
195 createShadowRoot(createDOM('content', {'select': '.f
oo'}), | |
196 createDOM('div', {'id': 'c'})), | |
197 // Select #child-1 | |
198 createDOM('content', {'select': '#child-1'}, | |
199 createDOM('div', {'class': 'should-not-be-
used'}), | |
200 // Should not select any nodes since it's
inactive. | |
201 createDOM('content', {'class': 'should-be-
inactive', 'select': '.foo'})), | |
202 createDOM('div', {'id': 'd', 'class': 'foo'}, | |
203 createShadowRoot(createDOM('div', {'id': '
e'}), | |
204 // Should select #child-2
and #g. | |
205 createDOM('content', {'se
lect': '.foo'}), | |
206 createDOM('div', {'id': '
f'})), | |
207 // Select #child-2 | |
208 createDOM('content', {'select': '#child-2'
}), | |
209 createDOM('div', {'id': 'g', 'class': 'foo
'})), | |
210 createDOM('div', {'class': 'should-not-be-selected'}
), | |
211 createDOM('div', {'id': 'h', 'class': 'foo'}))), | |
212 createDOM('div', {'id': 'child-1', 'class': 'foo'}), | |
213 createDOM('div', {'id': 'not-selected', 'class': 'foo'}), | |
214 createDOM('div', {'id': 'child-2', 'class': 'foo'}))); | |
215 | |
216 debug('Test for a shadow insertion point where nothing is distributed.'); | |
217 testComposedShadowTree( | |
218 createDOM('div', {'id': 'a'}, | |
219 createShadowRoot(), | |
220 createShadowRoot( | |
221 createDOM('div', {'id': 'b'}), | |
222 createDOM('shadow', {'id': 'shadow'}, | |
223 createDOM('div', {'id': 'should-not-be-used'})), | |
224 createDOM('div', {'id': 'c'})))); | |
225 </script> | |
226 </body> | |
227 </html> | |
OLD | NEW |