Index: tools/testing/dart/test_runner.dart |
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart |
index ac387a5b485d125734e1438b592ae31abf4b5469..0d641366b737a25db8168df207f5e5105243306f 100644 |
--- a/tools/testing/dart/test_runner.dart |
+++ b/tools/testing/dart/test_runner.dart |
@@ -39,10 +39,14 @@ typedef void EnqueueMoreWork(ProcessQueue queue); |
// Some IO tests use these variables and get confused if the host environment |
// variables are inherited so they are excluded. |
-const List<String> EXCLUDED_ENVIRONMENT_VARIABLES = |
- const ['http_proxy', 'https_proxy', 'no_proxy', |
- 'HTTP_PROXY', 'HTTPS_PROXY', 'NO_PROXY']; |
- |
+const List<String> EXCLUDED_ENVIRONMENT_VARIABLES = const [ |
+ 'http_proxy', |
+ 'https_proxy', |
+ 'no_proxy', |
+ 'HTTP_PROXY', |
+ 'HTTPS_PROXY', |
+ 'NO_PROXY' |
+]; |
/** A command executed as a step in a test case. */ |
class Command { |
@@ -70,7 +74,8 @@ class Command { |
return _cachedHashCode; |
} |
- operator ==(other) => identical(this, other) || |
+ operator ==(other) => |
+ identical(this, other) || |
(runtimeType == other.runtimeType && _equal(other)); |
void _buildHashCode(HashCodeBuilder builder) { |
@@ -78,8 +83,7 @@ class Command { |
} |
bool _equal(Command other) => |
- hashCode == other.hashCode && |
- displayName == other.displayName; |
+ hashCode == other.hashCode && displayName == other.displayName; |
String toString() => reproductionCommand; |
@@ -99,10 +103,8 @@ class ProcessCommand extends Command { |
/** Working directory for the command */ |
final String workingDirectory; |
- ProcessCommand._(String displayName, this.executable, |
- this.arguments, |
- [this.environmentOverrides = null, |
- this.workingDirectory = null]) |
+ ProcessCommand._(String displayName, this.executable, this.arguments, |
+ [this.environmentOverrides = null, this.workingDirectory = null]) |
: super._(displayName) { |
if (io.Platform.operatingSystem == 'windows') { |
// Windows can't handle the first command if it is a .bat file or the like |
@@ -130,11 +132,12 @@ class ProcessCommand extends Command { |
String get reproductionCommand { |
var env = new StringBuffer(); |
environmentOverrides.forEach((key, value) => |
- (io.Platform.operatingSystem == 'windows') ? |
- env.write('set $key=${escapeCommandLineArgument(value)} & ') : |
- env.write('$key=${escapeCommandLineArgument(value)} ')); |
+ (io.Platform.operatingSystem == 'windows') |
+ ? env.write('set $key=${escapeCommandLineArgument(value)} & ') |
+ : env.write('$key=${escapeCommandLineArgument(value)} ')); |
var command = ([executable]..addAll(arguments)) |
- .map(escapeCommandLineArgument).join(' '); |
+ .map(escapeCommandLineArgument) |
+ .join(' '); |
if (workingDirectory != null) { |
command = "$command (working directory: $workingDirectory)"; |
} |
@@ -149,13 +152,14 @@ class CompilationCommand extends ProcessCommand { |
final bool _neverSkipCompilation; |
final List<Uri> _bootstrapDependencies; |
- CompilationCommand._(String displayName, |
- this._outputFile, |
- this._neverSkipCompilation, |
- this._bootstrapDependencies, |
- String executable, |
- List<String> arguments, |
- Map<String, String> environmentOverrides) |
+ CompilationCommand._( |
+ String displayName, |
+ this._outputFile, |
+ this._neverSkipCompilation, |
+ this._bootstrapDependencies, |
+ String executable, |
+ List<String> arguments, |
+ Map<String, String> environmentOverrides) |
: super._(displayName, executable, arguments, environmentOverrides); |
Future<bool> get outputIsUpToDate { |
@@ -181,8 +185,8 @@ class CompilationCommand extends ProcessCommand { |
return readDepsFile("$_outputFile.deps").then((dependencies) { |
if (dependencies != null) { |
dependencies.addAll(_bootstrapDependencies); |
- var jsOutputLastModified = TestUtils.lastModifiedCache.getLastModified( |
- new Uri(scheme: 'file', path: _outputFile)); |
+ var jsOutputLastModified = TestUtils.lastModifiedCache |
+ .getLastModified(new Uri(scheme: 'file', path: _outputFile)); |
if (jsOutputLastModified != null) { |
for (var dependency in dependencies) { |
var dependencyLastModified = |
@@ -220,37 +224,36 @@ class AddFlagsKey { |
AddFlagsKey(this.flags, this.env); |
// Just use object identity for environment map |
bool operator ==(other) => |
- other is AddFlagsKey && flags == other.flags && env == other.env; |
+ other is AddFlagsKey && flags == other.flags && env == other.env; |
int get hashCode => flags.hashCode ^ env.hashCode; |
} |
class ContentShellCommand extends ProcessCommand { |
- ContentShellCommand._(String executable, |
- String htmlFile, |
- List<String> options, |
- List<String> dartFlags, |
- Map<String, String> environmentOverrides) |
- : super._("content_shell", |
- executable, |
- _getArguments(options, htmlFile), |
- _getEnvironment(environmentOverrides, dartFlags)); |
+ ContentShellCommand._( |
+ String executable, |
+ String htmlFile, |
+ List<String> options, |
+ List<String> dartFlags, |
+ Map<String, String> environmentOverrides) |
+ : super._("content_shell", executable, _getArguments(options, htmlFile), |
+ _getEnvironment(environmentOverrides, dartFlags)); |
// 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 = new Map<AddFlagsKey, Map>(); |
static Map _getEnvironment(Map env, List<String> dartFlags) { |
var needDartFlags = dartFlags != null && dartFlags.length > 0; |
if (needDartFlags) { |
if (env == null) { |
- env = const { }; |
+ env = const {}; |
} |
var flags = dartFlags.join(' '); |
- return environments.putIfAbsent(new AddFlagsKey(flags, env), |
+ return environments.putIfAbsent( |
+ new AddFlagsKey(flags, env), |
() => new Map.from(env) |
- ..addAll({'DART_FLAGS': flags, 'DART_FORWARDING_PRINT': '1'})); |
+ ..addAll({'DART_FLAGS': flags, 'DART_FORWARDING_PRINT': '1'})); |
} |
return env; |
} |
@@ -270,11 +273,10 @@ class BrowserTestCommand extends Command { |
final Map configuration; |
final bool retry; |
- BrowserTestCommand._(String _browser, |
- this.url, |
- this.configuration, |
- this.retry) |
- : super._(_browser), browser = _browser; |
+ BrowserTestCommand._( |
+ String _browser, this.url, this.configuration, this.retry) |
+ : super._(_browser), |
+ browser = _browser; |
void _buildHashCode(HashCodeBuilder builder) { |
super._buildHashCode(builder); |
@@ -292,10 +294,12 @@ class BrowserTestCommand extends Command { |
retry == other.retry; |
String get reproductionCommand { |
- var parts = [io.Platform.resolvedExecutable, |
- 'tools/testing/dart/launch_browser.dart', |
- browser, |
- url]; |
+ var parts = [ |
+ io.Platform.resolvedExecutable, |
+ 'tools/testing/dart/launch_browser.dart', |
+ browser, |
+ url |
+ ]; |
return parts.map(escapeCommandLineArgument).join(' '); |
} |
@@ -304,11 +308,8 @@ class BrowserTestCommand extends Command { |
class BrowserHtmlTestCommand extends BrowserTestCommand { |
List<String> expectedMessages; |
- BrowserHtmlTestCommand._(String browser, |
- String url, |
- Map configuration, |
- this.expectedMessages, |
- bool retry) |
+ BrowserHtmlTestCommand._(String browser, String url, Map configuration, |
+ this.expectedMessages, bool retry) |
: super._(browser, url, configuration, retry); |
void _buildHashCode(HashCodeBuilder builder) { |
@@ -324,11 +325,8 @@ class BrowserHtmlTestCommand extends BrowserTestCommand { |
class AnalysisCommand extends ProcessCommand { |
final String flavor; |
- AnalysisCommand._(this.flavor, |
- String displayName, |
- String executable, |
- List<String> arguments, |
- Map<String, String> environmentOverrides) |
+ AnalysisCommand._(this.flavor, String displayName, String executable, |
+ List<String> arguments, Map<String, String> environmentOverrides) |
: super._(displayName, executable, arguments, environmentOverrides); |
void _buildHashCode(HashCodeBuilder builder) { |
@@ -337,40 +335,34 @@ class AnalysisCommand extends ProcessCommand { |
} |
bool _equal(AnalysisCommand other) => |
- super._equal(other) && |
- flavor == other.flavor; |
+ super._equal(other) && flavor == other.flavor; |
} |
class VmCommand extends ProcessCommand { |
- VmCommand._(String executable, |
- List<String> arguments, |
- Map<String,String> environmentOverrides) |
+ VmCommand._(String executable, List<String> arguments, |
+ Map<String, String> environmentOverrides) |
: super._("vm", executable, arguments, environmentOverrides); |
} |
class JSCommandlineCommand extends ProcessCommand { |
- JSCommandlineCommand._(String displayName, |
- String executable, |
- List<String> arguments, |
- [Map<String, String> environmentOverrides = null]) |
- : super._(displayName, |
- executable, |
- arguments, |
- environmentOverrides); |
+ JSCommandlineCommand._( |
+ String displayName, String executable, List<String> arguments, |
+ [Map<String, String> environmentOverrides = null]) |
+ : super._(displayName, executable, arguments, environmentOverrides); |
} |
class PubCommand extends ProcessCommand { |
final String command; |
- PubCommand._(String pubCommand, |
- String pubExecutable, |
- String pubspecYamlDirectory, |
- String pubCacheDirectory) |
- : super._('pub_$pubCommand', |
- new io.File(pubExecutable).absolute.path, |
- [pubCommand], |
- {'PUB_CACHE' : pubCacheDirectory}, |
- pubspecYamlDirectory), command = pubCommand; |
+ PubCommand._(String pubCommand, String pubExecutable, |
+ String pubspecYamlDirectory, String pubCacheDirectory) |
+ : super._( |
+ 'pub_$pubCommand', |
+ new io.File(pubExecutable).absolute.path, |
+ [pubCommand], |
+ {'PUB_CACHE': pubCacheDirectory}, |
+ pubspecYamlDirectory), |
+ command = pubCommand; |
void _buildHashCode(HashCodeBuilder builder) { |
super._buildHashCode(builder); |
@@ -378,8 +370,7 @@ class PubCommand extends ProcessCommand { |
} |
bool _equal(PubCommand other) => |
- super._equal(other) && |
- command == other.command; |
+ super._equal(other) && command == other.command; |
} |
/* [ScriptCommand]s are executed by dart code. */ |
@@ -394,7 +385,7 @@ class CleanDirectoryCopyCommand extends ScriptCommand { |
final String _destinationDirectory; |
CleanDirectoryCopyCommand._(this._sourceDirectory, this._destinationDirectory) |
- : super._('dir_copy'); |
+ : super._('dir_copy'); |
String get reproductionCommand => |
"Copying '$_sourceDirectory' to '$_destinationDirectory'."; |
@@ -440,10 +431,9 @@ class ModifyPubspecYamlCommand extends ScriptCommand { |
String _destinationFile; |
Map<String, Map> _dependencyOverrides; |
- ModifyPubspecYamlCommand._(this._pubspecYamlFile, |
- this._destinationFile, |
- this._dependencyOverrides) |
- : super._("modify_pubspec") { |
+ ModifyPubspecYamlCommand._( |
+ this._pubspecYamlFile, this._destinationFile, this._dependencyOverrides) |
+ : super._("modify_pubspec") { |
assert(_pubspecYamlFile.endsWith("pubspec.yaml")); |
assert(_destinationFile.endsWith("pubspec.yaml")); |
} |
@@ -455,9 +445,9 @@ class ModifyPubspecYamlCommand extends ScriptCommand { |
Future<ScriptCommandOutputImpl> run() { |
var watch = new Stopwatch()..start(); |
- var pubspecLockFile = |
- _destinationFile.substring(0, _destinationFile.length - ".yaml".length) |
- + ".lock"; |
+ var pubspecLockFile = _destinationFile.substring( |
+ 0, _destinationFile.length - ".yaml".length) + |
+ ".lock"; |
var file = new io.File(_pubspecYamlFile); |
var destinationFile = new io.File(_destinationFile); |
@@ -465,15 +455,14 @@ class ModifyPubspecYamlCommand extends ScriptCommand { |
return file.readAsString().then((String yamlString) { |
var dependencyOverrideSection = new StringBuffer(); |
if (_dependencyOverrides.isNotEmpty) { |
- dependencyOverrideSection.write( |
- "\n" |
+ dependencyOverrideSection.write("\n" |
"# This section was autogenerated by test.py!\n" |
"dependency_overrides:\n"); |
_dependencyOverrides.forEach((String packageName, Map override) { |
dependencyOverrideSection.write(" $packageName:\n"); |
override.forEach((overrideKey, overrideValue) { |
- dependencyOverrideSection.write( |
- " $overrideKey: $overrideValue\n"); |
+ dependencyOverrideSection |
+ .write(" $overrideKey: $overrideValue\n"); |
}); |
}); |
} |
@@ -529,9 +518,9 @@ class MakeSymlinkCommand extends ScriptCommand { |
} |
var link = new io.Link(_link); |
- return link.exists() |
- .then((bool exists) { if (exists) return link.delete(); }) |
- .then((_) => link.create(_target)); |
+ return link.exists().then((bool exists) { |
+ if (exists) return link.delete(); |
+ }).then((_) => link.create(_target)); |
}).then((_) { |
return new ScriptCommandOutputImpl( |
this, Expectation.PASS, "", watch.elapsed); |
@@ -548,9 +537,7 @@ class MakeSymlinkCommand extends ScriptCommand { |
} |
bool _equal(MakeSymlinkCommand other) => |
- super._equal(other) && |
- _link == other._link && |
- _target == other._target; |
+ super._equal(other) && _link == other._link && _target == other._target; |
} |
class CommandBuilder { |
@@ -566,45 +553,46 @@ class CommandBuilder { |
_cleared = true; |
} |
- ContentShellCommand getContentShellCommand(String executable, |
- String htmlFile, |
- List<String> options, |
- List<String> dartFlags, |
- Map<String, String> environment) { |
+ ContentShellCommand getContentShellCommand( |
+ String executable, |
+ String htmlFile, |
+ List<String> options, |
+ List<String> dartFlags, |
+ Map<String, String> environment) { |
ContentShellCommand command = new ContentShellCommand._( |
executable, htmlFile, options, dartFlags, environment); |
return _getUniqueCommand(command); |
} |
- BrowserTestCommand getBrowserTestCommand(String browser, |
- String url, |
- Map configuration, |
- bool retry) { |
+ BrowserTestCommand getBrowserTestCommand( |
+ String browser, String url, Map configuration, bool retry) { |
var command = new BrowserTestCommand._(browser, url, configuration, retry); |
return _getUniqueCommand(command); |
} |
- BrowserHtmlTestCommand getBrowserHtmlTestCommand(String browser, |
- String url, |
- Map configuration, |
- List<String> expectedMessages, |
- bool retry) { |
+ BrowserHtmlTestCommand getBrowserHtmlTestCommand(String browser, String url, |
+ Map configuration, List<String> expectedMessages, bool retry) { |
var command = new BrowserHtmlTestCommand._( |
browser, url, configuration, expectedMessages, retry); |
return _getUniqueCommand(command); |
} |
- CompilationCommand getCompilationCommand(String displayName, |
- outputFile, |
- neverSkipCompilation, |
- List<Uri> bootstrapDependencies, |
- String executable, |
- List<String> arguments, |
- Map<String, String> environment) { |
- var command = |
- new CompilationCommand._( |
- displayName, outputFile, neverSkipCompilation, |
- bootstrapDependencies, executable, arguments, environment); |
+ CompilationCommand getCompilationCommand( |
+ String displayName, |
+ outputFile, |
+ neverSkipCompilation, |
+ List<Uri> bootstrapDependencies, |
+ String executable, |
+ List<String> arguments, |
+ Map<String, String> environment) { |
+ var command = new CompilationCommand._( |
+ displayName, |
+ outputFile, |
+ neverSkipCompilation, |
+ bootstrapDependencies, |
+ executable, |
+ arguments, |
+ environment); |
return _getUniqueCommand(command); |
} |
@@ -616,41 +604,36 @@ class CommandBuilder { |
return _getUniqueCommand(command); |
} |
- VmCommand getVmCommand(String executable, |
- List<String> arguments, |
- Map<String, String> environmentOverrides) { |
+ VmCommand getVmCommand(String executable, List<String> arguments, |
+ Map<String, String> environmentOverrides) { |
var command = new VmCommand._(executable, arguments, environmentOverrides); |
return _getUniqueCommand(command); |
} |
Command getJSCommandlineCommand(String displayName, executable, arguments, |
- [environment = null]) { |
- var command = new JSCommandlineCommand._(displayName, executable, arguments, |
- environment); |
+ [environment = null]) { |
+ var command = new JSCommandlineCommand._( |
+ displayName, executable, arguments, environment); |
return _getUniqueCommand(command); |
} |
Command getProcessCommand(String displayName, executable, arguments, |
- [environment = null, workingDirectory = null]) { |
- var command = new ProcessCommand._(displayName, executable, arguments, |
- environment, workingDirectory); |
+ [environment = null, workingDirectory = null]) { |
+ var command = new ProcessCommand._( |
+ displayName, executable, arguments, environment, workingDirectory); |
return _getUniqueCommand(command); |
} |
Command getCopyCommand(String sourceDirectory, String destinationDirectory) { |
- var command = new CleanDirectoryCopyCommand._(sourceDirectory, |
- destinationDirectory); |
+ var command = |
+ new CleanDirectoryCopyCommand._(sourceDirectory, destinationDirectory); |
return _getUniqueCommand(command); |
} |
- Command getPubCommand(String pubCommand, |
- String pubExecutable, |
- String pubspecYamlDirectory, |
- String pubCacheDirectory) { |
- var command = new PubCommand._(pubCommand, |
- pubExecutable, |
- pubspecYamlDirectory, |
- pubCacheDirectory); |
+ Command getPubCommand(String pubCommand, String pubExecutable, |
+ String pubspecYamlDirectory, String pubCacheDirectory) { |
+ var command = new PubCommand._( |
+ pubCommand, pubExecutable, pubspecYamlDirectory, pubCacheDirectory); |
return _getUniqueCommand(command); |
} |
@@ -659,7 +642,7 @@ class CommandBuilder { |
} |
Command getModifyPubspecCommand(String pubspecYamlFile, Map depsOverrides, |
- {String destinationFile: null}) { |
+ {String destinationFile: null}) { |
if (destinationFile == null) destinationFile = pubspecYamlFile; |
return _getUniqueCommand(new ModifyPubspecYamlCommand._( |
pubspecYamlFile, destinationFile, depsOverrides)); |
@@ -716,7 +699,8 @@ class TestCase extends UniqueObject { |
* compiling multiple sources that are run in isolation. |
*/ |
List<Command> commands; |
- Map<Command, CommandOutput> commandOutputs = new Map<Command,CommandOutput>(); |
+ Map<Command, CommandOutput> commandOutputs = |
+ new Map<Command, CommandOutput>(); |
Map configuration; |
String displayName; |
@@ -724,19 +708,16 @@ class TestCase extends UniqueObject { |
int hash = 0; |
Set<Expectation> expectedOutcomes; |
- TestCase(this.displayName, |
- this.commands, |
- this.configuration, |
- this.expectedOutcomes, |
- {isNegative: false, |
- TestInformation info: null}) { |
+ TestCase(this.displayName, this.commands, this.configuration, |
+ this.expectedOutcomes, |
+ {isNegative: false, TestInformation info: null}) { |
if (isNegative || displayName.contains("negative_test")) { |
_expectations |= IS_NEGATIVE; |
} |
if (info != null) { |
_setExpectations(info); |
- hash = info.originTestPath.relativeTo(TestUtils.dartDir) |
- .toString().hashCode; |
+ hash = |
+ info.originTestPath.relativeTo(TestUtils.dartDir).toString().hashCode; |
} |
} |
@@ -777,8 +758,8 @@ class TestCase extends UniqueObject { |
CommandOutput get lastCommandOutput { |
if (commandOutputs.length == 0) { |
throw new Exception("CommandOutputs is empty, maybe no command was run? (" |
- "displayName: '$displayName', " |
- "configurationString: '$configurationString')"); |
+ "displayName: '$displayName', " |
+ "configurationString: '$configurationString')"); |
} |
return commandOutputs[commands[commandOutputs.length - 1]]; |
} |
@@ -786,8 +767,8 @@ class TestCase extends UniqueObject { |
Command get lastCommandExecuted { |
if (commandOutputs.length == 0) { |
throw new Exception("CommandOutputs is empty, maybe no command was run? (" |
- "displayName: '$displayName', " |
- "configurationString: '$configurationString')"); |
+ "displayName: '$displayName', " |
+ "configurationString: '$configurationString')"); |
} |
return commands[commandOutputs.length - 1]; |
} |
@@ -815,34 +796,34 @@ class TestCase extends UniqueObject { |
} |
bool get isFlaky { |
- if (expectedOutcomes.contains(Expectation.SKIP) || |
- expectedOutcomes.contains(Expectation.SKIP_BY_DESIGN)) { |
- return false; |
- } |
+ if (expectedOutcomes.contains(Expectation.SKIP) || |
+ expectedOutcomes.contains(Expectation.SKIP_BY_DESIGN)) { |
+ return false; |
+ } |
- return expectedOutcomes |
- .where((expectation) => !expectation.isMetaExpectation).length > 1; |
+ return expectedOutcomes |
+ .where((expectation) => !expectation.isMetaExpectation) |
+ .length > |
+ 1; |
} |
bool get isFinished { |
return commandOutputs.length > 0 && |
(!lastCommandOutput.successful || |
- commands.length == commandOutputs.length); |
+ commands.length == commandOutputs.length); |
} |
} |
- |
/** |
* BrowserTestCase has an extra compilation command that is run in a separate |
* process, before the regular test is run as in the base class [TestCase]. |
* If the compilation command fails, then the rest of the test is not run. |
*/ |
class BrowserTestCase extends TestCase { |
- |
- BrowserTestCase(displayName, commands, configuration, |
- expectedOutcomes, info, isNegative, this._testingUrl) |
- : super(displayName, commands, configuration, |
- expectedOutcomes, isNegative: isNegative, info: info); |
+ BrowserTestCase(displayName, commands, configuration, expectedOutcomes, info, |
+ isNegative, this._testingUrl) |
+ : super(displayName, commands, configuration, expectedOutcomes, |
+ isNegative: isNegative, info: info); |
String _testingUrl; |
@@ -858,14 +839,13 @@ class UnittestSuiteMessagesMixin { |
return testOutput.contains("unittest-suite-success"); |
} |
- Expectation _negateOutcomeIfIncompleteAsyncTest(Expectation outcome, |
- String testOutput) { |
+ Expectation _negateOutcomeIfIncompleteAsyncTest( |
+ Expectation outcome, String testOutput) { |
// If this is an asynchronous test and the asynchronous operation didn't |
// complete successfully, it's outcome is Expectation.FAIL. |
// TODO: maybe we should introduce a AsyncIncomplete marker or so |
if (outcome == Expectation.PASS) { |
- if (_isAsyncTest(testOutput) && |
- !_isAsyncTestSuccessful(testOutput)) { |
+ if (_isAsyncTest(testOutput) && !_isAsyncTestSuccessful(testOutput)) { |
return Expectation.FAIL; |
} |
} |
@@ -930,14 +910,15 @@ class CommandOutputImpl extends UniqueObject implements CommandOutput { |
bool alreadyPrintedWarning = false; |
// TODO(kustermann): Remove testCase from this class. |
- CommandOutputImpl(Command this.command, |
- int this.exitCode, |
- bool this.timedOut, |
- List<int> this.stdout, |
- List<int> this.stderr, |
- Duration this.time, |
- bool this.compilationSkipped, |
- int this.pid) { |
+ CommandOutputImpl( |
+ Command this.command, |
+ int this.exitCode, |
+ bool this.timedOut, |
+ List<int> this.stdout, |
+ List<int> this.stderr, |
+ Duration this.time, |
+ bool this.compilationSkipped, |
+ int this.pid) { |
diagnostics = []; |
} |
@@ -991,8 +972,8 @@ class CommandOutputImpl extends UniqueObject implements CommandOutput { |
return testCase.isNegative ? !didFail(testCase) : didFail(testCase); |
} |
- Expectation _negateOutcomeIfNegativeTest(Expectation outcome, |
- bool isNegative) { |
+ Expectation _negateOutcomeIfNegativeTest( |
+ Expectation outcome, bool isNegative) { |
if (!isNegative) return outcome; |
if (outcome.canBeOutcomeOf(Expectation.FAIL)) { |
@@ -1012,21 +993,9 @@ class BrowserCommandOutputImpl extends CommandOutputImpl { |
bool _failedBecauseOfMissingXDisplay; |
BrowserCommandOutputImpl( |
- command, |
- exitCode, |
- timedOut, |
- stdout, |
- stderr, |
- time, |
- compilationSkipped) : |
- super(command, |
- exitCode, |
- timedOut, |
- stdout, |
- stderr, |
- time, |
- compilationSkipped, |
- 0) { |
+ command, exitCode, timedOut, stdout, stderr, time, compilationSkipped) |
+ : super(command, exitCode, timedOut, stdout, stderr, time, |
+ compilationSkipped, 0) { |
_failedBecauseOfMissingXDisplay = _didFailBecauseOfMissingXDisplay(); |
if (_failedBecauseOfMissingXDisplay) { |
DebugLogger.warning("Warning: Test failure because of missing XDisplay"); |
@@ -1128,7 +1097,7 @@ class BrowserCommandOutputImpl extends CommandOutputImpl { |
} |
if (!containsFail && !containsPass) { |
DebugLogger.warning("Test had neither 'FAIL' nor 'PASS' in stdout. " |
- "($command)"); |
+ "($command)"); |
return true; |
} |
if (containsFail) { |
@@ -1137,43 +1106,31 @@ class BrowserCommandOutputImpl extends CommandOutputImpl { |
assert(containsPass); |
if (exitCode != 0) { |
var message = "All tests passed, but exitCode != 0. " |
- "Actual exitcode: $exitCode. " |
- "($command)"; |
+ "Actual exitcode: $exitCode. " |
+ "($command)"; |
DebugLogger.warning(message); |
diagnostics.add(message); |
} |
return (!hasCrashed && |
- exitCode != 0 && |
- (!isWindows || exitCode != WHITELISTED_CONTENTSHELL_EXITCODE)); |
+ exitCode != 0 && |
+ (!isWindows || exitCode != WHITELISTED_CONTENTSHELL_EXITCODE)); |
} |
DebugLogger.warning("Couldn't find 'Content-Type: text/plain' in output. " |
- "($command)."); |
+ "($command)."); |
return true; |
} |
} |
class HTMLBrowserCommandOutputImpl extends BrowserCommandOutputImpl { |
- HTMLBrowserCommandOutputImpl( |
- command, |
- exitCode, |
- timedOut, |
- stdout, |
- stderr, |
- time, |
- compilationSkipped) : |
- super(command, |
- exitCode, |
- timedOut, |
- stdout, |
- stderr, |
- time, |
- compilationSkipped); |
+ HTMLBrowserCommandOutputImpl( |
+ command, exitCode, timedOut, stdout, stderr, time, compilationSkipped) |
+ : super(command, exitCode, timedOut, stdout, stderr, time, |
+ compilationSkipped); |
bool didFail(TestCase testCase) { |
return _getOutcome() != Expectation.PASS; |
} |
- |
bool get _browserTestFailure { |
// We should not need to convert back and forward. |
var output = decodeUtf8(super.stdout); |
@@ -1183,10 +1140,16 @@ class HTMLBrowserCommandOutputImpl extends BrowserCommandOutputImpl { |
} |
class BrowserTestJsonResult { |
- static const ALLOWED_TYPES = |
- const ['sync_exception', 'window_onerror', 'script_onerror', |
- 'window_compilationerror', 'print', 'message_received', 'dom', |
- 'debug']; |
+ static const ALLOWED_TYPES = const [ |
+ 'sync_exception', |
+ 'window_onerror', |
+ 'script_onerror', |
+ 'window_compilationerror', |
+ 'print', |
+ 'message_received', |
+ 'dom', |
+ 'debug' |
+ ]; |
final Expectation outcome; |
final String htmlDom; |
@@ -1198,7 +1161,7 @@ class BrowserTestJsonResult { |
void validate(String assertion, bool value) { |
if (!value) { |
throw "InvalidFormat sent from browser driving page: $assertion:\n\n" |
- "$content"; |
+ "$content"; |
} |
} |
@@ -1218,12 +1181,11 @@ class BrowserTestJsonResult { |
var value = entry['value']; |
var timestamp = entry['timestamp']; |
- validate("'type' of an entry must be a String", |
- type is String); |
+ validate("'type' of an entry must be a String", type is String); |
validate("'type' has to be in $ALLOWED_TYPES.", |
- ALLOWED_TYPES.contains(type)); |
- validate("'timestamp' of an entry must be a number", |
- timestamp is num); |
+ ALLOWED_TYPES.contains(type)); |
+ validate( |
+ "'timestamp' of an entry must be a number", timestamp is num); |
messagesByType[type].add(value); |
} |
@@ -1238,7 +1200,7 @@ class BrowserTestJsonResult { |
return new BrowserTestJsonResult( |
_getOutcome(messagesByType), dom, events); |
} |
- } catch(error) { |
+ } catch (error) { |
// If something goes wrong, we know the content was not in the correct |
// JSON format. So we can't parse it. |
// The caller is responsible for falling back to the old way of |
@@ -1275,11 +1237,11 @@ class BrowserTestJsonResult { |
// the unittest implementation posts these messages using |
// "window.postMessage()" instead of the normal "print()" them. |
- var isAsyncTest = searchForMsg(['print', 'message_received'], |
- 'unittest-suite-wait-for-done'); |
+ var isAsyncTest = searchForMsg( |
+ ['print', 'message_received'], 'unittest-suite-wait-for-done'); |
var isAsyncSuccess = |
searchForMsg(['print', 'message_received'], 'unittest-suite-success') || |
- searchForMsg(['print', 'message_received'], 'unittest-suite-done'); |
+ searchForMsg(['print', 'message_received'], 'unittest-suite-done'); |
if (isAsyncTest) { |
if (isAsyncSuccess) { |
@@ -1301,22 +1263,23 @@ class BrowserTestJsonResult { |
} |
class BrowserControllerTestOutcome extends CommandOutputImpl |
- with UnittestSuiteMessagesMixin { |
+ with UnittestSuiteMessagesMixin { |
BrowserTestOutput _result; |
Expectation _rawOutcome; |
- factory BrowserControllerTestOutcome(Command command, |
- BrowserTestOutput result) { |
+ factory BrowserControllerTestOutcome( |
+ Command command, BrowserTestOutput result) { |
void validate(String assertion, bool value) { |
if (!value) { |
throw "InvalidFormat sent from browser driving page: $assertion:\n\n" |
- "${result.lastKnownMessage}"; |
+ "${result.lastKnownMessage}"; |
} |
} |
String indent(String string, int numSpaces) { |
var spaces = new List.filled(numSpaces, ' ').join(''); |
- return string.replaceAll('\r\n', '\n') |
+ return string |
+ .replaceAll('\r\n', '\n') |
.split('\n') |
.map((line) => "$spaces$line") |
.join('\n'); |
@@ -1344,13 +1307,13 @@ class BrowserControllerTestOutcome extends CommandOutputImpl |
if (result.didTimeout) { |
if (result.delayUntilTestStarted != null) { |
stderr = "This test timed out. The delay until the test actually " |
- "started was: ${result.delayUntilTestStarted}."; |
+ "started was: ${result.delayUntilTestStarted}."; |
} else { |
// TODO(ricow/kustermann) as soon as we record the state periodically, |
// we will have more information and can remove this warning. |
stderr = "This test has not notified test.py that it started running. " |
- "This could be a bug in test.py! " |
- "Please contact ricow/whesse"; |
+ "This could be a bug in test.py! " |
+ "Please contact ricow/whesse"; |
} |
} |
@@ -1360,8 +1323,7 @@ class BrowserControllerTestOutcome extends CommandOutputImpl |
stdout = "message:\n${indent(result.lastKnownMessage, 2)}\n\n"; |
} |
- stderr = |
- '$stderr\n\n' |
+ stderr = '$stderr\n\n' |
'BrowserOutput while running the test (* EXPERIMENTAL *):\n' |
'BrowserOutput.stdout:\n' |
'${indent(result.browserOutput.stdout.toString(), 2)}\n' |
@@ -1369,20 +1331,23 @@ class BrowserControllerTestOutcome extends CommandOutputImpl |
'${indent(result.browserOutput.stderr.toString(), 2)}\n' |
'\n'; |
return new BrowserControllerTestOutcome._internal( |
- command, result, outcome, encodeUtf8(stdout), encodeUtf8(stderr)); |
+ command, result, outcome, encodeUtf8(stdout), encodeUtf8(stderr)); |
} |
BrowserControllerTestOutcome._internal( |
- Command command, BrowserTestOutput result, this._rawOutcome, |
- List<int> stdout, List<int> stderr) |
+ Command command, |
+ BrowserTestOutput result, |
+ this._rawOutcome, |
+ List<int> stdout, |
+ List<int> stderr) |
: super(command, 0, result.didTimeout, stdout, stderr, result.duration, |
- false, 0) { |
+ false, 0) { |
_result = result; |
} |
Expectation result(TestCase testCase) { |
// Handle timeouts first |
- if (_result.didTimeout) return Expectation.TIMEOUT; |
+ if (_result.didTimeout) return Expectation.TIMEOUT; |
// Multitests are handled specially |
if (testCase.hasRuntimeError) { |
@@ -1394,7 +1359,6 @@ class BrowserControllerTestOutcome extends CommandOutputImpl |
} |
} |
- |
class AnalysisCommandOutputImpl extends CommandOutputImpl { |
// An error line has 8 fields that look like: |
// ERROR|COMPILER|MISSING_SOURCE|file:/tmp/t.dart|15|1|24|Missing source. |
@@ -1403,21 +1367,10 @@ class AnalysisCommandOutputImpl extends CommandOutputImpl { |
final int FILENAME = 3; |
final int FORMATTED_ERROR = 7; |
- AnalysisCommandOutputImpl(command, |
- exitCode, |
- timedOut, |
- stdout, |
- stderr, |
- time, |
- compilationSkipped) : |
- super(command, |
- exitCode, |
- timedOut, |
- stdout, |
- stderr, |
- time, |
- compilationSkipped, |
- 0); |
+ AnalysisCommandOutputImpl( |
+ command, exitCode, timedOut, stdout, stderr, time, compilationSkipped) |
+ : super(command, exitCode, timedOut, stdout, stderr, time, |
+ compilationSkipped, 0); |
Expectation result(TestCase testCase) { |
// TODO(kustermann): If we run the analyzer not in batch mode, make sure |
@@ -1455,9 +1408,8 @@ class AnalysisCommandOutputImpl extends CommandOutputImpl { |
return Expectation.STATIC_WARNING; |
} |
- assert (errors.length == 0 && warnings.length == 0); |
- assert (!testCase.hasCompileError && |
- !testCase.hasStaticWarning); |
+ assert(errors.length == 0 && warnings.length == 0); |
+ assert(!testCase.hasCompileError && !testCase.hasStaticWarning); |
return Expectation.PASS; |
} |
@@ -1468,7 +1420,7 @@ class AnalysisCommandOutputImpl extends CommandOutputImpl { |
StringBuffer field = new StringBuffer(); |
List<String> result = []; |
bool escaped = false; |
- for (var i = 0 ; i < line.length; i++) { |
+ for (var i = 0; i < line.length; i++) { |
var c = line[i]; |
if (!escaped && c == '\\') { |
escaped = true; |
@@ -1503,13 +1455,12 @@ class AnalysisCommandOutputImpl extends CommandOutputImpl { |
} |
class VmCommandOutputImpl extends CommandOutputImpl |
- with UnittestSuiteMessagesMixin { |
+ with UnittestSuiteMessagesMixin { |
static const DART_VM_EXITCODE_COMPILE_TIME_ERROR = 254; |
static const DART_VM_EXITCODE_UNCAUGHT_EXCEPTION = 255; |
VmCommandOutputImpl(Command command, int exitCode, bool timedOut, |
- List<int> stdout, List<int> stderr, Duration time, |
- int pid) |
+ List<int> stdout, List<int> stderr, Duration time, int pid) |
: super(command, exitCode, timedOut, stdout, stderr, time, false, pid); |
Expectation result(TestCase testCase) { |
@@ -1553,11 +1504,16 @@ class VmCommandOutputImpl extends CommandOutputImpl |
class CompilationCommandOutputImpl extends CommandOutputImpl { |
static const DART2JS_EXITCODE_CRASH = 253; |
- CompilationCommandOutputImpl(Command command, int exitCode, bool timedOut, |
- List<int> stdout, List<int> stderr, Duration time, |
+ CompilationCommandOutputImpl( |
+ Command command, |
+ int exitCode, |
+ bool timedOut, |
+ List<int> stdout, |
+ List<int> stderr, |
+ Duration time, |
bool compilationSkipped) |
: super(command, exitCode, timedOut, stdout, stderr, time, |
- compilationSkipped, 0); |
+ compilationSkipped, 0); |
Expectation result(TestCase testCase) { |
// Handle general crash/timeout detection. |
@@ -1596,7 +1552,7 @@ class CompilationCommandOutputImpl extends CommandOutputImpl { |
} |
class JsCommandlineOutputImpl extends CommandOutputImpl |
- with UnittestSuiteMessagesMixin { |
+ with UnittestSuiteMessagesMixin { |
JsCommandlineOutputImpl(Command command, int exitCode, bool timedOut, |
List<int> stdout, List<int> stderr, Duration time) |
: super(command, exitCode, timedOut, stdout, stderr, time, false, 0); |
@@ -1620,7 +1576,7 @@ class JsCommandlineOutputImpl extends CommandOutputImpl |
class PubCommandOutputImpl extends CommandOutputImpl { |
PubCommandOutputImpl(PubCommand command, int exitCode, bool timedOut, |
List<int> stdout, List<int> stderr, Duration time) |
- : super(command, exitCode, timedOut, stdout, stderr, time, false, 0); |
+ : super(command, exitCode, timedOut, stdout, stderr, time, false, 0); |
Expectation result(TestCase testCase) { |
// Handle crashes and timeouts first |
@@ -1641,8 +1597,8 @@ class ScriptCommandOutputImpl extends CommandOutputImpl { |
final Expectation _result; |
ScriptCommandOutputImpl(ScriptCommand command, this._result, |
- String scriptExecutionInformation, Duration time) |
- : super(command, 0, false, [], [], time, false, 0) { |
+ String scriptExecutionInformation, Duration time) |
+ : super(command, 0, false, [], [], time, false, 0) { |
var lines = scriptExecutionInformation.split("\n"); |
diagnostics.addAll(lines); |
} |
@@ -1652,29 +1608,20 @@ class ScriptCommandOutputImpl extends CommandOutputImpl { |
bool get canRunDependendCommands => _result == Expectation.PASS; |
bool get successful => _result == Expectation.PASS; |
- |
} |
-CommandOutput createCommandOutput(Command command, |
- int exitCode, |
- bool timedOut, |
- List<int> stdout, |
- List<int> stderr, |
- Duration time, |
- bool compilationSkipped, |
- [int pid = 0]) { |
+CommandOutput createCommandOutput(Command command, int exitCode, bool timedOut, |
+ List<int> stdout, List<int> stderr, Duration time, bool compilationSkipped, |
+ [int pid = 0]) { |
if (command is ContentShellCommand) { |
return new BrowserCommandOutputImpl( |
- command, exitCode, timedOut, stdout, stderr, |
- time, compilationSkipped); |
+ command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); |
} else if (command is BrowserTestCommand) { |
return new HTMLBrowserCommandOutputImpl( |
- command, exitCode, timedOut, stdout, stderr, |
- time, compilationSkipped); |
+ command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); |
} else if (command is AnalysisCommand) { |
return new AnalysisCommandOutputImpl( |
- command, exitCode, timedOut, stdout, stderr, |
- time, compilationSkipped); |
+ command, exitCode, timedOut, stdout, stderr, time, compilationSkipped); |
} else if (command is VmCommand) { |
return new VmCommandOutputImpl( |
command, exitCode, timedOut, stdout, stderr, time, pid); |
@@ -1694,12 +1641,10 @@ CommandOutput createCommandOutput(Command command, |
command, exitCode, timedOut, stdout, stderr, time); |
} |
- return new CommandOutputImpl( |
- command, exitCode, timedOut, stdout, stderr, |
+ return new CommandOutputImpl(command, exitCode, timedOut, stdout, stderr, |
time, compilationSkipped, pid); |
} |
- |
/** |
* An OutputLog records the output from a test, but truncates it if |
* it is longer than MAX_HEAD characters, and just keeps the head and |
@@ -1734,10 +1679,9 @@ class OutputLog { |
} |
} |
- List<int> _truncatedTail() => |
- tail.length > TAIL_LENGTH ? |
- tail.sublist(tail.length - TAIL_LENGTH) : |
- tail; |
+ List<int> _truncatedTail() => tail.length > TAIL_LENGTH |
+ ? tail.sublist(tail.length - TAIL_LENGTH) |
+ : tail; |
List<int> toList() { |
if (complete == null) { |
@@ -1751,7 +1695,8 @@ Data removed due to excessive length |
***************************************************************************** |
-""".codeUnits); |
+""" |
+ .codeUnits); |
complete.addAll(_truncatedTail()); |
} else if (tail != null) { |
complete.addAll(tail); |
@@ -1801,11 +1746,10 @@ class RunningProcess { |
_commandComplete(0); |
} else { |
var processEnvironment = _createProcessEnvironment(); |
- Future processFuture = |
- io.Process.start(command.executable, |
- command.arguments, |
- environment: processEnvironment, |
- workingDirectory: command.workingDirectory); |
+ Future processFuture = io.Process.start( |
+ command.executable, command.arguments, |
+ environment: processEnvironment, |
+ workingDirectory: command.workingDirectory); |
processFuture.then((io.Process process) { |
StreamSubscription stdoutSubscription = |
_drainStream(process.stdout, stdout); |
@@ -1871,14 +1815,14 @@ class RunningProcess { |
}); |
} |
- Future.wait([stdoutCompleter.future, |
- stderrCompleter.future]).then((_) { |
+ Future.wait([stdoutCompleter.future, stderrCompleter.future]).then( |
+ (_) { |
_commandComplete(exitCode); |
}); |
}); |
- timeoutTimer = new Timer(new Duration(seconds: timeout), |
- timeoutHandler); |
+ timeoutTimer = |
+ new Timer(new Duration(seconds: timeout), timeoutHandler); |
}).catchError((e) { |
// TODO(floitsch): should we try to report the stacktrace? |
print("Process error:"); |
@@ -1912,8 +1856,8 @@ class RunningProcess { |
return commandOutput; |
} |
- StreamSubscription _drainStream(Stream<List<int>> source, |
- OutputLog destination) { |
+ StreamSubscription _drainStream( |
+ Stream<List<int>> source, OutputLog destination) { |
return source.listen(destination.add); |
} |
@@ -1957,7 +1901,7 @@ class BatchRunnerProcess { |
BatchRunnerProcess(); |
Future<CommandOutput> runCommand(String runnerType, ProcessCommand command, |
- int timeout, List<String> arguments) { |
+ int timeout, List<String> arguments) { |
assert(_completer == null); |
assert(!_currentlyRunning); |
@@ -2011,15 +1955,14 @@ class BatchRunnerProcess { |
_status = null; |
_stdoutCompleter = new Completer(); |
_stderrCompleter = new Completer(); |
- _timer = new Timer(new Duration(seconds: timeout), |
- _timeoutHandler); |
+ _timer = new Timer(new Duration(seconds: timeout), _timeoutHandler); |
var line = _createArgumentsLine(_arguments, timeout); |
_process.stdin.write(line); |
_stdoutSubscription.resume(); |
_stderrSubscription.resume(); |
- Future.wait([_stdoutCompleter.future, |
- _stderrCompleter.future]).then((_) => _reportResult()); |
+ Future.wait([_stdoutCompleter.future, _stderrCompleter.future]).then( |
+ (_) => _reportResult()); |
} |
String _createArgumentsLine(List<String> arguments, int timeout) { |
@@ -2034,13 +1977,14 @@ class BatchRunnerProcess { |
var exitCode = 0; |
if (outcome == "CRASH") exitCode = CRASHING_BROWSER_EXITCODE; |
if (outcome == "FAIL" || outcome == "TIMEOUT") exitCode = 1; |
- var output = createCommandOutput(_command, |
- exitCode, |
- (outcome == "TIMEOUT"), |
- _testStdout.toList(), |
- _testStderr.toList(), |
- new DateTime.now().difference(_startTime), |
- false); |
+ var output = createCommandOutput( |
+ _command, |
+ exitCode, |
+ (outcome == "TIMEOUT"), |
+ _testStdout.toList(), |
+ _testStderr.toList(), |
+ new DateTime.now().difference(_startTime), |
+ false); |
assert(_completer != null); |
_completer.complete(output); |
_completer = null; |
@@ -2055,7 +1999,8 @@ class BatchRunnerProcess { |
_stdoutSubscription.cancel(); |
_stderrSubscription.cancel(); |
_startProcess(_reportResult); |
- } else { // No active test case running. |
+ } else { |
+ // No active test case running. |
_process = null; |
} |
} |
@@ -2077,16 +2022,13 @@ class BatchRunnerProcess { |
environment[key] = _processEnvironmentOverrides[key]; |
} |
} |
- Future processFuture = io.Process.start(executable, |
- arguments, |
- environment: environment); |
+ Future processFuture = |
+ io.Process.start(executable, arguments, environment: environment); |
processFuture.then((io.Process p) { |
_process = p; |
var _stdoutStream = |
- _process.stdout |
- .transform(UTF8.decoder) |
- .transform(new LineSplitter()); |
+ _process.stdout.transform(UTF8.decoder).transform(new LineSplitter()); |
_stdoutSubscription = _stdoutStream.listen((String line) { |
if (line.startsWith('>>> TEST')) { |
_status = line; |
@@ -2107,9 +2049,7 @@ class BatchRunnerProcess { |
_stdoutSubscription.pause(); |
var _stderrStream = |
- _process.stderr |
- .transform(UTF8.decoder) |
- .transform(new LineSplitter()); |
+ _process.stderr.transform(UTF8.decoder).transform(new LineSplitter()); |
_stderrSubscription = _stderrStream.listen((String line) { |
if (line.startsWith('>>> EOF STDERR')) { |
_stderrSubscription.pause(); |
@@ -2156,7 +2096,6 @@ class BatchRunnerProcess { |
} |
} |
- |
/** |
* [TestCaseEnqueuer] takes a list of TestSuites, generates TestCases and |
* builds a dependency graph of all commands in every TestSuite. |
@@ -2223,7 +2162,6 @@ class TestCaseEnqueuer { |
} |
} |
- |
/* |
* [CommandEnqueuer] will |
* - change node.state to NodeState.Enqueuing as soon as all dependencies have |
@@ -2232,11 +2170,15 @@ class TestCaseEnqueuer { |
* have a state of NodeState.Failed/NodeState.UnableToRun. |
*/ |
class CommandEnqueuer { |
- static final INIT_STATES = [dgraph.NodeState.Initialized, |
- dgraph.NodeState.Waiting]; |
- static final FINISHED_STATES = [dgraph.NodeState.Successful, |
- dgraph.NodeState.Failed, |
- dgraph.NodeState.UnableToRun]; |
+ static final INIT_STATES = [ |
+ dgraph.NodeState.Initialized, |
+ dgraph.NodeState.Waiting |
+ ]; |
+ static final FINISHED_STATES = [ |
+ dgraph.NodeState.Successful, |
+ dgraph.NodeState.Failed, |
+ dgraph.NodeState.UnableToRun |
+ ]; |
final dgraph.Graph _graph; |
CommandEnqueuer(this._graph) { |
@@ -2248,9 +2190,9 @@ class CommandEnqueuer { |
}); |
eventCondition((e) => e is dgraph.StateChangedEvent).listen((event) { |
- if ([dgraph.NodeState.Waiting, |
- dgraph.NodeState.Processing].contains(event.from)) { |
- if (FINISHED_STATES.contains(event.to)){ |
+ 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); |
} |
@@ -2263,16 +2205,17 @@ class CommandEnqueuer { |
// changed it's state. |
void _changeNodeStateIfNecessary(dgraph.Node node) { |
if (INIT_STATES.contains(node.state)) { |
- bool anyDependenciesUnsuccessful = node.dependencies.any( |
- (dep) => [dgraph.NodeState.Failed, |
- dgraph.NodeState.UnableToRun].contains(dep.state)); |
+ bool anyDependenciesUnsuccessful = node.dependencies.any((dep) => [ |
+ dgraph.NodeState.Failed, |
+ dgraph.NodeState.UnableToRun |
+ ].contains(dep.state)); |
var newState = dgraph.NodeState.Waiting; |
if (anyDependenciesUnsuccessful) { |
newState = dgraph.NodeState.UnableToRun; |
} else { |
- bool allDependenciesSuccessful = node.dependencies.every( |
- (dep) => dep.state == dgraph.NodeState.Successful); |
+ bool allDependenciesSuccessful = node.dependencies |
+ .every((dep) => dep.state == dgraph.NodeState.Successful); |
if (allDependenciesSuccessful) { |
newState = dgraph.NodeState.Enqueuing; |
@@ -2304,8 +2247,8 @@ class CommandQueue { |
final TestCaseEnqueuer enqueuer; |
final Queue<Command> _runQueue = new Queue<Command>(); |
- final _commandOutputStream = new StreamController<CommandOutput>(sync: true); |
- final _completer = new Completer(); |
+ final _commandOutputStream = new StreamController<CommandOutput>(sync: true); |
+ final _completer = new Completer(); |
int _numProcesses = 0; |
int _maxProcesses; |
@@ -2314,23 +2257,23 @@ class CommandQueue { |
bool _finishing = false; |
bool _verbose = false; |
- CommandQueue(this.graph, this.enqueuer, this.executor, |
- this._maxProcesses, this._maxBrowserProcesses, this._verbose) { |
+ 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) { |
- if (event.to == dgraph.NodeState.Enqueuing) { |
- assert(event.from == dgraph.NodeState.Initialized || |
- event.from == dgraph.NodeState.Waiting); |
- graph.changeState(event.node, dgraph.NodeState.Processing); |
- var command = event.node.userData; |
- if (event.node.dependencies.length > 0) { |
- _runQueue.addFirst(command); |
- } else { |
- _runQueue.add(command); |
- } |
- Timer.run(() => _tryRunNextCommand()); |
- } |
+ if (event.to == dgraph.NodeState.Enqueuing) { |
+ assert(event.from == dgraph.NodeState.Initialized || |
+ event.from == dgraph.NodeState.Waiting); |
+ graph.changeState(event.node, dgraph.NodeState.Processing); |
+ var command = event.node.userData; |
+ if (event.node.dependencies.length > 0) { |
+ _runQueue.addFirst(command); |
+ } else { |
+ _runQueue.add(command); |
+ } |
+ Timer.run(() => _tryRunNextCommand()); |
+ } |
}); |
// We're finished if the graph is sealed and all nodes are in a finished |
// state (Successful, Failed or UnableToRun). |
@@ -2374,8 +2317,8 @@ class CommandQueue { |
// If a command is part of many TestCases we set the timeout to be |
// the maximum over all [TestCase.timeout]s. At some point, we might |
// eliminate [TestCase.timeout] completely and move it to [Command]. |
- int timeout = testCases.map((TestCase test) => test.timeout) |
- .fold(0, math.max); |
+ int timeout = |
+ testCases.map((TestCase test) => test.timeout).fold(0, math.max); |
if (_verbose) { |
print('Running "${command.displayName}" command: $command'); |
@@ -2422,7 +2365,7 @@ class CommandQueue { |
print("CommandQueue state:"); |
print(" Processes: used: $_numProcesses max: $_maxProcesses"); |
print(" BrowserProcesses: used: $_numBrowserProcesses " |
- "max: $_maxBrowserProcesses"); |
+ "max: $_maxBrowserProcesses"); |
print(" Finishing: $_finishing"); |
print(" Queue (length = ${_runQueue.length}):"); |
for (var command in _runQueue) { |
@@ -2431,7 +2374,6 @@ class CommandQueue { |
} |
} |
- |
/* |
* [CommandExecutor] is responsible for executing commands. It will make sure |
* that the the following two constraints are satisfied |
@@ -2494,7 +2436,7 @@ class CommandExecutorImpl implements CommandExecutor { |
return _runCommand(command, timeout).then((CommandOutput output) { |
if (retriesLeft > 0 && shouldRetryCommand(output)) { |
DebugLogger.warning("Rerunning Command: ($retriesLeft " |
- "attempt(s) remains) [cmd: $command]"); |
+ "attempt(s) remains) [cmd: $command]"); |
return runCommand(retriesLeft - 1); |
} else { |
return new Future.value(output); |
@@ -2545,8 +2487,8 @@ class CommandExecutorImpl implements CommandExecutor { |
var completer = new Completer<CommandOutput>(); |
var callback = (BrowserTestOutput output) { |
- completer.complete( |
- new BrowserControllerTestOutcome(browserCommand, output)); |
+ completer |
+ .complete(new BrowserControllerTestOutcome(browserCommand, output)); |
}; |
BrowserTest browserTest; |
@@ -2564,12 +2506,12 @@ class CommandExecutorImpl implements CommandExecutor { |
return completer.future; |
} |
- Future<BrowserTestRunner> _getBrowserTestRunner(String browser, |
- Map configuration) async { |
+ Future<BrowserTestRunner> _getBrowserTestRunner( |
+ String browser, Map configuration) async { |
var localIp = globalConfiguration['local_ip']; |
if (_browserTestRunners[configuration] == null) { |
var testRunner = new BrowserTestRunner( |
- configuration, localIp, browser, maxBrowserProcesses); |
+ configuration, localIp, browser, maxBrowserProcesses); |
if (globalConfiguration['verbose']) { |
testRunner.logger = DebugLogger.info; |
} |
@@ -2583,8 +2525,7 @@ class CommandExecutorImpl implements CommandExecutor { |
class RecordingCommandExecutor implements CommandExecutor { |
TestCaseRecorder _recorder; |
- RecordingCommandExecutor(Path path) |
- : _recorder = new TestCaseRecorder(path); |
+ RecordingCommandExecutor(Path path) : _recorder = new TestCaseRecorder(path); |
Future<CommandOutput> runCommand(node, ProcessCommand command, int timeout) { |
assert(node.dependencies.length == 0); |
@@ -2606,8 +2547,7 @@ class RecordingCommandExecutor implements CommandExecutor { |
if (environment == null) return true; |
return environment.length == 0 || |
(environment.length == 1 && |
- environment.containsKey("DART_CONFIGURATION")); |
- |
+ environment.containsKey("DART_CONFIGURATION")); |
} |
} |
@@ -2643,7 +2583,7 @@ bool shouldRetryCommand(CommandOutput output) { |
// "xvfb-run" issue 7564, try re-running the test. |
bool containsFailureMsg(String line) { |
return line.contains(MESSAGE_CANNOT_OPEN_DISPLAY) || |
- line.contains(MESSAGE_FAILED_TO_RUN_COMMAND); |
+ line.contains(MESSAGE_FAILED_TO_RUN_COMMAND); |
} |
if (stdout.any(containsFailureMsg) || stderr.any(containsFailureMsg)) { |
return true; |
@@ -2671,8 +2611,10 @@ bool shouldRetryCommand(CommandOutput output) { |
* closed. |
*/ |
class TestCaseCompleter { |
- static final COMPLETED_STATES = [dgraph.NodeState.Failed, |
- dgraph.NodeState.Successful]; |
+ static final COMPLETED_STATES = [ |
+ dgraph.NodeState.Failed, |
+ dgraph.NodeState.Successful |
+ ]; |
final dgraph.Graph graph; |
final TestCaseEnqueuer enqueuer; |
final CommandQueue commandQueue; |
@@ -2700,26 +2642,26 @@ class TestCaseCompleter { |
// changes. |
eventCondition((event) => event is dgraph.StateChangedEvent) |
.listen((dgraph.StateChangedEvent event) { |
- if (event.from == dgraph.NodeState.Processing && |
- !finishedRemainingTestCases ) { |
- var command = event.node.userData; |
+ if (event.from == dgraph.NodeState.Processing && |
+ !finishedRemainingTestCases) { |
+ var command = event.node.userData; |
- assert(COMPLETED_STATES.contains(event.to)); |
- assert(_outputs[command] != null); |
+ assert(COMPLETED_STATES.contains(event.to)); |
+ assert(_outputs[command] != null); |
- _completeTestCasesIfPossible(enqueuer.command2testCases[command]); |
- _checkDone(); |
- } |
+ _completeTestCasesIfPossible(enqueuer.command2testCases[command]); |
+ _checkDone(); |
+ } |
}); |
// 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) { |
- if (!_closed && enqueuer.remainingTestCases.isEmpty) { |
- _controller.close(); |
- _closed = true; |
- } |
+ if (!_closed && enqueuer.remainingTestCases.isEmpty) { |
+ _controller.close(); |
+ _closed = true; |
+ } |
}); |
} |
@@ -2763,7 +2705,6 @@ class TestCaseCompleter { |
} |
} |
- |
class ProcessQueue { |
Map _globalConfiguration; |
@@ -2771,32 +2712,28 @@ class ProcessQueue { |
final dgraph.Graph _graph = new dgraph.Graph(); |
List<EventListener> _eventListener; |
- ProcessQueue(this._globalConfiguration, |
- maxProcesses, |
- maxBrowserProcesses, |
- DateTime startTime, |
- testSuites, |
- this._eventListener, |
- this._allDone, |
- [bool verbose = false, |
- String recordingOutputFile, |
- String recordedInputFile]) { |
+ ProcessQueue(this._globalConfiguration, maxProcesses, maxBrowserProcesses, |
+ DateTime startTime, testSuites, this._eventListener, this._allDone, |
+ [bool verbose = false, |
+ String recordingOutputFile, |
+ String recordedInputFile]) { |
void setupForListing(TestCaseEnqueuer testCaseEnqueuer) { |
- _graph.events.where((event) => event is dgraph.GraphSealedEvent) |
- .listen((dgraph.GraphSealedEvent event) { |
- var testCases = new List.from(testCaseEnqueuer.remainingTestCases); |
- testCases.sort((a, b) => a.displayName.compareTo(b.displayName)); |
- |
- print("\nGenerating all matching test cases ....\n"); |
- |
- for (TestCase testCase in testCases) { |
- eventFinishedTestCase(testCase); |
- print("${testCase.displayName} " |
- "Expectations: ${testCase.expectedOutcomes.join(', ')} " |
- "Configuration: '${testCase.configurationString}'"); |
- } |
- eventAllTestsKnown(); |
- }); |
+ _graph.events |
+ .where((event) => event is dgraph.GraphSealedEvent) |
+ .listen((dgraph.GraphSealedEvent event) { |
+ var testCases = new List.from(testCaseEnqueuer.remainingTestCases); |
+ testCases.sort((a, b) => a.displayName.compareTo(b.displayName)); |
+ |
+ print("\nGenerating all matching test cases ....\n"); |
+ |
+ for (TestCase testCase in testCases) { |
+ eventFinishedTestCase(testCase); |
+ print("${testCase.displayName} " |
+ "Expectations: ${testCase.expectedOutcomes.join(', ')} " |
+ "Configuration: '${testCase.configurationString}'"); |
+ } |
+ eventAllTestsKnown(); |
+ }); |
} |
var testCaseEnqueuer; |
@@ -2818,17 +2755,18 @@ class ProcessQueue { |
cancelDebugTimer(); |
_debugTimer = new Timer(debugTimerDuration, () { |
print("The debug timer of test.dart expired. Please report this issue" |
- " to ricow/whesse and provide the following information:"); |
+ " to ricow/whesse and provide the following information:"); |
print(""); |
print("Graph is sealed: ${_graph.isSealed}"); |
print(""); |
_graph.DumpCounts(); |
print(""); |
var unfinishedNodeStates = [ |
- dgraph.NodeState.Initialized, |
- dgraph.NodeState.Waiting, |
- dgraph.NodeState.Enqueuing, |
- dgraph.NodeState.Processing]; |
+ dgraph.NodeState.Initialized, |
+ dgraph.NodeState.Waiting, |
+ dgraph.NodeState.Enqueuing, |
+ dgraph.NodeState.Processing |
+ ]; |
for (var nodeState in unfinishedNodeStates) { |
if (_graph.stateCount(nodeState) > 0) { |
@@ -2842,7 +2780,7 @@ class ProcessQueue { |
print(" Command: $command"); |
for (var testCase in testCases) { |
print(" Enqueued by: ${testCase.configurationString} " |
- "-- ${testCase.displayName}"); |
+ "-- ${testCase.displayName}"); |
} |
print(""); |
} |
@@ -2863,9 +2801,10 @@ class ProcessQueue { |
// When the graph building is finished, notify event listeners. |
_graph.events |
- .where((event) => event is dgraph.GraphSealedEvent).listen((event) { |
- eventAllTestsKnown(); |
- }); |
+ .where((event) => event is dgraph.GraphSealedEvent) |
+ .listen((event) { |
+ eventAllTestsKnown(); |
+ }); |
// Queue commands as they become "runnable" |
var commandEnqueuer = new CommandEnqueuer(_graph); |
@@ -2883,30 +2822,27 @@ class ProcessQueue { |
// Run "runnable commands" using [executor] subject to |
// maxProcesses/maxBrowserProcesses constraint |
- commandQueue = new CommandQueue( |
- _graph, testCaseEnqueuer, executor, maxProcesses, maxBrowserProcesses, |
- verbose); |
+ commandQueue = new CommandQueue(_graph, testCaseEnqueuer, executor, |
+ maxProcesses, maxBrowserProcesses, verbose); |
// Finish test cases when all commands were run (or some failed) |
var testCaseCompleter = |
new TestCaseCompleter(_graph, testCaseEnqueuer, commandQueue); |
- testCaseCompleter.finishedTestCases.listen( |
- (TestCase finishedTestCase) { |
- resetDebugTimer(); |
+ testCaseCompleter.finishedTestCases.listen((TestCase finishedTestCase) { |
+ resetDebugTimer(); |
- // If we're recording, we don't report any TestCases to listeners. |
- if (!recording) { |
- eventFinishedTestCase(finishedTestCase); |
- } |
- }, |
- onDone: () { |
- // Wait until the commandQueue/execturo is done (it may need to stop |
- // batch runners, browser controllers, ....) |
- commandQueue.done.then((_) { |
- cancelDebugTimer(); |
- eventAllTestsDone(); |
- }); |
- }); |
+ // If we're recording, we don't report any TestCases to listeners. |
+ if (!recording) { |
+ eventFinishedTestCase(finishedTestCase); |
+ } |
+ }, onDone: () { |
+ // Wait until the commandQueue/execturo is done (it may need to stop |
+ // batch runners, browser controllers, ....) |
+ commandQueue.done.then((_) { |
+ cancelDebugTimer(); |
+ eventAllTestsDone(); |
+ }); |
+ }); |
resetDebugTimer(); |
} |