| Index: third_party/WebKit/LayoutTests/imported/wpt/custom-elements/upgrading.html
|
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/upgrading.html b/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/upgrading.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..aaea0cb4a021169631c2b50d0f597cb727a0b614
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/upgrading.html
|
| @@ -0,0 +1,190 @@
|
| +<!DOCTYPE html>
|
| +<html>
|
| +<head>
|
| +<title>Custom Elements: Enqueue a custom element upgrade reaction</title>
|
| +<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
|
| +<meta name="assert" content="Enqueue a custom element upgrade reaction must upgrade a custom element">
|
| +<link rel="help" href="https://dom.spec.whatwg.org/#concept-create-element">
|
| +<link rel="help" href="https://html.spec.whatwg.org/multipage/scripting.html#concept-try-upgrade">
|
| +<link rel="help" href="https://html.spec.whatwg.org/multipage/scripting.html#enqueue-a-custom-element-upgrade-reaction">
|
| +<script src="/resources/testharness.js"></script>
|
| +<script src="/resources/testharnessreport.js"></script>
|
| +<script src="resources/custom-elements-helpers.js"></script>
|
| +</head>
|
| +<body>
|
| +<div id="log"></div>
|
| +<script>
|
| +
|
| +class PredefinedCustomElement extends HTMLElement {}
|
| +customElements.define('predefined-custom-element', PredefinedCustomElement);
|
| +
|
| +var customElementNumber = 1;
|
| +function generateNextCustomElementName() { return 'custom-' + customElementNumber++; }
|
| +
|
| +// Tests for documents without a browsing context.
|
| +document_types().filter(function (entry) { return !entry.isOwner && !entry.hasBrowsingContext; }).forEach(function (entry) {
|
| + var documentName = entry.name;
|
| + var getDocument = entry.create;
|
| +
|
| + promise_test(function () {
|
| + return getDocument().then(function (doc) {
|
| + assert_false(doc.createElement('predefined-custom-element') instanceof PredefinedCustomElement);
|
| + });
|
| + }, 'Creating an element in ' + documentName + ' must not enqueue a custom element upgrade reaction'
|
| + + ' because the document does not have a browsing context');
|
| +
|
| + promise_test(function () {
|
| + var name = generateNextCustomElementName();
|
| + var unresolvedElement = document.createElement(name);
|
| +
|
| + assert_equals(unresolvedElement.__proto__, HTMLElement.prototype,
|
| + '[[Prototype]] internal slot of the unresolved custom element must be the HTMLElement prototype');
|
| +
|
| + return getDocument().then(function (doc) {
|
| + var unresolvedElementInDoc = doc.createElement(name);
|
| + var prototype = (unresolvedElementInDoc.namespaceURI == 'http://www.w3.org/1999/xhtml' ? HTMLElement : Element).prototype;
|
| +
|
| + assert_equals(unresolvedElementInDoc.__proto__, prototype,
|
| + '[[Prototype]] internal slot of the unresolved custom element must be the ' + prototype.toString() + ' prototype');
|
| + var someCustomElement = class extends HTMLElement {};
|
| + customElements.define(name, someCustomElement);
|
| + assert_equals(unresolvedElementInDoc.__proto__, prototype, '"define" must not upgrade a disconnected unresolved custom elements');
|
| + doc.documentElement.appendChild(unresolvedElementInDoc);
|
| + assert_equals(unresolvedElementInDoc.__proto__, prototype,
|
| + 'Inserting an element into a document without a browsing context must not enqueue a custom element upgrade reaction');
|
| + });
|
| + }, 'Creating an element in ' + documentName + ' and inserting into the document must not enqueue a custom element upgrade reaction');
|
| +
|
| + promise_test(function () {
|
| + var name = generateNextCustomElementName();
|
| + var unresolvedElement = document.createElement(name);
|
| +
|
| + assert_equals(unresolvedElement.__proto__, HTMLElement.prototype,
|
| + '[[Prototype]] internal slot of the unresolved custom element must be the HTMLElement prototype');
|
| +
|
| + return getDocument().then(function (doc) {
|
| + var unresolvedElementInDoc = doc.createElement(name);
|
| + var prototype = (unresolvedElementInDoc.namespaceURI == 'http://www.w3.org/1999/xhtml' ? HTMLElement : Element).prototype;
|
| +
|
| + assert_equals(unresolvedElementInDoc.__proto__, prototype,
|
| + '[[Prototype]] internal slot of the unresolved custom element must be the ' + prototype.toString() + ' prototype');
|
| + var someCustomElement = class extends HTMLElement {};
|
| + customElements.define(name, someCustomElement);
|
| + assert_equals(unresolvedElementInDoc.__proto__, prototype, '"define" must not upgrade a disconnected unresolved custom elements');
|
| + document.body.appendChild(unresolvedElementInDoc);
|
| +
|
| + if (unresolvedElementInDoc.namespaceURI == 'http://www.w3.org/1999/xhtml') {
|
| + assert_equals(unresolvedElementInDoc.__proto__, someCustomElement.prototype,
|
| + 'Inserting an element into a document with a browsing context must enqueue a custom element upgrade reaction');
|
| + } else {
|
| + assert_equals(unresolvedElementInDoc.__proto__, prototype,
|
| + 'Looking up a custom element definition must return null if the element is not in the HTML namespace');
|
| + }
|
| + });
|
| + }, 'Creating an element in ' + documentName + ' and adopting back to a document with browsing context must enqueue a custom element upgrade reaction');
|
| +
|
| +});
|
| +
|
| +// Tests for documents with a browsing context.
|
| +document_types().filter(function (entry) { return !entry.isOwner && entry.hasBrowsingContext; }).forEach(function (entry) {
|
| + var documentName = entry.name;
|
| + var getDocument = entry.create;
|
| +
|
| + promise_test(function () {
|
| + return getDocument().then(function (doc) {
|
| + assert_false(doc.createElement('predefined-custom-element') instanceof PredefinedCustomElement);
|
| + });
|
| + }, 'Creating an element in ' + documentName + ' must not enqueue a custom element upgrade reaction if there is no matching definition');
|
| +
|
| + promise_test(function () {
|
| + return getDocument().then(function (doc) {
|
| + var docWindow = doc.defaultView;
|
| + class DistinctPredefinedCustomElement extends docWindow.HTMLElement { };
|
| + docWindow.customElements.define('predefined-custom-element', DistinctPredefinedCustomElement);
|
| + assert_true(doc.createElement('predefined-custom-element') instanceof DistinctPredefinedCustomElement);
|
| + });
|
| + }, 'Creating an element in ' + documentName + ' must enqueue a custom element upgrade reaction if there is a matching definition');
|
| +
|
| + promise_test(function () {
|
| + var unresolvedElement = document.createElement('unresolved-element');
|
| + return getDocument().then(function (doc) {
|
| + var docWindow = doc.defaultView;
|
| + class UnresolvedElement extends docWindow.HTMLElement { };
|
| + var unresolvedElementInDoc = doc.createElement('unresolved-element');
|
| +
|
| + assert_equals(unresolvedElement.__proto__, HTMLElement.prototype);
|
| + assert_equals(unresolvedElementInDoc.__proto__, docWindow.HTMLElement.prototype);
|
| +
|
| + docWindow.customElements.define('unresolved-element', UnresolvedElement);
|
| +
|
| + assert_equals(unresolvedElement.__proto__, HTMLElement.prototype);
|
| + assert_equals(unresolvedElementInDoc.__proto__, docWindow.HTMLElement.prototype);
|
| +
|
| + });
|
| + }, '"define" in ' + documentName + ' must not enqueue a custom element upgrade reaction on a disconnected unresolved custom element');
|
| +
|
| + promise_test(function () {
|
| + var unresolvedElement = document.createElement('unresolved-element');
|
| + return getDocument().then(function (doc) {
|
| + var docWindow = doc.defaultView;
|
| + class UnresolvedElement extends docWindow.HTMLElement { };
|
| + var unresolvedElementInDoc = doc.createElement('unresolved-element');
|
| +
|
| + assert_equals(unresolvedElement.__proto__, HTMLElement.prototype);
|
| + assert_equals(unresolvedElementInDoc.__proto__, docWindow.HTMLElement.prototype);
|
| +
|
| + docWindow.customElements.define('unresolved-element', UnresolvedElement);
|
| + doc.documentElement.appendChild(unresolvedElementInDoc);
|
| +
|
| + assert_equals(unresolvedElement.__proto__, HTMLElement.prototype);
|
| + assert_equals(unresolvedElementInDoc.__proto__, UnresolvedElement.prototype);
|
| + });
|
| + }, 'Inserting an unresolved custom element into ' + documentName + ' must enqueue a custom element upgrade reaction');
|
| +
|
| + promise_test(function () {
|
| + var unresolvedElement = document.createElement('unresolved-element');
|
| + return getDocument().then(function (doc) {
|
| + var docWindow = doc.defaultView;
|
| + class UnresolvedElement extends docWindow.HTMLElement { };
|
| + var unresolvedElementInDoc = doc.createElement('unresolved-element');
|
| + doc.documentElement.appendChild(unresolvedElementInDoc);
|
| +
|
| + assert_equals(unresolvedElement.__proto__, HTMLElement.prototype);
|
| + assert_equals(unresolvedElementInDoc.__proto__, docWindow.HTMLElement.prototype);
|
| +
|
| + docWindow.customElements.define('unresolved-element', UnresolvedElement);
|
| +
|
| + assert_equals(unresolvedElement.__proto__, HTMLElement.prototype);
|
| + assert_equals(unresolvedElementInDoc.__proto__, UnresolvedElement.prototype);
|
| + });
|
| + }, '"define" in ' + documentName + ' must enqueue a custom element upgrade reaction on a connected unresolved custom element');
|
| +
|
| + promise_test(function () {
|
| + var unresolvedElement = document.createElement('unresolved-element');
|
| + return getDocument().then(function (doc) {
|
| + var docWindow = doc.defaultView;
|
| + class UnresolvedElement extends docWindow.HTMLElement { };
|
| + assert_false(unresolvedElement instanceof UnresolvedElement);
|
| + docWindow.customElements.define('unresolved-element', UnresolvedElement);
|
| + doc.adoptNode(unresolvedElement);
|
| + assert_false(unresolvedElement instanceof UnresolvedElement);
|
| + });
|
| + }, 'Adopting (and leaving disconnceted) an unresolved custom element into ' + documentName + ' must not enqueue a custom element upgrade reaction');
|
| +
|
| + promise_test(function () {
|
| + var unresolvedElement = document.createElement('unresolved-element');
|
| + return getDocument().then(function (doc) {
|
| + var docWindow = doc.defaultView;
|
| + class UnresolvedElement extends docWindow.HTMLElement { };
|
| + assert_false(unresolvedElement instanceof UnresolvedElement);
|
| + docWindow.customElements.define('unresolved-element', UnresolvedElement);
|
| + doc.documentElement.appendChild(unresolvedElement);
|
| + assert_true(unresolvedElement instanceof UnresolvedElement);
|
| + });
|
| + }, 'Adopting and inserting an unresolved custom element into ' + documentName + ' must enqueue a custom element upgrade reaction');
|
| +
|
| +});
|
| +
|
| +</script>
|
| +</body>
|
| +</html>
|
|
|