| <import src="/mojo/services/input_events/public/interfaces/input_event_constants.mojom.sky" as="constants" /> |
| <import src="/mojo/services/input_events/public/interfaces/input_events.mojom.sky" as="events" /> |
| <import src="/mojo/services/input_events/public/interfaces/input_key_codes.mojom.sky" as="codes" /> |
| <import src="/sky/framework/shell.sky" as="shell" /> |
| <import src="/sky/services/testing/test_harness.mojom.sky" as="harness" /> |
| <script> |
| var harness = shell.connectToService("mojo:sky_tester", harness.TestHarness); |
| |
| var isDone = false; |
| var keyPressesRemaining = 0; |
| |
| function keyDown(key, flag) { |
| var eventFlags = constants.EventFlags.NONE; |
| // TODO(abarth): Support more than one flag. |
| if (constants.EventFlags.hasOwnProperty(flag)) |
| eventFlags = constants.EventFlags[flag]; |
| |
| if (key.length != 1 && codes.KeyboardCode.hasOwnProperty(key)) { |
| var keyCode = codes.KeyboardCode[key]; |
| |
| harness.dispatchInputEvent(new events.Event({ |
| action: constants.EventType.KEY_PRESSED, |
| flags: eventFlags, |
| key_data: new events.KeyData({ |
| key_code: keyCode, |
| windows_key_code: keyCode, |
| })})); |
| |
| harness.dispatchInputEvent(new events.Event({ |
| action: constants.EventType.KEY_PRESSED, |
| flags: eventFlags, |
| key_data: new events.KeyData({ |
| is_char: true, |
| windows_key_code: keyCode, |
| })})); |
| } else { |
| ++keyPressesRemaining; |
| var keyCode = key.charCodeAt(0); |
| harness.dispatchInputEvent(new events.Event({ |
| action: constants.EventType.KEY_PRESSED, |
| flags: eventFlags, |
| key_data: new events.KeyData({ |
| key_code: keyCode, |
| is_char: true, |
| character: keyCode, |
| text: keyCode, |
| unmodified_text: keyCode, |
| })})); |
| } |
| } |
| |
| function done() { |
| if (isDone) |
| throw "Already done."; |
| isDone = true; |
| checkComplete(); |
| } |
| |
| function checkComplete() { |
| if (!isDone) |
| return; |
| if (keyPressesRemaining != 0) |
| return; |
| setTimeout(function() { |
| internals.notifyTestComplete(internals.contentAsText()); |
| }); |
| } |
| |
| document.addEventListener('keypress', function() { |
| --keyPressesRemaining; |
| checkComplete(); |
| }); |
| |
| module.exports = { |
| keyDown: keyDown, |
| done: done, |
| }; |
| </script> |
| </sky> |