Index: test/runner/pub_serve_test.dart |
diff --git a/test/runner/pub_serve_test.dart b/test/runner/pub_serve_test.dart |
index 7841a546840a3a31bded4175a37a38ee22da6ba7..505c04b1fcbb9a158e99a64abfda5d12cd78c826 100644 |
--- a/test/runner/pub_serve_test.dart |
+++ b/test/runner/pub_serve_test.dart |
@@ -4,21 +4,24 @@ |
@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 'package:test/test.dart'; |
import '../io.dart'; |
-String _sandbox; |
+/// The `--pub-serve` argument for the test process, based on [pubServePort]. |
+Future<String> get _pubServeArg => |
+ pubServePort.then((port) => '--pub-serve=$port'); |
void main() { |
- setUp(() { |
- _sandbox = Directory.systemTemp.createTempSync('test_').path; |
- |
- new File(p.join(_sandbox, "pubspec.yaml")).writeAsStringSync(""" |
+ useSandbox(() { |
+ d.file("pubspec.yaml", """ |
name: myapp |
dependencies: |
barback: any |
@@ -30,21 +33,20 @@ transformers: |
\$include: test/**_test.dart |
dependency_overrides: |
matcher: '0.12.0-alpha.0' |
-"""); |
- |
- new Directory(p.join(_sandbox, "test")).createSync(); |
+""").create(); |
- new File(p.join(_sandbox, "test", "my_test.dart")).writeAsStringSync(""" |
+ d.dir("test", [ |
+ d.file("my_test.dart", """ |
import 'package:test/test.dart'; |
void main() { |
test("test", () => expect(true, isTrue)); |
} |
-"""); |
+""") |
+ ]).create(); |
- new Directory(p.join(_sandbox, "lib")).createSync(); |
- |
- new File(p.join(_sandbox, "lib", "myapp.dart")).writeAsStringSync(""" |
+ d.dir("lib", [ |
+ d.file("myapp.dart", """ |
import 'package:barback/barback.dart'; |
class MyTransformer extends Transformer { |
@@ -59,143 +61,111 @@ class MyTransformer extends Transformer { |
contents.replaceAll("isFalse", "isTrue"))); |
} |
} |
-"""); |
- |
- var pubGetResult = runPub(['get'], workingDirectory: _sandbox); |
- expect(pubGetResult.exitCode, equals(0)); |
- }); |
+""") |
+ ]).create(); |
- tearDown(() { |
- // On Windows, there's no way to shut down the actual "pub serve" process. |
- // Killing the process we start will just kill the batch file wrapper (issue |
- // 23304), not the underlying "pub serve" process. Since that process has |
- // locks on files in the sandbox, we can't delete the sandbox on Windows |
- // without errors. |
- if (Platform.isWindows) return; |
- |
- new Directory(_sandbox).deleteSync(recursive: true); |
+ runPub(['get']).shouldExit(0); |
}); |
group("with transformed tests", () { |
setUp(() { |
// Give the test a failing assertion that the transformer will convert to |
// a passing assertion. |
- new File(p.join(_sandbox, "test", "my_test.dart")).writeAsStringSync(""" |
+ 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", () async { |
- var pair = await startPubServe(workingDirectory: _sandbox); |
- try { |
- var result = runTest(['--pub-serve=${pair.last}'], |
- workingDirectory: _sandbox); |
- expect(result.exitCode, equals(0)); |
- expect(result.stdout, contains('+1: All tests passed!')); |
- } finally { |
- pair.first.kill(); |
- } |
+ 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", () async { |
- var pair = await startPubServe(workingDirectory: _sandbox); |
- try { |
- var result = runTest(['--pub-serve=${pair.last}', '-p', 'chrome'], |
- workingDirectory: _sandbox); |
- expect(result.exitCode, equals(0)); |
- expect(result.stdout, contains('+1: All tests passed!')); |
- } finally { |
- pair.first.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", () async { |
- var pair = await startPubServe(workingDirectory: _sandbox); |
- try { |
- var result = runTest( |
- ['--pub-serve=${pair.last}', '-p', 'content-shell'], |
- workingDirectory: _sandbox); |
- expect(result.exitCode, equals(0)); |
- expect(result.stdout, contains('+1: All tests passed!')); |
- } finally { |
- pair.first.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", () async { |
- new Directory(p.join(_sandbox, "web")).createSync(); |
- |
- var pair = await startPubServe(args: ['web'], workingDirectory: _sandbox); |
- try { |
- var result = runTest(['--pub-serve=${pair.last}'], |
- workingDirectory: _sandbox); |
- expect(result.stdout, allOf([ |
- contains('-1: loading ${p.join("test", "my_test.dart")}'), |
- contains('Failed to load "${p.join("test", "my_test.dart")}":'), |
- contains('404 Not Found'), |
- contains('Make sure "pub serve" is serving the test/ directory.') |
- ])); |
- expect(result.exitCode, equals(1)); |
- } finally { |
- pair.first.kill(); |
- } |
+ "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", () async { |
- new Directory(p.join(_sandbox, "web")).createSync(); |
- |
- var pair = await startPubServe(args: ['web'], workingDirectory: _sandbox); |
- try { |
- var result = runTest(['--pub-serve=${pair.last}', '-p', 'chrome'], |
- workingDirectory: _sandbox); |
- expect(result.stdout, allOf([ |
- contains('-1: compiling ${p.join("test", "my_test.dart")}'), |
- contains('Failed to load "${p.join("test", "my_test.dart")}":'), |
- contains('404 Not Found'), |
- contains('Make sure "pub serve" is serving the test/ directory.') |
- ])); |
- expect(result.exitCode, equals(1)); |
- } finally { |
- pair.first.kill(); |
- } |
+ "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", () async { |
- new File(p.join(_sandbox, "pubspec.yaml")).writeAsStringSync(""" |
+ test("gracefully handles unconfigured transformers", () { |
+ d.file("pubspec.yaml", """ |
name: myapp |
dependencies: |
barback: any |
test: {path: ${p.current}} |
-"""); |
- |
- var pair = await startPubServe(workingDirectory: _sandbox); |
- try { |
- var result = runTest(['--pub-serve=${pair.last}'], |
- workingDirectory: _sandbox); |
- expect(result.exitCode, equals(exit_codes.data)); |
- expect(result.stderr, equals(''' |
+""").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 |
-''')); |
- } finally { |
- pair.first.kill(); |
- } |
+'''); |
+ test.shouldExit(exit_codes.data); |
+ |
+ pub.kill(); |
}); |
}); |
group("uses a custom HTML file", () { |
setUp(() { |
- new File(p.join(_sandbox, "test", "test.dart")).writeAsStringSync(""" |
+ d.dir("test", [ |
+ d.file("test.dart", """ |
import 'dart:html'; |
import 'package:test/test.dart'; |
@@ -205,9 +175,9 @@ void main() { |
expect(document.query('#foo'), isNull); |
}); |
} |
-"""); |
+"""), |
- new File(p.join(_sandbox, "test", "test.html")).writeAsStringSync(""" |
+ d.file("test.html", """ |
<html> |
<head> |
<link rel='x-dart-test' href='test.dart'> |
@@ -216,39 +186,30 @@ void main() { |
<body> |
<div id="foo"></div> |
</body> |
-"""); |
+""") |
+ ]).create(); |
}); |
- test("on Chrome", () async { |
- var pair = await startPubServe(workingDirectory: _sandbox); |
- try { |
- var result = runTest(['--pub-serve=${pair.last}', '-p', 'chrome'], |
- workingDirectory: _sandbox); |
- expect(result.exitCode, equals(0)); |
- expect(result.stdout, contains('+1: All tests passed!')); |
- } finally { |
- pair.first.kill(); |
- } |
+ 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", () async { |
- var pair = await startPubServe(workingDirectory: _sandbox); |
- try { |
- var result = runTest( |
- ['--pub-serve=${pair.last}', '-p', 'content-shell'], |
- workingDirectory: _sandbox); |
- expect(result.exitCode, equals(0)); |
- expect(result.stdout, contains('+1: All tests passed!')); |
- } finally { |
- pair.first.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(() { |
- new File(p.join(_sandbox, "test", "my_test.dart")).writeAsStringSync(""" |
+ d.file("test/my_test.dart", """ |
import 'dart:html'; |
import 'package:test/test.dart'; |
@@ -256,88 +217,81 @@ import 'package:test/test.dart'; |
void main() { |
test("failure", () => throw 'oh no'); |
} |
-"""); |
+""").create(); |
}); |
- test("dartifies stack traces for JS-compiled tests by default", () async { |
- var pair = await startPubServe(workingDirectory: _sandbox); |
- try { |
- var result = runTest([ |
- '--pub-serve=${pair.last}', |
- '-p', 'chrome', |
- '--verbose-trace' |
- ], workingDirectory: _sandbox); |
- expect(result.stdout, contains(" main.<fn>\n")); |
- expect(result.stdout, contains("package:test")); |
- expect(result.stdout, contains("dart:async/zone.dart")); |
- expect(result.exitCode, equals(1)); |
- } finally { |
- pair.first.kill(); |
- } |
+ 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", |
- () async { |
- var pair = await startPubServe(workingDirectory: _sandbox); |
- try { |
- var result = runTest([ |
- '--pub-serve=${pair.last}', |
- '-p', 'chrome', |
- '--js-trace', |
- '--verbose-trace' |
- ], workingDirectory: _sandbox); |
- expect(result.stdout, isNot(contains(" main.<fn>\n"))); |
- expect(result.stdout, isNot(contains("package:test"))); |
- expect(result.stdout, isNot(contains("dart:async/zone.dart"))); |
- expect(result.exitCode, equals(1)); |
- } finally { |
- pair.first.kill(); |
- } |
+ () { |
+ 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 result = runTest(['--pub-serve=54321'], |
- workingDirectory: _sandbox); |
- expect(result.stdout, allOf([ |
- contains('-1: loading ${p.join("test", "my_test.dart")}'), |
- contains(''' |
- 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.''') |
+ 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.' |
])); |
- expect(result.exitCode, equals(1)); |
+ test.shouldExit(1); |
}); |
test("gracefully handles pub serve not running for browser tests", () { |
- var result = runTest(['--pub-serve=54321', '-p', 'chrome'], |
- workingDirectory: _sandbox); |
+ var test = runTest(['--pub-serve=54321', '-p', 'chrome']); |
var message = Platform.isWindows |
? 'The remote computer refused the network connection.' |
: 'Connection refused (errno '; |
- expect(result.stdout, allOf([ |
- contains('-1: compiling ${p.join("test", "my_test.dart")}'), |
- contains('Failed to load "${p.join("test", "my_test.dart")}":'), |
- contains('Error getting http://localhost:54321/my_test.dart.browser_test' |
- '.dart.js.map: $message'), |
- contains('Make sure "pub serve" is running.') |
+ 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.' |
])); |
- expect(result.exitCode, equals(1)); |
+ test.shouldExit(1); |
}); |
test("gracefully handles a test file not being in test/", () { |
- new File(p.join(_sandbox, 'test/my_test.dart')) |
- .copySync(p.join(_sandbox, 'my_test.dart')); |
- |
- var result = runTest(['--pub-serve=54321', 'my_test.dart'], |
- workingDirectory: _sandbox); |
- expect(result.stdout, allOf([ |
- contains('-1: loading my_test.dart'), |
- contains( |
- 'Failed to load "my_test.dart": When using "pub serve", all test ' |
- 'files must be in test/.\n') |
+ 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/.' |
])); |
- expect(result.exitCode, equals(1)); |
+ test.shouldExit(1); |
}); |
} |