anchor.diff:                  executable,
                   arguments,
                   environmentOverrides);
  +}
  +
  +/* [ScriptCommand]s are executed by dart code. */
  +abstract class ScriptCommand extends Command {
  +  ScriptCommand._(String displayName) : super._(displayName);
  +
  +  Future<ScriptCommandOutputImpl> run();
   }
   
   class CommandBuilder {
  
positive.code:     } else if (command is AnalysisCommand && batchMode) {
        return _getBatchRunner(command.flavor)
            .runCommand(command.flavor, command, timeout, command.arguments);
      } else {
        return new RunningProcess(command, timeout).run();
      }
  
negative.code:     outcome = _negateOutcomeIfIncompleteAsyncTest(outcome, decodeUtf8(stdout));
      return _negateOutcomeIfNegativeTest(outcome, testCase.isNegative);
    }
  }
  
  class ScriptCommandOutputImpl extends CommandOutputImpl {
    final Expectation _result;
  
    ScriptCommandOutputImpl(ScriptCommand command, this._result,
                            String scriptExecutionInformation, Duration time)
        : super(command, 0, false, [], [], time, false) {
      var lines = scriptExecutionInformation.split("\n");
      diagnostics.addAll(lines);
    }
  
    Expectation result(TestCase testCase) => _result;
  
    bool get canRunDependendCommands => _result == Expectation.PASS;
  
    bool get successful => _result == Expectation.PASS;
  
  }
  
  CommandOutput createCommandOutput(Command command,
  