| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <meta name="flags" content="dom"> |
| <title>CSS Test: CSSOM View MediaQueryList extends EventTarget</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"; |
| |
| promise_test(async t => { |
| const mql = await createMQL(t); |
| |
| let _event; |
| mql.onchange = event => { |
| _event = event; |
| }; |
| |
| triggerMQLEvent(mql); |
| await waitForChangesReported(); |
| assert_equals(_event.media, mql.media); |
| assert_equals(_event.matches, mql.matches); |
| }, "onchange adds listener"); |
| |
| promise_test(async t => { |
| const mql = await createMQL(t); |
| |
| let calls = 0; |
| mql.onchange = () => { |
| calls++; |
| }; |
| |
| triggerMQLEvent(mql); |
| await waitForChangesReported(); |
| assert_equals(calls, 1); |
| |
| mql.onchange = null; |
| |
| triggerMQLEvent(mql); |
| await waitForChangesReported(); |
| assert_equals(calls, 1); |
| }, "onchange removes listener"); |
| |
| promise_test(async t => { |
| const mql = await createMQL(t); |
| |
| let calls = 0; |
| mql.addEventListener("change", { |
| handleEvent() { |
| calls++; |
| }, |
| }); |
| |
| triggerMQLEvent(mql); |
| await waitForChangesReported(); |
| assert_equals(calls, 1); |
| }, 'listeners for "change" type are called'); |
| |
| promise_test(async t => { |
| const mql = await createMQL(t); |
| mql.addEventListener("matches", t.unreached_func("should not be called")); |
| |
| triggerMQLEvent(mql); |
| await waitForChangesReported(); |
| }, 'listeners with different type are not called'); |
| |
| promise_test(async t => { |
| const mql = await createMQL(t); |
| |
| let calls = 0; |
| mql.addEventListener("change", { |
| handleEvent() { |
| calls++; |
| }, |
| }, {once: true}); |
| |
| triggerMQLEvent(mql); |
| await waitForChangesReported(); |
| assert_equals(calls, 1); |
| |
| triggerMQLEvent(mql); |
| await waitForChangesReported(); |
| assert_equals(calls, 1); |
| }, 'addEventListener "once" option is respected'); |
| |
| promise_test(async t => { |
| const mql = await createMQL(t); |
| const listener = t.unreached_func("should not be called"); |
| |
| mql.addEventListener("change", listener); |
| mql.removeEventListener("change", listener); |
| |
| triggerMQLEvent(mql); |
| await waitForChangesReported(); |
| }, "removeEventListener removes listener"); |
| |
| test(() => { |
| const mql = window.matchMedia("all"); |
| |
| let receivedEvent; |
| mql.addEventListener("custom", event => { |
| receivedEvent = event; |
| event.preventDefault(); |
| }, true); |
| |
| const dispatchedEvent = new CustomEvent("custom", { |
| cancelable: true, |
| detail: {}, |
| }); |
| |
| const defaultAction = mql.dispatchEvent(dispatchedEvent); |
| |
| assert_equals(receivedEvent, dispatchedEvent); |
| assert_false(defaultAction); |
| }, "dispatchEvent works as expected"); |
| </script> |