| <!DOCTYPE html> |
| <title>Shadow DOM: Event composed</title> |
| <meta name="author" title="Hayato Ito" href="mailto:hayato@google.com"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/shadow-dom.js"></script> |
| <div id=host> |
| <template id=shadowRoot data-mode=open> |
| <div id=target></div> |
| </template> |
| </div> |
| <script> |
| test(() => { |
| const e = new Event('test'); |
| assert_equals(e.composed, false); |
| }, 'A new events composed value should be set to false by default.'); |
| |
| test(() => { |
| const e = new Event('test', { composed: true }); |
| assert_equals(e.composed, true); |
| }, 'Users should be able to set a composed value.'); |
| |
| function assertScoped(event) { |
| let nodes = createTestTree(host); |
| let log = dispatchEventWithLog(nodes, nodes.target, event); |
| let expectedPath = ['target', 'shadowRoot']; |
| assert_event_path_equals(log, |
| [['target', 'target', null, expectedPath], |
| ['shadowRoot', 'target', null, expectedPath]]); |
| } |
| |
| function assertComposed(event) { |
| let nodes = createTestTree(host); |
| let log = dispatchEventWithLog(nodes, nodes.target, event); |
| let expectedPath = ['target', 'shadowRoot', 'host']; |
| assert_event_path_equals(log, |
| [['target', 'target', null, expectedPath], |
| ['shadowRoot', 'target', null, expectedPath], |
| ['host', 'host', null, expectedPath]]); |
| } |
| |
| test(() => { |
| assertScoped(new Event('test', { bubbles: true })); |
| }, 'An event should be scoped by default'); |
| |
| test(() => { |
| assertComposed(new Event('test', { bubbles: true, composed: true })); |
| }, 'An event should not be scoped if composed is specified'); |
| |
| test(() => { |
| assertScoped(new MouseEvent('click', { bubbles: true })); |
| }, 'A synthetic MouseEvent should be scoped by default'); |
| |
| test(() => { |
| assertComposed(new MouseEvent('click', { bubbles: true, composed: true })); |
| }, 'A synthetic MouseEvent with composed=true should not be scoped'); |
| |
| test(() => { |
| assertScoped(new FocusEvent('focus', { bubbles: true })); |
| }, 'A synthetic FocusEvent should be scoped by default'); |
| |
| test(() => { |
| assertComposed(new FocusEvent('focus', { bubbles: true, composed: true })); |
| }, 'A synthetic FocusEvent with composed=true should not be scoped'); |
| |
| function assertUAComposed(eventType, callback) { |
| let nodes = createTestTree(host); |
| let log = dispatchUAEventWithLog(nodes, nodes.target, eventType, callback); |
| let expectedPath = ['target', 'shadowRoot', 'host']; |
| assert_event_path_equals(log, |
| [['target', 'target', null, expectedPath], |
| ['shadowRoot', 'target', null, expectedPath], |
| ['host', 'host', null, expectedPath]]); |
| } |
| |
| test(() => { |
| assertUAComposed('click', (target) => { target.click(); }); |
| }, 'A UA click event should not be scoped'); |
| |
| // TODO(hayato): Test other UIEvents. |
| </script> |