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

Unified Diff: third_party/WebKit/LayoutTests/shadow-dom/event-composed-path.html

Issue 2051373002: Rewrite and organize tests in LayoutTests/shadow-dom (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@clean-test2-3
Patch Set: rebased Created 4 years, 6 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/shadow-dom/event-composed-path.html
diff --git a/third_party/WebKit/LayoutTests/shadow-dom/event-composed-path.html b/third_party/WebKit/LayoutTests/shadow-dom/event-composed-path.html
new file mode 100644
index 0000000000000000000000000000000000000000..d32eba31746e511d4f30d1c46a60b4535ddeecb2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/shadow-dom/event-composed-path.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="resources/shadow-dom.js"></script>
+
+<div id="test1">
+ <template id="shadowroot" data-mode="open">
+ <slot id="slot" name="slot"></slot>
+ </template>
+ <input id="input" slot="slot">
+</div>
+
+<div id="test2">
+ <template id="shadowroot" data-mode="open">
+ <slot id="slot" name="slot"></slot>
+ </template>
+ <div id="input-parent" slot="slot">
+ <input id="input">
+ </div>
+</div>
+
+<div id="host_open">
+ <template id="open_shadow" data-mode="open">
+ <div id="inner_open">
+ <template id="open_shadow_in_open_shadow" data-mode="open">
+ <spen id="target_open" tabindex="0">open</spen>
+ </template>
+ </div>
+ </template>
+</div>
+
+<div id="host_closed">
+ <template id="closed_shadow" data-mode="closed">
+ <div id="inner_closed">
+ <template id="open_shadow_in_closed_shadow" data-mode="open">
+ <spen id="target_closed" tabindex="0">closed</spen>
+ </template>
+ </div>
+ </template>
+</div>
+
+<script>
+function makeExpectedEventPathLog(path) {
+ let expectedLog = [];
+ for (let i of path) {
+ expectedLog.push([i, null, path]);
+ }
+ return expectedLog;
+}
+
+function debugLog(log) {
+ for (let i = 0; i < log.length; i++) {
+ console.log(i + ': ' + log[i][0] + ' rel: ' + log[i][1] + ' path: ' + log[i][2]);
+ }
+}
+
+function debugN(n) {
+ for (let k in n) {
+ console.log(k + ' -> ' + n[k] + ' shadowRoot? ' + n[k].shadowRoot);
+ }
+}
+
+test(() => {
+ const event = new Event('my-event');
+ let dispatched = false;
+ let target = document.createElement('div');
+ target.addEventListener('my-event', (e) => {
+ assert_array_equals(e.composedPath(), [target]);
+ dispatched = true;
+ });
+ assert_array_equals(event.composedPath(), []);
+ target.dispatchEvent(event);
+ assert_true(dispatched);
+ assert_array_equals(event.composedPath(), []);
+}, "Event.composedPath() should return an empty array before/after dispatching an event");
+
+test(() => {
+ let n = createTestTree(test1);
+ removeWhiteSpaceOnlyTextNodes(n.test1);
+ let log = dispatchEventWithLog(n, n.input, new Event('my-event', { bubbles: true, composed: true }));
+ assert_event_path_equals(log, makeExpectedEventPathLog(['input', 'slot', 'shadowroot', 'test1']));
+}, 'Triggered in a slotted element, eventPath should go through shadow tree.');
+
+test(() => {
+ let n = createTestTree(test2);
+ removeWhiteSpaceOnlyTextNodes(n.test2);
+ let log = dispatchEventWithLog(n, n.input, new Event('my-event', { bubbles: true, composed: true }));
+ assert_event_path_equals(log, makeExpectedEventPathLog(['input', 'input-parent', 'slot', 'shadowroot', 'test2']));
+}, 'EventPath works fine when event happens to a descendant of a slotted element.');
+
+test(() => {
+ let n = createTestTree(host_open);
+ removeWhiteSpaceOnlyTextNodes(n.host_open);
+ // debugN(n);
+ let log = dispatchEventWithLog(n, n.target_open, new Event('my-event', { bubbles: true, composed: true }));
+ // debugLog(log);
+ let path = ['target_open', 'open_shadow_in_open_shadow', 'inner_open', 'open_shadow', 'host_open']
+ assert_event_path_equals(log, makeExpectedEventPathLog(path));
+}, 'Open in Open');
+
+test(() => {
+ let n = createTestTree(host_closed);
+ removeWhiteSpaceOnlyTextNodes(n.host_closed);
+ // debugN(n);
+ let log = dispatchEventWithLog(n, n.target_closed, new Event('my-event', { bubbles: true, composed: true }));
+ // debugLog(log);
+ let path = ['target_closed', 'open_shadow_in_closed_shadow', 'inner_closed', 'closed_shadow', 'host_closed']
+ assert_event_path_equals(log,
+ [['target_closed', null, path],
+ ['open_shadow_in_closed_shadow', null, path],
+ ['inner_closed', null, path],
+ ['closed_shadow', null, path],
+ ['host_closed', null, ['host_closed']]]);
+}, 'Open in Closed');
+
+
+
+</script>

Powered by Google App Engine
This is Rietveld 408576698