MediaQueryList-extends-EventTarget.html (2987B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <meta name="flags" content="dom"> 4 <title>CSS Test: CSSOM View MediaQueryList extends EventTarget</title> 5 <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface"> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="resources/matchMedia.js"></script> 9 <div id="log"></div> 10 <script> 11 "use strict"; 12 13 promise_test(async t => { 14 const mql = await createMQL(t); 15 16 let _event; 17 mql.onchange = event => { 18 _event = event; 19 }; 20 21 triggerMQLEvent(mql); 22 await waitForChangesReported(); 23 assert_equals(_event.media, mql.media); 24 assert_equals(_event.matches, mql.matches); 25 }, "onchange adds listener"); 26 27 promise_test(async t => { 28 const mql = await createMQL(t); 29 30 let calls = 0; 31 mql.onchange = () => { 32 calls++; 33 }; 34 35 triggerMQLEvent(mql); 36 await waitForChangesReported(); 37 assert_equals(calls, 1); 38 39 mql.onchange = null; 40 41 triggerMQLEvent(mql); 42 await waitForChangesReported(); 43 assert_equals(calls, 1); 44 }, "onchange removes listener"); 45 46 promise_test(async t => { 47 const mql = await createMQL(t); 48 49 let calls = 0; 50 mql.addEventListener("change", { 51 handleEvent() { 52 calls++; 53 }, 54 }); 55 56 triggerMQLEvent(mql); 57 await waitForChangesReported(); 58 assert_equals(calls, 1); 59 }, 'listeners for "change" type are called'); 60 61 promise_test(async t => { 62 const mql = await createMQL(t); 63 mql.addEventListener("matches", t.unreached_func("should not be called")); 64 65 triggerMQLEvent(mql); 66 await waitForChangesReported(); 67 }, 'listeners with different type are not called'); 68 69 promise_test(async t => { 70 const mql = await createMQL(t); 71 72 let calls = 0; 73 mql.addEventListener("change", { 74 handleEvent() { 75 calls++; 76 }, 77 }, {once: true}); 78 79 triggerMQLEvent(mql); 80 await waitForChangesReported(); 81 assert_equals(calls, 1); 82 83 triggerMQLEvent(mql); 84 await waitForChangesReported(); 85 assert_equals(calls, 1); 86 }, 'addEventListener "once" option is respected'); 87 88 promise_test(async t => { 89 const mql = await createMQL(t); 90 const listener = t.unreached_func("should not be called"); 91 92 mql.addEventListener("change", listener); 93 mql.removeEventListener("change", listener); 94 95 triggerMQLEvent(mql); 96 await waitForChangesReported(); 97 }, "removeEventListener removes listener"); 98 99 test(() => { 100 const mql = window.matchMedia("all"); 101 102 let receivedEvent; 103 mql.addEventListener("custom", event => { 104 receivedEvent = event; 105 event.preventDefault(); 106 }, true); 107 108 const dispatchedEvent = new CustomEvent("custom", { 109 cancelable: true, 110 detail: {}, 111 }); 112 113 const defaultAction = mql.dispatchEvent(dispatchedEvent); 114 115 assert_equals(receivedEvent, dispatchedEvent); 116 assert_false(defaultAction); 117 }, "dispatchEvent works as expected"); 118 </script>