OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <!-- |
| 3 Distributed under both the W3C Test Suite License [1] and the W3C |
| 4 3-clause BSD License [2]. To contribute to a W3C Test Suite, see the |
| 5 policies and contribution forms [3]. |
| 6 |
| 7 [1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license |
| 8 [2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license |
| 9 [3] http://www.w3.org/2004/10/27-testcases |
| 10 --> |
| 11 <html> |
| 12 <head> |
| 13 <title>Shadow DOM Test: A_04_01_09</title> |
| 14 <link rel="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru"
> |
| 15 <link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru"> |
| 16 <link rel="author" title="Mikhail Fursov" href="mailto:mfursov@unipro.ru"> |
| 17 <link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#upper-b
oundary-encapsulation"> |
| 18 <meta name="assert" content="Upper-boundary encapsulation: no nodes other than s
hadow root descendants are accessible with shadow root DOM tree accessor methods
"> |
| 19 <script src="../../../../../resources/testharness.js"></script> |
| 20 <script src="../../../../../resources/testharnessreport.js"></script> |
| 21 <script src="../../testcommon.js"></script> |
| 22 <link rel="stylesheet" href="../../../../../resources/testharness.css"> |
| 23 </head> |
| 24 <body> |
| 25 <div id="log"></div> |
| 26 <script> |
| 27 var A_04_01_09 = new Object(); |
| 28 |
| 29 A_04_01_09.setupBlock = function (ctx, prefix, root) { |
| 30 // create <div id='prefix+_id1' class='cls'><p class='cls'><div id='prefix+_
id2' class='cls'></div></p></div> like structure |
| 31 // where <p> will be used as shadow host element |
| 32 |
| 33 ctx[prefix + '_div1'] = ctx.d.createElement('div'); |
| 34 ctx[prefix + '_div1'].setAttribute('id', prefix + '_id1'); |
| 35 ctx[prefix + '_div1'].setAttribute('class', 'cls'); |
| 36 |
| 37 ctx[prefix + '_p1'] = ctx.d.createElement('p'); |
| 38 ctx[prefix + '_p1'].setAttribute('class', 'cls'); |
| 39 ctx[prefix + '_p1'].setAttribute('test', 'A_04_01_09'); |
| 40 |
| 41 ctx[prefix + '_div2'] = ctx.d.createElement('div'); |
| 42 ctx[prefix + '_div2'].setAttribute('id', prefix + '_id2'); |
| 43 ctx[prefix + '_div2'].setAttribute('class', 'cls'); |
| 44 ctx[prefix + '_div2'].setAttribute('test', 'A_04_01_09'); |
| 45 |
| 46 root.appendChild(ctx[prefix + '_div1']); |
| 47 ctx[prefix + '_div1'].appendChild(ctx[prefix + '_p1']); |
| 48 ctx[prefix + '_p1'].appendChild(ctx[prefix + '_div2']); |
| 49 }; |
| 50 |
| 51 A_04_01_09.setup = function () { |
| 52 var ctx = {}; |
| 53 |
| 54 ctx.d = newHTMLDocument(); |
| 55 A_04_01_09.setupBlock(ctx, 'd', ctx.d.body); |
| 56 |
| 57 ctx.s1 = ctx.d_p1.createShadowRoot(); |
| 58 A_04_01_09.setupBlock(ctx, 's1', ctx.s1); |
| 59 |
| 60 ctx.s2 = ctx.s1_p1.createShadowRoot(); |
| 61 A_04_01_09.setupBlock(ctx, 's2', ctx.s2); |
| 62 |
| 63 assert_true(ctx.d_div1 != null, 'setup:d_div1'); |
| 64 assert_true(ctx.d_div2 != null, 'setup:d_div2'); |
| 65 assert_true(ctx.s1_div1 != null, 'setup: s1_div1'); |
| 66 assert_true(ctx.s1_div2 != null, 'setup: s1_div2'); |
| 67 assert_true(ctx.s2_div1 != null, 'setup: s2_div1'); |
| 68 assert_true(ctx.s2_div2 != null, 'setup: s2_div2'); |
| 69 |
| 70 return ctx; |
| 71 }; |
| 72 |
| 73 //check getElementsByTagName |
| 74 test(function () { |
| 75 var ctx = A_04_01_09.setup(); |
| 76 |
| 77 assert_nodelist_contents_equal_noorder( |
| 78 ctx.s1.getElementsByTagName('div'), [ctx.s1_div1, ctx.s1_div2], |
| 79 'nodes, other than shadow root descendants, should not be accessible wit
h ' + |
| 80 'ShadowRoot.getElementsByTagName (s1)'); |
| 81 |
| 82 assert_nodelist_contents_equal_noorder( |
| 83 ctx.s2.getElementsByTagName('div'), [ctx.s2_div1, ctx.s2_div2], |
| 84 'nodes, other than shadow root descendants, should not be accessible wit
h ' + |
| 85 'ShadowRoot.getElementsByTagName (s2)'); |
| 86 |
| 87 }, 'A_04_01_09_T01'); |
| 88 |
| 89 // getElementsByTagNameNS |
| 90 test(function () { |
| 91 var ctx = A_04_01_09.setup(); |
| 92 |
| 93 assert_nodelist_contents_equal_noorder( |
| 94 ctx.s1.getElementsByTagNameNS('*', 'div'), [ctx.s1_div1, ctx.s1_div2], |
| 95 'nodes, other than shadow root descendants, should not be accessible wit
h ' + |
| 96 'ShadowRoot.getElementsByTagNameNS (s1)'); |
| 97 |
| 98 assert_nodelist_contents_equal_noorder( |
| 99 ctx.s2.getElementsByTagNameNS('*', 'div'), [ctx.s2_div1, ctx.s2_div2], |
| 100 'nodes, other than shadow root descendants, should not be accessible wit
h ' + |
| 101 'ShadowRoot.getElementsByTagNameNS (s2)'); |
| 102 |
| 103 }, 'A_04_01_09_T02'); |
| 104 |
| 105 //check getElementsByClassName |
| 106 test(function () { |
| 107 var ctx = A_04_01_09.setup(); |
| 108 |
| 109 assert_nodelist_contents_equal_noorder( |
| 110 ctx.s1.getElementsByClassName('cls'), [ctx.s1_div1, ctx.s1_p1, ctx.s1_di
v2], |
| 111 'nodes, other than shadow root descendants, should not be accessible wit
h ' + |
| 112 'ShadowRoot.getElementsByClassName (s1)'); |
| 113 |
| 114 assert_nodelist_contents_equal_noorder( |
| 115 ctx.s2.getElementsByClassName('cls'), [ctx.s2_div1, ctx.s2_p1, ctx.s2_di
v2], |
| 116 'nodes, other than shadow root descendants, should not be accessible wit
h ' + |
| 117 'ShadowRoot.getElementsByClassName (s2)'); |
| 118 |
| 119 }, 'A_04_01_09_T03'); |
| 120 |
| 121 // check getElementById |
| 122 test(function () { |
| 123 var ctx = A_04_01_09.setup(); |
| 124 |
| 125 assert_equals(ctx.s1.getElementById('d_id1'), null, 'Expected no access to d
_div1 from s1.getElementById()'); |
| 126 assert_equals(ctx.s1.getElementById('d_id2'), null, 'Expected no access to d
_div2 from s1.getElementById()'); |
| 127 assert_equals(ctx.s2.getElementById('d_id1'), null, 'Expected no access to d
_div1 from s2.getElementById()'); |
| 128 assert_equals(ctx.s2.getElementById('d_id2'), null, 'Expected no access to d
_div1 from s2.getElementById()'); |
| 129 |
| 130 |
| 131 assert_equals(ctx.s1.getElementById('s1_id1'), ctx.s1_div1, 'Expected access
to s1_div1 form s1.getElementById()'); |
| 132 assert_equals(ctx.s1.getElementById('s1_id2'), ctx.s1_div2, 'Expected access
to s1_div2 form s1.getElementById()'); |
| 133 assert_equals(ctx.s2.getElementById('s2_id1'), ctx.s2_div1, 'Expected access
to s2_div1 form s2.getElementById()'); |
| 134 assert_equals(ctx.s2.getElementById('s2_id2'), ctx.s2_div2, 'Expected access
to s2_div2 form s2.getElementById()'); |
| 135 |
| 136 |
| 137 assert_equals(ctx.s1.getElementById('s2_id1'), null, 'Expected no access to
s2_div1 form s1.getElementById()'); |
| 138 assert_equals(ctx.s1.getElementById('s2_id2'), null, 'Expected no access to
s2_div2 form s1.getElementById()'); |
| 139 assert_equals(ctx.s2.getElementById('s1_id1'), null, 'Expected no access to
s1_div1 form s2.getElementById()'); |
| 140 assert_equals(ctx.s2.getElementById('s1_id2'), null, 'Expected no access to
s1_div2 form s2.getElementById()'); |
| 141 |
| 142 }, 'A_04_01_09_T04'); |
| 143 |
| 144 |
| 145 // check querySelector for id |
| 146 test(function () { |
| 147 var ctx = A_04_01_09.setup(); |
| 148 |
| 149 assert_equals(ctx.d.querySelector('#s1_id1'), null, 'Expected no access to s
1_div1 from d.querySelector()'); |
| 150 assert_equals(ctx.d.querySelector('#s1_id2'), null, 'Expected no access to s
1_div2 from d.querySelector()'); |
| 151 assert_equals(ctx.d.querySelector('#s2_id1'), null, 'Expected no access to s
2_div1 from d.querySelector()'); |
| 152 assert_equals(ctx.d.querySelector('#s2_id2'), null, 'Expected no access to s
2_div1 from d.querySelector()'); |
| 153 |
| 154 assert_equals(ctx.s1.querySelector('#d_id1'), null, 'Expected no access to d
_div1 from s1.querySelector()'); |
| 155 assert_equals(ctx.s1.querySelector('#d_id2'), null, 'Expected no access to d
_div2 from s1.querySelector()'); |
| 156 assert_equals(ctx.s2.querySelector('#d_id1'), null, 'Expected no access to d
_div1 from s2.querySelector()'); |
| 157 assert_equals(ctx.s2.querySelector('#d_id2'), null, 'Expected no access to d
_div1 from s2.querySelector()'); |
| 158 |
| 159 assert_equals(ctx.d.querySelector('#d_id1'), ctx.d_div1, 'Expected access to
d_div1 form d.querySelector()'); |
| 160 assert_equals(ctx.d.querySelector('#d_id2'), ctx.d_div2, 'Expected access to
d_div2 form d.querySelector()'); |
| 161 assert_equals(ctx.s1.querySelector('#s1_id1'), ctx.s1_div1, 'Expected access
to s1_div1 form s1.querySelector()'); |
| 162 assert_equals(ctx.s1.querySelector('#s1_id2'), ctx.s1_div2, 'Expected access
to s1_div2 form s1.querySelector()'); |
| 163 assert_equals(ctx.s2.querySelector('#s2_id1'), ctx.s2_div1, 'Expected access
to s2_div1 form s2.querySelector()'); |
| 164 assert_equals(ctx.s2.querySelector('#s2_id2'), ctx.s2_div2, 'Expected access
to s2_div2 form s2.querySelector()'); |
| 165 |
| 166 assert_equals(ctx.s1.querySelector('#s2_id1'), null, 'Expected no access to
s2_div1 form s1.querySelector()'); |
| 167 assert_equals(ctx.s1.querySelector('#s2_id2'), null, 'Expected no access to
s2_div2 form s1.querySelector()'); |
| 168 assert_equals(ctx.s2.querySelector('#s1_id1'), null, 'Expected no access to
s1_div1 form s2.querySelector()'); |
| 169 assert_equals(ctx.s2.querySelector('#s1_id2'), null, 'Expected no access to
s1_div2 form s2.querySelector()'); |
| 170 |
| 171 }, 'A_04_01_09_T05'); |
| 172 |
| 173 |
| 174 //check querySelector for element |
| 175 test(function () { |
| 176 var ctx = A_04_01_09.setup(); |
| 177 |
| 178 assert_equals(ctx.d.querySelector('p'), ctx.d_p1, 'Expected access to d_p1 f
rom d.querySelector()'); |
| 179 assert_equals(ctx.s1.querySelector('p'), ctx.s1_p1, 'Expected access to s1_p
1 from s1.querySelector()'); |
| 180 assert_equals(ctx.s2.querySelector('p'), ctx.s2_p1, 'Expected access to s2_p
1 from s2.querySelector()'); |
| 181 |
| 182 }, 'A_04_01_09_T06'); |
| 183 |
| 184 // check querySelectorAll for element |
| 185 test(function () { |
| 186 var ctx = A_04_01_09.setup(); |
| 187 |
| 188 assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('p'), [ctx.d_p
1], 'Expected access to d_p1 from d.querySelectorAll()'); |
| 189 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('p'), [ctx.s1
_p1], 'Expected access to s1_p1 s1.querySelectorAll'); |
| 190 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('p'), [ctx.s2
_p1], 'Expected access to s2_p1 from s2.querySelectorAll'); |
| 191 |
| 192 }, 'A_04_01_09_T07'); |
| 193 |
| 194 // check querySelectorAll for class |
| 195 test(function () { |
| 196 var ctx = A_04_01_09.setup(); |
| 197 |
| 198 assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('.cls'), [ctx.
d_div1, ctx.d_p1, ctx.d_div2], 'd.querySelectorAll() return wrong result'); |
| 199 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('.cls'), [ctx
.s1_div1, ctx.s1_p1, ctx.s1_div2], 's1.querySelectorAll() return wrong result'); |
| 200 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('.cls'), [ctx
.s2_div1, ctx.s2_p1, ctx.s2_div2], 's2.querySelectorAll() return wrong result'); |
| 201 |
| 202 }, 'A_04_01_09_T08'); |
| 203 |
| 204 //check querySelectorAll with whildcat |
| 205 test(function () { |
| 206 var ctx = A_04_01_09.setup(); |
| 207 |
| 208 //assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('*'), [ctx.d
_div1, ctx.d_p1, ctx.d_div2], 'd.querySelectorAll'); |
| 209 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('*'), [ctx.s1
_div1, ctx.s1_p1, ctx.s1_div2], 's1.querySelectorAll(\'*\') return wrong result'
); |
| 210 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('*'), [ctx.s2
_div1, ctx.s2_p1, ctx.s2_div2], 's2.querySelectorAll(\'*\') return wrong result'
); |
| 211 |
| 212 }, 'A_04_01_09_T09'); |
| 213 |
| 214 //check querySelectorAll with attribute value |
| 215 test(function () { |
| 216 var ctx = A_04_01_09.setup(); |
| 217 |
| 218 assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('[test=A_04_01
_09]'), [ctx.d_p1, ctx.d_div2], 'd.querySelectorAll(\'[test=A_04_01_09]\') retur
n wrong result'); |
| 219 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('[test=A_04_0
1_09]'), [ctx.s1_p1, ctx.s1_div2], 's1.querySelectorAll(\'[test=A_04_01_09]\') r
eturn wrong result'); |
| 220 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('[test=A_04_0
1_09]'), [ctx.s2_p1, ctx.s2_div2], 's2.querySelectorAll(\'[test=A_04_01_09]\') r
eturn wrong result'); |
| 221 |
| 222 }, 'A_04_01_09_T10'); |
| 223 |
| 224 //check querySelectorAll with parent-child selection |
| 225 test(function () { |
| 226 var ctx = A_04_01_09.setup(); |
| 227 |
| 228 assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('div:first-chi
ld'), [ctx.d_div1, ctx.d_div2], 'd.querySelectorAll(\'div:first-child\') return
wrong result'); |
| 229 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('div:first-ch
ild'), [ctx.s1_div1,ctx.s1_div2], 's1.querySelectorAll(\'div:first-child\') retu
rn wrong result'); |
| 230 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('div:first-ch
ild'), [ctx.s2_div1,ctx.s2_div2], 's2.querySelectorAll(\'div:first-child\') retu
rn wrong result'); |
| 231 |
| 232 }, 'A_04_01_09_T11'); |
| 233 |
| 234 //check querySelectorAll with parent-child selection |
| 235 test(function () { |
| 236 var ctx = A_04_01_09.setup(); |
| 237 |
| 238 assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('div:last-chil
d'), [ctx.d_div2], 'd.querySelectorAll(\'div:last-child\') return wrong result')
; |
| 239 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('div:last-chi
ld'), [ctx.s1_div1, ctx.s1_div2], 's1.querySelectorAll(\'div:last-child\') retur
n wrong result'); |
| 240 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('div:last-chi
ld'), [ctx.s2_div1, ctx.s2_div2], 's2.querySelectorAll(\'div:last-child\') retur
n wrong result'); |
| 241 |
| 242 }, 'A_04_01_09_T12'); |
| 243 |
| 244 //check querySelectorAll with parent-child selection |
| 245 test(function () { |
| 246 var ctx = A_04_01_09.setup(); |
| 247 |
| 248 assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('p:only-child'
), [ctx.d_p1], 'd.querySelectorAll(\'p:only-child\') return wrong result'); |
| 249 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('p:only-child
'), [ctx.s1_p1], 's1.querySelectorAll(\'p:only-child\') return wrong result'); |
| 250 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('p:only-child
'), [ctx.s2_p1], 's2.querySelectorAll(\'p:only-child\') return wrong result'); |
| 251 |
| 252 }, 'A_04_01_09_T13'); |
| 253 |
| 254 //check querySelectorAll with parent-child selection |
| 255 test(function () { |
| 256 var ctx = A_04_01_09.setup(); |
| 257 |
| 258 assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('div:empty'),
[ctx.d_div2], 'd.querySelectorAll(\'div:empty\') return wrong result'); |
| 259 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('div:empty'),
[ctx.s1_div2], 's1.querySelectorAll(\'div:empty\') return wrong result'); |
| 260 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('div:empty'),
[ctx.s2_div2], 's2.querySelectorAll(\'div:empty\') return wrong result'); |
| 261 |
| 262 }, 'A_04_01_09_T14'); |
| 263 |
| 264 //check querySelectorAll with parent-child selection |
| 265 test(function () { |
| 266 var ctx = A_04_01_09.setup(); |
| 267 |
| 268 assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('p div'), [ctx
.d_div2], 'd.querySelectorAll(\'p div\') return wrong result'); |
| 269 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('p div'), [ct
x.s1_div2], 's1.querySelectorAll(\'p div\') return wrong result'); |
| 270 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('p div'), [ct
x.s2_div2], 's2.querySelectorAll(\'p div\') return wrong result'); |
| 271 |
| 272 }, 'A_04_01_09_T15'); |
| 273 |
| 274 //check querySelectorAll with parent-child selection |
| 275 test(function () { |
| 276 var ctx = A_04_01_09.setup(); |
| 277 |
| 278 assert_nodelist_contents_equal_noorder(ctx.d.querySelectorAll('p > div'), [c
tx.d_div2], 'd.querySelectorAll(\'p > div\') return wrong result'); |
| 279 assert_nodelist_contents_equal_noorder(ctx.s1.querySelectorAll('p > div'), [
ctx.s1_div2], 's1.querySelectorAll(\'p > div\') return wrong result'); |
| 280 assert_nodelist_contents_equal_noorder(ctx.s2.querySelectorAll('p > div'), [
ctx.s2_div2], 's2.querySelectorAll(\'p > div\') return wrong result'); |
| 281 |
| 282 }, 'A_04_01_09_T16'); |
| 283 </script> |
| 284 </body> |
| 285 </html> |
OLD | NEW |