| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script src="resources/shadow-dom.js"></script> |
| <div id="host"> |
| <template data-mode="open"> |
| <slot id="slot1" name="slot1"> |
| <div id="fallback1"></div> |
| </slot> |
| <slot id="slot2" name="slot2"> |
| <div id="fallback2"></div> |
| </slot> |
| </template> |
| <div id="child1" slot="slot1"></div> |
| </div> |
| <script> |
| 'use strict'; |
| |
| let n = createTestTree(host); |
| removeWhiteSpaceOnlyTextNodes(n.host); |
| |
| test(() => { |
| assert_array_equals(n.slot1.assignedNodes({ flatten: true }), [n.child1]); |
| assert_array_equals(n.slot2.assignedNodes({ flatten: true }), [n.fallback2]); |
| }, "Slot's distributed nodes"); |
| |
| test(() => { |
| // Insert |
| const slot0 = document.createElement('slot'); |
| slot0.setAttribute('name', 'slot1'); |
| n.host.shadowRoot.insertBefore(slot0, n.slot1); |
| |
| assert_array_equals(slot0.assignedNodes({ flatten: true }), [n.child1]); |
| assert_array_equals(n.slot1.assignedNodes({ flatten: true }), [n.fallback1]); |
| assert_array_equals(n.slot2.assignedNodes({ flatten: true }), [n.fallback2]); |
| |
| // Remove |
| n.host.shadowRoot.removeChild(slot0); |
| assert_array_equals(n.slot1.assignedNodes({ flatten: true }), [n.child1]); |
| assert_array_equals(n.slot2.assignedNodes({ flatten: true }), [n.fallback2]); |
| }, "Slot's distributed nodes after inserting/removeing a slot."); |
| |
| test(() => { |
| // Attribute change |
| n.slot1.setAttribute('name', 'slot-foo'); |
| assert_array_equals(n.slot1.assignedNodes({ flatten: true }), [n.fallback1]); |
| assert_array_equals(n.slot2.assignedNodes({ flatten: true }), [n.fallback2]); |
| |
| n.child1.setAttribute('slot', 'slot-foo'); |
| assert_array_equals(n.slot1.assignedNodes({ flatten: true }), [n.child1]); |
| assert_array_equals(n.slot2.assignedNodes({ flatten: true }), [n.fallback2]); |
| }, "Slot's distributed nodes after the attribute is changed."); |
| </script> |