OLD | NEW |
---|---|
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <!-- | 2 <title>Custom Elements: CustomElementsRegistry.whenDefined</title> |
3 TODO(yosin): We should upstream to wpt test. | |
4 This file is taken from https://github.com/kojiishi/web-platform-tests/blob/5390 8d773012edf931047674f7afe3975bc1820f/custom-elements/custom-elements-registry/ge t.html | |
5 --> | |
6 <title>Custom Elements: CustomElementsRegistry.get</title> | |
7 <script src="../../../resources/testharness.js"></script> | 3 <script src="../../../resources/testharness.js"></script> |
8 <script src="../../../resources/testharnessreport.js"></script> | 4 <script src="../../../resources/testharnessreport.js"></script> |
9 <body> | 5 <body> |
10 <div id="log"></div> | 6 <div id="log"></div> |
11 <script> | 7 <script> |
12 'use strict'; | 8 'use strict'; |
13 (() => { | 9 (() => { |
14 // https://html.spec.whatwg.org/multipage/scripting.html#dom-customelementsreg istry-whendefined | 10 // https://html.spec.whatwg.org/multipage/scripting.html#dom-customelementsreg istry-whendefined |
15 // Use window from iframe to isolate the test. | 11 // Use window from iframe to isolate the test. |
16 function setup() { | 12 function setup() { |
17 const iframe = document.createElement('iframe'); | 13 const iframe = document.createElement('iframe'); |
18 document.body.appendChild(iframe); | 14 document.body.appendChild(iframe); |
19 const testWindow = iframe.contentWindow; | 15 const testWindow = iframe.contentWindow; |
20 const customElements = testWindow.customElements; | 16 const customElements = testWindow.customElements; |
21 if (!customElements) | 17 if (!customElements) |
22 return Promise.reject('This test requires window.customElements'); | 18 return Promise.reject('This test requires window.customElements'); |
23 if (!('get' in customElements)) | 19 if (!('whenDefined' in customElements)) |
24 return Promise.reject('This test requires window.customElements.get'); | 20 return Promise.reject('This test requires window.customElements.whenDefine d'); |
25 return Promise.resolve(customElements); | 21 return Promise.resolve(customElements); |
26 } | 22 } |
27 | 23 |
24 const kNameToBeDefined = 'x-foo'; | |
25 const kNameNotDefined = 'x-bar'; | |
26 let beforeDefined = false; | |
27 let notDefined = true; | |
28 let afterDefined = false; | |
28 promise_test(() => setup() | 29 promise_test(() => setup() |
29 .then(customElements => { | 30 .then(customElements => { |
30 // 1. If this CustomElementsRegistry contains an entry with name name, | 31 customElements.whenDefined(kNameToBeDefined).then(() => beforeDefined = tr ue); |
31 // then return that entry's constructor. | 32 customElements.whenDefined(kNameNotDefined).then(() => notDefined = false) ; |
32 const name = 'test-get-existing'; | 33 customElements.define(kNameToBeDefined, class {}); |
33 class C extends HTMLElement {}; | 34 customElements.whenDefined(kNameToBeDefined).then(() => afterDefined = tru e); |
34 customElements.define(name, C); | 35 return customElements; |
35 assert_equals(customElements.get(name), C, 'get() returns the constructor' ) | |
36 return Promise.resolve(customElements); | |
37 }).then(customElements => { | 36 }).then(customElements => { |
38 // 2. Otherwise, return undefined. | 37 assert_true(beforeDefined, 'promise before defined should be resolved.'); |
39 assert_equals(customElements.get('test-get-not-defined'), undefined, | 38 assert_true(afterDefined, 'promise after defined should be resolved.'); |
40 'get() returns undefined for not-defined name'); | 39 assert_true(notDefined, 'promise for not defined name should not be resolv ed.'); |
41 }).catch(reason => { throw reason })); | 40 }).catch(reason => { throw reason })); |
dominicc (has gone to gerrit)
2016/06/10 06:20:57
I think the spec additionally requires that the sa
yosin_UTC9
2016/06/10 07:52:28
Here is summary:
- After defined: spec says whenD
| |
42 })(); | 41 })(); |
43 </script> | 42 </script> |
44 </body> | 43 </body> |
OLD | NEW |