Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 <!DOCTYPE html> | |
| 2 <script src="../resources/testharness.js"></script> | |
| 3 <script src="../resources/testharnessreport.js"></script> | |
| 4 <script src="resources/shadow-dom.js"></script> | |
| 5 | |
| 6 <div id="test1"> | |
| 7 <div id="host1"> | |
| 8 <template data-mode="open"> | |
| 9 <slot id="s1" name="slot1"></slot> | |
| 10 </template> | |
| 11 <div id="c1" slot="slot1"></div> | |
| 12 </div> | |
| 13 </div> | |
| 14 | |
| 15 <script> | |
| 16 function doneIfSlotChange(slots, test) { | |
| 17 let fired = new Set(); | |
| 18 for (let slot of slots) { | |
| 19 slot.addEventListener('slotchange', test.step_func((e) => { | |
|
tkent
2016/06/20 01:52:31
nit: you can omit () around 'e'.
There are other i
hayato
2016/06/20 02:13:39
Yeah, but that's intentional. Let me leave this as
tkent
2016/06/20 03:03:58
I don't have a strong preference. Please go ahead
| |
| 20 assert_false(fired.has(slot.id)); | |
| 21 fired.add(slot.id); | |
| 22 if (fired.size == slots.length) { | |
| 23 test.done(); | |
| 24 } | |
| 25 })) | |
| 26 } | |
| 27 } | |
| 28 | |
| 29 async_test((test) => { | |
| 30 let n = createTestTree(test1); | |
| 31 removeWhiteSpaceOnlyTextNodes(n.test1); | |
| 32 | |
| 33 doneIfSlotChange([n.s1], test); | |
| 34 | |
| 35 let d1 = document.createElement('div'); | |
| 36 d1.setAttribute('slot', 'slot1'); | |
| 37 n.host1.appendChild(d1); | |
| 38 }, 'slotchange event: Append a child to a host.'); | |
| 39 | |
| 40 async_test((test) => { | |
| 41 let n = createTestTree(test1); | |
| 42 removeWhiteSpaceOnlyTextNodes(n.test1); | |
| 43 | |
| 44 doneIfSlotChange([n.s1], test); | |
| 45 | |
| 46 n.c1.remove(); | |
| 47 }, 'slotchange event: Remove a child from a host.'); | |
| 48 | |
| 49 async_test((test) => { | |
| 50 let n = createTestTree(test1); | |
| 51 removeWhiteSpaceOnlyTextNodes(n.test1); | |
| 52 | |
| 53 n.c1.remove(); | |
| 54 | |
| 55 doneIfSlotChange([n.s1], test); | |
| 56 }, 'slotchange event: Remove a child before adding an event listener.'); | |
| 57 | |
| 58 async_test((test) => { | |
| 59 let n = createTestTree(test1); | |
| 60 removeWhiteSpaceOnlyTextNodes(n.test1); | |
| 61 | |
| 62 doneIfSlotChange([n.s1], test); | |
| 63 | |
| 64 n.c1.setAttribute('slot', 'slot-none'); | |
| 65 }, 'slotchange event: Change slot= attribute to make it un-assigned.'); | |
| 66 | |
| 67 async_test((test) => { | |
| 68 let n = createTestTree(test1); | |
| 69 removeWhiteSpaceOnlyTextNodes(n.test1); | |
| 70 | |
| 71 doneIfSlotChange([n.s1], test); | |
| 72 | |
| 73 n.s1.setAttribute('name', 'slot-none'); | |
| 74 }, 'slotchange event: Change slot\'s name= attribute so that none is assigned.') ; | |
| 75 </script> | |
| 76 | |
| 77 <div id="test2"> | |
| 78 <div id="host1"> | |
| 79 <template data-mode="open"> | |
| 80 <slot id="s1" name="slot1"></slot> | |
| 81 </template> | |
| 82 <div id="c2" slot="slot2"></div> | |
| 83 </div> | |
| 84 </div> | |
| 85 | |
| 86 <script> | |
| 87 async_test((test) => { | |
| 88 let n = createTestTree(test2); | |
| 89 removeWhiteSpaceOnlyTextNodes(n.test2); | |
| 90 | |
| 91 doneIfSlotChange([n.s1], test); | |
| 92 | |
| 93 n.c2.setAttribute('slot', 'slot1'); | |
| 94 }, 'slotchange event: Change slot= attribute to make it assigned.'); | |
| 95 | |
| 96 async_test((test) => { | |
| 97 let n = createTestTree(test2); | |
| 98 removeWhiteSpaceOnlyTextNodes(n.test2); | |
| 99 | |
| 100 doneIfSlotChange([n.s1], test); | |
| 101 | |
| 102 n.s1.setAttribute('name', 'slot2'); | |
| 103 }, 'slotchange event: Change slot\'s name= attribute so that a node is assigned to the slot.'); | |
| 104 </script> | |
| 105 | |
| 106 <div id="test_fallback"> | |
| 107 <div id="host1"> | |
| 108 <template data-mode="open"> | |
| 109 <slot id="s1"></slot> | |
| 110 </template> | |
| 111 </div> | |
| 112 </div> | |
| 113 | |
| 114 <script> | |
| 115 async_test((test) => { | |
| 116 let n = createTestTree(test_fallback); | |
| 117 removeWhiteSpaceOnlyTextNodes(n.test_fallback); | |
| 118 | |
| 119 doneIfSlotChange([n.s1], test); | |
| 120 | |
| 121 n.s1.appendChild(document.createElement('div')); | |
| 122 }, 'slotchange event: Add a fallback content.'); | |
| 123 </script> | |
| 124 | |
| 125 <div id="test_fallback2"> | |
| 126 <div id="host1"> | |
| 127 <template data-mode="open"> | |
| 128 <slot id="s1"> | |
| 129 <div id="f1"></div> | |
| 130 </slot> | |
| 131 </template> | |
| 132 </div> | |
| 133 </div> | |
| 134 | |
| 135 <script> | |
| 136 async_test((test) => { | |
| 137 let n = createTestTree(test_fallback2); | |
| 138 removeWhiteSpaceOnlyTextNodes(n.test_fallback2); | |
| 139 | |
| 140 doneIfSlotChange([n.s1], test); | |
| 141 | |
| 142 n.f1.remove(); | |
| 143 }, 'slotchange event: Remove a fallback content.'); | |
| 144 </script> | |
| 145 | |
| 146 <div id="test_fallback3"> | |
| 147 <div id="host1"> | |
| 148 <template data-mode="open"> | |
| 149 <slot id="s2"> | |
| 150 <slot id="s1"> | |
| 151 <div id="f1"></div> | |
| 152 </slot> | |
| 153 </slot> | |
| 154 </template> | |
| 155 </div> | |
| 156 </div> | |
| 157 | |
| 158 <script> | |
| 159 async_test((test) => { | |
| 160 let n = createTestTree(test_fallback3); | |
| 161 removeWhiteSpaceOnlyTextNodes(n.test_fallback3); | |
| 162 | |
| 163 doneIfSlotChange([n.s1, n.s2], test); | |
| 164 | |
| 165 n.s1.appendChild(document.createElement('div')); | |
| 166 }, 'slotchange event: Add a fallback content to nested slots.'); | |
| 167 | |
| 168 async_test((test) => { | |
| 169 let n = createTestTree(test_fallback3); | |
| 170 removeWhiteSpaceOnlyTextNodes(n.test_fallback3); | |
| 171 | |
| 172 doneIfSlotChange([n.s1, n.s2], test); | |
| 173 | |
| 174 n.f1.remove(); | |
| 175 }, 'slotchange event: Remove a fallback content from nested slots.'); | |
| 176 </script> | |
| 177 | |
| 178 <div id="test3"> | |
| 179 <div id="host1"> | |
| 180 <template id="shadowroot" data-mode="open"> | |
| 181 <slot id="s1" name="slot1"></slot> | |
| 182 </template> | |
| 183 <div id="c1" slot="slot1"></div> | |
| 184 </div> | |
| 185 </div> | |
| 186 | |
| 187 <script> | |
| 188 async_test((test) => { | |
| 189 let n = createTestTree(test3); | |
| 190 removeWhiteSpaceOnlyTextNodes(n.test3); | |
| 191 | |
| 192 doneIfSlotChange([n.s1], test); | |
| 193 | |
| 194 let slot = document.createElement('slot'); | |
| 195 slot.setAttribute('name', 'slot1'); | |
| 196 n.shadowroot.insertBefore(slot, n.s1); | |
| 197 }, "slotchange event: Insert a slot before an existing slot."); | |
| 198 </script> | |
| 199 | |
| 200 <div id="test4"> | |
| 201 <div id="host1"> | |
| 202 <template id="shadowroot" data-mode="open"> | |
| 203 <slot id="s1" name="slot1"></slot> | |
| 204 <slot id="s2" name="slot1"></slot> | |
| 205 </template> | |
| 206 <div id="c1" slot="slot1"></div> | |
| 207 </div> | |
| 208 </div> | |
| 209 | |
| 210 <script> | |
| 211 async_test((test) => { | |
| 212 let n = createTestTree(test4); | |
| 213 removeWhiteSpaceOnlyTextNodes(n.test4); | |
| 214 | |
| 215 doneIfSlotChange([n.s2], test); | |
| 216 | |
| 217 n.s1.remove(); | |
| 218 }, "slotchange event: Remove a preceding slot."); | |
| 219 </script> | |
| 220 | |
| 221 <div id="test5"> | |
| 222 <div id="host1"> | |
| 223 <template data-mode="open"> | |
| 224 <div id="host2"> | |
| 225 <template data-mode="open"> | |
| 226 <slot id="s2" name="slot2"></slot> | |
| 227 </template> | |
| 228 <slot id="s1" name="slot1" slot="slot2"></slot> | |
| 229 </div> | |
| 230 </template> | |
| 231 <div id="c1" slot="slot1"></div> | |
| 232 </div> | |
| 233 </div> | |
| 234 | |
| 235 <script> | |
| 236 async_test((test) => { | |
| 237 let n = createTestTree(test5); | |
| 238 removeWhiteSpaceOnlyTextNodes(n.test5); | |
| 239 | |
| 240 doneIfSlotChange([n.s1, n.s2], test); | |
| 241 | |
| 242 n.c1.remove(); | |
| 243 }, "slotchange event: A slot is assigned to another slot."); | |
| 244 </script> | |
| 245 | |
| 246 <div id="test6"> | |
| 247 <div id="host1"> | |
| 248 <template data-mode="open"> | |
| 249 <div id="host2"> | |
| 250 <template data-mode="open"> | |
| 251 <slot id="s2" name="slot2"></slot> | |
| 252 </template> | |
| 253 <slot id="s1" name="slot1" slot="slot2"></slot> | |
| 254 </div> | |
| 255 </template> | |
| 256 </div> | |
| 257 </div> | |
| 258 | |
| 259 <script> | |
| 260 async_test((test) => { | |
| 261 let n = createTestTree(test6); | |
| 262 removeWhiteSpaceOnlyTextNodes(n.test6); | |
| 263 | |
| 264 doneIfSlotChange([n.s2], test); | |
| 265 | |
| 266 n.s1.remove(); | |
| 267 }, "slotchange event: Even if distributed nodes do not change, slotchange should be fired if assigned nodes are changed."); | |
| 268 </script> | |
| OLD | NEW |