blob: fee71f7c89f419236951b86d47e0e79cf841f095 [file] [log] [blame]
<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>