summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/shadow-dom/slotchange.html
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /testing/web-platform/tests/shadow-dom/slotchange.html
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'testing/web-platform/tests/shadow-dom/slotchange.html')
-rw-r--r--testing/web-platform/tests/shadow-dom/slotchange.html270
1 files changed, 270 insertions, 0 deletions
diff --git a/testing/web-platform/tests/shadow-dom/slotchange.html b/testing/web-platform/tests/shadow-dom/slotchange.html
new file mode 100644
index 000000000..1f94cc7be
--- /dev/null
+++ b/testing/web-platform/tests/shadow-dom/slotchange.html
@@ -0,0 +1,270 @@
+<!DOCTYPE html>
+<title>Shadow DOM: slotchange Events</title>
+<meta name="author" title="Hayato Ito" href="mailto:hayato@google.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/shadow-dom.js"></script>
+
+<div id="test1">
+ <div id="host1">
+ <template data-mode="open">
+ <slot id="s1" name="slot1"></slot>
+ </template>
+ <div id="c1" slot="slot1"></div>
+ </div>
+</div>
+
+<script>
+function doneIfSlotChange(slots, test) {
+ let fired = new Set();
+ for (let slot of slots) {
+ slot.addEventListener('slotchange', test.step_func((e) => {
+ assert_false(fired.has(slot.id));
+ fired.add(slot.id);
+ if (fired.size == slots.length) {
+ test.done();
+ }
+ }))
+ }
+}
+
+async_test((test) => {
+ let n = createTestTree(test1);
+ removeWhiteSpaceOnlyTextNodes(n.test1);
+
+ doneIfSlotChange([n.s1], test);
+
+ let d1 = document.createElement('div');
+ d1.setAttribute('slot', 'slot1');
+ n.host1.appendChild(d1);
+}, 'slotchange event: Append a child to a host.');
+
+async_test((test) => {
+ let n = createTestTree(test1);
+ removeWhiteSpaceOnlyTextNodes(n.test1);
+
+ doneIfSlotChange([n.s1], test);
+
+ n.c1.remove();
+}, 'slotchange event: Remove a child from a host.');
+
+async_test((test) => {
+ let n = createTestTree(test1);
+ removeWhiteSpaceOnlyTextNodes(n.test1);
+
+ n.c1.remove();
+
+ doneIfSlotChange([n.s1], test);
+}, 'slotchange event: Remove a child before adding an event listener.');
+
+async_test((test) => {
+ let n = createTestTree(test1);
+ removeWhiteSpaceOnlyTextNodes(n.test1);
+
+ doneIfSlotChange([n.s1], test);
+
+ n.c1.setAttribute('slot', 'slot-none');
+}, 'slotchange event: Change slot= attribute to make it un-assigned.');
+
+async_test((test) => {
+ let n = createTestTree(test1);
+ removeWhiteSpaceOnlyTextNodes(n.test1);
+
+ doneIfSlotChange([n.s1], test);
+
+ n.s1.setAttribute('name', 'slot-none');
+}, 'slotchange event: Change slot\'s name= attribute so that none is assigned.');
+</script>
+
+<div id="test2">
+ <div id="host1">
+ <template data-mode="open">
+ <slot id="s1" name="slot1"></slot>
+ </template>
+ <div id="c2" slot="slot2"></div>
+ </div>
+</div>
+
+<script>
+async_test((test) => {
+ let n = createTestTree(test2);
+ removeWhiteSpaceOnlyTextNodes(n.test2);
+
+ doneIfSlotChange([n.s1], test);
+
+ n.c2.setAttribute('slot', 'slot1');
+}, 'slotchange event: Change slot= attribute to make it assigned.');
+
+async_test((test) => {
+ let n = createTestTree(test2);
+ removeWhiteSpaceOnlyTextNodes(n.test2);
+
+ doneIfSlotChange([n.s1], test);
+
+ n.s1.setAttribute('name', 'slot2');
+}, 'slotchange event: Change slot\'s name= attribute so that a node is assigned to the slot.');
+</script>
+
+<div id="test_fallback">
+ <div id="host1">
+ <template data-mode="open">
+ <slot id="s1"></slot>
+ </template>
+ </div>
+</div>
+
+<script>
+async_test((test) => {
+ let n = createTestTree(test_fallback);
+ removeWhiteSpaceOnlyTextNodes(n.test_fallback);
+
+ doneIfSlotChange([n.s1], test);
+
+ n.s1.appendChild(document.createElement('div'));
+}, 'slotchange event: Add a fallback content.');
+</script>
+
+<div id="test_fallback2">
+ <div id="host1">
+ <template data-mode="open">
+ <slot id="s1">
+ <div id="f1"></div>
+ </slot>
+ </template>
+ </div>
+</div>
+
+<script>
+async_test((test) => {
+ let n = createTestTree(test_fallback2);
+ removeWhiteSpaceOnlyTextNodes(n.test_fallback2);
+
+ doneIfSlotChange([n.s1], test);
+
+ n.f1.remove();
+}, 'slotchange event: Remove a fallback content.');
+</script>
+
+<div id="test_fallback3">
+ <div id="host1">
+ <template data-mode="open">
+ <slot id="s2">
+ <slot id="s1">
+ <div id="f1"></div>
+ </slot>
+ </slot>
+ </template>
+ </div>
+</div>
+
+<script>
+async_test((test) => {
+ let n = createTestTree(test_fallback3);
+ removeWhiteSpaceOnlyTextNodes(n.test_fallback3);
+
+ doneIfSlotChange([n.s1, n.s2], test);
+
+ n.s1.appendChild(document.createElement('div'));
+}, 'slotchange event: Add a fallback content to nested slots.');
+
+async_test((test) => {
+ let n = createTestTree(test_fallback3);
+ removeWhiteSpaceOnlyTextNodes(n.test_fallback3);
+
+ doneIfSlotChange([n.s1, n.s2], test);
+
+ n.f1.remove();
+}, 'slotchange event: Remove a fallback content from nested slots.');
+</script>
+
+<div id="test3">
+ <div id="host1">
+ <template id="shadowroot" data-mode="open">
+ <slot id="s1" name="slot1"></slot>
+ </template>
+ <div id="c1" slot="slot1"></div>
+ </div>
+</div>
+
+<script>
+async_test((test) => {
+ let n = createTestTree(test3);
+ removeWhiteSpaceOnlyTextNodes(n.test3);
+
+ doneIfSlotChange([n.s1], test);
+
+ let slot = document.createElement('slot');
+ slot.setAttribute('name', 'slot1');
+ n.shadowroot.insertBefore(slot, n.s1);
+}, "slotchange event: Insert a slot before an existing slot.");
+</script>
+
+<div id="test4">
+ <div id="host1">
+ <template id="shadowroot" data-mode="open">
+ <slot id="s1" name="slot1"></slot>
+ <slot id="s2" name="slot1"></slot>
+ </template>
+ <div id="c1" slot="slot1"></div>
+ </div>
+</div>
+
+<script>
+async_test((test) => {
+ let n = createTestTree(test4);
+ removeWhiteSpaceOnlyTextNodes(n.test4);
+
+ doneIfSlotChange([n.s2], test);
+
+ n.s1.remove();
+}, "slotchange event: Remove a preceding slot.");
+</script>
+
+<div id="test5">
+ <div id="host1">
+ <template data-mode="open">
+ <div id="host2">
+ <template data-mode="open">
+ <slot id="s2" name="slot2"></slot>
+ </template>
+ <slot id="s1" name="slot1" slot="slot2"></slot>
+ </div>
+ </template>
+ <div id="c1" slot="slot1"></div>
+ </div>
+</div>
+
+<script>
+async_test((test) => {
+ let n = createTestTree(test5);
+ removeWhiteSpaceOnlyTextNodes(n.test5);
+
+ doneIfSlotChange([n.s1, n.s2], test);
+
+ n.c1.remove();
+}, "slotchange event: A slot is assigned to another slot.");
+</script>
+
+<div id="test6">
+ <div id="host1">
+ <template data-mode="open">
+ <div id="host2">
+ <template data-mode="open">
+ <slot id="s2" name="slot2"></slot>
+ </template>
+ <slot id="s1" name="slot1" slot="slot2"></slot>
+ </div>
+ </template>
+ </div>
+</div>
+
+<script>
+async_test((test) => {
+ let n = createTestTree(test6);
+ removeWhiteSpaceOnlyTextNodes(n.test6);
+
+ doneIfSlotChange([n.s2], test);
+
+ n.s1.remove();
+}, "slotchange event: Even if distributed nodes do not change, slotchange should be fired if assigned nodes are changed.");
+</script>