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

Unified Diff: third_party/WebKit/LayoutTests/imported/wpt/custom-elements/reaction-timing.html

Issue 2376103007: Import wpt@09907a9c4bcee14986431d53e4381384c7c69107 (Closed)
Patch Set: update platform expectations Created 4 years, 3 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/imported/wpt/custom-elements/reaction-timing.html
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/reaction-timing.html b/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/reaction-timing.html
new file mode 100644
index 0000000000000000000000000000000000000000..9e5bafbedfec42d28eb94c95ed84396941bc61ac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/custom-elements/reaction-timing.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Custom Elements: Custom element reactions must be invoked before returning to author scripts</title>
+<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
+<meta name="assert" content="Custom element reactions must be invoked before returning to author scripts">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/scripting.html#invoke-custom-element-reactions">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"></div>
+<script>
+
+class MyCustomElement extends HTMLElement {
+ attributeChangedCallback(...args) {
+ this.handler(...args);
+ }
+
+ handler() { }
+}
+MyCustomElement.observedAttributes = ['data-title', 'title'];
+customElements.define('my-custom-element', MyCustomElement);
+
+test(function () {
+ var instance = document.createElement('my-custom-element');
+ var anotherInstance = document.createElement('my-custom-element');
+
+ var callbackOrder = [];
+ instance.handler = function () {
+ callbackOrder.push([this, 'begin']);
+ anotherInstance.setAttribute('data-title', 'baz');
+ callbackOrder.push([this, 'end']);
+ }
+ anotherInstance.handler = function () {
+ callbackOrder.push([this, 'begin']);
+ callbackOrder.push([this, 'end']);
+ }
+
+ instance.setAttribute('title', 'foo');
+ assert_equals(callbackOrder.length, 4);
+
+ assert_array_equals(callbackOrder[0], [instance, 'begin']);
+ assert_array_equals(callbackOrder[1], [anotherInstance, 'begin']);
+ assert_array_equals(callbackOrder[2], [anotherInstance, 'end']);
+ assert_array_equals(callbackOrder[3], [instance, 'end']);
+
+}, 'setAttribute and removeAttribute must enqueue and invoke attributeChangedCallback');
+
+test(function () {
+ var shouldCloneAnotherInstance = false;
+ var anotherInstanceClone;
+ var log = [];
+
+ class SelfCloningElement extends HTMLElement {
+ constructor() {
+ super();
+ log.push([this, 'begin']);
+ if (shouldCloneAnotherInstance) {
+ shouldCloneAnotherInstance = false;
+ anotherInstanceClone = anotherInstance.cloneNode(false);
+ }
+ log.push([this, 'end']);
+ }
+ }
+ customElements.define('self-cloning-element', SelfCloningElement);
+
+ var instance = document.createElement('self-cloning-element');
+ var anotherInstance = document.createElement('self-cloning-element');
+ shouldCloneAnotherInstance = true;
+
+ assert_equals(log.length, 4);
+ var instanceClone = instance.cloneNode(false);
+
+ assert_equals(log.length, 8);
+ assert_array_equals(log[0], [instance, 'begin']);
+ assert_array_equals(log[1], [instance, 'end']);
+ assert_array_equals(log[2], [anotherInstance, 'begin']);
+ assert_array_equals(log[3], [anotherInstance, 'end']);
+ assert_array_equals(log[4], [instanceClone, 'begin']);
+ assert_array_equals(log[5], [anotherInstanceClone, 'begin']);
+ assert_array_equals(log[6], [anotherInstanceClone, 'end']);
+ assert_array_equals(log[7], [instanceClone, 'end']);
+}, 'Calling Node.prototype.cloneNode(false) must push a new element queue to the processing stack');
+
+</script>
+</body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698