| Index: lib/src/executable.dart
|
| diff --git a/lib/src/executable.dart b/lib/src/executable.dart
|
| index fe403b2a1f26423aed50fcc52059e55c28de2aba..413343f58e5eb871c333f495a55d31fa5d8fb073 100644
|
| --- a/lib/src/executable.dart
|
| +++ b/lib/src/executable.dart
|
| @@ -13,6 +13,7 @@ import 'dart:isolate';
|
|
|
| import 'package:args/args.dart';
|
| import 'package:stack_trace/stack_trace.dart';
|
| +import 'package:yaml/yaml.dart';
|
|
|
| import 'backend/test_platform.dart';
|
| import 'runner/reporter/compact.dart';
|
| @@ -25,6 +26,33 @@ import 'utils.dart';
|
| /// The argument parser used to parse the executable arguments.
|
| final _parser = new ArgParser(allowTrailingOptions: true);
|
|
|
| +/// Returns whether the current package has a pubspec which uses the
|
| +/// `test/pub_serve` transformer.
|
| +bool get _usesTransformer {
|
| + if (!new File('pubspec.yaml').existsSync()) return false;
|
| + var contents = new File('pubspec.yaml').readAsStringSync();
|
| +
|
| + var yaml;
|
| + try {
|
| + yaml = loadYaml(contents);
|
| + } on FormatException {
|
| + return false;
|
| + }
|
| +
|
| + if (yaml is! Map) return false;
|
| +
|
| + var transformers = yaml['transformers'];
|
| + if (transformers == null) return false;
|
| + if (transformers is! List) return false;
|
| +
|
| + return transformers.any((transformer) {
|
| + if (transformer is String) return transformer == 'test/pub_serve';
|
| + if (transformer is! Map) return false;
|
| + if (transformer.keys.length != 1) return false;
|
| + return transformer.keys.single == 'test/pub_serve';
|
| + });
|
| +}
|
| +
|
| void main(List<String> args) {
|
| _parser.addFlag("help", abbr: "h", negatable: false,
|
| help: "Shows this usage information.");
|
| @@ -42,6 +70,10 @@ void main(List<String> args) {
|
| allowed: TestPlatform.all.map((platform) => platform.identifier).toList(),
|
| defaultsTo: 'vm',
|
| allowMultiple: true);
|
| + _parser.addOption("pub-serve",
|
| + help: 'The port of a pub serve instance serving "test/".',
|
| + hide: !supportsPubServe,
|
| + valueHelp: 'port');
|
| _parser.addFlag("color", defaultsTo: null,
|
| help: 'Whether to use terminal colors.\n(auto-detected by default)');
|
|
|
| @@ -62,9 +94,29 @@ void main(List<String> args) {
|
| var color = options["color"];
|
| if (color == null) color = canUseSpecialChars;
|
|
|
| + var pubServeUrl;
|
| + if (options["pub-serve"] != null) {
|
| + pubServeUrl = Uri.parse("http://localhost:${options['pub-serve']}");
|
| + if (!_usesTransformer) {
|
| + stderr.write('''
|
| +When using --pub-serve, you must include the "test/pub_serve" transformer in
|
| +your pubspec:
|
| +
|
| +transformers:
|
| +- test/pub_serve:
|
| + \$include: test/**_test.dart
|
| +''');
|
| + exitCode = exit_codes.data;
|
| + return;
|
| + }
|
| + }
|
| +
|
| var platforms = options["platform"].map(TestPlatform.find);
|
| var loader = new Loader(platforms,
|
| - packageRoot: options["package-root"], color: color);
|
| + pubServeUrl: pubServeUrl,
|
| + packageRoot: options["package-root"],
|
| + color: color);
|
| +
|
| new Future.sync(() {
|
| var paths = options.rest;
|
| if (paths.isEmpty) {
|
|
|