UNPKG

@webcomponents/custom-elements

Version:
66 lines (63 loc) 2.03 kB
<!DOCTYPE html> <script src="../resources/testharness.js"></script> <script src="../resources/testharnessreport.js"></script> <script src="spec/resources/custom-elements-helpers.js"></script> <body> <script> 'use strict'; test_with_window((w) => { let doc = w.document; let e = doc.createElement('a-a'); doc.body.appendChild(e); var misbehave = true; var invocations = []; class X extends w.HTMLElement { constructor() { if (misbehave) { misbehave = false; invocations.push('misbehaving'); return new X(); } super(); invocations.push(this); } } w.customElements.define('a-a', X); assert_array_equals(invocations, ['misbehaving', e], 'returning the existing element should have succeeded'); }, 'HTMLElement constructor: poach but return upgrade candidate'); test_with_window((w) => { let doc = w.document; let e = doc.createElement('a-a'); doc.body.appendChild(e); var misbehave = true; var invocations = []; var poacher; class X extends w.HTMLElement { constructor() { if (misbehave) { misbehave = false; poacher = new X(); } try { super(); invocations.push(this); } catch (e) { invocations.push(e); } } } w.customElements.define('a-a', X); assert_equals(invocations.length, 2, 'the constructor should have been invoked once for upgrade ' + 'and once for the recursive call to "new"'); assert_equals(poacher, e, 'the recursive "new" should steal the upgrade candidate'); assert_equals(poacher, invocations[0], 'the recursize "new" should happen first'); assert_true(invocations[1] instanceof w.DOMException, 'the super call should have thrown a DOMException'); assert_equals(invocations[1].name, 'InvalidStateError', 'the exception should be an InvalidStateError'); }, 'HTMLElement constructor: poach upgrade candidate'); </script>