| Index: third_party/WebKit/LayoutTests/custom-elements/spec/construct.html
|
| diff --git a/third_party/WebKit/LayoutTests/custom-elements/spec/construct.html b/third_party/WebKit/LayoutTests/custom-elements/spec/construct.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..220f2ca80d85567a0a13246d94a62db5cd3bb736
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/custom-elements/spec/construct.html
|
| @@ -0,0 +1,78 @@
|
| +<!DOCTYPE html>
|
| +<title>Custom Elements: Constructor Tests</title>
|
| +<link rel="help" href="https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom">
|
| +<meta name="author" title="Dominic Cooney" href="mailto:dominicc@chromium.org">
|
| +<script src="../../resources/testharness.js"></script>
|
| +<script src="../../resources/testharness-helpers.js"></script>
|
| +<script src="../../resources/testharnessreport.js"></script>
|
| +<script src="resources/custom-elements-helpers.js"></script>
|
| +<body>
|
| +<script>
|
| +'use strict';
|
| +
|
| +test_with_window((w) => {
|
| + assert_throws(TypeError.prototype, () => {
|
| + w.HTMLElement();
|
| + }, 'calling the HTMLElement constructor should throw a TypeError');
|
| +}, 'HTMLElement constructor, invoke');
|
| +
|
| +test_with_window((w) => {
|
| + assert_throws(TypeError.prototype, () => {
|
| + new w.HTMLElement();
|
| + }, 'invoking the HTMLElement constructor with a construct call should ' +
|
| + 'throw a TypeError');
|
| +}, 'HTMLElement constructor, construct');
|
| +
|
| +test_with_window((w) => {
|
| + class X extends w.HTMLElement {}
|
| + w.customElements.define('a-a', X);
|
| + assert_throws(TypeError.prototype, () => {
|
| + X();
|
| + }, 'calling a custom element constructor should throw a TypeError');
|
| +}, 'Custom element constructor, invoke');
|
| +
|
| +test_with_window((w) => {
|
| + var num_constructor_invocations = 0;
|
| + class C extends w.HTMLElement {
|
| + constructor() {
|
| + super();
|
| + num_constructor_invocations++;
|
| + }
|
| + }
|
| + w.customElements.define('a-a', C);
|
| + let e = new C();
|
| + assert_true(e instanceof w.HTMLElement,
|
| + 'the element should be an HTMLElement');
|
| + assert_equals(e.localName,
|
| + 'a-a',
|
| + 'the element tag name should be "a-a"');
|
| + assert_equals(e.namespaceURI,
|
| + 'http://www.w3.org/1999/xhtml',
|
| + 'the element should be in the HTML namespace');
|
| + assert_equals(e.prefix,
|
| + null,
|
| + 'the element name should not have a prefix');
|
| + assert_equals(e.ownerDocument,
|
| + w.document,
|
| + 'the element should be owned by the registry\'s associated ' +
|
| + 'document');
|
| + assert_equals(num_constructor_invocations,
|
| + 1,
|
| + 'the constructor should have been invoked once');
|
| +}, 'Custom element constructor, construct');
|
| +
|
| +test_with_window((w) => {
|
| + class C extends w.HTMLElement { }
|
| + class D extends C {}
|
| + w.customElements.define('a-a', C); // Note: Not D.
|
| + assert_throws(TypeError.prototype, () => {
|
| + new D();
|
| + }, 'constructing a custom element with a new.target with no registry ' +
|
| + 'entry should throw a TypeError');
|
| +
|
| + assert_throws(TypeError.prototype, () => {
|
| + Reflect.construct(C, [], 42);
|
| + }, 'constructing a custom element with a non-object new.target should ' +
|
| + 'throw a TypeError');
|
| +}, 'Custom element constructor, construct invalid new.target');
|
| +</script>
|
|
|