| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <title>Custom Elements: Element definition</title> | 2 <title>Custom Elements: Element definition</title> |
| 3 <script src="/resources/testharness.js"></script> | 3 <script src="/resources/testharness.js"></script> |
| 4 <script src="/resources/testharnessreport.js"></script> | 4 <script src="/resources/testharnessreport.js"></script> |
| 5 <body> | 5 <body> |
| 6 <div id="log"></div> | 6 <div id="log"></div> |
| 7 <iframe id="iframe"></iframe> | 7 <iframe id="iframe"></iframe> |
| 8 <script> | 8 <script> |
| 9 'use strict'; | 9 'use strict'; |
| 10 (() => { | 10 (() => { |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 ].forEach(name => { | 154 ].forEach(name => { |
| 155 test(() => { | 155 test(() => { |
| 156 assert_throws(expectNotSupportedError, () => { | 156 assert_throws(expectNotSupportedError, () => { |
| 157 customElements.define('test-define-extend-' + name, class {}, { extends:
name }); | 157 customElements.define('test-define-extend-' + name, class {}, { extends:
name }); |
| 158 }); | 158 }); |
| 159 }, `If extends is ${name}, should throw a NotSupportedError`); | 159 }, `If extends is ${name}, should throw a NotSupportedError`); |
| 160 }); | 160 }); |
| 161 | 161 |
| 162 // 8. Let observedAttributesIterable be Get(constructor, "observedAttributes")
. | 162 // 8. Let observedAttributesIterable be Get(constructor, "observedAttributes")
. |
| 163 // Rethrow any exceptions. | 163 // Rethrow any exceptions. |
| 164 // See step 12 for rethrow tests. | 164 test(() => { |
| 165 class C { |
| 166 static get observedAttributes() { throw_rethrown_error(); } |
| 167 } |
| 168 assert_rethrown(() => { |
| 169 customElements.define('test-define-observedattributes-rethrow', C); |
| 170 }); |
| 171 }, 'If constructor.observedAttributes throws, should rethrow'); |
| 165 | 172 |
| 166 // 10. Let prototype be Get(constructor, "prototype"). Rethrow any exceptions. | 173 // 10. Let prototype be Get(constructor, "prototype"). Rethrow any exceptions. |
| 167 function assert_rethrown(func, description) { | 174 function assert_rethrown(func, description) { |
| 168 assert_throws({ name: 'rethrown' }, func, description); | 175 assert_throws({ name: 'rethrown' }, func, description); |
| 169 } | 176 } |
| 170 function throw_rethrown_error() { | 177 function throw_rethrown_error() { |
| 171 const e = new Error('check this is rethrown'); | 178 const e = new Error('check this is rethrown'); |
| 172 e.name = 'rethrown'; | 179 e.name = 'rethrown'; |
| 173 throw e; | 180 throw e; |
| 174 } | 181 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 201 // 12. Let connectedCallback be Get(prototype, "connectedCallback"). Rethrow a
ny exceptions. | 208 // 12. Let connectedCallback be Get(prototype, "connectedCallback"). Rethrow a
ny exceptions. |
| 202 // 13. If connectedCallback is not undefined, and IsCallable(connectedCallback
) is false, | 209 // 13. If connectedCallback is not undefined, and IsCallable(connectedCallback
) is false, |
| 203 // then throw a TypeError exception. | 210 // then throw a TypeError exception. |
| 204 // 14. Let disconnectedCallback be Get(prototype, "disconnectedCallback"). Ret
hrow any exceptions. | 211 // 14. Let disconnectedCallback be Get(prototype, "disconnectedCallback"). Ret
hrow any exceptions. |
| 205 // 15. If disconnectedCallback is not undefined, and IsCallable(disconnectedCa
llback) is false, | 212 // 15. If disconnectedCallback is not undefined, and IsCallable(disconnectedCa
llback) is false, |
| 206 // then throw a TypeError exception. | 213 // then throw a TypeError exception. |
| 207 // 16. Let attributeChangedCallback be Get(prototype, "attributeChangedCallbac
k"). Rethrow any exceptions. | 214 // 16. Let attributeChangedCallback be Get(prototype, "attributeChangedCallbac
k"). Rethrow any exceptions. |
| 208 // 17. If attributeChangedCallback is not undefined, and IsCallable(attributeC
hangedCallback) is false, | 215 // 17. If attributeChangedCallback is not undefined, and IsCallable(attributeC
hangedCallback) is false, |
| 209 // then throw a TypeError exception. | 216 // then throw a TypeError exception. |
| 210 [ | 217 [ |
| 211 'observedAttributes', // See step 8 above. | |
| 212 'connectedCallback', | |
| 213 'disconnectedCallback', | |
| 214 'attributeChangedCallback', | |
| 215 ].forEach(name => { | |
| 216 test(() => { | |
| 217 class C { | |
| 218 get [name]() { throw_rethrown_error(); } | |
| 219 } | |
| 220 assert_rethrown(() => { | |
| 221 customElements.define('test-define-constructor-rethrow-prototype-' + nam
e, C); | |
| 222 }); | |
| 223 }, `If constructor.prototype.${name} throws, should rethrow`); | |
| 224 }); | |
| 225 [ | |
| 226 'connectedCallback', | 218 'connectedCallback', |
| 227 'disconnectedCallback', | 219 'disconnectedCallback', |
| 228 'attributeChangedCallback', | 220 'attributeChangedCallback', |
| 229 ].forEach(name => { | 221 ].forEach(name => { |
| 230 test(() => { | 222 test(() => { |
| 231 class c {}; | 223 class C { |
| 232 c.prototype[name] = undefined; | 224 get [name]() { throw_rethrown_error(); } |
| 233 customElements.define('test-define-constructor-prototype-' + name, c); | 225 } |
| 234 }, `If constructor.prototype.${name} is undefined, should success`); | 226 assert_rethrown(() => { |
| 227 customElements.define(`test-define-${name.toLowerCase()}-rethrow`, C); |
| 228 }); |
| 229 }, `If constructor.prototype.${name} throws, should rethrow`); |
| 230 |
| 235 [ | 231 [ |
| 236 [ 'null', null ], | 232 { name: 'undefined', value: undefined, success: true }, |
| 237 [ 'object', {} ], | 233 { name: 'function', value: function () { }, success: true }, |
| 238 ].forEach(value => { | 234 { name: 'null', value: null, success: false }, |
| 239 test(() => { | 235 { name: 'object', value: {}, success: false }, |
| 240 class c {}; | 236 { name: 'integer', value: 1, success: false }, |
| 241 c.prototype[name] = value[1]; | 237 ].forEach(data => { |
| 242 assert_throws(expectTypeError, () => { | 238 test(() => { |
| 243 customElements.define('test-define-constructor-prototype-' + name, c); | 239 class C { }; |
| 244 }); | 240 C.prototype[name] = data.value; |
| 245 }, `If constructor.prototype.${name} is ${value[0]}, should throw a TypeEr
ror`); | 241 if (data.success) { |
| 246 }) | 242 customElements.define(`test-define-${name.toLowerCase()}-${data.name}`
, C); |
| 243 } else { |
| 244 assert_throws(expectTypeError, () => { |
| 245 customElements.define(`test-define-${name.toLowerCase()}-${data.name
}`, C); |
| 246 }); |
| 247 } |
| 248 }, `If constructor.prototype.${name} is ${data.name}, should ${data.succes
s ? 'succeed' : 'throw a TypeError'}`); |
| 249 }); |
| 247 }); | 250 }); |
| 248 })(); | 251 })(); |
| 249 </script> | 252 </script> |
| 250 </body> | 253 </body> |
| OLD | NEW |