Index: sky/tests/resources/event-sender.dart |
diff --git a/sky/tests/resources/event-sender.dart b/sky/tests/resources/event-sender.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..231aecddcdf873ab270bec091ea44bb0ec1f82c6 |
--- /dev/null |
+++ b/sky/tests/resources/event-sender.dart |
@@ -0,0 +1,109 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+import "/sky/framework/shell.dart" as shell; |
+import "dart:async"; |
+import "dart:sky"; |
+import "dart:sky.internals" as internals; |
+import "package:mojo/services/input_events/public/interfaces/input_event_constants.mojom.dart" as constants; |
+import "package:mojo/services/input_events/public/interfaces/input_events.mojom.dart" as events; |
+import "package:mojo/services/input_events/public/interfaces/input_key_codes.mojom.dart" as codes; |
+import "package:sky/services/testing/test_harness.mojom.dart" as harness; |
+ |
+bool _isDone = false; |
+int _keyPressesRemaining = 0; |
+ |
+final Set<int> _chars = new Set.from([ |
+ codes.KeyboardCode_A, |
+ codes.KeyboardCode_B, |
+ codes.KeyboardCode_C, |
+ codes.KeyboardCode_D, |
+ codes.KeyboardCode_E, |
+ codes.KeyboardCode_F, |
+ codes.KeyboardCode_G, |
+ codes.KeyboardCode_H, |
+ codes.KeyboardCode_I, |
+ codes.KeyboardCode_J, |
+ codes.KeyboardCode_K, |
+ codes.KeyboardCode_L, |
+ codes.KeyboardCode_M, |
+ codes.KeyboardCode_N, |
+ codes.KeyboardCode_O, |
+ codes.KeyboardCode_P, |
+ codes.KeyboardCode_Q, |
+ codes.KeyboardCode_R, |
+ codes.KeyboardCode_S, |
+ codes.KeyboardCode_T, |
+ codes.KeyboardCode_U, |
+ codes.KeyboardCode_V, |
+ codes.KeyboardCode_W, |
+ codes.KeyboardCode_X, |
+ codes.KeyboardCode_Y, |
+ codes.KeyboardCode_Z, |
+]); |
+ |
+void _checkComplete() { |
+ if (!_isDone) |
+ return; |
+ if (_keyPressesRemaining != 0) |
+ return; |
+ new Timer(Duration.ZERO, () { |
+ internals.notifyTestComplete(internals.contentAsText()); |
+ }); |
+} |
+ |
+void handleKeyPress_(Event event) { |
+ --_keyPressesRemaining; |
+ _checkComplete(); |
+} |
+ |
+harness.TestHarnessProxy _init() { |
+ document.addEventListener('keypress', handleKeyPress_); |
+ |
+ var harnessProxy = new harness.TestHarnessProxy.unbound(); |
+ shell.connectToService("mojo:sky_tester", harnessProxy); |
+ return harnessProxy; |
+} |
+ |
+final harness.TestHarnessProxy _harness = _init(); |
+ |
+// |0| should be EventFlags_NONE once its a compile-time constant. |
+void keyDown(int keyCode, [int eventFlags = 0]) { |
+ if (!_chars.contains(keyCode)) { |
+ _harness.dispatchInputEvent( |
+ new events.Event() |
+ ..action = constants.EventType_KEY_PRESSED |
+ ..flags = eventFlags |
+ ..keyData = (new events.KeyData() |
+ ..keyCode = keyCode |
+ ..windowsKeyCode = keyCode)); |
+ |
+ _harness.dispatchInputEvent( |
+ new events.Event() |
+ ..action = constants.EventType_KEY_PRESSED |
+ ..flags = eventFlags |
+ ..keyData = (new events.KeyData() |
+ ..isChar = true |
+ ..windowsKeyCode = keyCode)); |
+ } else { |
+ ++_keyPressesRemaining; |
+ _harness.dispatchInputEvent( |
+ new events.Event() |
+ ..action = constants.EventType_KEY_PRESSED |
+ ..flags = eventFlags |
+ ..keyData = (new events.KeyData() |
+ ..keyCode = keyCode |
+ ..isChar = true |
+ ..character = keyCode |
+ ..text = keyCode |
+ ..unmodifiedText = keyCode)); |
+ } |
+} |
+ |
+void done() { |
+ if (_isDone) |
+ throw "Already done."; |
+ _isDone = true; |
+ _checkComplete(); |
+} |