OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <html> |
| 3 <head> |
| 4 <title>Custom Elements: Changes to the HTML parser</title> |
| 5 <meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> |
| 6 <meta name="assert" content="HTML parser must fallback to creating a HTMLUnknown
Element when a custom element construction fails"> |
| 7 <link rel="help" href="https://html.spec.whatwg.org/#create-an-element-for-the-t
oken"> |
| 8 <link rel="help" href="https://dom.spec.whatwg.org/#concept-create-element"> |
| 9 <script src="/resources/testharness.js"></script> |
| 10 <script src="/resources/testharnessreport.js"></script> |
| 11 </head> |
| 12 <body> |
| 13 <div id="log"></div> |
| 14 <script> |
| 15 |
| 16 setup({allow_uncaught_exception:true}); |
| 17 |
| 18 class ReturnsTextNode extends HTMLElement { |
| 19 constructor() { |
| 20 super(); |
| 21 return document.createTextNode('some text'); |
| 22 } |
| 23 }; |
| 24 customElements.define('returns-text', ReturnsTextNode); |
| 25 |
| 26 class ReturnsNonElementObject extends HTMLElement { |
| 27 constructor() { |
| 28 super(); |
| 29 return {}; |
| 30 } |
| 31 }; |
| 32 customElements.define('returns-non-element-object', ReturnsNonElementObject); |
| 33 |
| 34 class LacksSuperCall extends HTMLElement { |
| 35 constructor() { } |
| 36 }; |
| 37 customElements.define('lacks-super-call', LacksSuperCall); |
| 38 |
| 39 class ThrowsException extends HTMLElement { |
| 40 constructor() { |
| 41 throw 'Bad'; |
| 42 } |
| 43 }; |
| 44 customElements.define('throws-exception', ThrowsException); |
| 45 |
| 46 </script> |
| 47 <returns-text></returns-text> |
| 48 <returns-non-element-object></returns-non-element-object> |
| 49 <lacks-super-call></lacks-super-call> |
| 50 <throws-exception></throws-exception> |
| 51 <script> |
| 52 |
| 53 test(function () { |
| 54 var instance = document.querySelector('returns-text'); |
| 55 |
| 56 assert_false(instance instanceof ReturnsTextNode, 'HTML parser must NOT inst
antiate a custom element when the constructor returns a Text node'); |
| 57 assert_true(instance instanceof HTMLElement, 'The fallback element created b
y HTML parser must be an instance of HTMLElement'); |
| 58 assert_true(instance instanceof HTMLUnknownElement, 'The fallback element cr
eated by HTML parser must be an instance of HTMLUnknownElement'); |
| 59 |
| 60 }, 'HTML parser must create a fallback HTMLUnknownElement when a custom element
constructor returns a Text node'); |
| 61 |
| 62 test(function () { |
| 63 var instance = document.querySelector('returns-non-element-object'); |
| 64 |
| 65 assert_false(instance instanceof ReturnsNonElementObject, 'HTML parser must
NOT instantiate a custom element when the constructor returns a non-Element obje
ct'); |
| 66 assert_true(instance instanceof HTMLElement, 'The fallback element created b
y HTML parser must be an instance of HTMLElement'); |
| 67 assert_true(instance instanceof HTMLUnknownElement, 'The fallback element cr
eated by HTML parser must be an instance of HTMLUnknownElement'); |
| 68 |
| 69 }, 'HTML parser must create a fallback HTMLUnknownElement when a custom element
constructor returns non-Element object'); |
| 70 |
| 71 test(function () { |
| 72 var instance = document.querySelector('lacks-super-call'); |
| 73 |
| 74 assert_false(instance instanceof LacksSuperCall, 'HTML parser must NOT insta
ntiate a custom element when the constructor does not call super()'); |
| 75 assert_true(instance instanceof HTMLElement, 'The fallback element created b
y HTML parser must be an instance of HTMLElement'); |
| 76 assert_true(instance instanceof HTMLUnknownElement, 'The fallback element cr
eated by HTML parser must be an instance of HTMLUnknownElement'); |
| 77 |
| 78 }, 'HTML parser must create a fallback HTMLUnknownElement when a custom element
constructor does not call super()'); |
| 79 |
| 80 test(function () { |
| 81 var instance = document.querySelector('throws-exception'); |
| 82 |
| 83 assert_false(instance instanceof ThrowsException, 'HTML parser must NOT inst
antiate a custom element when the constructor throws an exception'); |
| 84 assert_true(instance instanceof HTMLElement, 'The fallback element created b
y HTML parser must be an instance of HTMLElement'); |
| 85 assert_true(instance instanceof HTMLUnknownElement, 'The fallback element cr
eated by HTML parser must be an instance of HTMLUnknownElement'); |
| 86 |
| 87 }, 'HTML parser must create a fallback HTMLUnknownElement when a custom element
constructor throws an exception'); |
| 88 |
| 89 </script> |
| 90 </body> |
| 91 </html> |
OLD | NEW |