test_bug1295719_event_sequence_for_number_keys.html (2605B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=1295719 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for Bug 1295719</title> 9 <script src="/tests/SimpleTest/SimpleTest.js"></script> 10 <script src="/tests/SimpleTest/EventUtils.js"></script> 11 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 12 </head> 13 <body> 14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1295719">Mozilla Bug 1295719</a> 15 <p id="display"></p> 16 <div id="content" style="display: none"> 17 </div> 18 <input id="test_number" type="number" value=50> 19 <script type="text/javascript"> 20 21 /** Test for Bug 1295719 */ 22 SimpleTest.waitForExplicitFinish(); 23 SimpleTest.waitForFocus(runTests); 24 25 function runTests() { 26 let number = window.document.getElementById("test_number"); 27 let waiting_event_sequence = ["keydown", "keypress", "input"]; 28 let change_event_of_number = 0; 29 let keyup_event_of_number = 0; 30 let waiting_event_idx = 0; 31 waiting_event_sequence.forEach((eventType) => { 32 number.addEventListener(eventType, (event) => { 33 let waiting_event = waiting_event_sequence[waiting_event_idx]; 34 is(eventType, waiting_event, "Waiting " + waiting_event + " get " + eventType); 35 // Input element will fire input event when handling keypress with 36 // keycode=numbers. When user press and hold the keyboard, we expect that 37 // input element repeatedly fires "keydown", "keypress", and "input" until 38 // user release the keyboard. Input element will fire change event when 39 // it's blurred. Using waiting_event_sequence as a circular buffer and 40 // reset waiting_event_idx when it point to the end of buffer. 41 waiting_event_idx = waiting_event_idx == waiting_event_sequence.length - 1 ? 0 : waiting_event_idx + 1; 42 }); 43 }); 44 number.addEventListener("change", (event) => { 45 is(keyup_event_of_number, 1, "change event should be fired after blurred"); 46 ++change_event_of_number; 47 }); 48 number.addEventListener("keyup", (event) => { 49 is(keyup_event_of_number, 0, "keyup event should be fired once"); 50 is(change_event_of_number, 0, "keyup event should be fired before change event"); 51 ++keyup_event_of_number; 52 }); 53 number.focus(); 54 synthesizeKey("5", {type: "keydown"}); 55 synthesizeKey("5", {type: "keydown"}); 56 synthesizeKey("5", {type: "keyup"}); 57 is(change_event_of_number, 0, "change event shouldn't be fired when input element is focused"); 58 number.blur(); 59 is(change_event_of_number, 1, "change event should be fired when input element is blurred"); 60 SimpleTest.finish(); 61 } 62 63 </script> 64 </body> 65 </html>