| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../js/resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <p id="description"></p> |
| <p> |
| Please run this with DumpRenderTree. |
| </p> |
| Test following keys: |
| <ul> |
| <li>Digit keys</li> |
| <li>Left/Right - Move focus field inside element</li> |
| <li>Up/Down - Increment/decrement value of focus field</li> |
| <li>Tab - Move focus field</li> |
| <li>Backspace - Make value empty</li> |
| </ul> |
| <input id="before"> |
| <input id="input" type="time"> |
| <input id="another"> |
| <div id="console"></div> |
| <script> |
| description("Multiple fields UI of time input type with keyboard events"); |
| var input = document.getElementById("input"); |
| |
| function keyDown(key, modifiers) |
| { |
| if (!window.eventSender) |
| return; |
| eventSender.keyDown(key, modifiers); |
| } |
| |
| function beginTest(title, value) |
| { |
| debug("== " + title + " =="); |
| input.value = value; |
| input.blur(); |
| input.focus(); |
| } |
| |
| beginTest('Digit keys'); |
| keyDown('7'); |
| keyDown('5'); |
| keyDown('6'); |
| keyDown('A'); |
| shouldBeEqualToString('input.value', '07:56'); |
| |
| // FIXME: We should test type ahead time out. When event.leapForward() affects |
| // keyboard event time stamp, we can uncomment this fragment. |
| /* |
| beginTest('Digit keys with type ahead timeout'); |
| keyDown('1'); |
| leapForward(1100); |
| keyDown('1'); |
| keyDown('5'); |
| keyDown('6'); |
| keyDown('A'); |
| shouldBeEqualToString('input.value', '01:56'); |
| */ |
| |
| beginTest('Left/Right keys', '01:24'); |
| keyDown('rightArrow'); |
| keyDown('5'); |
| keyDown('leftArrow'); |
| keyDown('6'); |
| shouldBeEqualToString('input.value', '06:05'); |
| keyDown('leftArrow'); |
| keyDown('leftArrow'); |
| keyDown('leftArrow'); |
| shouldBeEqualToString('document.activeElement.id', 'input'); |
| |
| beginTest('Up/Down keys', '04:56'); |
| keyDown('upArrow'); |
| shouldBeEqualToString('input.value', '05:56'); |
| keyDown('downArrow'); |
| keyDown('downArrow'); |
| shouldBeEqualToString('input.value', '03:56'); |
| |
| beginTest('Up/Down keys on empty value', ''); |
| keyDown('upArrow'); |
| keyDown('upArrow'); |
| keyDown('rightArrow'); |
| keyDown('downArrow'); |
| keyDown('downArrow'); |
| keyDown('rightArrow'); |
| keyDown('downArrow'); |
| shouldBeEqualToString('input.value', '14:58'); |
| |
| beginTest('Tab key', '03:00'); |
| keyDown('\t'); |
| keyDown('5'); |
| shouldBeEqualToString('input.value', '03:05'); |
| keyDown('\t', ['shiftKey']); |
| keyDown('7'); |
| shouldBeEqualToString('input.value', '07:05'); |
| keyDown('\t'); |
| keyDown('\t'); |
| shouldBeEqualToString('document.activeElement.id', 'another'); |
| |
| beginTest('Shfit+Tab key', '03:00'); |
| another.focus(); |
| keyDown('\t', ['shiftKey']); |
| keyDown('P'); |
| shouldBeEqualToString('input.value', '15:00'); |
| keyDown('\t', ['shiftKey']); |
| keyDown('3'); |
| shouldBeEqualToString('input.value', '15:03'); |
| keyDown('\t', ['shiftKey']); |
| keyDown('\t', ['shiftKey']); |
| shouldBeEqualToString('document.activeElement.id', 'before'); |
| |
| beginTest('Up key on maximum value', '12:59:59.999'); |
| keyDown('upArrow'); |
| keyDown('\t'); |
| keyDown('upArrow'); |
| keyDown('\t'); |
| keyDown('upArrow'); |
| keyDown('\t'); |
| keyDown('upArrow'); |
| shouldBeEqualToString('input.value', '13:00'); |
| |
| beginTest('Down key on minimum value', '01:00'); |
| input.step = 0.001; |
| keyDown('downArrow'); |
| keyDown('\t'); |
| keyDown('downArrow'); |
| keyDown('\t'); |
| keyDown('downArrow'); |
| keyDown('\t'); |
| keyDown('downArrow'); |
| shouldBeEqualToString('input.value', '00:59:59.999'); |
| input.step = 60; |
| |
| beginTest('Backspace key', '12:34'); |
| keyDown("\b"); |
| shouldBeEqualToString('input.value', ''); |
| |
| beginTest('Delete key', '12:34'); |
| keyDown("delete"); |
| shouldBeEqualToString('input.value', ''); |
| |
| beginTest('Typeahead', '12:34:56'); |
| keyDown('rightArrow'); |
| keyDown('1'); |
| shouldBeEqualToString('input.value', '12:01:56'); |
| keyDown('rightArrow'); |
| keyDown('leftArrow'); |
| keyDown('2'); |
| shouldBeEqualToString('input.value', '12:02:56'); |
| |
| beginTest('RTL Left/Right keys', '04:56'); |
| input.setAttribute("dir", "rtl"); |
| keyDown('1'); |
| shouldBeEqualToString('input.value', '01:56'); |
| keyDown('leftArrow'); |
| keyDown('2'); |
| shouldBeEqualToString('input.value', '01:02'); |
| keyDown('rightArrow'); |
| keyDown('3'); |
| shouldBeEqualToString('input.value', '03:02'); |
| </script> |
| <script src="../../js/resources/js-test-post.js"></script> |
| </body> |
| </html> |