diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /dom/tests/mochitest/webcomponents/htmlconstructor_autonomous_tests.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/tests/mochitest/webcomponents/htmlconstructor_autonomous_tests.js')
-rw-r--r-- | dom/tests/mochitest/webcomponents/htmlconstructor_autonomous_tests.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/dom/tests/mochitest/webcomponents/htmlconstructor_autonomous_tests.js b/dom/tests/mochitest/webcomponents/htmlconstructor_autonomous_tests.js new file mode 100644 index 0000000000..75b42389cc --- /dev/null +++ b/dom/tests/mochitest/webcomponents/htmlconstructor_autonomous_tests.js @@ -0,0 +1,107 @@ +promises.push( + test_with_new_window(testWindow => { + // Test calling the HTMLElement constructor. + (() => { + SimpleTest.doesThrow(() => { + testWindow.HTMLElement(); + }, "calling the HTMLElement constructor should throw a TypeError"); + })(); + + // Test constructing a HTMLELement. + (() => { + SimpleTest.doesThrow(() => { + new testWindow.HTMLElement(); + }, "constructing a HTMLElement should throw a TypeError"); + })(); + + // Test constructing a custom element with defining HTMLElement as entry. + (() => { + testWindow.customElements.define( + "x-defining-html-element", + testWindow.HTMLElement + ); + SimpleTest.doesThrow(() => { + new testWindow.HTMLElement(); + }, "constructing a custom element with defining HTMLElement as registry " + "entry should throw a TypeError"); + })(); + + // Test calling a custom element constructor and constructing an autonomous + // custom element. + (() => { + let num_constructor_invocations = 0; + class X extends testWindow.HTMLElement { + constructor() { + super(); + num_constructor_invocations++; + } + } + testWindow.customElements.define("x-element", X); + SimpleTest.doesThrow(() => { + X(); + }, "calling an autonomous custom element constructor should throw a TypeError"); + + let element = new X(); + SimpleTest.is( + Object.getPrototypeOf(Cu.waiveXrays(element)), + X.prototype, + "constructing an autonomous custom element; " + + "the element should be a registered constructor" + ); + SimpleTest.is( + element.localName, + "x-element", + "constructing an autonomous custom element; " + + 'the element tag name should be "x-element"' + ); + SimpleTest.is( + element.namespaceURI, + "http://www.w3.org/1999/xhtml", + "constructing an autonomous custom element; " + + "the element should be in the HTML namespace" + ); + SimpleTest.is( + element.prefix, + null, + "constructing an autonomous custom element; " + + "the element name should not have a prefix" + ); + SimpleTest.is( + element.ownerDocument, + testWindow.document, + "constructing an autonomous custom element; " + + "the element should be owned by the registry's associated " + + "document" + ); + SimpleTest.is( + num_constructor_invocations, + 1, + "constructing an autonomous custom element; " + + "the constructor should have been invoked once" + ); + })(); + + // Test if prototype is no an object. + (() => { + function ElementWithNonObjectPrototype() { + let o = Reflect.construct(testWindow.HTMLElement, [], new.target); + SimpleTest.is( + Object.getPrototypeOf(Cu.waiveXrays(o)), + window.HTMLElement.prototype, + "constructing an autonomous custom element; " + + "if prototype is not object, fallback from NewTarget's realm" + ); + } + + // Prototype have to be an object during define(), otherwise define will + // throw an TypeError exception. + ElementWithNonObjectPrototype.prototype = {}; + testWindow.customElements.define( + "x-non-object-prototype", + ElementWithNonObjectPrototype + ); + + ElementWithNonObjectPrototype.prototype = "string"; + new ElementWithNonObjectPrototype(); + })(); + }) +); |