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

Side by Side Diff: mojo/dart/test/handle_watcher_test.dart

Issue 800523004: Dart: Simplifies the handle watcher. Various cleanups and bugfixes. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: cleanup Created 5 years, 11 months 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 unified diff | Download patch
« no previous file with comments | « mojo/dart/test/handle_finalizer_test.dart ('k') | mojo/dart/test/interface_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:isolate'; 6 import 'dart:isolate';
7 import 'dart:mojo_core'; 7 import 'dart:mojo_core';
8 import 'dart:typed_data'; 8 import 'dart:typed_data';
9 9
10 import 'package:mojo/dart/testing/expect.dart'; 10 import 'package:mojo/dart/testing/expect.dart';
11 11
12 void simpleTest() { 12 void simpleTest() {
13 var pipe = new MojoMessagePipe(); 13 var pipe = new MojoMessagePipe();
14 Expect.isNotNull(pipe); 14 Expect.isNotNull(pipe);
15 15
16 var endpoint = pipe.endpoints[0]; 16 var endpoint = pipe.endpoints[0];
17 Expect.isTrue(endpoint.handle.isValid); 17 Expect.isTrue(endpoint.handle.isValid);
18 18
19 var handle = new MojoHandle(endpoint.handle); 19 var eventStream = new MojoEventStream(endpoint.handle);
20 var completer = new Completer(); 20 var completer = new Completer();
21 int numEvents = 0; 21 int numEvents = 0;
22 22
23 handle.enableWriteEvents(); 23 eventStream.listen((_) {
24 handle.listen((_) {
25 numEvents++; 24 numEvents++;
26 handle.close(); 25 eventStream.close();
27 }, onDone: () { 26 }, onDone: () {
28 completer.complete(numEvents); 27 completer.complete(numEvents);
29 }); 28 });
29 eventStream.enableWriteEvents();
30 30
31 completer.future.then((int numEvents) { 31 completer.future.then((int numEvents) {
32 Expect.equals(1, numEvents); 32 Expect.equals(1, numEvents);
33 }); 33 });
34 } 34 }
35 35
36 36
37 Future simpleAsyncAwaitTest() async { 37 Future simpleAsyncAwaitTest() async {
38 var pipe = new MojoMessagePipe(); 38 var pipe = new MojoMessagePipe();
39 Expect.isNotNull(pipe); 39 Expect.isNotNull(pipe);
40 40
41 var endpoint = pipe.endpoints[0]; 41 var endpoint = pipe.endpoints[0];
42 Expect.isTrue(endpoint.handle.isValid); 42 Expect.isTrue(endpoint.handle.isValid);
43 43
44 var handle = new MojoHandle(endpoint.handle); 44 var eventStream =
45 new MojoEventStream(endpoint.handle, MojoHandleSignals.READWRITE);
45 46
46 int numEvents = 0; 47 int numEvents = 0;
47 handle.enableWriteEvents(); 48 await for (List<int> event in eventStream) {
48 await for (var signal in handle) {
49 numEvents++; 49 numEvents++;
50 handle.close(); 50 eventStream.close();
51 } 51 }
52 Expect.equals(1, numEvents); 52 Expect.equals(1, numEvents);
53 } 53 }
54 54
55 55
56 ByteData byteDataOfString(String s) { 56 ByteData byteDataOfString(String s) {
57 return new ByteData.view((new Uint8List.fromList(s.codeUnits)).buffer); 57 return new ByteData.view((new Uint8List.fromList(s.codeUnits)).buffer);
58 } 58 }
59 59
60 60
(...skipping 18 matching lines...) Expand all
79 79
80 // Convert to a string and check. 80 // Convert to a string and check.
81 String msg = stringOfByteData(bytes); 81 String msg = stringOfByteData(bytes);
82 Expect.equals(expected, msg); 82 Expect.equals(expected, msg);
83 } 83 }
84 84
85 85
86 Future pingPongIsolate(MojoMessagePipeEndpoint endpoint) async { 86 Future pingPongIsolate(MojoMessagePipeEndpoint endpoint) async {
87 int pings = 0; 87 int pings = 0;
88 int pongs = 0; 88 int pongs = 0;
89 var handle = new MojoHandle(endpoint.handle); 89 var eventStream = new MojoEventStream(endpoint.handle);
90 await for (var signal in handle) { 90 await for (List<int> event in eventStream) {
91 if (MojoHandleSignals.isReadWrite(signal)) { 91 var mojoSignals = new MojoHandleSignals(event[1]);
92 if (mojoSignals.isReadWrite) {
92 // We are either sending or receiving. 93 // We are either sending or receiving.
93 throw new Exception("Unexpected signal"); 94 throw new Exception("Unexpected event");
94 } else if (MojoHandleSignals.isReadable(signal)) { 95 } else if (mojoSignals.isReadable) {
95 expectStringFromEndpoint("Ping", endpoint); 96 expectStringFromEndpoint("Ping", endpoint);
96 pings++; 97 pings++;
97 handle.enableWriteEvents(); 98 eventStream.enableWriteEvents();
98 } else if (MojoHandleSignals.isWritable(signal)) { 99 } else if (mojoSignals.isWritable) {
99 endpoint.write(byteDataOfString("Pong")); 100 endpoint.write(byteDataOfString("Pong"));
100 pongs++; 101 pongs++;
101 handle.disableWriteEvents(); 102 eventStream.enableReadEvents();
102 } 103 }
103 } 104 }
104 handle.close(); 105 eventStream.close();
105 Expect.equals(10, pings); 106 Expect.equals(10, pings);
106 Expect.equals(10, pongs); 107 Expect.equals(10, pongs);
107 } 108 }
108 109
109 110
110 Future pingPongTest() async { 111 Future pingPongTest() async {
111 var pipe = new MojoMessagePipe(); 112 var pipe = new MojoMessagePipe();
112 var isolate = await Isolate.spawn(pingPongIsolate, pipe.endpoints[0]); 113 var isolate = await Isolate.spawn(pingPongIsolate, pipe.endpoints[0]);
113 var endpoint = pipe.endpoints[1]; 114 var endpoint = pipe.endpoints[1];
114 var handle = new MojoHandle(endpoint.handle); 115 var eventStream =
116 new MojoEventStream(endpoint.handle, MojoHandleSignals.READWRITE);
115 117
116 int pings = 0; 118 int pings = 0;
117 int pongs = 0; 119 int pongs = 0;
118 handle.enableWriteEvents(); // This side will send first. 120 await for (List<int> event in eventStream) {
119 await for (var signal in handle) { 121 var mojoSignals = new MojoHandleSignals(event[1]);
120 if (MojoHandleSignals.isReadWrite(signal)) { 122 if (mojoSignals.isReadWrite) {
121 // We are either sending or receiving. 123 // We are either sending or receiving.
122 throw new Exception("Unexpected signal"); 124 throw new Exception("Unexpected event");
123 } else if (MojoHandleSignals.isReadable(signal)) { 125 } else if (mojoSignals.isReadable) {
124 expectStringFromEndpoint("Pong", endpoint); 126 expectStringFromEndpoint("Pong", endpoint);
125 pongs++; 127 pongs++;
126 if (pongs == 10) { 128 if (pongs == 10) {
127 handle.close(); 129 eventStream.close();
128 } 130 }
129 handle.enableWriteEvents(); // Now it is our turn to send. 131 eventStream.enableWriteEvents(); // Now it is our turn to send.
130 } else if (MojoHandleSignals.isWritable(signal)) { 132 } else if (mojoSignals.isWritable) {
131 if (pings < 10) { 133 if (pings < 10) {
132 endpoint.write(byteDataOfString("Ping")); 134 endpoint.write(byteDataOfString("Ping"));
133 pings++; 135 pings++;
134 } 136 }
135 handle.disableWriteEvents(); // Don't send while waiting for reply. 137 eventStream.enableReadEvents(); // Don't send while waiting for reply.
136 } 138 }
137 } 139 }
138 Expect.equals(10, pings); 140 Expect.equals(10, pings);
139 Expect.equals(10, pongs); 141 Expect.equals(10, pongs);
140 } 142 }
141 143
142 144
143 main() async { 145 main() async {
144 simpleTest(); 146 simpleTest();
145 await simpleAsyncAwaitTest(); 147 await simpleAsyncAwaitTest();
146 await pingPongTest(); 148 await pingPongTest();
147 } 149 }
OLDNEW
« no previous file with comments | « mojo/dart/test/handle_finalizer_test.dart ('k') | mojo/dart/test/interface_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698