| Index: third_party/WebKit/LayoutTests/custom-elements/spec/callback.html
|
| diff --git a/third_party/WebKit/LayoutTests/custom-elements/spec/callback.html b/third_party/WebKit/LayoutTests/custom-elements/spec/callback.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4c304f764cb5a4746cb86909c1ce415c43a0eed5
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/custom-elements/spec/callback.html
|
| @@ -0,0 +1,117 @@
|
| +<!DOCTYPE html>
|
| +<title>Custom Elements: Create an element when definition is non-null and synchronous flag not set</title>
|
| +<script src="../../resources/testharness.js"></script>
|
| +<script src="../../resources/testharnessreport.js"></script>
|
| +<script src="resources/custom-elements-helpers.js"></script>
|
| +<body>
|
| +<script>
|
| +'use strict';
|
| +
|
| +(() => {
|
| + // "Upgrade an element"
|
| + // https://html.spec.whatwg.org/multipage/scripting.html#upgrades
|
| +
|
| + // 1. For each attribute in element's attribute list, in order, enqueue a
|
| + // custom element callback reaction with element, callback name
|
| + // "attributeChangedCallback", and an argument list containing attribute's
|
| + // local name, null, attribute's value, and attribute's namespace.
|
| +
|
| + // 2. If element is currently in a shadow-including document, then enqueue a
|
| + // custom element callback reaction with element, callback name
|
| + // "connectedCallback", and an empty argument list.
|
| +
|
| + const constructor = 'constructor';
|
| + const connected = 'connected';
|
| + const disconnected = 'disconnected';
|
| + const attributeChanged = 'attributeChanged';
|
| +
|
| + function define_logger(w, observedAttributes) {
|
| + let logs = [];
|
| + w.customElements.define('a-a', class extends w.HTMLElement {
|
| + constructor() { super(); logs.push([constructor, this, arguments]); }
|
| + connectedCallback() { logs.push([connected, this, arguments]); }
|
| + disconnectedCallback() { logs.push([disconnected, this, arguments]); }
|
| + static get observedAttributes() { return observedAttributes; }
|
| + attributeChangedCallback() { logs.push([attributeChanged, this, arguments]); }
|
| + });
|
| + return logs;
|
| + }
|
| +
|
| + function assert_log_is_type(logs, i, type, element, argv) {
|
| + assert_equals(logs[i][0], type, `[${i}] should be ${type}`);
|
| + assert_equals(logs[i][1], element, `this in ${type} should be the element`);
|
| + if (argv) {
|
| + assert_array_equals(logs[i][2], argv, `${type} should have arguments ${argv}`);
|
| + } else {
|
| + assert_equals(logs[i][2].length, 0, `${type} should have no arguments`);
|
| + }
|
| + }
|
| +
|
| + test_with_window(w => {
|
| + let document = w.document;
|
| + let element = document.createElement('a-a');
|
| + document.body.appendChild(element);
|
| + let logs = define_logger(w);
|
| + assert_log_is_type(logs, 0, constructor, element);
|
| + assert_log_is_type(logs, 1, connected, element);
|
| + assert_equals(logs.length, 2);
|
| + }, 'upgrade should enqueue connectedCallback');
|
| +
|
| + test_with_window(w => {
|
| + let document = w.document;
|
| + let element = document.createElement('a-a');
|
| + element.setAttribute('x', '1');
|
| + element.setAttribute('y', '2');
|
| + element.setAttribute('z', '3');
|
| + document.body.appendChild(element);
|
| + let logs = define_logger(w, ['x', 'y']);
|
| + assert_log_is_type(logs, 0, constructor, element);
|
| + assert_log_is_type(logs, 1, attributeChanged, element, ['x', null, '1', '']);
|
| + assert_log_is_type(logs, 2, attributeChanged, element, ['y', null, '2', '']);
|
| + assert_log_is_type(logs, 3, connected, element);
|
| + assert_equals(logs.length, 4);
|
| + }, 'upgrade should enqueue attributeChangedCallback and connectedCallback');
|
| +
|
| + test_with_window(w => {
|
| + let document = w.document;
|
| + let element = document.createElement('a-a');
|
| + element.setAttribute('x', '1');
|
| + document.body.appendChild(element);
|
| + let logs = define_logger(w, ['x', 'y']);
|
| +
|
| + logs.length = 0;
|
| + element.setAttribute('z', '0');
|
| + element.setAttribute('y', '2');
|
| + element.setAttribute('x', '9');
|
| + assert_log_is_type(logs, 0, attributeChanged, element, ['y', null, '2', '']);
|
| + assert_log_is_type(logs, 1, attributeChanged, element, ['x', '1', '9', '']);
|
| + assert_equals(logs.length, 2);
|
| + }, 'setAttribute should enqueue attributeChangedCallback');
|
| +
|
| + test_with_window(w => {
|
| + let document = w.document;
|
| + let element = document.createElement('a-a');
|
| + element.setAttribute('x', '1');
|
| + document.body.appendChild(element);
|
| + let logs = define_logger(w, ['x']);
|
| +
|
| + logs.length = 0;
|
| + element.removeAttribute('x');
|
| + assert_log_is_type(logs, 0, attributeChanged, element, ['x', '1', null, '']);
|
| + assert_equals(logs.length, 1);
|
| + }, 'removeAttribute should enqueue attributeChangedCallback');
|
| +
|
| + test_with_window(w => {
|
| + let document = w.document;
|
| + let element = document.createElement('a-a');
|
| + document.body.appendChild(element);
|
| + let logs = define_logger(w);
|
| +
|
| + logs.length = 0;
|
| + element.remove();
|
| + assert_log_is_type(logs, 0, disconnected, element);
|
| + assert_equals(logs.length, 1);
|
| + }, 'remove should enqueue disconnectedCallback');
|
| +})();
|
| +</script>
|
| +</body>
|
|
|