Chromium Code Reviews| 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 |