<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: interactionId-tap.</title>
<button id='testButtonId'>Tap</button>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-actions.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/event-timing-test-utils.js></script>

<script>
  let observedEntries = [];
  const map = new Map();
  const events = ['pointerdown', 'pointerup'];

  promise_test(async t => {
    assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.');

    const callback = (entryList) => { observedEntries = observedEntries.concat(entryList.getEntries().filter(filterAndAddToMap(events, map))); };
    const readyToResolve = () => { return observedEntries.length >= 2; };
    const observerPromise = createPerformanceObserverPromise(['event'], callback, readyToResolve);

    await interactAndObserve('tap', document.getElementById('testButtonId'), observerPromise);
    events.forEach(e => assert_greater_than(map.get(e), 0, 'Should have a non-trivial interactionId for ' + e + ' event'));
    assert_equals(map.get('pointerdown'), map.get('pointerup'), 'The pointerdown and the pointerup should have the same interactionId');
  }, "Event Timing: compare event timing interactionId for tap.");

</script>
</html>
