contextmenu_event.html (1800B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Contextmenu event</title> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="/resources/testdriver.js"></script> 9 <script src="/resources/testdriver-actions.js"></script> 10 <script src="/resources/testdriver-vendor.js"></script> 11 </head> 12 <body> 13 <h1>Test contextmenu event</h1> 14 <p>Tests that right-clicking fires a contextmenu event.</p> 15 <ol id="instructions"> 16 <li>Right-click here. 17 </ol> 18 <script> 19 let event_log = []; 20 21 function cancel_and_log_event(ename) { 22 return new Promise(resolve => { 23 document.body.addEventListener(ename, e => { 24 e.preventDefault(); 25 event_log.push(e.type); 26 resolve(e); 27 }, {once: true}); 28 }); 29 } 30 31 promise_test(async () => { 32 const event_promises = ["mousedown", "mouseup", "contextmenu"] 33 .map(ename => cancel_and_log_event(ename)); 34 35 let target = document.getElementById("instructions"); 36 let actions = new test_driver.Actions(); 37 actions.pointerMove(0, 0, {origin: target}) 38 .pointerDown({button: actions.ButtonType.RIGHT}) 39 .pointerUp({button: actions.ButtonType.RIGHT}) 40 .send(); 41 42 await Promise.all(event_promises); 43 44 assert_equals(event_log.length, 3, "Three events are received"); 45 assert_true(event_log.includes("contextmenu"), "contextmenu event is received"); 46 assert_true(event_log.includes("mouseup"), "mouseup event is received"); 47 assert_equals(event_log[0], "mousedown", "mousedown event is the first event received"); 48 }, "Test contextmenu dispatched after mousedown"); 49 </script> 50 </body> 51 </html>