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

Side by Side Diff: test/runner/signal_test.dart

Issue 1187103004: Allow Suites to be added to an Engine over time. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Created 5 years, 6 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
« test/io.dart ('K') | « test/runner/pub_serve_test.dart ('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) 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 // Windows doesn't support sending signals. 5 // Windows doesn't support sending signals.
6 @TestOn("vm && !windows") 6 @TestOn("vm && !windows")
7 7
8 import 'dart:async'; 8 import 'dart:async';
9 import 'dart:convert'; 9 import 'dart:convert';
kevmoo 2015/06/17 22:20:04 unused
nweiz 2015/06/17 22:41:08 Done.
10 import 'dart:io'; 10 import 'dart:io';
11 11
12 import 'package:path/path.dart' as p; 12 import 'package:path/path.dart' as p;
13 import 'package:test/src/util/io.dart';
14 import 'package:test/src/utils.dart';
13 import 'package:test/test.dart'; 15 import 'package:test/test.dart';
14 import 'package:test/src/util/io.dart';
15 16
16 import '../io.dart'; 17 import '../io.dart';
17 18
18 String _sandbox; 19 String _sandbox;
19 20
20 String get _tempDir => p.join(_sandbox, "tmp"); 21 String get _tempDir => p.join(_sandbox, "tmp");
21 22
22 final _lines = UTF8.decoder.fuse(const LineSplitter());
23
24 // This test is inherently prone to race conditions. If it fails, it will likely 23 // This test is inherently prone to race conditions. If it fails, it will likely
25 // do so flakily, but if it succeeds, it will succeed consistently. The tests 24 // do so flakily, but if it succeeds, it will succeed consistently. The tests
26 // represent a best effort to kill the test runner at certain times during its 25 // represent a best effort to kill the test runner at certain times during its
27 // execution. 26 // execution.
28 void main() { 27 void main() {
29 setUp(() { 28 setUp(() {
30 _sandbox = createTempDir(); 29 _sandbox = createTempDir();
31 }); 30 });
32 31
33 tearDown(() { 32 tearDown(() {
34 new Directory(_sandbox).deleteSync(recursive: true); 33 new Directory(_sandbox).deleteSync(recursive: true);
35 }); 34 });
36 35
37 group("during loading,", () { 36 group("during loading,", () {
38 test("cleans up if killed while loading a VM test", () async { 37 test("cleans up if killed while loading a VM test", () async {
39 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" 38 new File(p.join(_sandbox, "test.dart")).writeAsStringSync("""
40 void main() { 39 void main() {
41 print("in test.dart"); 40 print("in test.dart");
42 // 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.
43 for (var i = 0; i < 100000000; i++) {} 42 for (var i = 0; i < 100000000; i++) {}
44 } 43 }
45 """); 44 """);
46 45
47 var process = await _startTest(["test.dart"]); 46 var process = await _startTest(["test.dart"]);
48 var line = await _lines.bind(process.stdout).first; 47 var line = await lineSplitter.bind(process.stdout).first;
49 expect(line, equals("in test.dart")); 48 expect(line, equals("in test.dart"));
50 process.kill(); 49 process.kill();
51 await process.exitCode; 50 await process.exitCode;
52 expect(new Directory(_tempDir).listSync(), isEmpty); 51 expect(new Directory(_tempDir).listSync(), isEmpty);
53 }); 52 });
54 53
55 test("cleans up if killed while loading a browser test", () async { 54 test("cleans up if killed while loading a browser test", () async {
56 new File(p.join(_sandbox, "test.dart")) 55 new File(p.join(_sandbox, "test.dart"))
57 .writeAsStringSync("void main() {}"); 56 .writeAsStringSync("void main() {}");
58 57
59 var process = await _startTest(["-p", "chrome", "test.dart"]); 58 var process = await _startTest(["-p", "chrome", "test.dart"]);
60 var line = await _lines.bind(process.stdout).first; 59 var line = await lineSplitter.bind(process.stdout).first;
61 expect(line, equals("Compiling test.dart...")); 60 expect(line, equals("Compiling test.dart..."));
62 process.kill(); 61 process.kill();
63 await process.exitCode; 62 await process.exitCode;
64 expect(new Directory(_tempDir).listSync(), isEmpty); 63 expect(new Directory(_tempDir).listSync(), isEmpty);
65 }); 64 });
66 65
67 test("exits immediately if ^C is sent twice", () async { 66 test("exits immediately if ^C is sent twice", () async {
68 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" 67 new File(p.join(_sandbox, "test.dart")).writeAsStringSync("""
69 void main() { 68 void main() {
70 print("in test.dart"); 69 print("in test.dart");
71 while (true) {} 70 while (true) {}
72 } 71 }
73 """); 72 """);
74 73
75 var process = await _startTest(["test.dart"]); 74 var process = await _startTest(["test.dart"]);
76 var line = await _lines.bind(process.stdout).first; 75 var line = await lineSplitter.bind(process.stdout).first;
77 expect(line, equals("in test.dart")); 76 expect(line, equals("in test.dart"));
78 process.kill(); 77 process.kill();
79 78
80 // TODO(nweiz): Sending two signals in close succession can cause the 79 // TODO(nweiz): Sending two signals in close succession can cause the
81 // second one to be ignored, so we wait a bit before the second 80 // second one to be ignored, so we wait a bit before the second
82 // one. Remove this hack when issue 23047 is fixed. 81 // one. Remove this hack when issue 23047 is fixed.
83 await new Future.delayed(new Duration(seconds: 1)); 82 await new Future.delayed(new Duration(seconds: 1));
84 process.kill(); 83 process.kill();
85 await process.exitCode; 84 await process.exitCode;
86 expect(new Directory(_tempDir).listSync(), isEmpty); 85 expect(new Directory(_tempDir).listSync(), isEmpty);
(...skipping 12 matching lines...) Expand all
99 tearDown(() => new File("output").writeAsStringSync("ran teardown")); 98 tearDown(() => new File("output").writeAsStringSync("ran teardown"));
100 99
101 test("test", () { 100 test("test", () {
102 print("running test"); 101 print("running test");
103 return new Future.delayed(new Duration(seconds: 1)); 102 return new Future.delayed(new Duration(seconds: 1));
104 }); 103 });
105 } 104 }
106 """); 105 """);
107 106
108 var process = await _startTest(["test.dart"]); 107 var process = await _startTest(["test.dart"]);
109 var line = await _lines.bind(process.stdout).skip(2).first; 108 var line = await lineSplitter.bind(process.stdout).skip(2).first;
110 expect(line, equals("running test")); 109 expect(line, equals("running test"));
111 process.kill(); 110 process.kill();
112 await process.exitCode; 111 await process.exitCode;
113 expect(new File(p.join(_sandbox, "output")).readAsStringSync(), 112 expect(new File(p.join(_sandbox, "output")).readAsStringSync(),
114 equals("ran teardown")); 113 equals("ran teardown"));
115 expect(new Directory(_tempDir).listSync(), isEmpty); 114 expect(new Directory(_tempDir).listSync(), isEmpty);
116 }); 115 });
117 116
118 test("kills a browser test immediately", () async { 117 test("kills a browser test immediately", () async {
119 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" 118 new File(p.join(_sandbox, "test.dart")).writeAsStringSync("""
(...skipping 11 matching lines...) Expand all
131 // stops. 130 // stops.
132 while (true) {} 131 while (true) {}
133 }); 132 });
134 }); 133 });
135 } 134 }
136 """); 135 """);
137 136
138 var process = await _startTest(["-p", "content-shell", "test.dart"]); 137 var process = await _startTest(["-p", "content-shell", "test.dart"]);
139 // The first line is blank, and the second is a status line from the 138 // The first line is blank, and the second is a status line from the
140 // reporter. 139 // reporter.
141 var line = await _lines.bind(process.stdout).skip(2).first; 140 var line = await lineSplitter.bind(process.stdout).skip(2).first;
142 expect(line, equals("running test")); 141 expect(line, equals("running test"));
143 process.kill(); 142 process.kill();
144 await process.exitCode; 143 await process.exitCode;
145 expect(new Directory(_tempDir).listSync(), isEmpty); 144 expect(new Directory(_tempDir).listSync(), isEmpty);
146 }); 145 });
147 146
148 test("kills a VM test immediately if ^C is sent twice", () async { 147 test("kills a VM test immediately if ^C is sent twice", () async {
149 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" 148 new File(p.join(_sandbox, "test.dart")).writeAsStringSync("""
150 import 'package:test/test.dart'; 149 import 'package:test/test.dart';
151 150
152 void main() { 151 void main() {
153 test("test", () { 152 test("test", () {
154 print("running test"); 153 print("running test");
155 while (true) {} 154 while (true) {}
156 }); 155 });
157 } 156 }
158 """); 157 """);
159 158
160 var process = await _startTest(["test.dart"]); 159 var process = await _startTest(["test.dart"]);
161 var line = await _lines.bind(process.stdout).skip(2).first; 160 var line = await lineSplitter.bind(process.stdout).skip(2).first;
162 expect(line, equals("running test")); 161 expect(line, equals("running test"));
163 process.kill(); 162 process.kill();
164 163
165 // TODO(nweiz): Sending two signals in close succession can cause the 164 // TODO(nweiz): Sending two signals in close succession can cause the
166 // second one to be ignored, so we wait a bit before the second 165 // second one to be ignored, so we wait a bit before the second
167 // one. Remove this hack when issue 23047 is fixed. 166 // one. Remove this hack when issue 23047 is fixed.
168 await new Future.delayed(new Duration(seconds: 1)); 167 await new Future.delayed(new Duration(seconds: 1));
169 process.kill(); 168 process.kill();
170 await process.exitCode; 169 await process.exitCode;
171 }); 170 });
(...skipping 19 matching lines...) Expand all
191 try { 190 try {
192 expect(true, isTrue); 191 expect(true, isTrue);
193 } catch (_) { 192 } catch (_) {
194 expectThrewError = true; 193 expectThrewError = true;
195 } 194 }
196 }); 195 });
197 } 196 }
198 """); 197 """);
199 198
200 var process = await _startTest(["test.dart"]); 199 var process = await _startTest(["test.dart"]);
201 var line = await _lines.bind(process.stdout).skip(2).first; 200 var line = await lineSplitter.bind(process.stdout).skip(2).first;
202 expect(line, equals("running test")); 201 expect(line, equals("running test"));
203 process.kill(); 202 process.kill();
204 await process.exitCode; 203 await process.exitCode;
205 expect(new File(p.join(_sandbox, "output")).readAsStringSync(), 204 expect(new File(p.join(_sandbox, "output")).readAsStringSync(),
206 equals("true")); 205 equals("true"));
207 expect(new Directory(_tempDir).listSync(), isEmpty); 206 expect(new Directory(_tempDir).listSync(), isEmpty);
208 }); 207 });
209 208
210 test("causes expectAsync() to always throw an error immediately", () async { 209 test("causes expectAsync() to always throw an error immediately", () async {
211 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" 210 new File(p.join(_sandbox, "test.dart")).writeAsStringSync("""
(...skipping 16 matching lines...) Expand all
228 try { 227 try {
229 expectAsync(() {}); 228 expectAsync(() {});
230 } catch (_) { 229 } catch (_) {
231 expectAsyncThrewError = true; 230 expectAsyncThrewError = true;
232 } 231 }
233 }); 232 });
234 } 233 }
235 """); 234 """);
236 235
237 var process = await _startTest(["test.dart"]); 236 var process = await _startTest(["test.dart"]);
238 var line = await _lines.bind(process.stdout).skip(2).first; 237 var line = await lineSplitter.bind(process.stdout).skip(2).first;
239 expect(line, equals("running test")); 238 expect(line, equals("running test"));
240 process.kill(); 239 process.kill();
241 await process.exitCode; 240 await process.exitCode;
242 expect(new File(p.join(_sandbox, "output")).readAsStringSync(), 241 expect(new File(p.join(_sandbox, "output")).readAsStringSync(),
243 equals("true")); 242 equals("true"));
244 expect(new Directory(_tempDir).listSync(), isEmpty); 243 expect(new Directory(_tempDir).listSync(), isEmpty);
245 }); 244 });
246 }); 245 });
247 } 246 }
248 247
249 Future<Process> _startTest(List<String> args) { 248 Future<Process> _startTest(List<String> args) {
250 new Directory(_tempDir).create(); 249 new Directory(_tempDir).create();
251 return startTest(args, workingDirectory: _sandbox, 250 return startTest(args, workingDirectory: _sandbox,
252 environment: {"_UNITTEST_TEMP_DIR": _tempDir}); 251 environment: {"_UNITTEST_TEMP_DIR": _tempDir});
253 } 252 }
OLDNEW
« test/io.dart ('K') | « test/runner/pub_serve_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698