| Index: dart/tools/testing/dart/test_runner.dart
|
| diff --git a/dart/tools/testing/dart/test_runner.dart b/dart/tools/testing/dart/test_runner.dart
|
| index 38f500bef2821455503d8d8e891709810c533034..22b0d5c58e1e00f15162db85c245dda6661ea0b0 100644
|
| --- a/dart/tools/testing/dart/test_runner.dart
|
| +++ b/dart/tools/testing/dart/test_runner.dart
|
| @@ -1794,10 +1794,12 @@ class CommandEnqueuer {
|
| });
|
|
|
| eventCondition((e) => e is dgraph.StateChangedEvent).listen((event) {
|
| - if (event.from == dgraph.NodeState.Processing) {
|
| - assert(FINISHED_STATES.contains(event.to));
|
| - for (var dependendNode in event.node.neededFor) {
|
| - _changeNodeStateIfNecessary(dependendNode);
|
| + if ([dgraph.NodeState.Waiting,
|
| + dgraph.NodeState.Processing].contains(event.from)) {
|
| + if (FINISHED_STATES.contains(event.to)){
|
| + for (var dependendNode in event.node.neededFor) {
|
| + _changeNodeStateIfNecessary(dependendNode);
|
| + }
|
| }
|
| }
|
| });
|
| @@ -1806,23 +1808,25 @@ class CommandEnqueuer {
|
| // Called when either a new node was added or if one of it's dependencies
|
| // changed it's state.
|
| void _changeNodeStateIfNecessary(dgraph.Node node) {
|
| - assert(INIT_STATES.contains(node.state));
|
| - bool allDependenciesFinished =
|
| - node.dependencies.every((node) => FINISHED_STATES.contains(node.state));
|
| -
|
| - var newState = dgraph.NodeState.Waiting;
|
| - if (allDependenciesFinished) {
|
| - bool allDependenciesSuccessful = node.dependencies.every(
|
| - (dep) => dep.state == dgraph.NodeState.Successful);
|
| + if (INIT_STATES.contains(node.state)) {
|
| + bool anyDependenciesUnsuccessful = node.dependencies.any(
|
| + (dep) => [dgraph.NodeState.Failed,
|
| + dgraph.NodeState.UnableToRun].contains(dep.state));
|
|
|
| - if (allDependenciesSuccessful) {
|
| - newState = dgraph.NodeState.Enqueuing;
|
| - } else {
|
| + var newState = dgraph.NodeState.Waiting;
|
| + if (anyDependenciesUnsuccessful) {
|
| newState = dgraph.NodeState.UnableToRun;
|
| + } else {
|
| + bool allDependenciesSuccessful = node.dependencies.every(
|
| + (dep) => dep.state == dgraph.NodeState.Successful);
|
| +
|
| + if (allDependenciesSuccessful) {
|
| + newState = dgraph.NodeState.Enqueuing;
|
| + }
|
| + }
|
| + if (node.state != newState) {
|
| + _graph.changeState(node, newState);
|
| }
|
| - }
|
| - if (node.state != newState) {
|
| - _graph.changeState(node, newState);
|
| }
|
| }
|
| }
|
|
|