| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 // TODO(nweiz): Remove this tag when we can get [packageDir] working without it | 5 // TODO(nweiz): Remove this tag when we can get [packageDir] working without it |
| 6 // (dart-lang/sdk#24022). | 6 // (dart-lang/sdk#24022). |
| 7 library test.test.io; | 7 library test.test.io; |
| 8 | 8 |
| 9 import 'dart:async'; | 9 import 'dart:async'; |
| 10 import 'dart:io'; | 10 import 'dart:io'; |
| 11 import 'dart:isolate'; |
| 11 | 12 |
| 13 import 'package:package_resolver/package_resolver.dart'; |
| 12 import 'package:path/path.dart' as p; | 14 import 'package:path/path.dart' as p; |
| 13 import 'package:scheduled_test/descriptor.dart' as d; | 15 import 'package:scheduled_test/descriptor.dart' as d; |
| 14 import 'package:scheduled_test/scheduled_process.dart'; | 16 import 'package:scheduled_test/scheduled_process.dart'; |
| 15 import 'package:scheduled_test/scheduled_stream.dart'; | 17 import 'package:scheduled_test/scheduled_stream.dart'; |
| 16 import 'package:scheduled_test/scheduled_test.dart'; | 18 import 'package:scheduled_test/scheduled_test.dart'; |
| 17 import 'package:test/src/util/io.dart'; | 19 import 'package:test/src/util/io.dart'; |
| 18 | 20 |
| 19 /// The path to the root directory of the `test` package. | 21 /// The path to the root directory of the `test` package. |
| 20 final String packageDir = p.dirname(p.dirname(libraryPath(#test.test.io))); | 22 final Future<String> packageDir = PackageResolver.current.packagePath('test'); |
| 21 | 23 |
| 22 /// The path to the `pub` executable in the current Dart SDK. | 24 /// The path to the `pub` executable in the current Dart SDK. |
| 23 final _pubPath = p.absolute(p.join( | 25 final _pubPath = p.absolute(p.join( |
| 24 p.dirname(Platform.resolvedExecutable), | 26 p.dirname(Platform.resolvedExecutable), |
| 25 Platform.isWindows ? 'pub.bat' : 'pub')); | 27 Platform.isWindows ? 'pub.bat' : 'pub')); |
| 26 | 28 |
| 27 /// The platform-specific message emitted when a nonexistent file is loaded. | 29 /// The platform-specific message emitted when a nonexistent file is loaded. |
| 28 final String noSuchFileMessage = Platform.isWindows | 30 final String noSuchFileMessage = Platform.isWindows |
| 29 ? "The system cannot find the file specified." | 31 ? "The system cannot find the file specified." |
| 30 : "No such file or directory"; | 32 : "No such file or directory"; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 /// Runs the test executable with the package root set properly. | 103 /// Runs the test executable with the package root set properly. |
| 102 /// | 104 /// |
| 103 /// If [forwardStdio] is true, the standard output and error from the process | 105 /// If [forwardStdio] is true, the standard output and error from the process |
| 104 /// will be printed as part of the parent test. This is used for debugging. | 106 /// will be printed as part of the parent test. This is used for debugging. |
| 105 ScheduledProcess runTest(List<String> args, {String reporter, | 107 ScheduledProcess runTest(List<String> args, {String reporter, |
| 106 int concurrency, Map<String, String> environment, | 108 int concurrency, Map<String, String> environment, |
| 107 bool forwardStdio: false}) { | 109 bool forwardStdio: false}) { |
| 108 concurrency ??= 1; | 110 concurrency ??= 1; |
| 109 | 111 |
| 110 var allArgs = [ | 112 var allArgs = [ |
| 111 p.absolute(p.join(packageDir, 'bin/test.dart')), | 113 packageDir.then((dir) => p.absolute(p.join(dir, 'bin/test.dart'))), |
| 112 "--package-root=${p.join(packageDir, 'packages')}", | |
| 113 "--concurrency=$concurrency" | 114 "--concurrency=$concurrency" |
| 114 ]; | 115 ]; |
| 115 if (reporter != null) allArgs.add("--reporter=$reporter"); | 116 if (reporter != null) allArgs.add("--reporter=$reporter"); |
| 116 allArgs.addAll(args); | 117 allArgs.addAll(args); |
| 117 | 118 |
| 118 if (environment == null) environment = {}; | 119 if (environment == null) environment = {}; |
| 119 environment.putIfAbsent("_DART_TEST_TESTING", () => "true"); | 120 environment.putIfAbsent("_DART_TEST_TESTING", () => "true"); |
| 120 | 121 |
| 121 var process = runDart(allArgs, | 122 var process = runDart(allArgs, |
| 122 environment: environment, | 123 environment: environment, |
| 123 description: "dart bin/test.dart"); | 124 description: "dart bin/test.dart"); |
| 124 | 125 |
| 125 if (forwardStdio) { | 126 if (forwardStdio) { |
| 126 process.stdoutStream().listen(print); | 127 process.stdoutStream().listen(print); |
| 127 process.stderrStream().listen(print); | 128 process.stderrStream().listen(print); |
| 128 } | 129 } |
| 129 | 130 |
| 130 return process; | 131 return process; |
| 131 } | 132 } |
| 132 | 133 |
| 133 /// Runs Dart. | 134 /// Runs Dart. |
| 134 ScheduledProcess runDart(List<String> args, {Map<String, String> environment, | 135 ScheduledProcess runDart(List<String> args, {Map<String, String> environment, |
| 135 String description}) { | 136 String description}) { |
| 136 var allArgs = Platform.executableArguments.map((arg) { | 137 var allArgs = Platform.executableArguments |
| 137 // The package root might be relative, so we need to make it absolute if | 138 .where((arg) => |
| 138 // we're going to run in a different working directory. | 139 !arg.startsWith("--package-root=") && !arg.startsWith("--packages=")) |
| 139 if (!arg.startsWith("--package-root=")) return arg; | 140 .toList() |
| 140 return "--package-root=" + | 141 ..add(PackageResolver.current.processArgument) |
| 141 p.absolute(p.fromUri(arg.substring("--package-root=".length))); | 142 ..addAll(args); |
| 142 }).toList()..addAll(args); | |
| 143 | 143 |
| 144 return new ScheduledProcess.start( | 144 return new ScheduledProcess.start( |
| 145 p.absolute(Platform.resolvedExecutable), allArgs, | 145 p.absolute(Platform.resolvedExecutable), allArgs, |
| 146 workingDirectory: _sandbox, | 146 workingDirectory: _sandbox, |
| 147 environment: environment, | 147 environment: environment, |
| 148 description: description); | 148 description: description); |
| 149 } | 149 } |
| 150 | 150 |
| 151 /// Runs Pub. | 151 /// Runs Pub. |
| 152 ScheduledProcess runPub(List args, {Map<String, String> environment}) { | 152 ScheduledProcess runPub(List args, {Map<String, String> environment}) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 175 var match; | 175 var match; |
| 176 while (match == null) { | 176 while (match == null) { |
| 177 var line = await pub.stdout.next(); | 177 var line = await pub.stdout.next(); |
| 178 match = _servingRegExp.firstMatch(line); | 178 match = _servingRegExp.firstMatch(line); |
| 179 } | 179 } |
| 180 _pubServePortCompleter.complete(int.parse(match[1])); | 180 _pubServePortCompleter.complete(int.parse(match[1])); |
| 181 }, "waiting for pub serve to emit its port number"); | 181 }, "waiting for pub serve to emit its port number"); |
| 182 | 182 |
| 183 return pub; | 183 return pub; |
| 184 } | 184 } |
| OLD | NEW |