| Index: tools/testing/dart/test_runner.dart
|
| diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
|
| index 6b837f899d8e454028fdaadec7f336ec4bece2a5..f3e1976af9e4a25ef1a4806b0a5cac27a548fe7c 100644
|
| --- a/tools/testing/dart/test_runner.dart
|
| +++ b/tools/testing/dart/test_runner.dart
|
| @@ -9,26 +9,25 @@
|
| * - Managing parallel execution of tests, including timeout checks.
|
| * - Evaluating the output of each test as pass/fail/crash/timeout.
|
| */
|
| -library test_runner;
|
| -
|
| -import "dart:async";
|
| -import "dart:collection" show Queue;
|
| -import "dart:convert" show LineSplitter, UTF8, JSON;
|
| +import 'dart:async';
|
| +import 'dart:collection';
|
| +import 'dart:convert';
|
| // We need to use the 'io' prefix here, otherwise io.exitCode will shadow
|
| // CommandOutput.exitCode in subclasses of CommandOutput.
|
| -import "dart:io" as io;
|
| -import "dart:math" as math;
|
| +import 'dart:io' as io;
|
| +import 'dart:math' as math;
|
|
|
| import 'android.dart';
|
| -import "browser_controller.dart";
|
| +import 'browser_controller.dart';
|
| +import 'configuration.dart';
|
| import 'dependency_graph.dart' as dgraph;
|
| -import "expectation.dart";
|
| -import "path.dart";
|
| +import 'expectation.dart';
|
| +import 'path.dart';
|
| import 'record_and_replay.dart';
|
| -import "runtime_configuration.dart";
|
| -import "test_progress.dart";
|
| -import "test_suite.dart";
|
| -import "utils.dart";
|
| +import 'runtime_configuration.dart';
|
| +import 'test_progress.dart';
|
| +import 'test_suite.dart';
|
| +import 'utils.dart';
|
|
|
| const int CRASHING_BROWSER_EXITCODE = -10;
|
| const int SLOW_TIMEOUT_MULTIPLIER = 4;
|
| @@ -295,19 +294,17 @@ class ContentShellCommand extends ProcessCommand {
|
| }
|
|
|
| class BrowserTestCommand extends Command {
|
| - final String browser;
|
| + Runtime get browser => configuration.runtime;
|
| final String url;
|
| - final Map<String, dynamic> configuration;
|
| + final Configuration configuration;
|
| final bool retry;
|
|
|
| - BrowserTestCommand._(
|
| - String _browser, this.url, this.configuration, this.retry)
|
| - : browser = _browser,
|
| - super._(_browser);
|
| + BrowserTestCommand._(this.url, this.configuration, this.retry)
|
| + : super._(configuration.runtime.name);
|
|
|
| void _buildHashCode(HashCodeBuilder builder) {
|
| super._buildHashCode(builder);
|
| - builder.addJson(browser);
|
| + builder.addJson(browser.name);
|
| builder.addJson(url);
|
| builder.add(configuration);
|
| builder.add(retry);
|
| @@ -324,7 +321,7 @@ class BrowserTestCommand extends Command {
|
| var parts = [
|
| io.Platform.resolvedExecutable,
|
| 'tools/testing/dart/launch_browser.dart',
|
| - browser,
|
| + browser.name,
|
| url
|
| ];
|
| return parts.map(escapeCommandLineArgument).join(' ');
|
| @@ -335,9 +332,9 @@ class BrowserTestCommand extends Command {
|
|
|
| class BrowserHtmlTestCommand extends BrowserTestCommand {
|
| List<String> expectedMessages;
|
| - BrowserHtmlTestCommand._(String browser, String url,
|
| - Map<String, dynamic> configuration, this.expectedMessages, bool retry)
|
| - : super._(browser, url, configuration, retry);
|
| + BrowserHtmlTestCommand._(String url, Configuration configuration,
|
| + this.expectedMessages, bool retry)
|
| + : super._(url, configuration, retry);
|
|
|
| void _buildHashCode(HashCodeBuilder builder) {
|
| super._buildHashCode(builder);
|
| @@ -583,20 +580,16 @@ class CommandBuilder {
|
| return _getUniqueCommand(command);
|
| }
|
|
|
| - BrowserTestCommand getBrowserTestCommand(String browser, String url,
|
| - Map<String, dynamic> configuration, bool retry) {
|
| - var command = new BrowserTestCommand._(browser, url, configuration, retry);
|
| + BrowserTestCommand getBrowserTestCommand(
|
| + String url, Configuration configuration, bool retry) {
|
| + var command = new BrowserTestCommand._(url, configuration, retry);
|
| return _getUniqueCommand(command);
|
| }
|
|
|
| - BrowserHtmlTestCommand getBrowserHtmlTestCommand(
|
| - String browser,
|
| - String url,
|
| - Map<String, dynamic> configuration,
|
| - List<String> expectedMessages,
|
| - bool retry) {
|
| + BrowserHtmlTestCommand getBrowserHtmlTestCommand(String url,
|
| + Configuration configuration, List<String> expectedMessages, bool retry) {
|
| var command = new BrowserHtmlTestCommand._(
|
| - browser, url, configuration, expectedMessages, retry);
|
| + url, configuration, expectedMessages, retry);
|
| return _getUniqueCommand(command);
|
| }
|
|
|
| @@ -760,7 +753,7 @@ class TestCase extends UniqueObject {
|
| Map<Command, CommandOutput> commandOutputs =
|
| new Map<Command, CommandOutput>();
|
|
|
| - Map configuration;
|
| + Configuration configuration;
|
| String displayName;
|
| int _expectations = 0;
|
| int hash = 0;
|
| @@ -790,7 +783,7 @@ class TestCase extends UniqueObject {
|
| _expectations |= HAS_COMPILE_ERROR_IF_CHECKED;
|
| }
|
| if (info.hasCompileError ||
|
| - ((configuration['checked'] as bool) && info.hasCompileErrorIfChecked)) {
|
| + (configuration.isChecked && info.hasCompileErrorIfChecked)) {
|
| _expectations |= EXPECT_COMPILE_ERROR;
|
| }
|
| }
|
| @@ -832,19 +825,19 @@ class TestCase extends UniqueObject {
|
| }
|
|
|
| int get timeout {
|
| + var result = configuration.timeout;
|
| if (expectedOutcomes.contains(Expectation.slow)) {
|
| - return (configuration['timeout'] as int) * SLOW_TIMEOUT_MULTIPLIER;
|
| - } else {
|
| - return configuration['timeout'] as int;
|
| + result *= SLOW_TIMEOUT_MULTIPLIER;
|
| }
|
| + return result;
|
| }
|
|
|
| String get configurationString {
|
| - var compiler = configuration['compiler'] as String;
|
| - var runtime = configuration['runtime'] as String;
|
| - var mode = configuration['mode'] as String;
|
| - var arch = configuration['arch'] as String;
|
| - var checked = configuration['checked'] as bool ? '-checked' : '';
|
| + var compiler = configuration.compiler.name;
|
| + var runtime = configuration.runtime.name;
|
| + var mode = configuration.mode.name;
|
| + var arch = configuration.architecture.name;
|
| + var checked = configuration.isChecked ? '-checked' : '';
|
| return "$compiler-$runtime$checked ${mode}_$arch";
|
| }
|
|
|
| @@ -881,7 +874,7 @@ class BrowserTestCase extends TestCase {
|
| BrowserTestCase(
|
| String displayName,
|
| List<Command> commands,
|
| - Map<String, dynamic> configuration,
|
| + Configuration configuration,
|
| Set<Expectation> expectedOutcomes,
|
| TestInformation info,
|
| bool isNegative,
|
| @@ -1085,7 +1078,7 @@ class BrowserCommandOutputImpl extends CommandOutputImpl {
|
| // TODO(28955): See http://dartbug.com/28955
|
| if (timedOut &&
|
| command is BrowserTestCommand &&
|
| - command.browser == "ie11") {
|
| + command.browser == Runtime.ie11) {
|
| DebugLogger.warning("Timeout of ie11 on test page ${command.url}");
|
| return true;
|
| }
|
| @@ -1940,7 +1933,7 @@ class RunningProcess {
|
| List<String> diagnostics = <String>[];
|
| bool compilationSkipped = false;
|
| Completer<CommandOutput> completer;
|
| - Map configuration;
|
| + Configuration configuration;
|
|
|
| RunningProcess(this.command, this.timeout, {this.configuration});
|
|
|
| @@ -2018,15 +2011,12 @@ class RunningProcess {
|
| } else if (io.Platform.isWindows) {
|
| var isX64 = command.executable.contains("X64") ||
|
| command.executable.contains("SIMARM64");
|
| - var winSdkPath = configuration['win_sdk_path'] as String;
|
| - if (winSdkPath != null) {
|
| - executable = winSdkPath +
|
| - "\\Debuggers\\" +
|
| - (isX64 ? "x64" : "x86") +
|
| - "\\cdb.exe";
|
| + if (configuration.windowsSdkPath != null) {
|
| + executable = configuration.windowsSdkPath +
|
| + "\\Debuggers\\${isX64 ? 'x64' : 'x86'}\\cdb.exe";
|
| diagnostics.add("Using $executable to print stack traces");
|
| } else {
|
| - diagnostics.add("win_sdk path not found");
|
| + diagnostics.add("win_sdk_path not found");
|
| }
|
| } else {
|
| diagnostics.add("Capturing stack traces on"
|
| @@ -2674,7 +2664,7 @@ abstract class CommandExecutor {
|
| }
|
|
|
| class CommandExecutorImpl implements CommandExecutor {
|
| - final Map globalConfiguration;
|
| + final Configuration globalConfiguration;
|
| final int maxProcesses;
|
| final int maxBrowserProcesses;
|
| AdbDevicePool adbDevicePool;
|
| @@ -2683,7 +2673,7 @@ class CommandExecutorImpl implements CommandExecutor {
|
| // we keep a list of batch processes.
|
| final _batchProcesses = new Map<String, List<BatchRunnerProcess>>();
|
| // We keep a BrowserTestRunner for every configuration.
|
| - final _browserTestRunners = new Map<Map, BrowserTestRunner>();
|
| + final _browserTestRunners = new Map<Configuration, BrowserTestRunner>();
|
|
|
| bool _finishing = false;
|
|
|
| @@ -2734,9 +2724,6 @@ class CommandExecutorImpl implements CommandExecutor {
|
| }
|
|
|
| Future<CommandOutput> _runCommand(Command command, int timeout) {
|
| - var batchMode = !(globalConfiguration['noBatch'] as bool);
|
| - var dart2jsBatchMode = globalConfiguration['dart2js_batch'] as bool;
|
| -
|
| if (command is BrowserTestCommand) {
|
| return _startBrowserControllerTest(command, timeout);
|
| } else if (command is KernelCompilationCommand) {
|
| @@ -2745,10 +2732,11 @@ class CommandExecutorImpl implements CommandExecutor {
|
| assert(name == 'dartk');
|
| return _getBatchRunner(name)
|
| .runCommand(name, command, timeout, command.arguments);
|
| - } else if (command is CompilationCommand && dart2jsBatchMode) {
|
| + } else if (command is CompilationCommand &&
|
| + globalConfiguration.batchDart2JS) {
|
| return _getBatchRunner("dart2js")
|
| .runCommand("dart2js", command, timeout, command.arguments);
|
| - } else if (command is AnalysisCommand && batchMode) {
|
| + } else if (command is AnalysisCommand && globalConfiguration.batch) {
|
| return _getBatchRunner(command.flavor)
|
| .runCommand(command.flavor, command, timeout, command.arguments);
|
| } else if (command is ScriptCommand) {
|
| @@ -2882,8 +2870,7 @@ class CommandExecutorImpl implements CommandExecutor {
|
| } else {
|
| browserTest = new BrowserTest(browserCommand.url, callback, timeout);
|
| }
|
| - _getBrowserTestRunner(browserCommand.browser, browserCommand.configuration)
|
| - .then((testRunner) {
|
| + _getBrowserTestRunner(browserCommand.configuration).then((testRunner) {
|
| testRunner.enqueueTest(browserTest);
|
| });
|
|
|
| @@ -2891,12 +2878,11 @@ class CommandExecutorImpl implements CommandExecutor {
|
| }
|
|
|
| Future<BrowserTestRunner> _getBrowserTestRunner(
|
| - String browser, Map<String, dynamic> configuration) async {
|
| - var localIp = globalConfiguration['local_ip'] as String;
|
| + Configuration configuration) async {
|
| if (_browserTestRunners[configuration] == null) {
|
| var testRunner = new BrowserTestRunner(
|
| - configuration, localIp, browser, maxBrowserProcesses);
|
| - if (globalConfiguration['verbose'] as bool) {
|
| + configuration, globalConfiguration.localIP, maxBrowserProcesses);
|
| + if (globalConfiguration.isVerbose) {
|
| testRunner.logger = DebugLogger.info;
|
| }
|
| _browserTestRunners[configuration] = testRunner;
|
| @@ -2982,7 +2968,7 @@ bool shouldRetryCommand(CommandOutput output) {
|
| // We currently rerun dartium tests, see issue 14074.
|
| if (command is BrowserTestCommand &&
|
| command.retry &&
|
| - command.browser == 'dartium') {
|
| + command.browser == Runtime.dartium) {
|
| return true;
|
| }
|
|
|
| @@ -3115,7 +3101,7 @@ class TestCaseCompleter {
|
| }
|
|
|
| class ProcessQueue {
|
| - Map _globalConfiguration;
|
| + Configuration _globalConfiguration;
|
|
|
| Function _allDone;
|
| final dgraph.Graph _graph = new dgraph.Graph();
|
| @@ -3270,7 +3256,7 @@ class ProcessQueue {
|
| });
|
|
|
| // Either list or run the tests
|
| - if (_globalConfiguration['list'] as bool) {
|
| + if (_globalConfiguration.listTests) {
|
| setupForListing(testCaseEnqueuer);
|
| } else {
|
| setupForRunning(testCaseEnqueuer);
|
|
|