<!DOCTYPE html>
<meta charset="utf-8">
<meta name="flags" content="dom">
<title>CSS Test: CSSOM View MediaQueryList extends EventTarget (interop)</title>
<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/matchMedia.js"></script>
<div id="log"></div>
<script>
"use strict";

test(() => {
    const mql = window.matchMedia("all");

    let receivedEvent;
    mql.addListener(event => {
        receivedEvent = event;
    });

    const dispatchedEvent = new Event("change");
    mql.dispatchEvent(dispatchedEvent);

    assert_equals(receivedEvent, dispatchedEvent);
}, "dispatchEvent triggers listener added with addListener");

promise_test(async t => {
    const mql = await createMQL(t);

    let calls = 0;
    const listener = {
        handleEvent() {
            calls++;
        },
    };

    mql.addListener(listener);
    mql.addEventListener("change", listener);

    triggerMQLEvent(mql);
    await waitForChangesReported();
    assert_equals(calls, 1, "triggerMQLEvent");

    mql.dispatchEvent(new Event("change"));
    assert_equals(calls, 2, "dispatchEvent");
}, "listener added with addListener and addEventListener is called once");

promise_test(async t => {
    const mql = await createMQL(t);

    let calls = 0;
    const listener = () => {
        calls++;
    };

    mql.addListener(listener);
    mql.addEventListener("change", listener, true);

    triggerMQLEvent(mql);
    await waitForChangesReported();
    assert_equals(calls, 2, "triggerMQLEvent");

    mql.dispatchEvent(new Event("change"));
    assert_equals(calls, 4, "dispatchEvent");
}, "listener added with addListener and addEventListener (capture) is called twice");

promise_test(async t => {
    const mql = await createMQL(t);

    let calls = 0;
    const listener = {
        handleEvent() {
            calls++;
        },
    };

    mql.addListener(listener);
    mql.removeEventListener("change", listener);

    triggerMQLEvent(mql);
    await waitForChangesReported();
    assert_equals(calls, 0, "triggerMQLEvent");

    mql.dispatchEvent(new Event("change"));
    assert_equals(calls, 0, "dispatchEvent");
}, "removeEventListener removes listener added with addListener");

promise_test(async t => {
    const mql = await createMQL(t);

    let calls = 0;
    const listener = () => {
        calls++;
    };

    mql.addListener(listener);
    mql.removeEventListener("change", listener, true);

    triggerMQLEvent(mql);
    await waitForChangesReported();
    assert_equals(calls, 1, "triggerMQLEvent");

    mql.dispatchEvent(new Event("change"));
    assert_equals(calls, 2, "dispatchEvent");
}, "removeEventListener (capture) doesn't remove listener added with addListener");

promise_test(async t => {
    const mql = await createMQL(t);

    let calls = 0;
    const listener = {
        handleEvent() {
            calls++;
        },
    };

    mql.addEventListener("change", listener);
    mql.removeListener(listener);

    triggerMQLEvent(mql);
    await waitForChangesReported();
    assert_equals(calls, 0, "triggerMQLEvent");

    mql.dispatchEvent(new Event("change"));
    assert_equals(calls, 0, "dispatchEvent");
}, "removeListener removes listener added with addEventListener");

promise_test(async t => {
    const mql = await createMQL(t);

    let calls = 0;
    const listener = () => {
        calls++;
    };

    mql.addEventListener("change", listener, true);
    mql.removeListener(listener);

    triggerMQLEvent(mql);
    await waitForChangesReported();
    assert_equals(calls, 1, "triggerMQLEvent");

    mql.dispatchEvent(new Event("change"));
    assert_equals(calls, 2, "dispatchEvent");
}, "removeListener doesn't remove listener added with addEventListener (capture)");

// See:
//   * https://github.com/whatwg/dom/issues/746
//   * https://bugzilla.mozilla.org/show_bug.cgi?id=1492446
//   * https://bugs.chromium.org/p/chromium/issues/detail?id=949432
promise_test(async t => {
    const mql = await createMQL(t);

    let calls = [];
    mql.addListener(() => {
        calls.push("addListener");
    });
    mql.addEventListener("change", {
        handleEvent() {
            calls.push("addEventListener");
        },
    }, true);

    triggerMQLEvent(mql);
    await waitForChangesReported();
    assert_array_equals(calls, ["addEventListener", "addListener"], "triggerMQLEvent");

    calls = [];
    mql.dispatchEvent(new Event("change"));
    assert_array_equals(calls, ["addEventListener", "addListener"], "dispatchEvent");
}, "capturing event listener fires before non-capturing listener at target");
</script>
