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

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

Issue 1099663002: Reapply "Add tests for evalutating against activation records." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « runtime/observatory/tests/service/service.status ('k') | no next file » | 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 12
13 bool _isWebSocketDisconnect(e) { 13 bool _isWebSocketDisconnect(e) {
14 if (e is! ServiceException) { 14 if (e is! ServiceException) {
15 return false; 15 return false;
16 } 16 }
17 return (e as ServiceException).message == 'WebSocket disconnected'; 17 return (e as ServiceException).message == 'WebSocket disconnected';
18 } 18 }
19 19
20 // This invocation should set up the state being tested. 20 // This invocation should set up the state being tested.
21 const String _TESTEE_MODE_FLAG = "--testee-mode"; 21 const String _TESTEE_MODE_FLAG = "--testee-mode";
22 22
23 class _TestLauncher { 23 class _TestLauncher {
24 Process process; 24 Process process;
25 final List<String> args; 25 final List<String> args;
26 bool killedByTester = false;
26 27
27 _TestLauncher() : args = ['--enable-vm-service:0', 28 _TestLauncher() : args = ['--enable-vm-service:0',
28 Platform.script.toFilePath(), 29 Platform.script.toFilePath(),
29 _TESTEE_MODE_FLAG] {} 30 _TESTEE_MODE_FLAG] {}
30 31
31 Future<int> launch(bool pause_on_exit) { 32 Future<int> launch(bool pause_on_exit) {
32 String dartExecutable = Platform.executable; 33 String dartExecutable = Platform.executable;
33 var fullArgs = []; 34 var fullArgs = [];
34 if (pause_on_exit == true) { 35 if (pause_on_exit == true) {
35 fullArgs.add('--pause-isolates-on-exit'); 36 fullArgs.add('--pause-isolates-on-exit');
(...skipping 25 matching lines...) Expand all
61 first = false; 62 first = false;
62 print('** Signaled to run test queries on $portNumber'); 63 print('** Signaled to run test queries on $portNumber');
63 } 64 }
64 print(line); 65 print(line);
65 }); 66 });
66 process.stderr.transform(UTF8.decoder) 67 process.stderr.transform(UTF8.decoder)
67 .transform(new LineSplitter()).listen((line) { 68 .transform(new LineSplitter()).listen((line) {
68 print(line); 69 print(line);
69 }); 70 });
70 process.exitCode.then((exitCode) { 71 process.exitCode.then((exitCode) {
72 if ((exitCode != 0) && !killedByTester) {
73 throw "Testee exited with $exitCode";
74 }
71 print("** Process exited"); 75 print("** Process exited");
72 }); 76 });
73 return completer.future; 77 return completer.future;
74 }); 78 });
75 } 79 }
76 80
77 void requestExit() { 81 void requestExit() {
78 print('** Killing script'); 82 print('** Killing script');
79 process.kill(); 83 if (process.kill()) {
84 killedByTester = true;
85 }
80 } 86 }
81 } 87 }
82 88
83 typedef Future IsolateTest(Isolate isolate); 89 typedef Future IsolateTest(Isolate isolate);
84 typedef Future VMTest(VM vm); 90 typedef Future VMTest(VM vm);
85 91
86 /// Runs [tests] in sequence, each of which should take an [Isolate] and 92 /// Runs [tests] in sequence, each of which should take an [Isolate] and
87 /// return a [Future]. Code for setting up state can run before and/or 93 /// return a [Future]. Code for setting up state can run before and/or
88 /// concurrently with the tests. Uses [mainArgs] to determine whether 94 /// concurrently with the tests. Uses [mainArgs] to determine whether
89 /// to run tests or testee in this invokation of the script. 95 /// to run tests or testee in this invokation of the script.
(...skipping 21 matching lines...) Expand all
111 var name = Platform.script.pathSegments.last; 117 var name = Platform.script.pathSegments.last;
112 runZoned(() { 118 runZoned(() {
113 new WebSocketVM(new WebSocketVMTarget(addr)).load() 119 new WebSocketVM(new WebSocketVMTarget(addr)).load()
114 .then((VM vm) => vm.isolates.first.load()) 120 .then((VM vm) => vm.isolates.first.load())
115 .then((Isolate isolate) => Future.forEach(tests, (test) { 121 .then((Isolate isolate) => Future.forEach(tests, (test) {
116 print('Running $name [$testIndex/$totalTests]'); 122 print('Running $name [$testIndex/$totalTests]');
117 testIndex++; 123 testIndex++;
118 return test(isolate); 124 return test(isolate);
119 })).then((_) => process.requestExit()); 125 })).then((_) => process.requestExit());
120 }, onError: (e, st) { 126 }, onError: (e, st) {
127 process.requestExit();
121 if (!_isWebSocketDisconnect(e)) { 128 if (!_isWebSocketDisconnect(e)) {
122 print('Unexpected exception in service tests: $e $st'); 129 print('Unexpected exception in service tests: $e $st');
123 throw e; 130 throw e;
124 } 131 }
125 }); 132 });
126 }); 133 });
127 } 134 }
128 } 135 }
129 136
130 137
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 var totalTests = tests.length; 178 var totalTests = tests.length;
172 var name = Platform.script.pathSegments.last; 179 var name = Platform.script.pathSegments.last;
173 runZoned(() { 180 runZoned(() {
174 new WebSocketVM(new WebSocketVMTarget(addr)).load() 181 new WebSocketVM(new WebSocketVMTarget(addr)).load()
175 .then((VM vm) => Future.forEach(tests, (test) { 182 .then((VM vm) => Future.forEach(tests, (test) {
176 print('Running $name [$testIndex/$totalTests]'); 183 print('Running $name [$testIndex/$totalTests]');
177 testIndex++; 184 testIndex++;
178 return test(vm); 185 return test(vm);
179 })).then((_) => process.requestExit()); 186 })).then((_) => process.requestExit());
180 }, onError: (e, st) { 187 }, onError: (e, st) {
188 process.requestExit();
181 if (!_isWebSocketDisconnect(e)) { 189 if (!_isWebSocketDisconnect(e)) {
182 print('Unexpected exception in service tests: $e $st'); 190 print('Unexpected exception in service tests: $e $st');
183 throw e; 191 throw e;
184 } 192 }
185 }); 193 });
186 }); 194 });
187 } 195 }
188 } 196 }
OLDNEW
« no previous file with comments | « runtime/observatory/tests/service/service.status ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698