Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(612)

Unified Diff: lib/src/runner/configuration.dart

Issue 1266273007: Make Configuration explicitly constructable. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/runner/configuration.dart
diff --git a/lib/src/runner/configuration.dart b/lib/src/runner/configuration.dart
index f2a53f927f2707635998328cf31605898fd9e458..776c2fc11b58d50e5588a33f35bcee2dc0f19317 100644
--- a/lib/src/runner/configuration.dart
+++ b/lib/src/runner/configuration.dart
@@ -10,6 +10,7 @@ import 'dart:math' as math;
import 'package:args/args.dart';
import 'package:path/path.dart' as p;
+import '../frontend/timeout.dart';
import '../backend/test_platform.dart';
import '../util/io.dart';
@@ -83,98 +84,121 @@ class Configuration {
/// The usage string for the command-line arguments.
static String get usage => _parser.usage;
- /// The results of parsing the arguments.
- final ArgResults _options;
-
/// Whether `--help` was passed.
- bool get help => _options['help'];
+ final bool help;
/// Whether `--version` was passed.
- bool get version => _options['version'];
+ final bool version;
/// Whether stack traces should be presented as-is or folded to remove
/// irrelevant packages.
- bool get verboseTrace => _options['verbose-trace'];
+ final bool verboseTrace;
/// Whether JavaScript stack traces should be left as-is or converted to
/// Dart-like traces.
- bool get jsTrace => _options['js-trace'];
+ final bool jsTrace;
/// Whether to pause for debugging after loading each test suite.
- bool get pauseAfterLoad => _options['pause-after-load'];
+ final bool pauseAfterLoad;
/// The package root for resolving "package:" URLs.
- String get packageRoot => _options['package-root'] == null
- ? p.join(p.current, 'packages')
- : _options['package-root'];
+ final String packageRoot;
/// The name of the reporter to use to display results.
- String get reporter => _options['reporter'];
+ final String reporter;
/// The URL for the `pub serve` instance from which to load tests, or `null`
/// if tests should be loaded from the filesystem.
- Uri get pubServeUrl {
- if (_options['pub-serve'] == null) return null;
- return Uri.parse("http://localhost:${_options['pub-serve']}");
- }
+ final Uri pubServeUrl;
/// Whether to use command-line color escapes.
- bool get color =>
- _options["color"] == null ? canUseSpecialChars : _options["color"];
+ final bool color;
/// How many tests to run concurrently.
- int get concurrency => _concurrency;
- int _concurrency;
+ final int concurrency;
/// The from which to load tests.
- List<String> get paths => _options.rest.isEmpty ? ["test"] : _options.rest;
+ final List<String> paths;
/// Whether the load paths were passed explicitly or the default was used.
- bool get explicitPaths => _options.rest.isNotEmpty;
+ final bool explicitPaths;
/// The pattern to match against test names to decide which to run, or `null`
/// if all tests should be run.
- Pattern get pattern {
- if (_options["name"] != null) {
- return new RegExp(_options["name"]);
- } else if (_options["plain-name"] != null) {
- return _options["plain-name"];
- } else {
- return null;
- }
- }
+ final Pattern pattern;
/// The set of platforms on which to run tests.
- List<TestPlatform> get platforms =>
- _options["platform"].map(TestPlatform.find).toList();
+ final List<TestPlatform> platforms;
/// Parses the configuration from [args].
///
/// Throws a [FormatException] if [args] are invalid.
- Configuration.parse(List<String> args)
- : _options = _parser.parse(args) {
- if (pauseAfterLoad) {
- _concurrency = 1;
- } else if (_options['concurrency'] == null) {
- _concurrency = _defaultConcurrency;
- } else {
- _concurrency = _wrapFormatException('concurrency', int.parse);
+ factory Configuration.parse(List<String> args) {
+ var options = _parser.parse(args);
+
+ var pattern;
+ if (options['name'] != null) {
+ if (options["plain-name"] != null) {
+ throw new FormatException(
+ "--name and --plain-name may not both be passed.");
+ }
+
+ pattern = _wrapFormatException(
+ options, 'name', (value) => new RegExp(value));
+ } else if (options['plain-name'] != null) {
+ pattern = options['plain-name'];
}
- if (_options["name"] != null && _options["plain-name"] != null) {
- throw new FormatException(
- "--name and --plain-name may not both be passed.");
- }
+ return new Configuration(
+ help: options['help'],
+ version: options['version'],
+ verboseTrace: options['verbose-trace'],
+ jsTrace: options['js-trace'],
+ pauseAfterLoad: options['pause-after-load'],
+ color: options['color'],
+ packageRoot: options['package-root'],
+ reporter: options['reporter'],
+ pubServePort: _wrapFormatException(options, 'pub-serve', int.parse),
+ concurrency: _wrapFormatException(options, 'concurrency', int.parse,
+ orElse: () => _defaultConcurrency),
+ pattern: pattern,
+ platforms: options['platforms'].map(TestPlatform.find).toList(),
+ paths: options.rest.isEmpty ? null : options.rest);
}
/// Runs [parse] on the value of the option [name], and wraps any
/// [FormatException] it throws with additional information.
- _wrapFormatException(String name, parse(value)) {
+ static _wrapFormatException(ArgResults options, String name, parse(value),
+ {orElse()}) {
+ var value = options[name];
+ if (value == null) return orElse == null ? null : orElse();
+
try {
- return parse(_options[name]);
+ return parse(value);
} on FormatException catch (error) {
- throw new FormatException('Couldn\'t parse --$name "${_options[name]}": '
+ throw new FormatException('Couldn\'t parse --$name "${options[name]}": '
'${error.message}');
}
}
+
+ Configuration({this.help: false, this.version: false,
+ this.verboseTrace: false, this.jsTrace: false,
+ bool pauseAfterLoad: false, bool color, String packageRoot,
+ String reporter, int pubServePort, int concurrency, this.pattern,
+ Iterable<TestPlatform> platforms, Iterable<String> paths})
+ : pauseAfterLoad = pauseAfterLoad,
+ color = color == null ? canUseSpecialChars : color,
+ packageRoot = packageRoot == null
+ ? p.join(p.current, 'packages')
+ : packageRoot,
+ reporter = reporter == null ? 'compact' : reporter,
+ pubServeUrl = pubServePort == null
+ ? null
+ : Uri.parse("http://localhost:$pubServePort"),
+ concurrency = pauseAfterLoad
+ ? 1
+ : (concurrency == null ? _defaultConcurrency : concurrency),
+ platforms = platforms.toList(),
+ paths = paths == null ? ["test"] : paths.toList(),
+ explicitPaths = paths != null;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698