Index: mojo/public/dart/third_party/test/test/runner/pub_serve_test.dart |
diff --git a/mojo/public/dart/third_party/test/test/runner/pub_serve_test.dart b/mojo/public/dart/third_party/test/test/runner/pub_serve_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..505c04b1fcbb9a158e99a64abfda5d12cd78c826 |
--- /dev/null |
+++ b/mojo/public/dart/third_party/test/test/runner/pub_serve_test.dart |
@@ -0,0 +1,297 @@ |
+// 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 'dart:async'; |
+import 'dart:io'; |
+ |
+import 'package:path/path.dart' as p; |
+import 'package:scheduled_test/descriptor.dart' as d; |
+import 'package:scheduled_test/scheduled_stream.dart'; |
+import 'package:scheduled_test/scheduled_test.dart'; |
+import 'package:test/src/util/exit_codes.dart' as exit_codes; |
+ |
+import '../io.dart'; |
+ |
+/// The `--pub-serve` argument for the test process, based on [pubServePort]. |
+Future<String> get _pubServeArg => |
+ pubServePort.then((port) => '--pub-serve=$port'); |
+ |
+void main() { |
+ useSandbox(() { |
+ d.file("pubspec.yaml", """ |
+name: myapp |
+dependencies: |
+ barback: any |
+ test: {path: ${p.current}} |
+transformers: |
+- myapp: |
+ \$include: test/**_test.dart |
+- test/pub_serve: |
+ \$include: test/**_test.dart |
+dependency_overrides: |
+ matcher: '0.12.0-alpha.0' |
+""").create(); |
+ |
+ d.dir("test", [ |
+ d.file("my_test.dart", """ |
+import 'package:test/test.dart'; |
+ |
+void main() { |
+ test("test", () => expect(true, isTrue)); |
+} |
+""") |
+ ]).create(); |
+ |
+ d.dir("lib", [ |
+ d.file("myapp.dart", """ |
+import 'package:barback/barback.dart'; |
+ |
+class MyTransformer extends Transformer { |
+ final allowedExtensions = '.dart'; |
+ |
+ MyTransformer.asPlugin(); |
+ |
+ Future apply(Transform transform) async { |
+ var contents = await transform.primaryInput.readAsString(); |
+ transform.addOutput(new Asset.fromString( |
+ transform.primaryInput.id, |
+ contents.replaceAll("isFalse", "isTrue"))); |
+ } |
+} |
+""") |
+ ]).create(); |
+ |
+ runPub(['get']).shouldExit(0); |
+ }); |
+ |
+ group("with transformed tests", () { |
+ setUp(() { |
+ // Give the test a failing assertion that the transformer will convert to |
+ // a passing assertion. |
+ d.file("test/my_test.dart", """ |
+import 'package:test/test.dart'; |
+ |
+void main() { |
+ test("test", () => expect(true, isFalse)); |
+} |
+""").create(); |
+ }); |
+ |
+ test("runs those tests in the VM", () { |
+ var pub = runPubServe(); |
+ var test = runTest([_pubServeArg]); |
+ test.stdout.expect(consumeThrough(contains('+1: All tests passed!'))); |
+ test.shouldExit(0); |
+ pub.kill(); |
+ }); |
+ |
+ test("runs those tests on Chrome", () { |
+ var pub = runPubServe(); |
+ var test = runTest([_pubServeArg, '-p', 'chrome']); |
+ test.stdout.expect(consumeThrough(contains('+1: All tests passed!'))); |
+ test.shouldExit(0); |
+ pub.kill(); |
+ }); |
+ |
+ test("runs those tests on content shell", () { |
+ var pub = runPubServe(); |
+ var test = runTest([_pubServeArg, '-p', 'content-shell']); |
+ test.stdout.expect(consumeThrough(contains('+1: All tests passed!'))); |
+ test.shouldExit(0); |
+ pub.kill(); |
+ }); |
+ |
+ test("gracefully handles pub serve running on the wrong directory for " |
+ "VM tests", () { |
+ d.dir("web").create(); |
+ |
+ var pub = runPubServe(args: ['web']); |
+ var test = runTest([_pubServeArg]); |
+ test.stdout.expect(containsInOrder([ |
+ '-1: loading ${p.join("test", "my_test.dart")}', |
+ 'Failed to load "${p.join("test", "my_test.dart")}":', |
+ '404 Not Found', |
+ 'Make sure "pub serve" is serving the test/ directory.' |
+ ])); |
+ test.shouldExit(1); |
+ |
+ pub.kill(); |
+ }); |
+ |
+ test("gracefully handles pub serve running on the wrong directory for " |
+ "browser tests", () { |
+ d.dir("web").create(); |
+ |
+ var pub = runPubServe(args: ['web']); |
+ var test = runTest([_pubServeArg, '-p', 'chrome']); |
+ test.stdout.expect(containsInOrder([ |
+ '-1: compiling ${p.join("test", "my_test.dart")}', |
+ 'Failed to load "${p.join("test", "my_test.dart")}":', |
+ '404 Not Found', |
+ 'Make sure "pub serve" is serving the test/ directory.' |
+ ])); |
+ test.shouldExit(1); |
+ |
+ pub.kill(); |
+ }); |
+ |
+ test("gracefully handles unconfigured transformers", () { |
+ d.file("pubspec.yaml", """ |
+name: myapp |
+dependencies: |
+ barback: any |
+ test: {path: ${p.current}} |
+""").create(); |
+ |
+ var pub = runPubServe(); |
+ var test = runTest([_pubServeArg]); |
+ expectStderrEquals(test, ''' |
+When using --pub-serve, you must include the "test/pub_serve" transformer in |
+your pubspec: |
+ |
+transformers: |
+- test/pub_serve: |
+ \$include: test/**_test.dart |
+'''); |
+ test.shouldExit(exit_codes.data); |
+ |
+ pub.kill(); |
+ }); |
+ }); |
+ |
+ group("uses a custom HTML file", () { |
+ setUp(() { |
+ d.dir("test", [ |
+ d.file("test.dart", """ |
+import 'dart:html'; |
+ |
+import 'package:test/test.dart'; |
+ |
+void main() { |
+ test("failure", () { |
+ expect(document.query('#foo'), isNull); |
+ }); |
+} |
+"""), |
+ |
+ 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> |
+""") |
+ ]).create(); |
+ }); |
+ |
+ test("on Chrome", () { |
+ var pub = runPubServe(); |
+ var test = runTest([_pubServeArg, '-p', 'chrome']); |
+ test.stdout.expect(consumeThrough(contains('+1: All tests passed!'))); |
+ test.shouldExit(0); |
+ pub.kill(); |
+ }); |
+ |
+ test("on content shell", () { |
+ var pub = runPubServe(); |
+ var test = runTest([_pubServeArg, '-p', 'content-shell']); |
+ test.stdout.expect(consumeThrough(contains('+1: All tests passed!'))); |
+ test.shouldExit(0); |
+ pub.kill(); |
+ }); |
+ }); |
+ |
+ group("with a failing test", () { |
+ setUp(() { |
+ d.file("test/my_test.dart", """ |
+import 'dart:html'; |
+ |
+import 'package:test/test.dart'; |
+ |
+void main() { |
+ test("failure", () => throw 'oh no'); |
+} |
+""").create(); |
+ }); |
+ |
+ test("dartifies stack traces for JS-compiled tests by default", () { |
+ var pub = runPubServe(); |
+ var test = runTest([_pubServeArg, '-p', 'chrome', '--verbose-trace']); |
+ test.stdout.expect(containsInOrder([ |
+ " main.<fn>", |
+ "package:test", |
+ "dart:async/zone.dart" |
+ ])); |
+ test.shouldExit(1); |
+ pub.kill(); |
+ }); |
+ |
+ test("doesn't dartify stack traces for JS-compiled tests with --js-trace", |
+ () { |
+ var pub = runPubServe(); |
+ var test = runTest([ |
+ _pubServeArg, |
+ '-p', 'chrome', |
+ '--js-trace', |
+ '--verbose-trace' |
+ ]); |
+ |
+ 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); |
+ |
+ pub.kill(); |
+ }); |
+ }); |
+ |
+ test("gracefully handles pub serve not running for VM tests", () { |
+ var test = runTest(['--pub-serve=54321']); |
+ test.stdout.expect(containsInOrder([ |
+ '-1: loading ${p.join("test", "my_test.dart")}', |
+ 'Failed to load "${p.join("test", "my_test.dart")}":', |
+ 'Error getting http://localhost:54321/my_test.dart.vm_test.dart: ' |
+ 'Connection refused', |
+ 'Make sure "pub serve" is running.' |
+ ])); |
+ test.shouldExit(1); |
+ }); |
+ |
+ test("gracefully handles pub serve not running for browser tests", () { |
+ var test = runTest(['--pub-serve=54321', '-p', 'chrome']); |
+ var message = Platform.isWindows |
+ ? 'The remote computer refused the network connection.' |
+ : 'Connection refused (errno '; |
+ |
+ test.stdout.expect(containsInOrder([ |
+ '-1: compiling ${p.join("test", "my_test.dart")}', |
+ 'Failed to load "${p.join("test", "my_test.dart")}":', |
+ 'Error getting http://localhost:54321/my_test.dart.browser_test.dart.js' |
+ '.map: $message', |
+ 'Make sure "pub serve" is running.' |
+ ])); |
+ test.shouldExit(1); |
+ }); |
+ |
+ test("gracefully handles a test file not being in test/", () { |
+ schedule(() { |
+ new File(p.join(sandbox, 'test/my_test.dart')) |
+ .copySync(p.join(sandbox, 'my_test.dart')); |
+ }); |
+ |
+ var test = runTest(['--pub-serve=54321', 'my_test.dart']); |
+ test.stdout.expect(containsInOrder([ |
+ '-1: loading my_test.dart', |
+ 'Failed to load "my_test.dart": When using "pub serve", all test files ' |
+ 'must be in test/.' |
+ ])); |
+ test.shouldExit(1); |
+ }); |
+} |