OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <script src="../../../resources/testharness.js"></script> | 2 <script src="../../../resources/testharness.js"></script> |
3 <script src="../../../resources/testharnessreport.js"></script> | 3 <script src="../../../resources/testharnessreport.js"></script> |
4 <body> | 4 <body> |
| 5 <x-a id="a"></x-a> |
| 6 <x-a id="b"></x-a> |
5 <script> | 7 <script> |
6 test(function () { | 8 t = async_test('ready callback'); |
7 var readyInvocations = 0; | 9 t.calls = []; |
8 function ready() { | |
9 readyInvocations++; | |
10 } | |
11 | 10 |
12 var getterInvocations = 0; | 11 t.step(function () { |
13 function getter() { | 12 var proto = Object.create(HTMLElement.prototype); |
14 getterInvocations++; | 13 proto.readyCallback = function () { |
15 return ready; | 14 t.calls.push(this.id + ' ready'); |
16 } | 15 }; |
17 | 16 |
18 function failer() { | 17 var ctor = document.register('x-a', {prototype: proto}); |
19 assert_unreached('the ready callback must not be retrieved after registr
ation'); | 18 var call_set = t.calls.slice(); |
20 } | 19 call_set.sort(); |
| 20 assert_array_equals(call_set, ['a ready', 'b ready'], 'document.register mus
t invoke the ready lifecycle callback for upgrade candidates'); |
21 | 21 |
22 var proto = Object.create(HTMLElement.prototype, { | 22 t.calls = []; |
23 readyCallback: { | 23 new ctor(); |
24 get: getter | 24 assert_array_equals(t.calls, [' ready'], 'invoking the generated constructor
must invoke the ready lifecycle callback'); |
25 } | |
26 }); | |
27 var ctor = document.register('x-a', {prototype: proto}); | |
28 assert_equals(getterInvocations, 1, 'the ready callback must have been retri
eved'); | |
29 | 25 |
30 proto.readyCallback = failer; | 26 t.calls = []; |
31 var element = new ctor(); | 27 var div = document.createElement('div'); |
32 assert_equals(readyInvocations, 1, 'the ready callback retrieved at registra
tion must be invoked'); | 28 div.innerHTML = '<x-a id="c"></x-a>'; |
33 }, 'transfer ready callback'); | 29 assert_array_equals(t.calls, [], 'parsing this fragment must not synchronous
ly invoke the ready lifecycle callback'); |
| 30 }); |
34 </script> | 31 </script> |
| 32 <script> |
| 33 t.step(function () { |
| 34 assert_array_equals(t.calls, ['c ready'], 'the ready callback should have be
en invoked at the microtask checkpoint'); |
| 35 t.done(); |
| 36 t = null; |
| 37 }); |
| 38 </script> |
OLD | NEW |