diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/custom-elements/customized-built-in-constructor-exceptions.html | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/custom-elements/customized-built-in-constructor-exceptions.html')
-rw-r--r-- | testing/web-platform/tests/custom-elements/customized-built-in-constructor-exceptions.html | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/testing/web-platform/tests/custom-elements/customized-built-in-constructor-exceptions.html b/testing/web-platform/tests/custom-elements/customized-built-in-constructor-exceptions.html new file mode 100644 index 0000000000..fbc1a6fd87 --- /dev/null +++ b/testing/web-platform/tests/custom-elements/customized-built-in-constructor-exceptions.html @@ -0,0 +1,107 @@ +<!DOCTYPE html> +<title>Customized built-in element constructor behavior</title> +<meta name='author' href='mailto:masonf@chromium.org'> +<link rel='help' href='https://dom.spec.whatwg.org/#concept-create-element'> +<script src='/resources/testharness.js'></script> +<script src='/resources/testharnessreport.js'></script> + +<script> +setup({allow_uncaught_exception : true}); + +class MyCustomParagraph extends HTMLParagraphElement { + constructor() { + super(); + this.textContent = 'PASS'; + } +} +customElements.define('custom-p', MyCustomParagraph, { extends: 'p' }); +</script> +<p id=targetp is='custom-p'></p> +<script> +test(t => { + let target = document.getElementById('targetp'); + assert_true(!!target); + assert_equals(target.localName, 'p'); + assert_true(target instanceof MyCustomParagraph); + assert_true(target instanceof HTMLParagraphElement); + assert_equals(target.childNodes.length, 1); + assert_equals(target.textContent, 'PASS'); +}, 'Appending children in customized built-in constructor should work'); +</script> + + +<script> +class MyCustomVideo extends HTMLVideoElement { + constructor() { + super(); + throw new Error(); + } +} +customElements.define('custom-video', MyCustomVideo, { extends: 'video' }); +</script> +<video id=targetvideo is='custom-video'> <source></source> </video> +<script> +test(t => { + let target = document.getElementById('targetvideo'); + assert_true(!!target); + assert_equals(target.localName, 'video'); + assert_true(target instanceof MyCustomVideo); + assert_true(target instanceof HTMLVideoElement); + assert_equals(target.children.length, 1); +}, 'Throwing exception in customized built-in constructor should not crash and should return correct element type (video)'); +</script> + + +<script> +class MyCustomForm extends HTMLFormElement { + constructor() { + super(); + throw new Error(); + } +} +customElements.define('custom-form', MyCustomForm, { extends: 'form' }); +</script> +<form id=targetform is='custom-form'> <label></label><input> </form> +<script> +test(t => { + let target = document.getElementById('targetform'); + assert_true(!!target); + assert_equals(target.localName, 'form'); + assert_true(target instanceof MyCustomForm); + assert_true(target instanceof HTMLFormElement); + assert_equals(target.children.length, 2); +}, 'Throwing exception in customized built-in constructor should not crash and should return correct element type (form)'); +</script> + +<script> +class MyInput extends HTMLInputElement { }; +customElements.define('my-input', MyInput, { extends: 'input' }); +</script> +<input id=customized-input is='my-input'> +<script> +test(t => { + const input = document.getElementById('customized-input'); + assert_true(input instanceof MyInput); + assert_true(input instanceof HTMLInputElement); +}, 'Make sure customized <input> element doesnt crash'); +</script> + + +<script> +class MyInputAttrs extends HTMLInputElement { + constructor() { + super(); + this.setAttribute('foo', 'bar'); + } +} +customElements.define('my-input-attr', MyInputAttrs, { extends: 'input' }); +</script> +<input id=customized-input-attr is='my-input-attr'> +<script> +test(t => { + const input = document.getElementById('customized-input-attr'); + assert_true(input instanceof MyInputAttrs); + assert_true(input instanceof HTMLInputElement); + assert_equals(input.getAttribute('foo'),'bar'); +}, 'Make sure customized <input> element that sets attributes doesnt crash'); +</script> |