Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1236)

Unified Diff: mojo/public/dart/system/tests/event_handler_test.dart

Issue 674383002: Initial work on Dart bindings for Mojo. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Merge. Work on templates. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/dart/system/tests/core_test.dart ('k') | mojo/public/dart/tests/bindings_generation_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/dart/system/tests/event_handler_test.dart
diff --git a/mojo/public/dart/system/tests/event_handler_test.dart b/mojo/public/dart/system/tests/event_handler_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..77d073944f39e86036596f62f76082b4c78ddf83
--- /dev/null
+++ b/mojo/public/dart/system/tests/event_handler_test.dart
@@ -0,0 +1,103 @@
+// Copyright 2014 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 'dart:async';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+import 'package:mojo/public/dart/utils/lib/expect.dart';
+import 'package:mojo/public/dart/system/lib/core.dart';
+import 'package:mojo/public/dart/system/lib/embedder.dart' as embedder;
+
+
+ByteData byteDataOfString(String s) {
+ return new ByteData.view((new Uint8List.fromList(s.codeUnits)).buffer);
+}
+
+
+String stringOfByteData(ByteData bytes) {
+ return new String.fromCharCodes(bytes.buffer.asUint8List().toList());
+}
+
+
+void rawMessagePingPongIsolate(MojoMessagePipeEndpoint endpoint) {
+ int pings = 0;
+ MojoHandle handle = new MojoHandle(endpoint.handle);
+ handle.listen((int mojo_handle_signal) {
+ if (MojoHandleSignals.isReadWrite(mojo_handle_signal)) {
+ throw new Exception("Unexpected signal");
+ } else if (MojoHandleSignals.isReadable(mojo_handle_signal)) {
+ // Query how many bytes are available.
+ List result = endpoint.query();
+ int size = result[1];
+
+ // Read the data.
+ ByteData bytes = new ByteData(size);
+ endpoint.read(bytes);
+
+ // Convert to string and output.
+ String msg = stringOfByteData(bytes);
+ Expect.equals("Ping", msg);
+ pings = 10;
+ handle.toggleWriteEvents();
+ } else if (MojoHandleSignals.isWritable(mojo_handle_signal)) {
+ endpoint.write(byteDataOfString("Pong"));
+ handle.toggleWriteEvents();
+ }
+ }, onDone: () {
+ handle.close();
+ Expect.equals(10, pings);
+ });
+}
+
+
+void rawMessagePingPongTest() {
+ var pipe = new MojoMessagePipe();
+
+ Isolate.spawn(rawMessagePingPongIsolate, pipe.endpoints[0]).then((isolate) {
+ MojoMessagePipeEndpoint endpoint = pipe.endpoints[1];
+ MojoHandle handle = new MojoHandle(endpoint.handle);
+ handle.toggleWriteEvents();
+ int count = 10;
+ int pongs = 0;
+ handle.timeout(const Duration(seconds: 1),
+ onTimeout: (es) {
+ es.close();
+ }).listen((int mojo_handle_signal) {
+ if (MojoHandleSignals.isReadWrite(mojo_handle_signal)) {
+ throw new Exception("Unexpected signal");
+ } else if (MojoHandleSignals.isReadable(mojo_handle_signal)) {
+ // Query how many bytes are available.
+ List result = endpoint.query();
+ int size = result[1];
+
+ // Read the data.
+ ByteData bytes = new ByteData(size);
+ endpoint.read(bytes);
+
+ // Convert to string and output.
+ String msg = stringOfByteData(bytes);
+ Expect.equals("Pong", msg);
+ pongs++;
+ handle.toggleWriteEvents();
+ count--;
+ } else if (MojoHandleSignals.isWritable(mojo_handle_signal)) {
+ if (count > 0) {
+ endpoint.write(byteDataOfString("Ping"));
+ }
+ handle.toggleWriteEvents();
+ }
+ }, onDone: () {
+ handle.close();
+ Expect.equals(10, pongs);
+ });
+ });
+}
+
+
+main() {
+ embedder.mojoEmbedderInit().then((status) {
+ rawMessagePingPongTest();
+ });
+}
« no previous file with comments | « mojo/public/dart/system/tests/core_test.dart ('k') | mojo/public/dart/tests/bindings_generation_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698