Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Unified Diff: third_party/WebKit/LayoutTests/custom-elements/spec/construct.html

Issue 1952893003: Implement custom element construction and some 'define' checks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Implement feedback. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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>

Powered by Google App Engine
This is Rietveld 408576698