| Index: tools/testing/dart/test_runner.dart
|
| diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
|
| index b24941dc8454b37eccd53aa84531dd9def907838..a05382368da40955578afde0031cda7f831fa209 100644
|
| --- a/tools/testing/dart/test_runner.dart
|
| +++ b/tools/testing/dart/test_runner.dart
|
| @@ -86,7 +86,7 @@ class Command {
|
| builder.addJson(displayName);
|
| }
|
|
|
| - bool _equal(Command other) =>
|
| + bool _equal(covariant Command other) =>
|
| hashCode == other.hashCode && displayName == other.displayName;
|
|
|
| String toString() => reproductionCommand;
|
| @@ -265,13 +265,14 @@ class ContentShellCommand extends ProcessCommand {
|
| // Cache the modified environments in a map from the old environment and
|
| // the string of Dart flags to the new environment. Avoid creating new
|
| // environment object for each command object.
|
| - static Map<AddFlagsKey, Map> environments = new Map<AddFlagsKey, Map>();
|
| + static Map<AddFlagsKey, Map> environments = <AddFlagsKey, Map>{};
|
|
|
| - static Map _getEnvironment(Map env, List<String> dartFlags) {
|
| + static Map<String, String> _getEnvironment(
|
| + Map<String, String> env, List<String> dartFlags) {
|
| var needDartFlags = dartFlags != null && dartFlags.length > 0;
|
| if (needDartFlags) {
|
| if (env == null) {
|
| - env = const {};
|
| + env = const <String, String>{};
|
| }
|
| var flags = dartFlags.join(' ');
|
| return environments.putIfAbsent(
|
| @@ -283,7 +284,7 @@ class ContentShellCommand extends ProcessCommand {
|
| }
|
|
|
| static List<String> _getArguments(List<String> options, String htmlFile) {
|
| - var arguments = new List.from(options);
|
| + var arguments = options.toList();
|
| arguments.add(htmlFile);
|
| return arguments;
|
| }
|
| @@ -299,8 +300,8 @@ class BrowserTestCommand extends Command {
|
|
|
| BrowserTestCommand._(
|
| String _browser, this.url, this.configuration, this.retry)
|
| - : super._(_browser),
|
| - browser = _browser;
|
| + : browser = _browser,
|
| + super._(_browser);
|
|
|
| void _buildHashCode(HashCodeBuilder builder) {
|
| super._buildHashCode(builder);
|
| @@ -443,13 +444,13 @@ class PubCommand extends ProcessCommand {
|
|
|
| PubCommand._(String pubCommand, String pubExecutable,
|
| String pubspecYamlDirectory, String pubCacheDirectory, List<String> args)
|
| - : super._(
|
| + : command = pubCommand,
|
| + super._(
|
| 'pub_$pubCommand',
|
| new io.File(pubExecutable).absolute.path,
|
| [pubCommand]..addAll(args),
|
| {'PUB_CACHE': pubCacheDirectory},
|
| - pubspecYamlDirectory),
|
| - command = pubCommand;
|
| + pubspecYamlDirectory);
|
|
|
| void _buildHashCode(HashCodeBuilder builder) {
|
| super._buildHashCode(builder);
|
| @@ -918,7 +919,7 @@ abstract class CommandOutput {
|
|
|
| bool get hasTimedOut;
|
|
|
| - bool didFail(testcase);
|
| + bool didFail(TestCase testCase);
|
|
|
| bool hasFailed(TestCase testCase);
|
|
|
| @@ -1072,9 +1073,9 @@ class BrowserCommandOutputImpl extends CommandOutputImpl {
|
|
|
| BrowserCommandOutputImpl(
|
| command, exitCode, timedOut, stdout, stderr, time, compilationSkipped)
|
| - : super(command, exitCode, timedOut, stdout, stderr, time,
|
| - compilationSkipped, 0),
|
| - _infraFailure = _failedBecauseOfFlakyInfrastructure(stderr);
|
| + : _infraFailure = _failedBecauseOfFlakyInfrastructure(stderr),
|
| + super(command, exitCode, timedOut, stdout, stderr, time,
|
| + compilationSkipped, 0);
|
|
|
| Expectation result(TestCase testCase) {
|
| // Handle crashes and timeouts first
|
| @@ -2245,9 +2246,8 @@ class BatchRunnerProcess {
|
| _startProcess(callback) {
|
| assert(_command is ProcessCommand);
|
| var executable = _command.executable;
|
| - var arguments = []
|
| - ..addAll(_command.batchArguments)
|
| - ..add('--batch');
|
| + var arguments = _command.batchArguments.toList();
|
| + arguments.add('--batch');
|
| var environment = new Map.from(io.Platform.environment);
|
| if (_processEnvironmentOverrides != null) {
|
| for (var key in _processEnvironmentOverrides.keys) {
|
| @@ -2356,14 +2356,14 @@ class TestCaseEnqueuer {
|
| void newTest(TestCase testCase) {
|
| remainingTestCases.add(testCase);
|
|
|
| - var lastNode;
|
| + dgraph.Node lastNode;
|
| for (var command in testCase.commands) {
|
| // Make exactly *one* node in the dependency graph for every command.
|
| // This ensures that we never have two commands c1 and c2 in the graph
|
| // with "c1 == c2".
|
| var node = command2node[command];
|
| if (node == null) {
|
| - var requiredNodes = (lastNode != null) ? [lastNode] : [];
|
| + var requiredNodes = (lastNode != null) ? [lastNode] : <dgraph.Node>[];
|
| node = graph.newNode(command, requiredNodes);
|
| command2node[command] = node;
|
| command2testCases[command] = <TestCase>[];
|
| @@ -2417,12 +2417,14 @@ class CommandEnqueuer {
|
| CommandEnqueuer(this._graph) {
|
| var eventCondition = _graph.events.where;
|
|
|
| - eventCondition((e) => e is dgraph.NodeAddedEvent).listen((event) {
|
| + eventCondition((e) => e is dgraph.NodeAddedEvent).listen((e) {
|
| + var event = e as dgraph.NodeAddedEvent;
|
| dgraph.Node node = event.node;
|
| _changeNodeStateIfNecessary(node);
|
| });
|
|
|
| - eventCondition((e) => e is dgraph.StateChangedEvent).listen((event) {
|
| + eventCondition((e) => e is dgraph.StateChangedEvent).listen((e) {
|
| + var event = e as dgraph.StateChangedEvent;
|
| if ([dgraph.NodeState.Waiting, dgraph.NodeState.Processing]
|
| .contains(event.from)) {
|
| if (FINISHED_STATES.contains(event.to)) {
|
| @@ -2481,7 +2483,7 @@ class CommandQueue {
|
|
|
| final Queue<Command> _runQueue = new Queue<Command>();
|
| final _commandOutputStream = new StreamController<CommandOutput>(sync: true);
|
| - final _completer = new Completer();
|
| + final _completer = new Completer<Null>();
|
|
|
| int _numProcesses = 0;
|
| int _maxProcesses;
|
| @@ -2493,8 +2495,8 @@ class CommandQueue {
|
| CommandQueue(this.graph, this.enqueuer, this.executor, this._maxProcesses,
|
| this._maxBrowserProcesses, this._verbose) {
|
| var eventCondition = graph.events.where;
|
| - eventCondition((event) => event is dgraph.StateChangedEvent)
|
| - .listen((event) {
|
| + eventCondition((e) => e is dgraph.StateChangedEvent).listen((e) {
|
| + var event = e as dgraph.StateChangedEvent;
|
| if (event.to == dgraph.NodeState.Enqueuing) {
|
| assert(event.from == dgraph.NodeState.Initialized ||
|
| event.from == dgraph.NodeState.Waiting);
|
| @@ -2622,7 +2624,7 @@ abstract class CommandExecutor {
|
| Future cleanup();
|
| // TODO(kustermann): The [timeout] parameter should be a property of Command
|
| Future<CommandOutput> runCommand(
|
| - dgraph.Node node, Command command, int timeout);
|
| + dgraph.Node node, covariant Command command, int timeout);
|
| }
|
|
|
| class CommandExecutorImpl implements CommandExecutor {
|
| @@ -2648,7 +2650,7 @@ class CommandExecutorImpl implements CommandExecutor {
|
| _finishing = true;
|
|
|
| Future _terminateBatchRunners() {
|
| - var futures = [];
|
| + var futures = <Future>[];
|
| for (var runners in _batchProcesses.values) {
|
| futures.addAll(runners.map((runner) => runner.terminate()));
|
| }
|
| @@ -2993,8 +2995,8 @@ class TestCaseCompleter {
|
|
|
| // Listen for NodeState.Processing -> NodeState.{Successful,Failed}
|
| // changes.
|
| - eventCondition((event) => event is dgraph.StateChangedEvent)
|
| - .listen((dgraph.StateChangedEvent event) {
|
| + eventCondition((event) => event is dgraph.StateChangedEvent).listen((e) {
|
| + var event = e as dgraph.StateChangedEvent;
|
| if (event.from == dgraph.NodeState.Processing &&
|
| !finishedRemainingTestCases) {
|
| var command = event.node.userData;
|
| @@ -3009,8 +3011,7 @@ class TestCaseCompleter {
|
|
|
| // Listen also for GraphSealedEvent's. If there is not a single node in the
|
| // graph, we still want to finish after the graph was sealed.
|
| - eventCondition((event) => event is dgraph.GraphSealedEvent)
|
| - .listen((dgraph.GraphSealedEvent event) {
|
| + eventCondition((event) => event is dgraph.GraphSealedEvent).listen((_) {
|
| if (!_closed && enqueuer.remainingTestCases.isEmpty) {
|
| _controller.close();
|
| _closed = true;
|
| @@ -3074,7 +3075,7 @@ class ProcessQueue {
|
| void setupForListing(TestCaseEnqueuer testCaseEnqueuer) {
|
| _graph.events
|
| .where((event) => event is dgraph.GraphSealedEvent)
|
| - .listen((dgraph.GraphSealedEvent event) {
|
| + .listen((_) {
|
| var testCases = new List.from(testCaseEnqueuer.remainingTestCases);
|
| testCases.sort((a, b) => a.displayName.compareTo(b.displayName));
|
|
|
|
|