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

Unified Diff: tools/testing/dart/options.dart

Issue 2914893003: Revert "Replace the configuration map with a typed object." (Closed)
Patch Set: Created 3 years, 7 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 | « tools/testing/dart/main.dart ('k') | tools/testing/dart/package_testing_support.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/testing/dart/options.dart
diff --git a/tools/testing/dart/options.dart b/tools/testing/dart/options.dart
index 9b76138ea72e92f3e81b6af83daa617c4d390e12..565bbaf41c4fe01d149dc0cfb820a248d7ed9c38 100644
--- a/tools/testing/dart/options.dart
+++ b/tools/testing/dart/options.dart
@@ -3,11 +3,11 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:io';
-
-import 'configuration.dart';
import 'drt_updater.dart';
-import 'path.dart';
import 'test_suite.dart';
+import 'path.dart';
+import 'compiler_configuration.dart' show CompilerConfiguration;
+import 'runtime_configuration.dart' show RuntimeConfiguration;
const _defaultTestSelectors = const [
'samples',
@@ -35,7 +35,7 @@ class _Option {
// TODO(rnystrom): Some string options use "" to mean "no value" and others
// use null. Clean that up.
_Option(this.name, this.description,
- {String abbr, List<String> values, String defaultsTo})
+ {String abbr, List<String> values, String defaultsTo = ""})
: abbreviation = abbr,
values = values ?? [],
defaultValue = defaultsTo,
@@ -74,8 +74,8 @@ class OptionsParser {
static final List<_Option> _options = [
new _Option('mode', 'Mode in which to run the tests.',
abbr: 'm',
- values: ['all']..addAll(Mode.names),
- defaultsTo: Mode.debug.name),
+ values: ['all', 'debug', 'release', 'product'],
+ defaultsTo: 'debug'),
new _Option(
'compiler',
'''Specify any compilation step (if needed).
@@ -107,8 +107,16 @@ dartkp: Compile the Dart source into Kernel and then Kernel
into AOT snapshot before running the test.
(Only valid with runtime dart_precompiled.)''',
abbr: 'c',
- values: Compiler.names,
- defaultsTo: Compiler.none.name),
+ values: [
+ 'none',
+ 'precompiler',
+ 'dart2js',
+ 'dart2analyzer',
+ 'app_jit',
+ 'dartk',
+ 'dartkp'
+ ],
+ defaultsTo: 'none'),
new _Option(
'runtime',
'''Where the tests should be run.
@@ -152,8 +160,30 @@ self_check: Pass each test or its compiled output to every
none: No runtime, compile only. (For example, used
for dart2analyzer static analysis tests).''',
abbr: 'r',
- values: Runtime.names,
- defaultsTo: Runtime.vm.name),
+ values: [
+ 'vm',
+ 'flutter',
+ 'dart_precompiled',
+ 'd8',
+ 'jsshell',
+ 'drt',
+ 'dartium',
+ 'ff',
+ 'firefox',
+ 'chrome',
+ 'safari',
+ 'ie9',
+ 'ie10',
+ 'ie11',
+ 'opera',
+ 'chromeOnAndroid',
+ 'safarimobilesim',
+ 'ContentShellOnAndroid',
+ 'DartiumOnAndroid',
+ 'self_check',
+ 'none'
+ ],
+ defaultsTo: 'vm'),
new _Option(
'arch',
'''The architecture to run tests for.
@@ -166,10 +196,28 @@ simarm, simarmv6, simarmv5te, simarm64,
mips, simmips
simdbc, simdbc64''',
abbr: 'a',
- values: ['all']..addAll(Architecture.names),
- defaultsTo: Architecture.x64.name),
+ values: [
+ 'all',
+ 'ia32',
+ 'x64',
+ 'arm',
+ 'armv6',
+ 'armv5te',
+ 'arm64',
+ 'mips',
+ 'simarm',
+ 'simarmv6',
+ 'simarmv5te',
+ 'simarm64',
+ 'simmips',
+ 'simdbc',
+ 'simdbc64',
+ ],
+ defaultsTo: 'x64'),
new _Option('system', 'The operating system to run tests on.',
- abbr: 's', values: System.names, defaultsTo: Platform.operatingSystem),
+ abbr: 's',
+ values: ['linux', 'macos', 'windows', 'android'],
+ defaultsTo: Platform.operatingSystem),
new _Option.bool('checked', 'Run tests in checked mode.'),
new _Option.bool('strong', 'Run tests in strong mode.'),
new _Option.bool('host_checked', 'Run compiler in checked mode.'),
@@ -185,7 +233,8 @@ simdbc, simdbc64''',
'hot_reload_rollback', 'Run hot reload rollback stress tests.'),
new _Option.bool('use_blobs',
'Use mmap instead of shared libraries for precompilation.'),
- new _Option.int('timeout', 'Timeout in seconds.', abbr: 't'),
+ new _Option.int('timeout', 'Timeout in seconds.',
+ abbr: 't', defaultsTo: -1),
new _Option(
'progress',
'''Progress indication mode.
@@ -194,9 +243,19 @@ Allowed values are:
compact, color, line, verbose, silent, status, buildbot, diff
''',
abbr: 'p',
- values: Progress.names,
- defaultsTo: Progress.compact.name),
- new _Option('step_name', 'Step name for use by -pbuildbot.'),
+ values: [
+ 'compact',
+ 'color',
+ 'line',
+ 'verbose',
+ 'silent',
+ 'status',
+ 'buildbot',
+ 'diff'
+ ],
+ defaultsTo: 'compact'),
+ new _Option('step_name', 'Step name for use by -pbuildbot.',
+ defaultsTo: null),
new _Option.bool('report',
'Print a summary report of the number of tests, by expectation.'),
new _Option.int('tasks', 'The number of parallel tasks to run.',
@@ -217,7 +276,9 @@ compact, color, line, verbose, silent, status, buildbot, diff
new _Option.bool('time', 'Print timing information after running tests.'),
new _Option('dart', 'Path to dart executable.'),
new _Option('flutter', 'Path to flutter executable.'),
- new _Option('drt', 'Path to content shell executable.'),
+ new _Option(
+ 'drt', // TODO(antonm): fix the option name.
+ 'Path to content shell executable.'),
new _Option('dartium', 'Path to Dartium Chrome executable.'),
new _Option('firefox', 'Path to firefox browser executable.'),
new _Option('chrome', 'Path to chrome browser executable.'),
@@ -231,7 +292,6 @@ this option, the compiler or runtime in PRODUCT_DIR/dart-sdk/bin
is tested.
(Note: currently only implemented for dart2js.)'''),
- // TODO(rnystrom): This does not appear to be used. Remove?
new _Option('build_directory',
'The name of the build directory, where products are placed.'),
new _Option.bool('noBatch', 'Do not run tests in batch mode.', 'n'),
@@ -268,26 +328,34 @@ used for browsers to connect to.''',
'test_driver_error_port', 'Port for http test driver server errors.',
defaultsTo: 0),
new _Option('record_to_file',
- 'Records all commands to be executed and writes to a file.'),
+ 'Records all commands to be executed and writes to a file.',
+ defaultsTo: null),
new _Option(
- 'replay_from_file', 'Replays a previously recorded list of commands.'),
+ 'replay_from_file', 'Replays a previously recorded list of commands.',
+ defaultsTo: null),
new _Option(
'builder_tag',
'''Machine specific options that is not captured by the regular test
options. Used to be able to make sane updates to the status files.'''),
- new _Option('vm_options', 'Extra options to send to the vm when running.'),
+ new _Option('vm_options', 'Extra options to send to the vm when running.',
+ defaultsTo: null),
new _Option(
- 'dart2js_options', 'Extra options for dart2js compilation step.'),
+ 'dart2js_options', 'Extra options for dart2js compilation step.',
+ defaultsTo: null),
new _Option(
- 'suite_dir', 'Additional directory to add to the testing matrix.'),
- new _Option('package_root', 'The package root to use for testing.'),
- new _Option('packages', 'The package spec file to use for testing.'),
+ 'suite_dir', 'Additional directory to add to the testing matrix.',
+ defaultsTo: null),
+ new _Option('package_root', 'The package root to use for testing.',
+ defaultsTo: null),
+ new _Option('packages', 'The package spec file to use for testing.',
+ defaultsTo: null),
new _Option(
'exclude_suite',
'''Exclude suites from default selector, only works when no selector
-has been specified on the command line.'''),
+has been specified on the command line.''',
+ defaultsTo: null),
new _Option.bool(
- 'skip_compilation',
+ 'skip-compilation',
'''
Skip the compilation step, using the compilation artifacts left in
the output folder from a previous run. This flag will often cause
@@ -329,7 +397,7 @@ compiler.''')
/// Configurations are maps mapping from option keys to values. When
/// encountering the first non-option string, the rest of the arguments are
/// stored in the returned Map under the 'rest' key.
- List<Configuration> parse(List<String> arguments) {
+ List<Map<String, dynamic>> parse(List<String> arguments) {
// TODO(rnystrom): The builders on the buildbots still pass this even
// though it does nothing. Until those can be fixed, silently ignore the
// option. Remove this once the buildbot scripts are fixed.
@@ -449,7 +517,13 @@ compiler.''')
}
}
- return _createConfigurations(configuration);
+ var expandedConfigs = _expandConfigurations(configuration);
+ var result = expandedConfigs.where(_isValidConfig).toList();
+ for (var config in result) {
+ config['_reproducing_arguments_'] = _reproducingCommand(config);
+ }
+
+ return result.isEmpty ? null : result;
}
/// Prints [message] and exits with a non-zero exit code.
@@ -458,19 +532,19 @@ compiler.''')
exit(1);
}
- /// Given a set of parsed option values, returns the list of command line
- /// arguments that would reproduce that configuration.
- List<String> _reproducingCommand(Map<String, dynamic> data) {
+ /// Given a configuration, returns the list of command line arguments that
+ /// would reproduce that configuration.
+ List<String> _reproducingCommand(Map config) {
var arguments = <String>[];
for (var option in _options) {
var name = option.name;
- if (!data.containsKey(name) || _blacklistedOptions.contains(name)) {
+ if (!config.containsKey(name) || _blacklistedOptions.contains(name)) {
continue;
}
- var value = data[name];
- if (data[name] == option.defaultValue ||
+ var value = config[name];
+ if (config[name] == option.defaultValue ||
(name == 'packages' &&
value ==
TestUtils.dartDirUri.resolve('.packages').toFilePath())) {
@@ -486,25 +560,201 @@ compiler.''')
return arguments;
}
- List<Configuration> _createConfigurations(
+ /// Determines if a particular configuration has a valid combination of
+ /// compiler and runtime elements.
+ bool _isValidConfig(Map config) {
+ var isValid = true;
+ List<String> validRuntimes;
+ switch (config['compiler'] as String) {
+ case 'dart2js':
+ // Note: by adding 'none' as a configuration, if the user
+ // runs test.py -c dart2js -r drt,none the dart2js_none and
+ // dart2js_drt will be duplicating work. If later we don't need 'none'
+ // with dart2js, we should remove it from here.
+ validRuntimes = const [
+ 'd8',
+ 'jsshell',
+ 'drt',
+ 'none',
+ 'dartium',
+ 'ff',
+ 'chrome',
+ 'safari',
+ 'ie9',
+ 'ie10',
+ 'ie11',
+ 'opera',
+ 'chromeOnAndroid',
+ 'safarimobilesim'
+ ];
+ break;
+ case 'dart2analyzer':
+ validRuntimes = const ['none'];
+ break;
+ case 'app_jit':
+ case 'dartk':
+ validRuntimes = const ['vm', 'self_check', 'none'];
+ break;
+ case 'precompiler':
+ case 'dartkp':
+ validRuntimes = const ['dart_precompiled'];
+ break;
+ case 'none':
+ validRuntimes = const [
+ 'vm',
+ 'flutter',
+ 'drt',
+ 'dartium',
+ 'ContentShellOnAndroid',
+ 'DartiumOnAndroid'
+ ];
+ break;
+ }
+
+ if (!validRuntimes.contains(config['runtime'])) {
+ isValid = false;
+ print("Warning: combination of compiler '${config['compiler']}' and "
+ "runtime '${config['runtime']}' is invalid. "
+ "Skipping this combination.");
+ }
+
+ if ((config['ie'] as bool) && Platform.operatingSystem != 'windows') {
+ isValid = false;
+ print("Warning: cannot run Internet Explorer on non-Windows operating"
+ " system.");
+ }
+
+ if ((config['shard'] as int) < 1 ||
+ (config['shard'] as int) > (config['shards'] as int)) {
+ isValid = false;
+ print("Error: shard index is ${config['shard']} out of "
+ "${config['shards']} shards");
+ }
+
+ if (config['runtime'] == 'flutter' && config['flutter'] == '') {
+ isValid = false;
+ print("-rflutter requires the flutter engine executable to "
+ "be specified using --flutter=");
+ }
+
+ if (config['runtime'] == 'flutter' && config['arch'] != 'x64') {
+ isValid = false;
+ print("-rflutter is applicable only for --arch=x64");
+ }
+
+ return isValid;
+ }
+
+ /// Recursively expands a configuration with multiple values per key into a
+ /// list of configurations with exactly one value per key.
+ List<Map<String, dynamic>> _expandConfigurations(
Map<String, dynamic> configuration) {
- var selectors = _expandSelectors(configuration);
+ // Expand the pseudo-values such as 'all'.
+ if (configuration['arch'] == 'all') {
+ configuration['arch'] = 'ia32,x64,simarm,simarm64,simmips,simdbc64';
+ }
+
+ if (configuration['mode'] == 'all') {
+ configuration['mode'] = 'debug,release,product';
+ }
+
+ if (configuration['report_in_json'] as bool) {
+ configuration['list'] = true;
+ configuration['report'] = true;
+ }
+
+ // Use verbose progress indication for verbose output unless buildbot
+ // progress indication is requested.
+ if ((configuration['verbose'] as bool) &&
+ (configuration['progress'] as String) != 'buildbot') {
+ configuration['progress'] = 'verbose';
+ }
+
+ // Create the artificial negative options that test status files
+ // expect.
+ configuration['unchecked'] = !(configuration['checked'] as bool);
+ configuration['host_unchecked'] = !(configuration['host_checked'] as bool);
+ configuration['unminified'] = !(configuration['minified'] as bool);
+ configuration['nocsp'] = !(configuration['csp'] as bool);
+
+ var runtime = configuration['runtime'] as String;
+ if (runtime == 'firefox') {
+ configuration['runtime'] == 'ff';
+ }
+
+ var compiler = configuration['compiler'] as String;
+ configuration['browser'] = TestUtils.isBrowserRuntime(runtime);
+ configuration['analyzer'] = TestUtils.isCommandLineAnalyzer(compiler);
+
+ // Set the javascript command line flag for less verbose status files.
+ configuration['jscl'] = TestUtils.isJsCommandLineRuntime(runtime);
+
+ // Allow suppression that is valid for all ie versions
+ configuration['ie'] = runtime.startsWith('ie');
+
+ // Expand the test selectors into a suite name and a simple
+ // regular expressions to be used on the full path of a test file
+ // in that test suite. If no selectors are explicitly given use
+ // the default suite patterns.
+ var selectors = configuration['selectors'];
+ if (selectors is! Map) {
+ if (selectors == null) {
+ if (configuration['suite_dir'] != null) {
+ var suite_path = new Path(configuration['suite_dir'] as String);
+ selectors = [suite_path.filename];
+ } else {
+ selectors = _defaultTestSelectors.toList();
+ }
+
+ var excludeSuites = configuration['exclude_suite'] != null
+ ? configuration['exclude_suite'].split(',')
+ : [];
+ for (var exclude in excludeSuites) {
+ if ((selectors as List).contains(exclude)) {
+ selectors.remove(exclude);
+ } else {
+ print("Warning: default selectors does not contain $exclude");
+ }
+ }
+ }
+ var selectorMap = <String, RegExp>{};
+ for (var i = 0; i < (selectors as List).length; i++) {
+ var pattern = selectors[i] as String;
+ var suite = pattern;
+ var slashLocation = pattern.indexOf('/');
+ if (slashLocation != -1) {
+ suite = pattern.substring(0, slashLocation);
+ pattern = pattern.substring(slashLocation + 1);
+ pattern = pattern.replaceAll('*', '.*');
+ } else {
+ pattern = ".?";
+ }
+ if (selectorMap.containsKey(suite)) {
+ print("Error: '$suite/$pattern'. Only one test selection"
+ " pattern is allowed to start with '$suite/'");
+ exit(1);
+ }
+ selectorMap[suite] = new RegExp(pattern);
+ }
+ configuration['selectors'] = selectorMap;
+ }
// Put observatory_ui in a configuration with its own packages override.
// Only one value in the configuration map is mutable:
- if (selectors.containsKey('observatory_ui')) {
+ selectors = configuration['selectors'];
+ if ((selectors as Map<String, dynamic>).containsKey('observatory_ui')) {
if (selectors.length == 1) {
configuration['packages'] = TestUtils.dartDirUri
.resolve('runtime/observatory/.packages')
.toFilePath();
} else {
// Make a new configuration whose selectors map only contains
- // observatory_ui, and remove observatory_ui from the original
- // selectors. The only mutable value in the map is the selectors, so a
+ // observatory_ui, and remove the key from the original selectors.
+ // The only mutable value in the map is the selectors, so a
// shallow copy is safe.
var observatoryConfiguration =
new Map<String, dynamic>.from(configuration);
- var observatorySelectors = {
+ observatoryConfiguration['selectors'] = {
'observatory_ui': selectors['observatory_ui']
};
selectors.remove('observatory_ui');
@@ -514,198 +764,82 @@ compiler.''')
.resolve('runtime/observatory/.packages')
.toFilePath();
- return _expandConfigurations(configuration, selectors)
- ..addAll(_expandConfigurations(
- observatoryConfiguration, observatorySelectors));
+ // Return the expansions of both configurations. Neither will reach
+ // this line in the recursive call to _expandConfigurations.
+ return _expandConfigurations(configuration)
+ ..addAll(_expandConfigurations(observatoryConfiguration));
}
}
- return _expandConfigurations(configuration, selectors);
- }
-
- /// Recursively expands a configuration with multiple values per key into a
- /// list of configurations with exactly one value per key.
- List<Configuration> _expandConfigurations(
- Map<String, dynamic> data, Map<String, RegExp> selectors) {
- var result = <Configuration>[];
-
- // Handles a string option containing a space-separated list of words.
- listOption(String name) {
- var value = data[name] as String;
- if (value == null) return const <String>[];
- return value
- .split(" ")
- .map((s) => s.trim())
- .where((s) => s.isNotEmpty)
- .toList();
+ // Set the default package spec explicitly.
+ if (configuration['package_root'] == null &&
+ configuration['packages'] == null) {
+ configuration['packages'] =
+ TestUtils.dartDirUri.resolve('.packages').toFilePath();
}
- var dart2jsOptions = listOption("dart2js_options");
- var vmOptions = listOption("vm_options");
+ // Expand the architectures.
+ if ((configuration['arch'] as String).contains(',')) {
+ return _expandHelper('arch', configuration);
+ }
- // JSON reporting implies listing and reporting.
- if (data['report_in_json'] as bool) {
- data['list'] = true;
- data['report'] = true;
+ // Expand modes.
+ if ((configuration['mode'] as String).contains(',')) {
+ return _expandHelper('mode', configuration);
}
- // Use verbose progress indication for verbose output unless buildbot
- // progress indication is requested.
- if ((data['verbose'] as bool) &&
- (data['progress'] as String) != 'buildbot') {
- data['progress'] = 'verbose';
+ // Expand compilers.
+ if ((configuration['compiler'] as String).contains(',')) {
+ return _expandHelper('compiler', configuration);
}
// Expand runtimes.
- for (var runtimeName in (data["runtime"] as String).split(",")) {
- var runtime = Runtime.find(runtimeName);
-
- // Install the runtime if needed.
- var updater = runtimeUpdater(
- runtime, data["drt"] as String, data["dartium"] as String);
+ var runtimes = configuration['runtime'] as String;
+ if (runtimes.contains(',')) {
+ return _expandHelper('runtime', configuration);
+ } else {
+ // All runtimes eventually go through this path, after expansion.
+ var updater = runtimeUpdater(configuration);
if (updater != null) {
updater.update();
}
+ }
- // Expand architectures.
- var architectures = data["arch"] as String;
- if (architectures == "all") {
- architectures = "ia32,x64,simarm,simarm64,simmips,simdbc64";
- }
-
- for (var architectureName in architectures.split(",")) {
- var architecture = Architecture.find(architectureName);
-
- // Expand compilers.
- var compilers = data["compiler"] as String;
- for (var compilerName in compilers.split(",")) {
- var compiler = Compiler.find(compilerName);
-
- // Expand modes.
- var modes = data["mode"] as String;
- if (modes == "all") modes = "debug,release,product";
- for (var modeName in modes.split(",")) {
- var mode = Mode.find(modeName);
-
- var configuration = new Configuration(
- architecture: architecture,
- compiler: compiler,
- mode: mode,
- progress: Progress.find(data["progress"] as String),
- runtime: runtime,
- system: System.find(data["system"] as String),
- selectors: selectors,
- appendLogs: data["append_logs"] as bool,
- batch: !(data["noBatch"] as bool),
- batchDart2JS: data["dart2js_batch"] as bool,
- copyCoreDumps: data["copy_coredumps"] as bool,
- hotReload: data["hot_reload"] as bool,
- hotReloadRollback: data["hot_reload_rollback"] as bool,
- isChecked: data["checked"] as bool,
- isStrong: data["strong"] as bool,
- isHostChecked: data["host_checked"] as bool,
- isCsp: data["csp"] as bool,
- isMinified: data["minified"] as bool,
- isVerbose: data["verbose"] as bool,
- listTests: data["list"] as bool,
- printTiming: data["time"] as bool,
- printReport: data["report"] as bool,
- reportInJson: data["report_in_json"] as bool,
- resetBrowser: data["reset_browser_configuration"] as bool,
- skipCompilation: data["skip_compilation"] as bool,
- useBlobs: data["use_blobs"] as bool,
- useSdk: data["use_sdk"] as bool,
- useFastStartup: data["fast_startup"] as bool,
- useDart2JSWithKernel: data["dart2js_with_kernel"] as bool,
- writeDebugLog: data["write_debug_log"] as bool,
- writeTestOutcomeLog: data["write_test_outcome_log"] as bool,
- drtPath: data["drt"] as String,
- dartiumPath: data["dartium"] as String,
- chromePath: data["chrome"] as String,
- safariPath: data["safari"] as String,
- firefoxPath: data["firefox"] as String,
- dartPath: data["dart"] as String,
- dartPrecompiledPath: data["dart_precompiled"] as String,
- flutterPath: data["flutter"] as String,
- recordingPath: data["record_to_file"] as String,
- replayPath: data["replay_from_file"] as String,
- taskCount: data["tasks"] as int,
- timeout: data["timeout"] as int,
- shardCount: data["shards"] as int,
- shard: data["shard"] as int,
- stepName: data["step_name"] as String,
- testServerPort: data["test_server_port"] as int,
- testServerCrossOriginPort:
- data['test_server_cross_origin_port'] as int,
- testDriverErrorPort: data["test_driver_error_port"] as int,
- localIP: data["local_ip"] as String,
- dart2jsOptions: dart2jsOptions,
- vmOptions: vmOptions,
- packages: data["packages"] as String,
- packageRoot: data["package_root"] as String,
- suiteDirectory: data["suite_dir"] as String,
- builderTag: data["builder_tag"] as String,
- reproducingArguments: _reproducingCommand(data));
-
- if (configuration.validate()) {
- result.add(configuration);
- }
- }
- }
- }
+ // Adjust default timeout based on mode, compiler, and sometimes runtime.
+ if (configuration['timeout'] == -1) {
+ var isReload = (configuration['hot_reload'] as bool) ||
+ (configuration['hot_reload_rollback'] as bool);
+ int compilerMulitiplier =
+ new CompilerConfiguration(configuration).computeTimeoutMultiplier();
+ int runtimeMultiplier = new RuntimeConfiguration(configuration)
+ .computeTimeoutMultiplier(
+ mode: configuration['mode'] as String,
+ isChecked: configuration['checked'] as bool,
+ isReload: isReload,
+ arch: configuration['arch'] as String);
+ configuration['timeout'] = 60 * compilerMulitiplier * runtimeMultiplier;
}
- return result;
+ return [configuration];
}
- /// Expands the test selectors into a suite name and a simple regular
- /// expression to be used on the full path of a test file in that test suite.
- ///
- /// If no selectors are explicitly given, uses the default suite patterns.
- Map<String, RegExp> _expandSelectors(Map<String, dynamic> configuration) {
- var selectors = configuration['selectors'];
-
- if (selectors == null) {
- if (configuration['suite_dir'] != null) {
- var suitePath = new Path(configuration['suite_dir'] as String);
- selectors = [suitePath.filename];
- } else {
- selectors = _defaultTestSelectors.toList();
- }
-
- var excludeSuites = configuration['exclude_suite'] != null
- ? configuration['exclude_suite'].split(',')
- : [];
- for (var exclude in excludeSuites) {
- if ((selectors as List).contains(exclude)) {
- selectors.remove(exclude);
- } else {
- print("Warning: default selectors does not contain $exclude");
- }
- }
- }
-
- var selectorMap = <String, RegExp>{};
- for (var i = 0; i < (selectors as List).length; i++) {
- var pattern = selectors[i] as String;
- var suite = pattern;
- var slashLocation = pattern.indexOf('/');
- if (slashLocation != -1) {
- suite = pattern.substring(0, slashLocation);
- pattern = pattern.substring(slashLocation + 1);
- pattern = pattern.replaceAll('*', '.*');
- } else {
- pattern = ".?";
- }
- if (selectorMap.containsKey(suite)) {
- print("Error: '$suite/$pattern'. Only one test selection"
- " pattern is allowed to start with '$suite/'");
- exit(1);
- }
- selectorMap[suite] = new RegExp(pattern);
+ /// Helper for _expandConfigurations. Creates a new configuration and adds it
+ /// to a list, for use in a case when a particular configuration has multiple
+ /// results (separated by a ',').
+ /// Arguments:
+ /// option: The particular test option we are expanding.
+ /// configuration: The map containing all test configuration information
+ /// specified.
+ List<Map<String, dynamic>> _expandHelper(
+ String option, Map<String, dynamic> configuration) {
+ var result = <Map<String, dynamic>>[];
+ var configs = configuration[option];
+ for (var config in configs.split(',')) {
+ var newConfiguration = new Map<String, dynamic>.from(configuration);
+ newConfiguration[option] = config;
+ result.addAll(_expandConfigurations(newConfiguration));
}
-
- return selectorMap;
+ return result;
}
/// Print out usage information.
« no previous file with comments | « tools/testing/dart/main.dart ('k') | tools/testing/dart/package_testing_support.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698