| <!DOCTYPE html> |
| <title>Custom Elements: Remove an element</title> |
| <link rel="help" href="https://dom.spec.whatwg.org/#concept-node-remove"> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="resources/custom-elements-helpers.js"></script> |
| <body> |
| <script> |
| 'use strict'; |
| |
| // 15. For each shadow-including descendant descendant of node, in shadow-including tree order, |
| // run these substeps: |
| // 2. If descendant is custom, then enqueue a custom element callback reaction with descendant, |
| // callback name "disconnectedCallback", and an empty argument list. |
| test_with_window((w) => { |
| w.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 w.HTMLElement { |
| disconnectedCallback() { invocations.push(this); } |
| } |
| w.customElements.define('a-a', X); |
| w.document.getElementById("a").remove(); |
| assert_array_equals(['a', 'b', 'c', 'd'], invocations.map((e) => e.id), |
| 'four elements should have been removed in doc order'); |
| },'Remove an element'); |
| </script> |
| </body> |