| 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:io'; | 7 import 'package:scheduled_test/descriptor.dart' as d; |
| 8 | 8 import 'package:scheduled_test/scheduled_stream.dart'; |
| 9 import 'package:path/path.dart' as p; | 9 import 'package:scheduled_test/scheduled_test.dart'; |
| 10 import 'package:test/src/util/io.dart'; | |
| 11 import 'package:test/test.dart'; | |
| 12 | 10 |
| 13 import '../io.dart'; | 11 import '../io.dart'; |
| 14 | 12 |
| 15 void main() { | 13 void main() { |
| 14 useSandbox(); |
| 15 |
| 16 test("reports when no tests are run", () { | 16 test("reports when no tests are run", () { |
| 17 return withTempDir((path) { | 17 d.file("test.dart", "void main() {}").create(); |
| 18 new File(p.join(path, "test.dart")).writeAsStringSync("void main() {}"); | 18 |
| 19 var result = runTest(["-r", "expanded", "test.dart"], | 19 var test = runTest(["test.dart"], compact: true); |
| 20 workingDirectory: path); | 20 test.stdout.expect(consumeThrough(contains("No tests ran."))); |
| 21 expect(result.stdout, contains("No tests ran.")); | 21 test.shouldExit(0); |
| 22 }); | |
| 23 }); | 22 }); |
| 24 | 23 |
| 25 test("runs several successful tests and reports when each completes", () { | 24 test("runs several successful tests and reports when each completes", () { |
| 26 _expectReport(""" | 25 _expectReport(""" |
| 27 test('success 1', () {}); | 26 test('success 1', () {}); |
| 28 test('success 2', () {}); | 27 test('success 2', () {}); |
| 29 test('success 3', () {});""", | 28 test('success 3', () {});""", |
| 30 """ | 29 """ |
| 31 +0: success 1 | 30 +0: success 1 |
| 32 +1: success 2 | 31 +1: success 2 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 52 | 51 |
| 53 +0 -2: failure 3 | 52 +0 -2: failure 3 |
| 54 +0 -3: failure 3 | 53 +0 -3: failure 3 |
| 55 oh no | 54 oh no |
| 56 test.dart 8:33 main.<fn> | 55 test.dart 8:33 main.<fn> |
| 57 | 56 |
| 58 +0 -3: Some tests failed."""); | 57 +0 -3: Some tests failed."""); |
| 59 }); | 58 }); |
| 60 | 59 |
| 61 test("includes the full stack trace with --verbose-trace", () { | 60 test("includes the full stack trace with --verbose-trace", () { |
| 62 return withTempDir((path) { | 61 d.file("test.dart", """ |
| 63 new File(p.join(path, "test.dart")).writeAsStringSync(""" | |
| 64 import 'dart:async'; | 62 import 'dart:async'; |
| 65 | 63 |
| 66 import 'package:test/test.dart'; | 64 import 'package:test/test.dart'; |
| 67 | 65 |
| 68 void main() { | 66 void main() { |
| 69 test("failure", () => throw "oh no"); | 67 test("failure", () => throw "oh no"); |
| 70 } | 68 } |
| 71 """); | 69 """).create(); |
| 72 var result = runTest(["-r", "compact", "--verbose-trace", "test.dart"], | 70 |
| 73 workingDirectory: path); | 71 var test = runTest(["--verbose-trace", "test.dart"], compact: true); |
| 74 expect(result.stdout, contains("dart:isolate-patch")); | 72 test.stdout.expect(consumeThrough(contains("dart:isolate-patch"))); |
| 75 }); | 73 test.shouldExit(1); |
| 76 }); | 74 }); |
| 77 | 75 |
| 78 test("runs failing tests along with successful tests", () { | 76 test("runs failing tests along with successful tests", () { |
| 79 _expectReport(""" | 77 _expectReport(""" |
| 80 test('failure 1', () => throw new TestFailure('oh no')); | 78 test('failure 1', () => throw new TestFailure('oh no')); |
| 81 test('success 1', () {}); | 79 test('success 1', () {}); |
| 82 test('failure 2', () => throw new TestFailure('oh no')); | 80 test('failure 2', () => throw new TestFailure('oh no')); |
| 83 test('success 2', () {});""", | 81 test('success 2', () {});""", |
| 84 """ | 82 """ |
| 85 +0: failure 1 | 83 +0: failure 1 |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 +0 ~1: skip 1 | 300 +0 ~1: skip 1 |
| 303 Skip: some reason | 301 Skip: some reason |
| 304 +0 ~1: skip 2 | 302 +0 ~1: skip 2 |
| 305 +0 ~2: skip 2 | 303 +0 ~2: skip 2 |
| 306 Skip: or another | 304 Skip: or another |
| 307 +0 ~2: All tests skipped."""); | 305 +0 ~2: All tests skipped."""); |
| 308 }); | 306 }); |
| 309 }); | 307 }); |
| 310 } | 308 } |
| 311 | 309 |
| 312 void _expectReport(String tests, String expected, {List<String> args, | 310 void _expectReport(String tests, String expected) { |
| 313 int concurrency}) { | |
| 314 if (concurrency == null) concurrency = 1; | |
| 315 | |
| 316 var dart = """ | 311 var dart = """ |
| 317 import 'dart:async'; | 312 import 'dart:async'; |
| 318 | 313 |
| 319 import 'package:test/test.dart'; | 314 import 'package:test/test.dart'; |
| 320 | 315 |
| 321 void main() { | 316 void main() { |
| 322 $tests | 317 $tests |
| 323 } | 318 } |
| 324 """; | 319 """; |
| 325 | 320 |
| 326 expect(withTempDir((path) { | 321 d.file("test.dart", dart).create(); |
| 327 new File(p.join(path, "test.dart")).writeAsStringSync(dart); | 322 |
| 328 if (args == null) args = []; | 323 var test = runTest(["test.dart"]); |
| 329 args = args.toList() | 324 test.shouldExit(); |
| 330 ..add("test.dart") | 325 |
| 331 ..add("--concurrency=$concurrency") | 326 schedule(() async { |
| 332 ..add("--reporter=expanded"); | 327 var stdoutLines = await test.stdoutStream().toList(); |
| 333 var result = runTest(args, workingDirectory: path); | |
| 334 | 328 |
| 335 // Remove excess trailing whitespace and trim off timestamps. | 329 // Remove excess trailing whitespace and trim off timestamps. |
| 336 var actual = result.stdout.trim().split("\n").map((line) { | 330 var actual = stdoutLines.map((line) { |
| 337 if (line.startsWith(" ") || line.isEmpty) return line.trimRight(); | 331 if (line.startsWith(" ") || line.isEmpty) return line.trimRight(); |
| 338 return line.trim().replaceFirst(new RegExp("^[0-9]{2}:[0-9]{2} "), ""); | 332 return line.trim().replaceFirst(new RegExp("^[0-9]{2}:[0-9]{2} "), ""); |
| 339 }).join("\n"); | 333 }).join("\n"); |
| 340 | 334 |
| 341 // Un-indent the expected string. | 335 // Un-indent the expected string. |
| 342 var indentation = expected.indexOf(new RegExp("[^ ]")); | 336 var indentation = expected.indexOf(new RegExp("[^ ]")); |
| 343 expected = expected.split("\n").map((line) { | 337 expected = expected.split("\n").map((line) { |
| 344 if (line.isEmpty) return line; | 338 if (line.isEmpty) return line; |
| 345 return line.substring(indentation); | 339 return line.substring(indentation); |
| 346 }).join("\n"); | 340 }).join("\n"); |
| 347 | 341 |
| 348 expect(actual, equals(expected)); | 342 expect(actual, equals(expected)); |
| 349 }), completes); | 343 }); |
| 350 } | 344 } |
| OLD | NEW |