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