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

Unified Diff: mojo/public/dart/third_party/test/test/runner/compact_reporter_test.dart

Issue 1346773002: Stop running pub get at gclient sync time and fix build bugs (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: mojo/public/dart/third_party/test/test/runner/compact_reporter_test.dart
diff --git a/mojo/public/dart/third_party/test/test/runner/compact_reporter_test.dart b/mojo/public/dart/third_party/test/test/runner/compact_reporter_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..5380d85e9f55ad2a7677c1d88af133ab67c4ad61
--- /dev/null
+++ b/mojo/public/dart/third_party/test/test/runner/compact_reporter_test.dart
@@ -0,0 +1,440 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+@TestOn("vm")
+
+import 'package:scheduled_test/descriptor.dart' as d;
+import 'package:scheduled_test/scheduled_stream.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+
+import '../io.dart';
+
+void main() {
+ useSandbox();
+
+ test("reports when no tests are run", () {
+ d.file("test.dart", "void main() {}").create();
+
+ var test = runTest(["test.dart"], compact: true);
+ test.stdout.expect(consumeThrough(contains("No tests ran.")));
+ test.shouldExit(0);
+ });
+
+ test("runs several successful tests and reports when each completes", () {
+ _expectReport("""
+ test('success 1', () {});
+ test('success 2', () {});
+ test('success 3', () {});""",
+ """
+ +0: loading test.dart
+ +0: success 1
+ +1: success 1
+ +1: success 2
+ +2: success 2
+ +2: success 3
+ +3: success 3
+ +3: All tests passed!""");
+ });
+
+ test("runs several failing tests and reports when each fails", () {
+ _expectReport("""
+ test('failure 1', () => throw new TestFailure('oh no'));
+ test('failure 2', () => throw new TestFailure('oh no'));
+ test('failure 3', () => throw new TestFailure('oh no'));""",
+ """
+ +0: loading test.dart
+ +0: failure 1
+ +0 -1: failure 1
+ oh no
+ test.dart 6:33 main.<fn>
+
+
+ +0 -1: failure 2
+ +0 -2: failure 2
+ oh no
+ test.dart 7:33 main.<fn>
+
+
+ +0 -2: failure 3
+ +0 -3: failure 3
+ oh no
+ test.dart 8:33 main.<fn>
+
+
+ +0 -3: Some tests failed.""");
+ });
+
+ test("includes the full stack trace with --verbose-trace", () {
+ d.file("test.dart", """
+import 'dart:async';
+
+import 'package:test/test.dart';
+
+void main() {
+ test("failure", () => throw "oh no");
+}
+""").create();
+
+ var test = runTest(["--verbose-trace", "test.dart"], compact: true);
+ test.stdout.expect(consumeThrough(contains("dart:isolate-patch")));
+ test.shouldExit(1);
+ });
+
+ test("runs failing tests along with successful tests", () {
+ _expectReport("""
+ test('failure 1', () => throw new TestFailure('oh no'));
+ test('success 1', () {});
+ test('failure 2', () => throw new TestFailure('oh no'));
+ test('success 2', () {});""",
+ """
+ +0: loading test.dart
+ +0: failure 1
+ +0 -1: failure 1
+ oh no
+ test.dart 6:33 main.<fn>
+
+
+ +0 -1: success 1
+ +1 -1: success 1
+ +1 -1: failure 2
+ +1 -2: failure 2
+ oh no
+ test.dart 8:33 main.<fn>
+
+
+ +1 -2: success 2
+ +2 -2: success 2
+ +2 -2: Some tests failed.""");
+ });
+
+ test("gracefully handles multiple test failures in a row", () {
+ _expectReport("""
+ // This completer ensures that the test isolate isn't killed until all
+ // errors have been thrown.
+ var completer = new Completer();
+ test('failures', () {
+ new Future.microtask(() => throw 'first error');
+ new Future.microtask(() => throw 'second error');
+ new Future.microtask(() => throw 'third error');
+ new Future.microtask(completer.complete);
+ });
+ test('wait', () => completer.future);""",
+ """
+ +0: loading test.dart
+ +0: failures
+ +0 -1: failures
+ first error
+ test.dart 10:38 main.<fn>.<fn>
+ ===== asynchronous gap ===========================
+ dart:async Future.Future.microtask
+ test.dart 10:15 main.<fn>
+
+ second error
+ test.dart 11:38 main.<fn>.<fn>
+ ===== asynchronous gap ===========================
+ dart:async Future.Future.microtask
+ test.dart 11:15 main.<fn>
+
+ third error
+ test.dart 12:38 main.<fn>.<fn>
+ ===== asynchronous gap ===========================
+ dart:async Future.Future.microtask
+ test.dart 12:15 main.<fn>
+
+
+ +0 -1: wait
+ +1 -1: wait
+ +1 -1: Some tests failed.""");
+ });
+
+ test("prints the full test name before an error", () {
+ _expectReport("""
+ test(
+ 'really gosh dang long test name. Even longer than that. No, yet '
+ 'longer. A little more... okay, that should do it.',
+ () => throw new TestFailure('oh no'));""",
+ """
+ +0: loading test.dart
+ +0: really ... longer than that. No, yet longer. A little more... okay, that should do it.
+ +0 -1: really ... longer than that. No, yet longer. A little more... okay, that should do it.
+ +0 -1: really gosh dang long test name. Even longer than that. No, yet longer. A little more... okay, that should do it.
+ oh no
+ test.dart 9:18 main.<fn>
+
+
+ +0 -1: Some tests failed.""");
+ });
+
+ group("print:", () {
+ test("handles multiple prints", () {
+ _expectReport("""
+ test('test', () {
+ print("one");
+ print("two");
+ print("three");
+ print("four");
+ });""",
+ """
+ +0: loading test.dart
+ +0: test
+ one
+ two
+ three
+ four
+
+ +1: test
+ +1: All tests passed!""");
+ });
+
+ test("handles a print after the test completes", () {
+ _expectReport("""
+ // This completer ensures that the test isolate isn't killed until all
+ // prints have happened.
+ var testDone = new Completer();
+ var waitStarted = new Completer();
+ test('test', () {
+ waitStarted.future.then((_) {
+ new Future(() => print("one"));
+ new Future(() => print("two"));
+ new Future(() => print("three"));
+ new Future(() => print("four"));
+ new Future(testDone.complete);
+ });
+ });
+
+ test('wait', () {
+ waitStarted.complete();
+ return testDone.future;
+ });""", """
+ +0: loading test.dart
+ +0: test
+ +1: test
+ +1: wait
+ +1: test
+ one
+ two
+ three
+ four
+
+ +2: wait
+ +2: All tests passed!""");
+ });
+
+ test("interleaves prints and errors", () {
+ _expectReport("""
+ // This completer ensures that the test isolate isn't killed until all
+ // prints have happened.
+ var completer = new Completer();
+ test('test', () {
+ scheduleMicrotask(() {
+ print("three");
+ print("four");
+ throw "second error";
+ });
+
+ scheduleMicrotask(() {
+ print("five");
+ print("six");
+ completer.complete();
+ });
+
+ print("one");
+ print("two");
+ throw "first error";
+ });
+
+ test('wait', () => completer.future);""",
+ """
+ +0: loading test.dart
+ +0: test
+ one
+ two
+
+ +0 -1: test
+ first error
+ test.dart 24:11 main.<fn>
+
+ three
+ four
+ second error
+ test.dart 13:13 main.<fn>.<fn>
+ ===== asynchronous gap ===========================
+ dart:async scheduleMicrotask
+ test.dart 10:11 main.<fn>
+
+ five
+ six
+
+ +0 -1: wait
+ +1 -1: wait
+ +1 -1: Some tests failed.""");
+ });
+
+ test("prints the full test name before a print", () {
+ _expectReport("""
+ test(
+ 'really gosh dang long test name. Even longer than that. No, yet '
+ 'longer. A little more... okay, that should do it.',
+ () => print('hello'));""",
+ """
+ +0: loading test.dart
+ +0: really ... longer than that. No, yet longer. A little more... okay, that should do it.
+ +0: really gosh dang long test name. Even longer than that. No, yet longer. A little more... okay, that should do it.
+ hello
+
+ +1: really ... longer than that. No, yet longer. A little more... okay, that should do it.
+ +1: All tests passed!""");
+ });
+
+ test("doesn't print a clock update between two prints", () {
+ _expectReport("""
+ test('slow', () async {
+ print('hello');
+ await new Future.delayed(new Duration(seconds: 3));
+ print('goodbye');
+ });""",
+ """
+ +0: loading test.dart
+ +0: slow
+ hello
+ goodbye
+
+ +1: slow
+ +1: All tests passed!""");
+ });
+ });
+
+ group("skip:", () {
+ test("displays skipped tests separately", () {
+ _expectReport("""
+ test('skip 1', () {}, skip: true);
+ test('skip 2', () {}, skip: true);
+ test('skip 3', () {}, skip: true);""",
+ """
+ +0: loading test.dart
+ +0: skip 1
+ +0 ~1: skip 1
+ +0 ~1: skip 2
+ +0 ~2: skip 2
+ +0 ~2: skip 3
+ +0 ~3: skip 3
+ +0 ~3: All tests skipped.""");
+ });
+
+ test("runs skipped tests along with successful tests", () {
+ _expectReport("""
+ test('skip 1', () {}, skip: true);
+ test('success 1', () {});
+ test('skip 2', () {}, skip: true);
+ test('success 2', () {});""",
+ """
+ +0: loading test.dart
+ +0: skip 1
+ +0 ~1: skip 1
+ +0 ~1: success 1
+ +1 ~1: success 1
+ +1 ~1: skip 2
+ +1 ~2: skip 2
+ +1 ~2: success 2
+ +2 ~2: success 2
+ +2 ~2: All tests passed!""");
+ });
+
+ test("runs skipped tests along with successful and failing tests", () {
+ _expectReport("""
+ test('failure 1', () => throw new TestFailure('oh no'));
+ test('skip 1', () {}, skip: true);
+ test('success 1', () {});
+ test('failure 2', () => throw new TestFailure('oh no'));
+ test('skip 2', () {}, skip: true);
+ test('success 2', () {});""",
+ """
+ +0: loading test.dart
+ +0: failure 1
+ +0 -1: failure 1
+ oh no
+ test.dart 6:35 main.<fn>
+
+
+ +0 -1: skip 1
+ +0 ~1 -1: skip 1
+ +0 ~1 -1: success 1
+ +1 ~1 -1: success 1
+ +1 ~1 -1: failure 2
+ +1 ~1 -2: failure 2
+ oh no
+ test.dart 9:35 main.<fn>
+
+
+ +1 ~1 -2: skip 2
+ +1 ~2 -2: skip 2
+ +1 ~2 -2: success 2
+ +2 ~2 -2: success 2
+ +2 ~2 -2: Some tests failed.""");
+ });
+
+ test("displays the skip reason if available", () {
+ _expectReport("""
+ test('skip 1', () {}, skip: 'some reason');
+ test('skip 2', () {}, skip: 'or another');""",
+ """
+ +0: loading test.dart
+ +0: skip 1
+ +0 ~1: skip 1
+ Skip: some reason
+
+ +0 ~1: skip 2
+ +0 ~2: skip 2
+ Skip: or another
+
+ +0 ~2: All tests skipped.""");
+ });
+ });
+}
+
+void _expectReport(String tests, String expected) {
+ var dart = """
+import 'dart:async';
+
+import 'package:test/test.dart';
+
+void main() {
+$tests
+}
+""";
+
+ d.file("test.dart", dart).create();
+
+ var test = runTest(["test.dart"], compact: true);
+ test.shouldExit();
+
+ schedule(() async {
+ var stdoutLines = await test.stdoutStream().toList();
+
+ // Skip the first CR, remove excess trailing whitespace, and trim off
+ // timestamps.
+ var lastLine;
+ var actual = stdoutLines.skip(1).map((line) {
+ if (line.startsWith(" ") || line.isEmpty) return line.trimRight();
+
+ var trimmed = line.trim()
+ .replaceFirst(new RegExp("^[0-9]{2}:[0-9]{2} "), "");
+
+ // Trim identical lines so the test isn't dependent on how fast each test
+ // runs.
+ if (trimmed == lastLine) return null;
+ lastLine = trimmed;
+ return trimmed;
+ }).where((line) => line != null).join("\n");
+
+ // Un-indent the expected string.
+ var indentation = expected.indexOf(new RegExp("[^ ]"));
+ expected = expected.split("\n").map((line) {
+ if (line.isEmpty) return line;
+ return line.substring(indentation);
+ }).join("\n");
+
+ expect(actual, equals(expected));
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698