OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 @TestOn("vm") | 5 @TestOn("vm") |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 import 'dart:io'; | 9 import 'dart:io'; |
10 | 10 |
(...skipping 25 matching lines...) Expand all Loading... |
36 group("during loading,", () { | 36 group("during loading,", () { |
37 test("cleans up if killed while loading a VM test", () { | 37 test("cleans up if killed while loading a VM test", () { |
38 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" | 38 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" |
39 void main() { | 39 void main() { |
40 print("in test.dart"); | 40 print("in test.dart"); |
41 // Spin for a long time so the test is probably killed while still loading. | 41 // Spin for a long time so the test is probably killed while still loading. |
42 for (var i = 0; i < 100000000; i++) {} | 42 for (var i = 0; i < 100000000; i++) {} |
43 } | 43 } |
44 """); | 44 """); |
45 | 45 |
46 return _startUnittest(["test.dart"]).then((process) { | 46 return _startTest(["test.dart"]).then((process) { |
47 return _lines.bind(process.stdout).first.then((line) { | 47 return _lines.bind(process.stdout).first.then((line) { |
48 expect(line, equals("in test.dart")); | 48 expect(line, equals("in test.dart")); |
49 process.kill(); | 49 process.kill(); |
50 return process.exitCode; | 50 return process.exitCode; |
51 }).then((_) { | 51 }).then((_) { |
52 expect(new Directory(_tempDir).listSync(), isEmpty); | 52 expect(new Directory(_tempDir).listSync(), isEmpty); |
53 }); | 53 }); |
54 }); | 54 }); |
55 }); | 55 }); |
56 | 56 |
57 test("cleans up if killed while loading a browser test", () { | 57 test("cleans up if killed while loading a browser test", () { |
58 new File(p.join(_sandbox, "test.dart")) | 58 new File(p.join(_sandbox, "test.dart")) |
59 .writeAsStringSync("void main() {}"); | 59 .writeAsStringSync("void main() {}"); |
60 | 60 |
61 return _startUnittest(["-p", "chrome", "test.dart"]).then((process) { | 61 return _startTest(["-p", "chrome", "test.dart"]).then((process) { |
62 return _lines.bind(process.stdout).first.then((line) { | 62 return _lines.bind(process.stdout).first.then((line) { |
63 expect(line, equals("Compiling test.dart...")); | 63 expect(line, equals("Compiling test.dart...")); |
64 process.kill(); | 64 process.kill(); |
65 return process.exitCode; | 65 return process.exitCode; |
66 }).then((_) { | 66 }).then((_) { |
67 expect(new Directory(_tempDir).listSync(), isEmpty); | 67 expect(new Directory(_tempDir).listSync(), isEmpty); |
68 }); | 68 }); |
69 }); | 69 }); |
70 }); | 70 }); |
71 | 71 |
72 test("exits immediately if ^C is sent twice", () { | 72 test("exits immediately if ^C is sent twice", () { |
73 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" | 73 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" |
74 void main() { | 74 void main() { |
75 print("in test.dart"); | 75 print("in test.dart"); |
76 while (true) {} | 76 while (true) {} |
77 } | 77 } |
78 """); | 78 """); |
79 | 79 |
80 return _startUnittest(["test.dart"]).then((process) { | 80 return _startTest(["test.dart"]).then((process) { |
81 return _lines.bind(process.stdout).first.then((line) { | 81 return _lines.bind(process.stdout).first.then((line) { |
82 expect(line, equals("in test.dart")); | 82 expect(line, equals("in test.dart")); |
83 process.kill(); | 83 process.kill(); |
84 | 84 |
85 // TODO(nweiz): Sending two signals in close succession can cause the | 85 // TODO(nweiz): Sending two signals in close succession can cause the |
86 // second one to be ignored, so we wait a bit before the second | 86 // second one to be ignored, so we wait a bit before the second |
87 // one. Remove this hack when issue 23047 is fixed. | 87 // one. Remove this hack when issue 23047 is fixed. |
88 return new Future.delayed(new Duration(seconds: 1)); | 88 return new Future.delayed(new Duration(seconds: 1)); |
89 }).then((_) { | 89 }).then((_) { |
90 process.kill(); | 90 process.kill(); |
(...skipping 16 matching lines...) Expand all Loading... |
107 void main() { | 107 void main() { |
108 tearDown(() => new File("output").writeAsStringSync("ran teardown")); | 108 tearDown(() => new File("output").writeAsStringSync("ran teardown")); |
109 | 109 |
110 test("test", () { | 110 test("test", () { |
111 print("running test"); | 111 print("running test"); |
112 return new Future.delayed(new Duration(seconds: 1)); | 112 return new Future.delayed(new Duration(seconds: 1)); |
113 }); | 113 }); |
114 } | 114 } |
115 """); | 115 """); |
116 | 116 |
117 return _startUnittest(["test.dart"]).then((process) { | 117 return _startTest(["test.dart"]).then((process) { |
118 return _lines.bind(process.stdout).skip(2).first.then((line) { | 118 return _lines.bind(process.stdout).skip(2).first.then((line) { |
119 expect(line, equals("running test")); | 119 expect(line, equals("running test")); |
120 process.kill(); | 120 process.kill(); |
121 return process.exitCode; | 121 return process.exitCode; |
122 }).then((_) { | 122 }).then((_) { |
123 expect(new File(p.join(_sandbox, "output")).readAsStringSync(), | 123 expect(new File(p.join(_sandbox, "output")).readAsStringSync(), |
124 equals("ran teardown")); | 124 equals("ran teardown")); |
125 expect(new Directory(_tempDir).listSync(), isEmpty); | 125 expect(new Directory(_tempDir).listSync(), isEmpty); |
126 }); | 126 }); |
127 }); | 127 }); |
(...skipping 12 matching lines...) Expand all Loading... |
140 // Allow an event loop to pass so the preceding print can be handled. | 140 // Allow an event loop to pass so the preceding print can be handled. |
141 return new Future(() { | 141 return new Future(() { |
142 // Loop forever so that if the test isn't stopped while running, it never | 142 // Loop forever so that if the test isn't stopped while running, it never |
143 // stops. | 143 // stops. |
144 while (true) {} | 144 while (true) {} |
145 }); | 145 }); |
146 }); | 146 }); |
147 } | 147 } |
148 """); | 148 """); |
149 | 149 |
150 return _startUnittest(["-p", "chrome", "test.dart"]).then((process) { | 150 return _startTest(["-p", "chrome", "test.dart"]).then((process) { |
151 return _lines.bind(process.stdout).skip(3).first.then((line) { | 151 return _lines.bind(process.stdout).skip(3).first.then((line) { |
152 expect(line, equals("running test")); | 152 expect(line, equals("running test")); |
153 process.kill(); | 153 process.kill(); |
154 return process.exitCode; | 154 return process.exitCode; |
155 }).then((_) { | 155 }).then((_) { |
156 expect(new Directory(_tempDir).listSync(), isEmpty); | 156 expect(new Directory(_tempDir).listSync(), isEmpty); |
157 }); | 157 }); |
158 }); | 158 }); |
159 }); | 159 }); |
160 | 160 |
161 test("kills a VM test immediately if ^C is sent twice", () { | 161 test("kills a VM test immediately if ^C is sent twice", () { |
162 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" | 162 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" |
163 import 'package:test/test.dart'; | 163 import 'package:test/test.dart'; |
164 | 164 |
165 void main() { | 165 void main() { |
166 test("test", () { | 166 test("test", () { |
167 print("running test"); | 167 print("running test"); |
168 while (true) {} | 168 while (true) {} |
169 }); | 169 }); |
170 } | 170 } |
171 """); | 171 """); |
172 | 172 |
173 return _startUnittest(["test.dart"]).then((process) { | 173 return _startTest(["test.dart"]).then((process) { |
174 return _lines.bind(process.stdout).skip(2).first.then((line) { | 174 return _lines.bind(process.stdout).skip(2).first.then((line) { |
175 expect(line, equals("running test")); | 175 expect(line, equals("running test")); |
176 process.kill(); | 176 process.kill(); |
177 | 177 |
178 // TODO(nweiz): Sending two signals in close succession can cause the | 178 // TODO(nweiz): Sending two signals in close succession can cause the |
179 // second one to be ignored, so we wait a bit before the second | 179 // second one to be ignored, so we wait a bit before the second |
180 // one. Remove this hack when issue 23047 is fixed. | 180 // one. Remove this hack when issue 23047 is fixed. |
181 return new Future.delayed(new Duration(seconds: 1)); | 181 return new Future.delayed(new Duration(seconds: 1)); |
182 }).then((_) { | 182 }).then((_) { |
183 process.kill(); | 183 process.kill(); |
(...skipping 23 matching lines...) Expand all Loading... |
207 try { | 207 try { |
208 expect(true, isTrue); | 208 expect(true, isTrue); |
209 } catch (_) { | 209 } catch (_) { |
210 expectThrewError = true; | 210 expectThrewError = true; |
211 } | 211 } |
212 }); | 212 }); |
213 }); | 213 }); |
214 } | 214 } |
215 """); | 215 """); |
216 | 216 |
217 return _startUnittest(["test.dart"]).then((process) { | 217 return _startTest(["test.dart"]).then((process) { |
218 return _lines.bind(process.stdout).skip(2).first.then((line) { | 218 return _lines.bind(process.stdout).skip(2).first.then((line) { |
219 expect(line, equals("running test")); | 219 expect(line, equals("running test")); |
220 process.kill(); | 220 process.kill(); |
221 return process.exitCode; | 221 return process.exitCode; |
222 }).then((_) { | 222 }).then((_) { |
223 expect(new File(p.join(_sandbox, "output")).readAsStringSync(), | 223 expect(new File(p.join(_sandbox, "output")).readAsStringSync(), |
224 equals("true")); | 224 equals("true")); |
225 expect(new Directory(_tempDir).listSync(), isEmpty); | 225 expect(new Directory(_tempDir).listSync(), isEmpty); |
226 }); | 226 }); |
227 }); | 227 }); |
(...skipping 20 matching lines...) Expand all Loading... |
248 try { | 248 try { |
249 expectAsync(() {}); | 249 expectAsync(() {}); |
250 } catch (_) { | 250 } catch (_) { |
251 expectAsyncThrewError = true; | 251 expectAsyncThrewError = true; |
252 } | 252 } |
253 }); | 253 }); |
254 }); | 254 }); |
255 } | 255 } |
256 """); | 256 """); |
257 | 257 |
258 return _startUnittest(["test.dart"]).then((process) { | 258 return _startTest(["test.dart"]).then((process) { |
259 return _lines.bind(process.stdout).skip(2).first.then((line) { | 259 return _lines.bind(process.stdout).skip(2).first.then((line) { |
260 expect(line, equals("running test")); | 260 expect(line, equals("running test")); |
261 process.kill(); | 261 process.kill(); |
262 return process.exitCode; | 262 return process.exitCode; |
263 }).then((_) { | 263 }).then((_) { |
264 expect(new File(p.join(_sandbox, "output")).readAsStringSync(), | 264 expect(new File(p.join(_sandbox, "output")).readAsStringSync(), |
265 equals("true")); | 265 equals("true")); |
266 expect(new Directory(_tempDir).listSync(), isEmpty); | 266 expect(new Directory(_tempDir).listSync(), isEmpty); |
267 }); | 267 }); |
268 }); | 268 }); |
269 }); | 269 }); |
270 }); | 270 }); |
271 } | 271 } |
272 | 272 |
273 Future<Process> _startUnittest(List<String> args) { | 273 Future<Process> _startTest(List<String> args) { |
274 new Directory(_tempDir).create(); | 274 new Directory(_tempDir).create(); |
275 return startUnittest(args, workingDirectory: _sandbox, | 275 return startTest(args, workingDirectory: _sandbox, |
276 environment: {"_UNITTEST_TEMP_DIR": _tempDir}); | 276 environment: {"_UNITTEST_TEMP_DIR": _tempDir}); |
277 } | 277 } |
OLD | NEW |