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