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

Side by Side Diff: lib/src/runner/configuration/args.dart

Issue 1890853003: Add support for sharding test runs. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Code review changes Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « lib/src/runner/configuration.dart ('k') | test/runner/configuration/configuration_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import 'dart:io'; 5 import 'dart:io';
6 6
7 import 'package:args/args.dart'; 7 import 'package:args/args.dart';
8 import 'package:boolean_selector/boolean_selector.dart'; 8 import 'package:boolean_selector/boolean_selector.dart';
9 9
10 import '../../backend/test_platform.dart'; 10 import '../../backend/test_platform.dart';
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 valueHelp: 'port'); 78 valueHelp: 'port');
79 parser.addOption("timeout", 79 parser.addOption("timeout",
80 help: 'The default test timeout. For example: 15s, 2x, none', 80 help: 'The default test timeout. For example: 15s, 2x, none',
81 defaultsTo: '30s'); 81 defaultsTo: '30s');
82 parser.addFlag("pause-after-load", 82 parser.addFlag("pause-after-load",
83 help: 'Pauses for debugging before any tests execute.\n' 83 help: 'Pauses for debugging before any tests execute.\n'
84 'Implies --concurrency=1 and --timeout=none.\n' 84 'Implies --concurrency=1 and --timeout=none.\n'
85 'Currently only supported for browser tests.', 85 'Currently only supported for browser tests.',
86 negatable: false); 86 negatable: false);
87 87
88 // These are used by the internal Google test runner, so they're hidden from
89 // the --help output but still supported as stable API surface. See
90 // [Configuration.shardIndex] for details on their semantics.
91 parser.addOption("shard-index", hide: true);
92 parser.addOption("total-shards", hide: true);
93
88 parser.addSeparator("======== Output"); 94 parser.addSeparator("======== Output");
89 parser.addOption("reporter", 95 parser.addOption("reporter",
90 abbr: 'r', 96 abbr: 'r',
91 help: 'The runner used to print test results.', 97 help: 'The runner used to print test results.',
92 defaultsTo: defaultReporter, 98 defaultsTo: defaultReporter,
93 allowed: allReporters, 99 allowed: allReporters,
94 allowedHelp: { 100 allowedHelp: {
95 'compact': 'A single line, updated continuously.', 101 'compact': 'A single line, updated continuously.',
96 'expanded': 'A separate line for each update.', 102 'expanded': 'A separate line for each update.',
97 'json': 'A machine-readable format (see https://goo.gl/0HRhdZ).' 103 'json': 'A machine-readable format (see https://goo.gl/0HRhdZ).'
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 }); 145 });
140 146
141 var excludeTagSet = new Set.from(_options['exclude-tags'] ?? []) 147 var excludeTagSet = new Set.from(_options['exclude-tags'] ?? [])
142 ..addAll(_options['exclude-tag'] ?? []); 148 ..addAll(_options['exclude-tag'] ?? []);
143 149
144 var excludeTags = excludeTagSet.fold(BooleanSelector.none, (selector, tag) { 150 var excludeTags = excludeTagSet.fold(BooleanSelector.none, (selector, tag) {
145 var tagSelector = new BooleanSelector.parse(tag); 151 var tagSelector = new BooleanSelector.parse(tag);
146 return selector.union(tagSelector); 152 return selector.union(tagSelector);
147 }); 153 });
148 154
155 var shardIndex = _parseOption('shard-index', int.parse);
156 var totalShards = _parseOption('total-shards', int.parse);
157 if ((shardIndex == null) != (totalShards == null)) {
158 throw new FormatException(
159 "--shard-index and --total-shards may only be passed together.");
160 } else if (shardIndex != null) {
161 if (shardIndex < 0) {
162 throw new FormatException("--shard-index may not be negative.");
163 } else if (shardIndex >= totalShards) {
164 throw new FormatException(
165 "--shard-index must be less than --total-shards.");
166 }
167 }
168
149 return new Configuration( 169 return new Configuration(
150 help: _ifParsed('help'), 170 help: _ifParsed('help'),
151 version: _ifParsed('version'), 171 version: _ifParsed('version'),
152 verboseTrace: _ifParsed('verbose-trace'), 172 verboseTrace: _ifParsed('verbose-trace'),
153 jsTrace: _ifParsed('js-trace'), 173 jsTrace: _ifParsed('js-trace'),
154 pauseAfterLoad: _ifParsed('pause-after-load'), 174 pauseAfterLoad: _ifParsed('pause-after-load'),
155 color: _ifParsed('color'), 175 color: _ifParsed('color'),
156 packageRoot: _ifParsed('package-root'), 176 packageRoot: _ifParsed('package-root'),
157 reporter: _ifParsed('reporter'), 177 reporter: _ifParsed('reporter'),
158 pubServePort: _parseOption('pub-serve', int.parse), 178 pubServePort: _parseOption('pub-serve', int.parse),
159 concurrency: _parseOption('concurrency', int.parse), 179 concurrency: _parseOption('concurrency', int.parse),
180 shardIndex: shardIndex,
181 totalShards: totalShards,
160 timeout: _parseOption('timeout', (value) => new Timeout.parse(value)), 182 timeout: _parseOption('timeout', (value) => new Timeout.parse(value)),
161 patterns: patterns, 183 patterns: patterns,
162 platforms: _ifParsed('platform')?.map(TestPlatform.find), 184 platforms: _ifParsed('platform')?.map(TestPlatform.find),
163 chosenPresets: _ifParsed('preset'), 185 chosenPresets: _ifParsed('preset'),
164 paths: _options.rest.isEmpty ? null : _options.rest, 186 paths: _options.rest.isEmpty ? null : _options.rest,
165 includeTags: includeTags, 187 includeTags: includeTags,
166 excludeTags: excludeTags); 188 excludeTags: excludeTags);
167 } 189 }
168 190
169 /// Returns the parsed option for [name], or `null` if none was parsed. 191 /// Returns the parsed option for [name], or `null` if none was parsed.
(...skipping 18 matching lines...) Expand all
188 /// information. 210 /// information.
189 _wrapFormatException(String name, parse()) { 211 _wrapFormatException(String name, parse()) {
190 try { 212 try {
191 return parse(); 213 return parse();
192 } on FormatException catch (error) { 214 } on FormatException catch (error) {
193 throw new FormatException('Couldn\'t parse --$name "${_options[name]}": ' 215 throw new FormatException('Couldn\'t parse --$name "${_options[name]}": '
194 '${error.message}'); 216 '${error.message}');
195 } 217 }
196 } 218 }
197 } 219 }
OLDNEW
« no previous file with comments | « lib/src/runner/configuration.dart ('k') | test/runner/configuration/configuration_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698