| Index: lib/src/runner/configuration.dart
|
| diff --git a/lib/src/runner/configuration.dart b/lib/src/runner/configuration.dart
|
| index bb28aeb87c926a81351280e218c615abd5278ca4..808030f73e88743b8b45f32297946a1c66af6a08 100644
|
| --- a/lib/src/runner/configuration.dart
|
| +++ b/lib/src/runner/configuration.dart
|
| @@ -78,9 +78,23 @@ class Configuration {
|
| parser.addFlag("color", defaultsTo: null,
|
| help: 'Whether to use terminal colors.\n(auto-detected by default)');
|
| parser.addOption("tags",
|
| - help: 'Comma-separated list of tags to run',
|
| - allowMultiple: true,
|
| - splitCommas: true);
|
| + abbr: 't',
|
| + help: 'Comma-separated list of tags to run',
|
| + allowMultiple: true,
|
| + splitCommas: true);
|
| + parser.addOption("tag",
|
| + hide: true,
|
| + allowMultiple: true,
|
| + splitCommas: true);
|
| + parser.addOption("exclude-tags",
|
| + abbr: 'x',
|
| + help: 'Comma-separated list of tags not to run',
|
| + allowMultiple: true,
|
| + splitCommas: true);
|
| + parser.addOption("exclude-tag",
|
| + hide: true,
|
| + allowMultiple: true,
|
| + splitCommas: true);
|
|
|
| return parser;
|
| })();
|
| @@ -135,7 +149,10 @@ class Configuration {
|
| final List<TestPlatform> platforms;
|
|
|
| /// Restricts the set of tests to a set of tags
|
| - final List<String> tags;
|
| + final Set<String> tags;
|
| +
|
| + /// Does not run tests with tags from this set
|
| + final Set<String> excludeTags;
|
|
|
| /// The global test metadata derived from this configuration.
|
| Metadata get metadata =>
|
| @@ -162,6 +179,20 @@ class Configuration {
|
| pattern = options['plain-name'];
|
| }
|
|
|
| + var tags = new Set<String>();
|
| + tags.addAll(options['tags'] ?? []);
|
| + tags.addAll(options['tag'] ?? []);
|
| +
|
| + var excludeTags = new Set<String>();
|
| + excludeTags.addAll(options['exclude-tags'] ?? []);
|
| + excludeTags.addAll(options['exclude-tag'] ?? []);
|
| +
|
| + var tagIntersection = tags.intersection(excludeTags);
|
| + if (tagIntersection.isNotEmpty) {
|
| + throw new FormatException('Included and excluded tag sets may not'
|
| + ' intersect. Found intersection: ${tagIntersection.join(', ')}');
|
| + }
|
| +
|
| return new Configuration(
|
| help: options['help'],
|
| version: options['version'],
|
| @@ -177,7 +208,8 @@ class Configuration {
|
| pattern: pattern,
|
| platforms: options['platform'].map(TestPlatform.find),
|
| paths: options.rest.isEmpty ? null : options.rest,
|
| - tags: options['tags']);
|
| + tags: tags,
|
| + excludeTags: excludeTags);
|
| }
|
|
|
| /// Runs [parse] on the value of the option [name], and wraps any
|
| @@ -200,7 +232,7 @@ class Configuration {
|
| bool pauseAfterLoad: false, bool color, String packageRoot,
|
| String reporter, int pubServePort, int concurrency, this.pattern,
|
| Iterable<TestPlatform> platforms, Iterable<String> paths,
|
| - List<String> tags})
|
| + Set<String> tags, Set<String> excludeTags})
|
| : pauseAfterLoad = pauseAfterLoad,
|
| color = color == null ? canUseSpecialChars : color,
|
| packageRoot = packageRoot == null
|
| @@ -216,7 +248,6 @@ class Configuration {
|
| platforms = platforms == null ? [TestPlatform.vm] : platforms.toList(),
|
| paths = paths == null ? ["test"] : paths.toList(),
|
| explicitPaths = paths != null,
|
| - this.tags = tags == null
|
| - ? const <String>[]
|
| - : tags;
|
| + this.tags = tags,
|
| + this.excludeTags = excludeTags;
|
| }
|
|
|