"use strict";

test(() => {
  const target = new EventTarget();
  const event = new Event("foo", { bubbles: true, cancelable: false });
  let callCount = 0;

  function listener(e) {
    assert_equals(e, event);
    ++callCount;
  }

  target.addEventListener("foo", listener);

  target.dispatchEvent(event);
  assert_equals(callCount, 1);

  target.dispatchEvent(event);
  assert_equals(callCount, 2);

  target.removeEventListener("foo", listener);
  target.dispatchEvent(event);
  assert_equals(callCount, 2);
}, "A constructed EventTarget can be used as expected");

test(() => {
  class NicerEventTarget extends EventTarget {
    on(...args) {
      this.addEventListener(...args);
    }

    off(...args) {
      this.removeEventListener(...args);
    }

    dispatch(type, detail) {
      this.dispatchEvent(new CustomEvent(type, { detail }));
    }
  }

  const target = new NicerEventTarget();
  const event = new Event("foo", { bubbles: true, cancelable: false });
  const detail = "some data";
  let callCount = 0;

  function listener(e) {
    assert_equals(e.detail, detail);
    ++callCount;
  }

  target.on("foo", listener);

  target.dispatch("foo", detail);
  assert_equals(callCount, 1);

  target.dispatch("foo", detail);
  assert_equals(callCount, 2);

  target.off("foo", listener);
  target.dispatch("foo", detail);
  assert_equals(callCount, 2);
}, "EventTarget can be subclassed");

