#!mojo mojo:sky_viewer
<sky>
<script>
import "../resources/third_party/unittest/unittest.dart";
import "../resources/unit.dart";
import "/sky/framework/embedder.dart";
import "dart:sky";
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:sky/services/testing/test_harness.mojom.dart" as harness;

void main() {
  initUnit();

  test('should be able to send events', () {
    document.addEventListener('keypress', expectAsync((event) {
      expect(event.type, equals('keypress'));
      expect(event.key, equals(0));
      expect(event.charCode, equals(0x41));
    }));

    var testHarness = new harness.TestHarnessProxy.unbound();
    embedder.connectToService("mojo:sky_tester", testHarness);
    var keyData = new events.KeyData();
    keyData.windowsKeyCode = 0x41;
    keyData.text = 0x41;
    keyData.unmodifiedText = 0x41;
    keyData.isChar = true;
    keyData.character = 0x41;
    var event = new events.Event();
    event.action = constants.EventType_KEY_PRESSED;
    event.keyData = keyData;
    testHarness.ptr.dispatchInputEvent(event);
  });
}
</script>
</sky>
