| 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();
|
| + });
|
| +}
|
|
|