OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <script src="../resources/testharness.js"></script> | |
3 <script src="../resources/testharness-helpers.js"></script> | |
4 <script src="../resources/testharnessreport.js"></script> | |
5 <script src="spec/resources/custom-elements-helpers.js"></script> | |
6 <body> | |
7 <script> | |
8 'use strict'; | |
9 | |
10 test_with_window((w) => { | |
11 let doc = w.document; | |
12 let e = doc.createElement('a-a'); | |
13 doc.body.appendChild(e); | |
14 var misbehave = true; | |
15 var invocations = []; | |
16 class X extends w.HTMLElement { | |
17 constructor() { | |
18 if (misbehave) { | |
19 misbehave = false; | |
20 invocations.push('misbehaving'); | |
21 return new X(); | |
22 } | |
23 super(); | |
24 invocations.push(this); | |
25 } | |
26 } | |
27 w.customElements.define('a-a', X); | |
28 assert_array_equals(invocations, ['misbehaving', e], | |
29 'returning the existing element should have succeeded'); | |
30 }, 'HTMLElement constructor: poach but return upgrade candidate'); | |
31 | |
32 test_with_window((w) => { | |
33 let doc = w.document; | |
34 let e = doc.createElement('a-a'); | |
35 doc.body.appendChild(e); | |
36 var misbehave = true; | |
37 var invocations = []; | |
38 var poacher; | |
39 class X extends w.HTMLElement { | |
40 constructor() { | |
41 if (misbehave) { | |
42 misbehave = false; | |
43 poacher = new X(); | |
44 } | |
45 try { | |
46 super(); | |
47 invocations.push(this); | |
48 } catch (e) { | |
49 invocations.push(e); | |
50 } | |
51 } | |
52 } | |
53 w.customElements.define('a-a', X); | |
54 assert_equals(invocations.length, 2, | |
55 'the constructor should have been invoked once for upgrade ' + | |
56 'and once for the recursive call to "new"'); | |
57 assert_equals(poacher, e, | |
58 'the recursive "new" should steal the upgrade candidate'); | |
59 assert_equals(poacher, invocations[0], | |
60 'the recursize "new" should happen first'); | |
61 assert_true(invocations[1] instanceof w.DOMException, | |
62 'the super call should have thrown a DOMException'); | |
63 assert_equals(invocations[1].name, 'InvalidStateError', | |
64 'the exception should be an InvalidStateError'); | |
65 }, 'HTMLElement constructor: poach upgrade candidate'); | |
66 </script> | |
OLD | NEW |