<!DOCTYPE html>
<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');
</script>
