OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 | 4 |
5 library service_test_common; | 5 library service_test_common; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'package:observatory/models.dart' as M; | 8 import 'package:observatory/models.dart' as M; |
9 import 'package:observatory/service_common.dart'; | 9 import 'package:observatory/service_common.dart'; |
10 import 'package:unittest/unittest.dart'; | 10 import 'package:unittest/unittest.dart'; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 bool isEventOfKind(M.Event event, String kind) { | 137 bool isEventOfKind(M.Event event, String kind) { |
138 switch (kind) { | 138 switch (kind) { |
139 case ServiceEvent.kPauseBreakpoint: | 139 case ServiceEvent.kPauseBreakpoint: |
140 return event is M.PauseBreakpointEvent; | 140 return event is M.PauseBreakpointEvent; |
141 case ServiceEvent.kPauseException: | 141 case ServiceEvent.kPauseException: |
142 return event is M.PauseExceptionEvent; | 142 return event is M.PauseExceptionEvent; |
143 case ServiceEvent.kPauseExit: | 143 case ServiceEvent.kPauseExit: |
144 return event is M.PauseExitEvent; | 144 return event is M.PauseExitEvent; |
145 case ServiceEvent.kPauseStart: | 145 case ServiceEvent.kPauseStart: |
146 return event is M.PauseStartEvent; | 146 return event is M.PauseStartEvent; |
| 147 case ServiceEvent.kPausePostRequest: |
| 148 return event is M.PausePostRequestEvent; |
147 default: | 149 default: |
148 return false; | 150 return false; |
149 } | 151 } |
150 } | 152 } |
151 | 153 |
152 Future<Isolate> hasPausedFor(Isolate isolate, String kind) { | 154 Future<Isolate> hasPausedFor(Isolate isolate, String kind) { |
153 // Set up a listener to wait for breakpoint events. | 155 // Set up a listener to wait for breakpoint events. |
154 Completer completer = new Completer(); | 156 Completer completer = new Completer(); |
155 isolate.vm.getEventStream(VM.kDebugStream).then((stream) { | 157 isolate.vm.getEventStream(VM.kDebugStream).then((stream) { |
156 var subscription; | 158 var subscription; |
(...skipping 24 matching lines...) Expand all Loading... |
181 }); | 183 }); |
182 }); | 184 }); |
183 | 185 |
184 return completer.future; // Will complete when breakpoint hit. | 186 return completer.future; // Will complete when breakpoint hit. |
185 } | 187 } |
186 | 188 |
187 Future<Isolate> hasStoppedAtBreakpoint(Isolate isolate) { | 189 Future<Isolate> hasStoppedAtBreakpoint(Isolate isolate) { |
188 return hasPausedFor(isolate, ServiceEvent.kPauseBreakpoint); | 190 return hasPausedFor(isolate, ServiceEvent.kPauseBreakpoint); |
189 } | 191 } |
190 | 192 |
| 193 Future<Isolate> hasStoppedPostRequest(Isolate isolate) { |
| 194 return hasPausedFor(isolate, ServiceEvent.kPausePostRequest); |
| 195 } |
| 196 |
191 Future<Isolate> hasStoppedWithUnhandledException(Isolate isolate) { | 197 Future<Isolate> hasStoppedWithUnhandledException(Isolate isolate) { |
192 return hasPausedFor(isolate, ServiceEvent.kPauseException); | 198 return hasPausedFor(isolate, ServiceEvent.kPauseException); |
193 } | 199 } |
194 | 200 |
195 Future<Isolate> hasStoppedAtExit(Isolate isolate) { | 201 Future<Isolate> hasStoppedAtExit(Isolate isolate) { |
196 return hasPausedFor(isolate, ServiceEvent.kPauseExit); | 202 return hasPausedFor(isolate, ServiceEvent.kPauseExit); |
197 } | 203 } |
198 | 204 |
199 Future<Isolate> hasPausedAtStart(Isolate isolate) { | 205 Future<Isolate> hasPausedAtStart(Isolate isolate) { |
200 return hasPausedFor(isolate, ServiceEvent.kPauseStart); | 206 return hasPausedFor(isolate, ServiceEvent.kPauseStart); |
201 } | 207 } |
202 | 208 |
| 209 IsolateTest reloadSources([bool pause = false]) { |
| 210 return (Isolate isolate) async { |
| 211 Map<String, dynamic> params = <String, dynamic>{ }; |
| 212 if (pause == true) { |
| 213 params['pause'] = pause; |
| 214 } |
| 215 return isolate.invokeRpc('reloadSources', params); |
| 216 }; |
| 217 } |
| 218 |
203 // Currying is your friend. | 219 // Currying is your friend. |
204 IsolateTest setBreakpointAtLine(int line) { | 220 IsolateTest setBreakpointAtLine(int line) { |
205 return (Isolate isolate) async { | 221 return (Isolate isolate) async { |
206 print("Setting breakpoint for line $line"); | 222 print("Setting breakpoint for line $line"); |
207 Library lib = await isolate.rootLibrary.load(); | 223 Library lib = await isolate.rootLibrary.load(); |
208 Script script = lib.scripts.single; | 224 Script script = lib.scripts.single; |
209 | 225 |
210 Breakpoint bpt = await isolate.addBreakpoint(script, line); | 226 Breakpoint bpt = await isolate.addBreakpoint(script, line); |
211 print("Breakpoint is $bpt"); | 227 print("Breakpoint is $bpt"); |
212 expect(bpt, isNotNull); | 228 expect(bpt, isNotNull); |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 await isolate.stepInto(); | 342 await isolate.stepInto(); |
327 return hasStoppedAtBreakpoint(isolate); | 343 return hasStoppedAtBreakpoint(isolate); |
328 } | 344 } |
329 | 345 |
330 Future<Isolate> stepOut(Isolate isolate) async { | 346 Future<Isolate> stepOut(Isolate isolate) async { |
331 await isolate.stepOut(); | 347 await isolate.stepOut(); |
332 return hasStoppedAtBreakpoint(isolate); | 348 return hasStoppedAtBreakpoint(isolate); |
333 } | 349 } |
334 | 350 |
335 | 351 |
| 352 Future isolateIsRunning(Isolate isolate) async { |
| 353 await isolate.reload(); |
| 354 expect(isolate.running, true); |
| 355 } |
| 356 |
336 Future<Class> getClassFromRootLib(Isolate isolate, String className) async { | 357 Future<Class> getClassFromRootLib(Isolate isolate, String className) async { |
337 Library rootLib = await isolate.rootLibrary.load(); | 358 Library rootLib = await isolate.rootLibrary.load(); |
338 for (var i = 0; i < rootLib.classes.length; i++) { | 359 for (var i = 0; i < rootLib.classes.length; i++) { |
339 Class cls = rootLib.classes[i]; | 360 Class cls = rootLib.classes[i]; |
340 if (cls.name == className) { | 361 if (cls.name == className) { |
341 return cls; | 362 return cls; |
342 } | 363 } |
343 } | 364 } |
344 return null; | 365 return null; |
345 } | 366 } |
346 | 367 |
347 | 368 |
348 Future<Instance> rootLibraryFieldValue(Isolate isolate, | 369 Future<Instance> rootLibraryFieldValue(Isolate isolate, |
349 String fieldName) async { | 370 String fieldName) async { |
350 Library rootLib = await isolate.rootLibrary.load(); | 371 Library rootLib = await isolate.rootLibrary.load(); |
351 Field field = rootLib.variables.singleWhere((v) => v.name == fieldName); | 372 Field field = rootLib.variables.singleWhere((v) => v.name == fieldName); |
352 await field.load(); | 373 await field.load(); |
353 Instance value = field.staticValue; | 374 Instance value = field.staticValue; |
354 await value.load(); | 375 await value.load(); |
355 return value; | 376 return value; |
356 } | 377 } |
OLD | NEW |