From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../htmlconstructor_autonomous_tests.js | 107 +++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 dom/tests/mochitest/webcomponents/htmlconstructor_autonomous_tests.js (limited to 'dom/tests/mochitest/webcomponents/htmlconstructor_autonomous_tests.js') 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(); + })(); + }) +); -- cgit v1.2.3