Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE HTML>
<html>
<!--
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 1295719</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<input id="test_number" type="number" value=50>
<script type="text/javascript">
/** Test for Bug 1295719 **/
SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(runTests);
function runTests() {
let number = window.document.getElementById("test_number");
let waiting_event_sequence = ["keydown", "keypress", "input"];
let change_event_of_number = 0;
let keyup_event_of_number = 0;
let waiting_event_idx = 0;
waiting_event_sequence.forEach((eventType) => {
number.addEventListener(eventType, (event) => {
let waiting_event = waiting_event_sequence[waiting_event_idx];
is(eventType, waiting_event, "Waiting " + waiting_event + " get " + eventType);
// Input element will fire input event when handling keypress with
// keycode=numbers. When user press and hold the keyboard, we expect that
// input element repeatedly fires "keydown", "keypress", and "input" until
// user release the keyboard. Input element will fire change event when
// it's blurred. Using waiting_event_sequence as a circular buffer and
// reset waiting_event_idx when it point to the end of buffer.
waiting_event_idx = waiting_event_idx == waiting_event_sequence.length - 1 ? 0 : waiting_event_idx + 1;
});
});
number.addEventListener("change", (event) => {
is(keyup_event_of_number, 1, "change event should be fired after blurred");
++change_event_of_number;
});
number.addEventListener("keyup", (event) => {
is(keyup_event_of_number, 0, "keyup event should be fired once");
is(change_event_of_number, 0, "keyup event should be fired before change event");
++keyup_event_of_number;
});
number.focus();
synthesizeKey("5", {type: "keydown"});
synthesizeKey("5", {type: "keydown"});
synthesizeKey("5", {type: "keyup"});
is(change_event_of_number, 0, "change event shouldn't be fired when input element is focused");
number.blur();
is(change_event_of_number, 1, "change event should be fired when input element is blurred");
SimpleTest.finish();
}
</script>
</body>
</html>