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

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

Issue 1083433002: More gracefully handle load errors. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Code review changes 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
« no previous file with comments | « 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 @TestOn("vm") 5 @TestOn("vm")
6 6
7 import 'dart:io'; 7 import 'dart:io';
8 import 'dart:math' as math; 8 import 'dart:math' as math;
9 9
10 import 'package:path/path.dart' as p; 10 import 'package:path/path.dart' as p;
11 import 'package:test/src/util/exit_codes.dart' as exit_codes;
12 import 'package:test/src/util/io.dart'; 11 import 'package:test/src/util/io.dart';
13 import 'package:test/test.dart'; 12 import 'package:test/test.dart';
14 13
15 import '../io.dart'; 14 import '../io.dart';
16 15
17 String _sandbox; 16 String _sandbox;
18 17
19 final _success = """ 18 final _success = """
20 import 'dart:async'; 19 import 'dart:async';
21 20
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 var result = _runUnittest(["--asdf"]); 79 var result = _runUnittest(["--asdf"]);
81 expect(result.stderr, equals(""" 80 expect(result.stderr, equals("""
82 Could not find an option named "asdf". 81 Could not find an option named "asdf".
83 82
84 $_usage""")); 83 $_usage"""));
85 expect(result.exitCode, equals(exit_codes.usage)); 84 expect(result.exitCode, equals(exit_codes.usage));
86 }); 85 });
87 86
88 test("a non-existent file is passed", () { 87 test("a non-existent file is passed", () {
89 var result = _runUnittest(["file"]); 88 var result = _runUnittest(["file"]);
90 expect(result.stderr, equals('Failed to load "file": Does not exist.\n')); 89 expect(result.stdout, allOf([
91 expect(result.exitCode, equals(exit_codes.data)); 90 contains('-1: load error'),
91 contains('Failed to load "file": Does not exist.')
92 ]));
93 expect(result.exitCode, equals(1));
92 }); 94 });
93 95
94 test("the default directory doesn't exist", () { 96 test("the default directory doesn't exist", () {
95 var result = _runUnittest([]); 97 var result = _runUnittest([]);
96 expect(result.stderr, equals( 98 expect(result.stderr, equals("""
97 'Failed to load "test": No test files were passed and the default ' 99 No test files were passed and the default "test/" directory doesn't exist.
98 'directory doesn\'t exist.\n')); 100
101 $_usage"""));
99 expect(result.exitCode, equals(exit_codes.data)); 102 expect(result.exitCode, equals(exit_codes.data));
100 }); 103 });
101 104
102 test("a test file fails to load", () { 105 test("a test file fails to load", () {
103 var testPath = p.join(_sandbox, "test.dart"); 106 var testPath = p.join(_sandbox, "test.dart");
104 new File(testPath).writeAsStringSync("invalid Dart file"); 107 new File(testPath).writeAsStringSync("invalid Dart file");
105 var result = _runUnittest(["test.dart"]); 108 var result = _runUnittest(["test.dart"]);
106 109
107 expect(result.stderr, equals( 110 expect(result.stdout, allOf([
108 'Failed to load "${p.relative(testPath, from: _sandbox)}":\n' 111 contains('-1: load error'),
109 "line 1 pos 1: unexpected token 'invalid'\n" 112 contains(
110 "invalid Dart file\n" 113 ' Failed to load "${p.relative(testPath, from: _sandbox)}":\n'
111 "^\n")); 114 " line 1 pos 1: unexpected token 'invalid'\n"
112 expect(result.exitCode, equals(exit_codes.data)); 115 " invalid Dart file\n"
116 " ^\n")
117 ]));
118 expect(result.exitCode, equals(1));
113 }); 119 });
114 120
115 // This is slightly different from the above test because it's an error 121 // This is slightly different from the above test because it's an error
116 // that's caught first by the analyzer when it's used to parse the file. 122 // that's caught first by the analyzer when it's used to parse the file.
117 test("a test file fails to parse", () { 123 test("a test file fails to parse", () {
118 var testPath = p.join(_sandbox, "test.dart"); 124 var testPath = p.join(_sandbox, "test.dart");
119 new File(testPath).writeAsStringSync("@TestOn)"); 125 new File(testPath).writeAsStringSync("@TestOn)");
120 var result = _runUnittest(["test.dart"]); 126 var result = _runUnittest(["test.dart"]);
121 127
122 expect(result.stderr, equals( 128 expect(result.stdout, allOf([
123 'Failed to load "${p.relative(testPath, from: _sandbox)}":\n' 129 contains('-1: load error'),
124 "line 1 pos 8: unexpected token ')'\n" 130 contains(
125 "@TestOn)\n" 131 ' Failed to load "${p.relative(testPath, from: _sandbox)}":\n'
126 " ^\n")); 132 " line 1 pos 8: unexpected token ')'\n"
127 expect(result.exitCode, equals(exit_codes.data)); 133 " @TestOn)\n"
134 " ^\n")
135 ]));
136 expect(result.exitCode, equals(1));
128 }); 137 });
129 138
130 test("an annotation's structure is invalid", () { 139 test("an annotation's structure is invalid", () {
131 var testPath = p.join(_sandbox, "test.dart"); 140 var testPath = p.join(_sandbox, "test.dart");
132 new File(testPath).writeAsStringSync("@TestOn()\nlibrary foo;"); 141 new File(testPath).writeAsStringSync("@TestOn()\nlibrary foo;");
133 var result = _runUnittest(["test.dart"]); 142 var result = _runUnittest(["test.dart"]);
134 143
135 expect(result.stderr, equals( 144 expect(result.stdout, allOf([
136 'Failed to load "${p.relative(testPath, from: _sandbox)}":\n' 145 contains('-1: load error'),
137 "Error on line 1, column 8: TestOn takes one argument.\n" 146 contains(
138 "@TestOn()\n" 147 ' Failed to load "${p.relative(testPath, from: _sandbox)}":\n'
139 " ^^\n")); 148 " Error on line 1, column 8: TestOn takes one argument.\n"
140 expect(result.exitCode, equals(exit_codes.data)); 149 " @TestOn()\n"
150 " ^^\n")
151 ]));
152 expect(result.exitCode, equals(1));
141 }); 153 });
142 154
143 test("an annotation's contents are invalid", () { 155 test("an annotation's contents are invalid", () {
144 var testPath = p.join(_sandbox, "test.dart"); 156 var testPath = p.join(_sandbox, "test.dart");
145 new File(testPath).writeAsStringSync("@TestOn('zim')\nlibrary foo;"); 157 new File(testPath).writeAsStringSync("@TestOn('zim')\nlibrary foo;");
146 var result = _runUnittest(["test.dart"]); 158 var result = _runUnittest(["test.dart"]);
147 159
148 expect(result.stderr, equals( 160 expect(result.stdout, allOf([
149 'Failed to load "${p.relative(testPath, from: _sandbox)}":\n' 161 contains('-1: load error'),
150 "Error on line 1, column 10: Undefined variable.\n" 162 contains(
151 "@TestOn('zim')\n" 163 ' Failed to load "${p.relative(testPath, from: _sandbox)}":\n'
152 " ^^^\n")); 164 " Error on line 1, column 10: Undefined variable.\n"
153 expect(result.exitCode, equals(exit_codes.data)); 165 " @TestOn('zim')\n"
166 " ^^^\n")
167 ]));
168 expect(result.exitCode, equals(1));
154 }); 169 });
155 170
156 test("a test file throws", () { 171 test("a test file throws", () {
157 var testPath = p.join(_sandbox, "test.dart"); 172 var testPath = p.join(_sandbox, "test.dart");
158 new File(testPath).writeAsStringSync("void main() => throw 'oh no';"); 173 new File(testPath).writeAsStringSync("void main() => throw 'oh no';");
159 174
160 var result = _runUnittest(["test.dart"]); 175 var result = _runUnittest(["test.dart"]);
161 expect(result.stderr, startsWith( 176 expect(result.stdout, allOf([
162 'Failed to load "${p.relative(testPath, from: _sandbox)}": oh no\n')); 177 contains('-1: load error'),
163 expect(result.exitCode, equals(exit_codes.data)); 178 contains(
179 'Failed to load "${p.relative(testPath, from: _sandbox)}": oh no')
180 ]));
181 expect(result.exitCode, equals(1));
164 }); 182 });
165 183
166 test("a test file doesn't have a main defined", () { 184 test("a test file doesn't have a main defined", () {
167 var testPath = p.join(_sandbox, "test.dart"); 185 var testPath = p.join(_sandbox, "test.dart");
168 new File(testPath).writeAsStringSync("void foo() {}"); 186 new File(testPath).writeAsStringSync("void foo() {}");
169 187
170 var result = _runUnittest(["test.dart"]); 188 var result = _runUnittest(["test.dart"]);
171 expect(result.stderr, startsWith( 189 expect(result.stdout, allOf([
172 'Failed to load "${p.relative(testPath, from: _sandbox)}": No ' 190 contains('-1: load error'),
173 'top-level main() function defined.\n')); 191 contains(
174 expect(result.exitCode, equals(exit_codes.data)); 192 'Failed to load "${p.relative(testPath, from: _sandbox)}": No '
193 'top-level main() function defined.')
194 ]));
195 expect(result.exitCode, equals(1));
175 }); 196 });
176 197
177 test("a test file has a non-function main", () { 198 test("a test file has a non-function main", () {
178 var testPath = p.join(_sandbox, "test.dart"); 199 var testPath = p.join(_sandbox, "test.dart");
179 new File(testPath).writeAsStringSync("int main;"); 200 new File(testPath).writeAsStringSync("int main;");
180 201
181 var result = _runUnittest(["test.dart"]); 202 var result = _runUnittest(["test.dart"]);
182 expect(result.stderr, startsWith( 203 expect(result.stdout, allOf([
183 'Failed to load "${p.relative(testPath, from: _sandbox)}": Top-level ' 204 contains('-1: load error'),
184 'main getter is not a function.\n')); 205 contains(
185 expect(result.exitCode, equals(exit_codes.data)); 206 'Failed to load "${p.relative(testPath, from: _sandbox)}": '
207 'Top-level main getter is not a function.')
208 ]));
209 expect(result.exitCode, equals(1));
186 }); 210 });
187 211
188 test("a test file has a main with arguments", () { 212 test("a test file has a main with arguments", () {
189 var testPath = p.join(_sandbox, "test.dart"); 213 var testPath = p.join(_sandbox, "test.dart");
190 new File(testPath).writeAsStringSync("void main(arg) {}"); 214 new File(testPath).writeAsStringSync("void main(arg) {}");
191 215
192 var result = _runUnittest(["test.dart"]); 216 var result = _runUnittest(["test.dart"]);
193 expect(result.stderr, startsWith( 217 expect(result.stdout, allOf([
194 'Failed to load "${p.relative(testPath, from: _sandbox)}": Top-level ' 218 contains('-1: load error'),
195 'main() function takes arguments.\n')); 219 contains(
196 expect(result.exitCode, equals(exit_codes.data)); 220 'Failed to load "${p.relative(testPath, from: _sandbox)}": '
221 'Top-level main() function takes arguments.')
222 ]));
223 expect(result.exitCode, equals(1));
224 });
225
226 test("multiple load errors occur", () {
227 var testPath = p.join(_sandbox, "test.dart");
228 new File(testPath).writeAsStringSync("invalid Dart file");
229 var result = _runUnittest(["test.dart", "nonexistent.dart"]);
230
231 expect(result.stdout, allOf([
232 contains('test.dart: load error'),
233 contains(
234 ' Failed to load "test.dart":\n'
235 " line 1 pos 1: unexpected token 'invalid'\n"
236 " invalid Dart file\n"
237 " ^\n"),
238 contains('nonexistent.dart: load error'),
239 contains('Failed to load "nonexistent.dart": Does not exist.')
240 ]));
197 }); 241 });
198 242
199 // TODO(nweiz): test what happens when a test file is unreadable once issue 243 // TODO(nweiz): test what happens when a test file is unreadable once issue
200 // 15078 is fixed. 244 // 15078 is fixed.
201 }); 245 });
202 246
203 group("runs successful tests", () { 247 group("runs successful tests", () {
204 test("defined in a single file", () { 248 test("defined in a single file", () {
205 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success); 249 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success);
206 var result = _runUnittest(["test.dart"]); 250 var result = _runUnittest(["test.dart"]);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 test("directly", () { 313 test("directly", () {
270 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_failure); 314 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_failure);
271 var result = _runDart([ 315 var result = _runDart([
272 "--package-root=${p.join(packageDir, 'packages')}", 316 "--package-root=${p.join(packageDir, 'packages')}",
273 "test.dart" 317 "test.dart"
274 ]); 318 ]);
275 expect(result.stdout, contains("Some tests failed.")); 319 expect(result.stdout, contains("Some tests failed."));
276 }); 320 });
277 }); 321 });
278 322
323 test("runs tests even when a file fails to load", () {
324 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success);
325 var result = _runUnittest(["test.dart", "nonexistent.dart"]);
326 expect(result.stdout, contains("+1 -1: Some tests failed."));
327 expect(result.exitCode, equals(1));
328 });
329
279 group("flags:", () { 330 group("flags:", () {
280 test("with the --color flag, uses colors", () { 331 test("with the --color flag, uses colors", () {
281 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_failure); 332 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_failure);
282 var result = _runUnittest(["--color", "test.dart"]); 333 var result = _runUnittest(["--color", "test.dart"]);
283 // This is the color code for red. 334 // This is the color code for red.
284 expect(result.stdout, contains("\u001b[31m")); 335 expect(result.stdout, contains("\u001b[31m"));
285 }); 336 });
286 337
287 group("with the --name flag,", () { 338 group("with the --name flag,", () {
288 test("selects tests with matching names", () { 339 test("selects tests with matching names", () {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 }); 373 });
323 374
324 test("produces an error when no tests match", () { 375 test("produces an error when no tests match", () {
325 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success); 376 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(_success);
326 377
327 var result = _runUnittest(["--name", "no match", "test.dart"]); 378 var result = _runUnittest(["--name", "no match", "test.dart"]);
328 expect(result.stderr, 379 expect(result.stderr,
329 contains('No tests match regular expression "no match".')); 380 contains('No tests match regular expression "no match".'));
330 expect(result.exitCode, equals(exit_codes.data)); 381 expect(result.exitCode, equals(exit_codes.data));
331 }); 382 });
383
384 test("doesn't filter out load exceptions", () {
385 var result = _runUnittest(["--name", "name", "file"]);
386 expect(result.stdout, allOf([
387 contains('-1: load error'),
388 contains('Failed to load "file": Does not exist.')
389 ]));
390 expect(result.exitCode, equals(1));
391 });
332 }); 392 });
333 393
334 group("with the --plain-name flag,", () { 394 group("with the --plain-name flag,", () {
335 test("selects tests with matching names", () { 395 test("selects tests with matching names", () {
336 new File(p.join(_sandbox, "test.dart")).writeAsStringSync(""" 396 new File(p.join(_sandbox, "test.dart")).writeAsStringSync("""
337 import 'dart:async'; 397 import 'dart:async';
338 398
339 import 'package:test/test.dart'; 399 import 'package:test/test.dart';
340 400
341 void main() { 401 void main() {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 }); 438 });
379 }); 439 });
380 }); 440 });
381 } 441 }
382 442
383 ProcessResult _runUnittest(List<String> args) => 443 ProcessResult _runUnittest(List<String> args) =>
384 runUnittest(args, workingDirectory: _sandbox); 444 runUnittest(args, workingDirectory: _sandbox);
385 445
386 ProcessResult _runDart(List<String> args) => 446 ProcessResult _runDart(List<String> args) =>
387 runDart(args, workingDirectory: _sandbox); 447 runDart(args, workingDirectory: _sandbox);
OLDNEW
« no previous file with comments | « test/runner/pub_serve_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698