2146126308
Also increases test timeout to match simarm and simmips. R=regis@google.com Review URL: https://codereview.chromium.org//283833005 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36175 260f80e4-7a28-3924-810f-c04153c831b5
232 lines
6.8 KiB
Dart
232 lines
6.8 KiB
Dart
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
library runtime_configuration;
|
|
|
|
import 'compiler_configuration.dart' show
|
|
CommandArtifact;
|
|
|
|
// TODO(ahe): Remove this import, we can precompute all the values required
|
|
// from TestSuite once the refactoring is complete.
|
|
import 'test_suite.dart' show
|
|
TestSuite;
|
|
|
|
import 'test_runner.dart' show
|
|
Command,
|
|
CommandBuilder;
|
|
|
|
// TODO(ahe): I expect this class will become abstract very soon.
|
|
class RuntimeConfiguration {
|
|
// TODO(ahe): Remove this constructor and move the switch to
|
|
// test_options.dart. We probably want to store an instance of
|
|
// [RuntimeConfiguration] in [configuration] there.
|
|
factory RuntimeConfiguration(Map configuration) {
|
|
String runtime = configuration['runtime'];
|
|
switch (runtime) {
|
|
case 'ContentShellOnAndroid':
|
|
case 'DartiumOnAndroid':
|
|
case 'chrome':
|
|
case 'chromeOnAndroid':
|
|
case 'dartium':
|
|
case 'ff':
|
|
case 'firefox':
|
|
case 'ie11':
|
|
case 'ie10':
|
|
case 'ie9':
|
|
case 'opera':
|
|
case 'safari':
|
|
case 'safarimobilesim':
|
|
// TODO(ahe): Replace this with one or more browser runtimes.
|
|
return new DummyRuntimeConfiguration();
|
|
|
|
case 'jsshell':
|
|
return new JsshellRuntimeConfiguration();
|
|
|
|
case 'd8':
|
|
return new D8RuntimeConfiguration();
|
|
|
|
case 'none':
|
|
return new NoneRuntimeConfiguration();
|
|
|
|
case 'vm':
|
|
return new StandaloneDartRuntimeConfiguration();
|
|
|
|
case 'drt':
|
|
return new DrtRuntimeConfiguration();
|
|
|
|
default:
|
|
throw "Unknown runtime '$runtime'";
|
|
}
|
|
}
|
|
|
|
RuntimeConfiguration._subclass();
|
|
|
|
int computeTimeoutMultiplier({
|
|
bool isDebug: false,
|
|
bool isChecked: false,
|
|
String arch}) {
|
|
return 1;
|
|
}
|
|
|
|
List<Command> computeRuntimeCommands(
|
|
TestSuite suite,
|
|
CommandBuilder commandBuilder,
|
|
CommandArtifact artifact,
|
|
List<String> arguments,
|
|
Map<String, String> environmentOverrides) {
|
|
// TODO(ahe): Make this method abstract.
|
|
throw "Unimplemented runtime '$runtimeType'";
|
|
}
|
|
|
|
List<String> dart2jsPreambles(Uri preambleDir) => [];
|
|
}
|
|
|
|
/// The 'none' runtime configuration.
|
|
class NoneRuntimeConfiguration extends RuntimeConfiguration {
|
|
NoneRuntimeConfiguration()
|
|
: super._subclass();
|
|
|
|
List<Command> computeRuntimeCommands(
|
|
TestSuite suite,
|
|
CommandBuilder commandBuilder,
|
|
CommandArtifact artifact,
|
|
List<String> arguments,
|
|
Map<String, String> environmentOverrides) {
|
|
return <Command>[];
|
|
}
|
|
}
|
|
|
|
class CommandLineJavaScriptRuntime extends RuntimeConfiguration {
|
|
final String moniker;
|
|
|
|
CommandLineJavaScriptRuntime(this.moniker)
|
|
: super._subclass();
|
|
|
|
void checkArtifact(CommandArtifact artifact) {
|
|
String type = artifact.mimeType;
|
|
if (type != 'application/javascript') {
|
|
throw "Runtime '$moniker' cannot run files of type '$type'.";
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Chrome/V8-based development shell (d8).
|
|
class D8RuntimeConfiguration extends CommandLineJavaScriptRuntime {
|
|
D8RuntimeConfiguration()
|
|
: super('d8');
|
|
|
|
List<Command> computeRuntimeCommands(
|
|
TestSuite suite,
|
|
CommandBuilder commandBuilder,
|
|
CommandArtifact artifact,
|
|
List<String> arguments,
|
|
Map<String, String> environmentOverrides) {
|
|
// TODO(ahe): Avoid duplication of this method between d8 and jsshell.
|
|
checkArtifact(artifact);
|
|
return <Command>[
|
|
commandBuilder.getJSCommandlineCommand(
|
|
moniker, suite.d8FileName, arguments, environmentOverrides)];
|
|
}
|
|
|
|
List<String> dart2jsPreambles(Uri preambleDir) {
|
|
return [preambleDir.resolve('d8.js').toFilePath()];
|
|
}
|
|
}
|
|
|
|
/// Firefox/SpiderMonkey-based development shell (jsshell).
|
|
class JsshellRuntimeConfiguration extends CommandLineJavaScriptRuntime {
|
|
JsshellRuntimeConfiguration()
|
|
: super('jsshell');
|
|
|
|
List<Command> computeRuntimeCommands(
|
|
TestSuite suite,
|
|
CommandBuilder commandBuilder,
|
|
CommandArtifact artifact,
|
|
List<String> arguments,
|
|
Map<String, String> environmentOverrides) {
|
|
checkArtifact(artifact);
|
|
return <Command>[
|
|
commandBuilder.getJSCommandlineCommand(
|
|
moniker, suite.jsShellFileName, arguments, environmentOverrides)];
|
|
}
|
|
|
|
List<String> dart2jsPreambles(Uri preambleDir) {
|
|
return ['-f', preambleDir.resolve('jsshell.js').toFilePath(), '-f'];
|
|
}
|
|
}
|
|
|
|
/// Common runtime configuration for runtimes based on the Dart VM.
|
|
class DartVmRuntimeConfiguration extends RuntimeConfiguration {
|
|
DartVmRuntimeConfiguration()
|
|
: super._subclass();
|
|
|
|
int computeTimeoutMultiplier({
|
|
bool isDebug: false,
|
|
bool isChecked: false,
|
|
String arch}) {
|
|
int multiplier = 1;
|
|
switch (arch) {
|
|
case 'simarm':
|
|
case 'arm':
|
|
case 'simmips':
|
|
case 'mips':
|
|
case 'simarm64':
|
|
multiplier *= 4;
|
|
break;
|
|
}
|
|
if (isDebug) {
|
|
multiplier *= 2;
|
|
}
|
|
return multiplier;
|
|
}
|
|
}
|
|
|
|
/// Runtime configuration for Content Shell. We previously used a similar
|
|
/// program named Dump Render Tree, hence the name.
|
|
class DrtRuntimeConfiguration extends DartVmRuntimeConfiguration {
|
|
int computeTimeoutMultiplier({
|
|
bool isDebug: false,
|
|
bool isChecked: false,
|
|
String arch}) {
|
|
return 4 // Allow additional time for browser testing to run.
|
|
// TODO(ahe): We might need to distinquish between DRT for running
|
|
// JavaScript and Dart code. I'm not convinced the inherited timeout
|
|
// multiplier is relevant for JavaScript.
|
|
* super.computeTimeoutMultiplier(
|
|
isDebug: isDebug, isChecked: isChecked);
|
|
}
|
|
}
|
|
|
|
/// The standalone Dart VM binary, "dart" or "dart.exe".
|
|
class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration {
|
|
List<Command> computeRuntimeCommands(
|
|
TestSuite suite,
|
|
CommandBuilder commandBuilder,
|
|
CommandArtifact artifact,
|
|
List<String> arguments,
|
|
Map<String, String> environmentOverrides) {
|
|
String script = artifact.filename;
|
|
String type = artifact.mimeType;
|
|
if (script != null && type != 'application/dart') {
|
|
throw "Dart VM cannot run files of type '$type'.";
|
|
}
|
|
return <Command>[commandBuilder.getVmCommand(
|
|
suite.dartVmBinaryFileName, arguments, environmentOverrides)];
|
|
}
|
|
}
|
|
|
|
/// Temporary runtime configuration for browser runtimes that haven't been
|
|
/// migrated yet.
|
|
// TODO(ahe): Remove this class.
|
|
class DummyRuntimeConfiguration extends DartVmRuntimeConfiguration {
|
|
List<Command> computeRuntimeCommands(
|
|
TestSuite suite,
|
|
CommandBuilder commandBuilder,
|
|
CommandArtifact artifact,
|
|
List<String> arguments,
|
|
Map<String, String> environmentOverrides) {
|
|
throw "Unimplemented runtime '$runtimeType'";
|
|
}
|
|
}
|