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

Side by Side Diff: runtime/observatory/tests/service/test_helper.dart

Issue 1241673003: Async-step, first cut. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 5 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 | « runtime/observatory/tests/service/command_test.dart ('k') | runtime/vm/debugger.h » ('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 (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 // VMOptions=--compile_all --error_on_bad_type --error_on_bad_override --checked 4 // VMOptions=--compile_all --error_on_bad_type --error_on_bad_override --checked
5 5
6 library test_helper; 6 library test_helper;
7 7
8 import 'dart:async'; 8 import 'dart:async';
9 import 'dart:convert'; 9 import 'dart:convert';
10 import 'dart:io'; 10 import 'dart:io';
11 import 'package:observatory/service_io.dart'; 11 import 'package:observatory/service_io.dart';
12 import 'package:unittest/unittest.dart';
12 13
13 bool _isWebSocketDisconnect(e) { 14 bool _isWebSocketDisconnect(e) {
14 return e is NetworkRpcException; 15 return e is NetworkRpcException;
15 } 16 }
16 17
17 // This invocation should set up the state being tested. 18 // This invocation should set up the state being tested.
18 const String _TESTEE_MODE_FLAG = "--testee-mode"; 19 const String _TESTEE_MODE_FLAG = "--testee-mode";
19 20
20 class _TestLauncher { 21 class _TestLauncher {
21 Process process; 22 Process process;
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 vm.getEventStream(streamId).then((stream) { 149 vm.getEventStream(streamId).then((stream) {
149 var subscription; 150 var subscription;
150 subscription = stream.listen((ServiceEvent event) { 151 subscription = stream.listen((ServiceEvent event) {
151 handler(event, subscription, completer); 152 handler(event, subscription, completer);
152 }); 153 });
153 }); 154 });
154 return completer.future; 155 return completer.future;
155 } 156 }
156 157
157 158
158 Future<Isolate> hasStoppedAtBreakpoint(Isolate isolate) async { 159 Future<Isolate> hasStoppedAtBreakpoint(Isolate isolate) {
159 await isolate.reload(); // Might have missed pauseEvent.
160
161 if ((isolate.pauseEvent != null) &&
162 (isolate.pauseEvent.kind == ServiceEvent.kPauseBreakpoint)) {
163 // Already waiting at a breakpoint.
164 print('Breakpoint reached');
165 return new Future.value(isolate);
166 }
167
168 // Set up a listener to wait for breakpoint events. 160 // Set up a listener to wait for breakpoint events.
169 Completer completer = new Completer(); 161 Completer completer = new Completer();
170 isolate.vm.getEventStream(VM.kDebugStream).then((stream) { 162 isolate.vm.getEventStream(VM.kDebugStream).then((stream) {
171 var subscription; 163 var subscription;
172 subscription = stream.listen((ServiceEvent event) { 164 subscription = stream.listen((ServiceEvent event) {
165 print("Event: $event");
173 if (event.kind == ServiceEvent.kPauseBreakpoint) { 166 if (event.kind == ServiceEvent.kPauseBreakpoint) {
174 print('Breakpoint reached'); 167 print('Breakpoint reached');
175 subscription.cancel(); 168 subscription.cancel();
176 completer.complete(); 169 if (completer != null) {
170 completer.complete(isolate);
171 completer = null;
172 }
177 } 173 }
178 }); 174 });
175
176 // Pause may have happened before we subscribed.
177 isolate.reload().then((_) {
178 if ((isolate.pauseEvent != null) &&
179 (isolate.pauseEvent.kind == ServiceEvent.kPauseBreakpoint)) {
180 // Already waiting at a breakpoint.
181 print('Breakpoint reached');
182 subscription.cancel();
183 if (completer != null) {
184 completer.complete(isolate);
185 completer = null;
186 }
187 }
188 });
179 }); 189 });
180 190
181 return completer.future; // Will complete when breakpoint hit. 191 return completer.future; // Will complete when breakpoint hit.
182 } 192 }
183 193
184 194
195 // Currying is your friend.
196 IsolateTest setBreakpointAtLine(int line) {
197 return (Isolate isolate) async {
198 print("Setting breakpoint for line $line");
199 Library lib = await isolate.rootLibrary.load();
200 Script script = lib.scripts.single;
201
202 Breakpoint bpt = await isolate.addBreakpoint(script, line);
203 print("Breakpoint is $bpt");
204 expect(bpt, isNotNull);
205 expect(bpt is Breakpoint, isTrue);
206 };
207 }
208
209 IsolateTest stoppedAtLine(int line) {
210 return (Isolate isolate) async {
211 print("Checking we are at line $line");
212
213 ServiceMap stack = await isolate.getStack();
214 expect(stack.type, equals('Stack'));
215 expect(stack['frames'].length, greaterThanOrEqualTo(1));
216
217 Frame top = stack['frames'][0];
218 Script script = await top.location.script.load();
219 expect(script.tokenToLine(top.location.tokenPos), equals(line));
220 };
221 }
222
223
185 Future<Isolate> resumeIsolate(Isolate isolate) { 224 Future<Isolate> resumeIsolate(Isolate isolate) {
186 Completer completer = new Completer(); 225 Completer completer = new Completer();
187 isolate.vm.getEventStream(VM.kDebugStream).then((stream) { 226 isolate.vm.getEventStream(VM.kDebugStream).then((stream) {
188 var subscription; 227 var subscription;
189 subscription = stream.listen((ServiceEvent event) { 228 subscription = stream.listen((ServiceEvent event) {
190 if (event.kind == ServiceEvent.kResume) { 229 if (event.kind == ServiceEvent.kResume) {
191 subscription.cancel(); 230 subscription.cancel();
192 completer.complete(); 231 completer.complete();
193 } 232 }
194 }); 233 });
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 }, onError: (e, st) { 288 }, onError: (e, st) {
250 process.requestExit(); 289 process.requestExit();
251 if (!_isWebSocketDisconnect(e)) { 290 if (!_isWebSocketDisconnect(e)) {
252 print('Unexpected exception in service tests: $e $st'); 291 print('Unexpected exception in service tests: $e $st');
253 throw e; 292 throw e;
254 } 293 }
255 }); 294 });
256 }); 295 });
257 } 296 }
258 } 297 }
OLDNEW
« no previous file with comments | « runtime/observatory/tests/service/command_test.dart ('k') | runtime/vm/debugger.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698