UNPKG

@webcomponents/custom-elements

Version:
58 lines (55 loc) 2.24 kB
<!DOCTYPE html> <title>Custom Elements: adopt node</title> <link rel="help" href="https://dom.spec.whatwg.org/#concept-node-adopt"> <script src="../../resources/testharness.js"></script> <script src="../../resources/testharnessreport.js"></script> <script src="resources/custom-elements-helpers.js"></script> <body> <script> 'use strict' // 3.2 For each inclusiveDescendant in node’s shadow-including inclusive descendants that is a custom // element, enqueue a custom element callback reaction with inclusiveDescendant, // callback name "adoptedCallback", and an empty argument list. promise_test((t) => { return Promise.all([ create_window_in_test(t), create_window_in_test(t)]) .then(([w1, w2]) => { let invocations = []; class X extends w1.HTMLElement { adoptedCallback() { invocations.push(['adopted', this, arguments]); } } w1.customElements.define('a-a', X); let a = w1.document.createElement('a-a'); w2.document.adoptNode(a); assert_array_equals_callback_invocations(invocations, [ ['adopted', a, [w1.document, w2.document]] ]); }); }, 'adopting a custom element to the different document should enqueue an adoptedCallback reaction'); // 3.3 For each inclusiveDescendant in node’s shadow-including inclusive descendants, in // shadow-including tree order, run the adopting steps with inclusiveDescendant and oldDocument. promise_test((t) => { return Promise.all([ create_window_in_test(t), create_window_in_test(t)]) .then(([w1, w2]) => { w1.document.body.innerHTML = ` <a-a id="a"> <p> <a-a id="b"></a-a> <a-a id="c"></a-a> </p> <a-a id="d"></a-a> </a-a>`; let invocations = []; class X extends w1.HTMLElement { adoptedCallback() { invocations.push(this); } } w1.customElements.define('a-a', X); let a = w1.document.getElementById("a"); w2.document.adoptNode(a); assert_array_equals(['a', 'b', 'c', 'd'], invocations.map((e) => e.id), 'four elements should have been removed in doc order'); }); }, 'shadow-including inclusive descendants should be adopted in shadow-including tree order'); </script> </body>