| Index: mojo/public/dart/third_party/test/test/runner/browser/runner_test.dart
|
| diff --git a/mojo/public/dart/third_party/test/test/runner/browser/runner_test.dart b/mojo/public/dart/third_party/test/test/runner/browser/runner_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..14ad58daad612978ae5c295bf40a7b3ddc0bab6b
|
| --- /dev/null
|
| +++ b/mojo/public/dart/third_party/test/test/runner/browser/runner_test.dart
|
| @@ -0,0 +1,619 @@
|
| +// 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';
|
| +
|
| +final _success = """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("success", () {});
|
| +}
|
| +""";
|
| +
|
| +final _failure = """
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("failure", () => throw new TestFailure("oh no"));
|
| +}
|
| +""";
|
| +
|
| +void main() {
|
| + useSandbox();
|
| +
|
| + group("fails gracefully if", () {
|
| + test("a test file fails to compile", () {
|
| + d.file("test.dart", "invalid Dart file").create();
|
| + var test = runTest(["-p", "chrome", "test.dart"]);
|
| +
|
| + test.stdout.expect(containsInOrder([
|
| + "Expected a declaration, but got 'invalid'",
|
| + '-1: compiling test.dart',
|
| + 'Failed to load "test.dart": dart2js failed.'
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("a test file throws", () {
|
| + d.file("test.dart", "void main() => throw 'oh no';").create();
|
| +
|
| + var test = runTest(["-p", "chrome", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + '-1: compiling test.dart',
|
| + 'Failed to load "test.dart": oh no'
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("a test file doesn't have a main defined", () {
|
| + d.file("test.dart", "void foo() {}").create();
|
| +
|
| + var test = runTest(["-p", "chrome", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + '-1: compiling test.dart',
|
| + 'Failed to load "test.dart": No top-level main() function defined.'
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("a test file has a non-function main", () {
|
| + d.file("test.dart", "int main;").create();
|
| +
|
| + var test = runTest(["-p", "chrome", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + '-1: compiling test.dart',
|
| + 'Failed to load "test.dart": Top-level main getter is not a function.'
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("a test file has a main with arguments", () {
|
| + d.file("test.dart", "void main(arg) {}").create();
|
| +
|
| + var test = runTest(["-p", "chrome", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + '-1: compiling test.dart',
|
| + 'Failed to load "test.dart": Top-level main() function takes arguments.'
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("a custom HTML file has no script tag", () {
|
| + d.file("test.dart", "void main() {}").create();
|
| +
|
| + d.file("test.html", """
|
| +<html>
|
| +<head>
|
| + <link rel="x-dart-test" href="test.dart">
|
| +</head>
|
| +</html>
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + '-1: loading test.dart',
|
| + 'Failed to load "test.dart": "test.html" must contain '
|
| + '<script src="packages/test/dart.js"></script>.'
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("a custom HTML file has no link", () {
|
| + d.file("test.dart", "void main() {}").create();
|
| +
|
| + d.file("test.html", """
|
| +<html>
|
| +<head>
|
| + <script src="packages/test/dart.js"></script>
|
| +</head>
|
| +</html>
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + '-1: loading test.dart',
|
| + 'Failed to load "test.dart": Expected exactly 1 '
|
| + '<link rel="x-dart-test"> in test.html, found 0.'
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("a custom HTML file has too many links", () {
|
| + d.file("test.dart", "void main() {}").create();
|
| +
|
| + d.file("test.html", """
|
| +<html>
|
| +<head>
|
| + <link rel='x-dart-test' href='test.dart'>
|
| + <link rel='x-dart-test' href='test.dart'>
|
| + <script src="packages/test/dart.js"></script>
|
| +</head>
|
| +</html>
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + '-1: loading test.dart',
|
| + 'Failed to load "test.dart": Expected exactly 1 '
|
| + '<link rel="x-dart-test"> in test.html, found 2.'
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("a custom HTML file has no href in the link", () {
|
| + d.file("test.dart", "void main() {}").create();
|
| +
|
| + d.file("test.html", """
|
| +<html>
|
| +<head>
|
| + <link rel='x-dart-test'>
|
| + <script src="packages/test/dart.js"></script>
|
| +</head>
|
| +</html>
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + '-1: loading test.dart',
|
| + 'Failed to load "test.dart": Expected <link rel="x-dart-test"> in '
|
| + 'test.html to have an "href" attribute.'
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("a custom HTML file has an invalid test URL", () {
|
| + d.file("test.dart", "void main() {}").create();
|
| +
|
| + d.file("test.html", """
|
| +<html>
|
| +<head>
|
| + <link rel='x-dart-test' href='wrong.dart'>
|
| + <script src="packages/test/dart.js"></script>
|
| +</head>
|
| +</html>
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + '-1: loading test.dart',
|
| + 'Failed to load "test.dart": Failed to load script at '
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + // TODO(nweiz): test what happens when a test file is unreadable once issue
|
| + // 15078 is fixed.
|
| + });
|
| +
|
| + group("runs successful tests", () {
|
| + test("on a JS and non-JS browser", () {
|
| + d.file("test.dart", _success).create();
|
| + var test = runTest(["-p", "content-shell", "-p", "chrome", "test.dart"]);
|
| +
|
| + test.stdout.fork().expect(consumeThrough(contains("[Chrome] compiling")));
|
| + test.stdout.expect(never(contains("[Dartium Content Shell] compiling")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + test("on a browser and the VM", () {
|
| + d.file("test.dart", _success).create();
|
| + var test = runTest(["-p", "content-shell", "-p", "vm", "test.dart"]);
|
| +
|
| + test.stdout.expect(consumeThrough(contains("+2: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + // Regression test; this broke in 0.12.0-beta.9.
|
| + test("on a file in a subdirectory", () {
|
| + d.dir("dir", [d.file("test.dart", _success)]).create();
|
| +
|
| + var test = runTest(["-p", "chrome", "dir/test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + group("with a custom HTML file", () {
|
| + setUp(() {
|
| + d.file("test.dart", """
|
| +import 'dart:html';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("success", () {
|
| + expect(document.query('#foo'), isNotNull);
|
| + });
|
| +}
|
| +""").create();
|
| +
|
| + d.file("test.html", """
|
| +<html>
|
| +<head>
|
| + <link rel='x-dart-test' href='test.dart'>
|
| + <script src="packages/test/dart.js"></script>
|
| +</head>
|
| +<body>
|
| + <div id="foo"></div>
|
| +</body>
|
| +</html>
|
| +""").create();
|
| + });
|
| +
|
| + test("on content shell", () {
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + test("on Chrome", () {
|
| + var test = runTest(["-p", "chrome", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + // Regression test for https://github.com/dart-lang/test/issues/82.
|
| + test("ignores irrelevant link tags", () {
|
| + d.file("test.html", """
|
| +<html>
|
| +<head>
|
| + <link rel='x-dart-test-not'>
|
| + <link rel='other' href='test.dart'>
|
| + <link rel='x-dart-test' href='test.dart'>
|
| + <script src="packages/test/dart.js"></script>
|
| +</head>
|
| +<body>
|
| + <div id="foo"></div>
|
| +</body>
|
| +</html>
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| + });
|
| + });
|
| +
|
| + group("runs failing tests", () {
|
| + test("that fail only on the browser", () {
|
| + d.file("test.dart", """
|
| +import 'dart:async';
|
| +
|
| +import 'package:path/path.dart' as p;
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("test", () {
|
| + if (p.style == p.Style.url) throw new TestFailure("oh no");
|
| + });
|
| +}
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "-p", "vm", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1 -1: Some tests failed.")));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("that fail only on the VM", () {
|
| + d.file("test.dart", """
|
| +import 'dart:async';
|
| +
|
| +import 'package:path/path.dart' as p;
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("test", () {
|
| + if (p.style != p.Style.url) throw new TestFailure("oh no");
|
| + });
|
| +}
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "-p", "vm", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1 -1: Some tests failed.")));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + group("with a custom HTML file", () {
|
| + setUp(() {
|
| + d.file("test.dart", """
|
| +import 'dart:html';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("failure", () {
|
| + expect(document.query('#foo'), isNull);
|
| + });
|
| +}
|
| +""").create();
|
| +
|
| + d.file("test.html", """
|
| +<html>
|
| +<head>
|
| + <link rel='x-dart-test' href='test.dart'>
|
| + <script src="packages/test/dart.js"></script>
|
| +</head>
|
| +<body>
|
| + <div id="foo"></div>
|
| +</body>
|
| +</html>
|
| +""").create();
|
| + });
|
| +
|
| + test("on content shell", () {
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("-1: Some tests failed.")));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("on Chrome", () {
|
| + var test = runTest(["-p", "chrome", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("-1: Some tests failed.")));
|
| + test.shouldExit(1);
|
| + });
|
| + });
|
| + });
|
| +
|
| + test("the compiler uses colors if the test runner uses colors", () {
|
| + d.file("test.dart", "String main() => 12;\n").create();
|
| +
|
| + var test = runTest(["--color", "-p", "chrome", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains('\u001b[35m')));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("forwards prints from the browser test", () {
|
| + d.file("test.dart", """
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("test", () {
|
| + print("Hello,");
|
| + return new Future(() => print("world!"));
|
| + });
|
| +}
|
| +""").create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(inOrder([
|
| + consumeThrough("Hello,"),
|
| + "world!"
|
| + ]));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + test("dartifies stack traces for JS-compiled tests by default", () {
|
| + d.file("test.dart", _failure).create();
|
| +
|
| + var test = runTest(["-p", "chrome", "--verbose-trace", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + " main.<fn>",
|
| + "package:test",
|
| + "dart:async/zone.dart"
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("doesn't dartify stack traces for JS-compiled tests with --js-trace", () {
|
| + d.file("test.dart", _failure).create();
|
| +
|
| + var test = runTest(
|
| + ["-p", "chrome", "--verbose-trace", "--js-trace", "test.dart"]);
|
| + test.stdout.fork().expect(never(endsWith(" main.<fn>")));
|
| + test.stdout.fork().expect(never(contains("package:test")));
|
| + test.stdout.fork().expect(never(contains("dart:async/zone.dart")));
|
| + test.stdout.expect(consumeThrough(contains("-1: Some tests failed.")));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("respects top-level @Timeout declarations", () {
|
| + d.file("test.dart", '''
|
| +@Timeout(const Duration(seconds: 0))
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("timeout", () {});
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + "Test timed out after 0 seconds.",
|
| + "-1: Some tests failed."
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + group("with onPlatform", () {
|
| + test("respects matching Skips", () {
|
| + d.file("test.dart", '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("fail", () => throw 'oh no', onPlatform: {"browser": new Skip()});
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+0 ~1: All tests skipped.")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + test("ignores non-matching Skips", () {
|
| + d.file("test.dart", '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("success", () {}, onPlatform: {"vm": new Skip()});
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + test("respects matching Timeouts", () {
|
| + d.file("test.dart", '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("fail", () => throw 'oh no', onPlatform: {
|
| + "browser": new Timeout(new Duration(seconds: 0))
|
| + });
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + "Test timed out after 0 seconds.",
|
| + "-1: Some tests failed."
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("ignores non-matching Timeouts", () {
|
| + d.file("test.dart", '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("success", () {}, onPlatform: {
|
| + "vm": new Timeout(new Duration(seconds: 0))
|
| + });
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + test("applies matching platforms in order", () {
|
| + d.file("test.dart", '''
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("success", () {}, onPlatform: {
|
| + "browser": new Skip("first"),
|
| + "browser || windows": new Skip("second"),
|
| + "browser || linux": new Skip("third"),
|
| + "browser || mac-os": new Skip("fourth"),
|
| + "browser || android": new Skip("fifth")
|
| + });
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.fork().expect(never(contains("Skip: first")));
|
| + test.stdout.fork().expect(never(contains("Skip: second")));
|
| + test.stdout.fork().expect(never(contains("Skip: third")));
|
| + test.stdout.fork().expect(never(contains("Skip: fourth")));
|
| + test.stdout.expect(consumeThrough(contains("Skip: fifth")));
|
| + test.shouldExit(0);
|
| + });
|
| + });
|
| +
|
| + group("with an @OnPlatform annotation", () {
|
| + test("respects matching Skips", () {
|
| + d.file("test.dart", '''
|
| +@OnPlatform(const {"browser": const Skip()})
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("fail", () => throw 'oh no');
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("~1: All tests skipped.")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + test("ignores non-matching Skips", () {
|
| + d.file("test.dart", '''
|
| +@OnPlatform(const {"vm": const Skip()})
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("success", () {});
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| +
|
| + test("respects matching Timeouts", () {
|
| + d.file("test.dart", '''
|
| +@OnPlatform(const {
|
| + "browser": const Timeout(const Duration(seconds: 0))
|
| +})
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("fail", () => throw 'oh no');
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(containsInOrder([
|
| + "Test timed out after 0 seconds.",
|
| + "-1: Some tests failed."
|
| + ]));
|
| + test.shouldExit(1);
|
| + });
|
| +
|
| + test("ignores non-matching Timeouts", () {
|
| + d.file("test.dart", '''
|
| +@OnPlatform(const {
|
| + "vm": const Timeout(const Duration(seconds: 0))
|
| +})
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +
|
| +void main() {
|
| + test("success", () {});
|
| +}
|
| +''').create();
|
| +
|
| + var test = runTest(["-p", "content-shell", "test.dart"]);
|
| + test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
|
| + test.shouldExit(0);
|
| + });
|
| + });
|
| +}
|
|
|