Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Unified Diff: tools/testing/dart/test_suite.dart

Issue 2947473002: Basic support for dev_compiler in test.dart. (Closed)
Patch Set: Revise. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/testing/dart/test_runner.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/testing/dart/test_suite.dart
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 73d30b1617bc97cf07f7af3ca5fa863ce16ad407..751cbcf27344ab6824234bb76ae69fcc98a6ef69 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -168,6 +168,7 @@ abstract class TestSuite {
var compilerConfiguration = configuration.compilerConfiguration;
if (!compilerConfiguration.hasCompiler) return null;
var name = compilerConfiguration.computeCompilerPath(buildDir);
+
// TODO(ahe): Only validate this once, in test_options.dart.
TestUtils.ensureExists(name, configuration);
return name;
@@ -805,21 +806,24 @@ class StandardTestSuite extends TestSuite {
// browser or otherwise).
enqueueStandardTest(info, testName, expectations);
} else if (configuration.runtime.isBrowser) {
+ Map<String, Set<Expectation>> expectationsMap;
+
if (info.optionsFromFile['isMultiHtmlTest'] as bool) {
// A browser multi-test has multiple expectations for one test file.
// Find all the different sub-test expecations for one entire test file.
var subtestNames = info.optionsFromFile['subtestNames'] as List<String>;
- var multiHtmlTestExpectations = <String, Set<Expectation>>{};
+ expectationsMap = <String, Set<Expectation>>{};
for (var name in subtestNames) {
var fullTestName = '$testName/$name';
- multiHtmlTestExpectations[fullTestName] =
+ expectationsMap[fullTestName] =
testExpectations.expectations(fullTestName);
}
- enqueueBrowserTest(
- packageRoot, packages, info, testName, multiHtmlTestExpectations);
} else {
- enqueueBrowserTest(packageRoot, packages, info, testName, expectations);
+ expectationsMap = {testName: expectations};
}
+
+ enqueueBrowserTest(
+ packageRoot, packages, info, testName, expectationsMap);
} else {
enqueueStandardTest(info, testName, expectations);
}
@@ -864,7 +868,7 @@ class StandardTestSuite extends TestSuite {
return negative;
}
- List<Command> makeCommands(TestInformation info, int vmOptionsVarient,
+ List<Command> makeCommands(TestInformation info, int vmOptionsVariant,
List<String> vmOptions, List<String> args) {
var commands = <Command>[];
var compilerConfiguration = configuration.compilerConfiguration;
@@ -877,9 +881,9 @@ class StandardTestSuite extends TestSuite {
vmOptions, sharedOptions, args);
// Avoid doing this for analyzer.
var path = info.filePath;
- if (vmOptionsVarient != 0) {
+ if (vmOptionsVariant != 0) {
// Ensure a unique directory for each test case.
- path = path.join(new Path(vmOptionsVarient.toString()));
+ path = path.join(new Path(vmOptionsVariant.toString()));
}
tempDir = createCompilationOutputDirectory(path);
@@ -1018,13 +1022,8 @@ class StandardTestSuite extends TestSuite {
* subTestName, Set<String>> if we are running a browser multi-test (one
* compilation and many browser runs).
*/
- void enqueueBrowserTest(
- Path packageRoot,
- Path packages,
- TestInformation info,
- String testName,
- /* Set<Expectation> | Map<String, Set<Expectation>> */ dynamic
- expectations) {
+ void enqueueBrowserTest(Path packageRoot, Path packages, TestInformation info,
+ String testName, Map<String, Set<Expectation>> expectations) {
var badChars = new RegExp('[-=/]');
var vmOptionsList = getVmOptions(info.optionsFromFile);
var multipleOptions = vmOptionsList.length > 1;
@@ -1042,26 +1041,20 @@ class StandardTestSuite extends TestSuite {
Path packages,
TestInformation info,
String testName,
- /* Set<Expectation> | Map<String, Set<Expectation>> */ expectations,
+ Map<String, Set<Expectation>> expectations,
List<String> vmOptions,
String tempDir) {
// TODO(Issue 14651): If we're on dartium, we need to pass [packageRoot]
// on to the browser (it may be test specific).
-
var filePath = info.filePath;
var fileName = filePath.toString();
var optionsFromFile = info.optionsFromFile;
-
var compilationTempDir = createCompilationOutputDirectory(info.filePath);
-
var dartWrapperFilename = '$tempDir/test.dart';
var compiledDartWrapperFilename = '$compilationTempDir/test.js';
-
- String content = null;
var dir = filePath.directoryPath;
var nameNoExt = filePath.filenameWithoutExtension;
-
var customHtmlPath = dir.append('$nameNoExt.html').toNativePath();
var customHtml = new File(customHtmlPath);
@@ -1071,10 +1064,12 @@ class StandardTestSuite extends TestSuite {
// Use existing HTML document if available.
String htmlPath;
+ String content;
if (customHtml.existsSync()) {
// If necessary, run the Polymer deploy steps.
// TODO(jmesserly): this should be generalized for any tests that
// require Pub deploy, not just polymer.
+ // TODO(rnystrom): This does not appear to be used any more. Remove.
if (customHtml.readAsStringSync().contains('<!--polymer-test')) {
if (configuration.compiler != Compiler.none) {
commands.add(
@@ -1113,7 +1108,8 @@ class StandardTestSuite extends TestSuite {
}
} else {
htmlPath = '$tempDir/test.html';
- if (configuration.compiler != Compiler.dart2js) {
+ if (configuration.compiler != Compiler.dart2js &&
+ configuration.compiler != Compiler.dartdevc) {
// test.dart will import the dart test.
_createWrapperFile(dartWrapperFilename, filePath);
} else {
@@ -1129,30 +1125,53 @@ class StandardTestSuite extends TestSuite {
}
scriptPath = _createUrlPathFromFile(new Path(scriptPath));
- content = getHtmlContents(fileName, scriptType, new Path("$scriptPath"));
+ if (configuration.compiler == Compiler.dart2js) {
+ content = getHtmlContents(fileName, scriptType, scriptPath);
+ } else {
+ var jsDir = new Path(compilationTempDir)
+ .relativeTo(TestUtils.dartDir)
+ .toString();
+ content = dartdevcHtml(nameNoExt, jsDir);
+ }
+
htmlTest.writeStringSync(content);
htmlTest.closeSync();
}
- if (configuration.compiler != Compiler.none) {
- assert(configuration.compiler == Compiler.dart2js);
+ switch (configuration.compiler) {
+ case Compiler.dart2js:
+ commands.add(_dart2jsCompileCommand(dartWrapperFilename,
+ compiledDartWrapperFilename, tempDir, optionsFromFile));
+ break;
+
+ case Compiler.dartdevc:
+ commands.add(_dartdevcCompileCommand(dartWrapperFilename,
+ '$compilationTempDir/$nameNoExt.js', optionsFromFile));
+ break;
- commands.add(_compileCommand(dartWrapperFilename,
- compiledDartWrapperFilename, tempDir, optionsFromFile));
+ default:
+ assert(false);
}
- // some tests require compiling multiple input scripts.
+ // Some tests require compiling multiple input scripts.
var otherScripts = optionsFromFile['otherScripts'] as List<String>;
for (var name in otherScripts) {
var namePath = new Path(name);
var fromPath = filePath.directoryPath.join(namePath);
- if (configuration.compiler != Compiler.none) {
- assert(configuration.compiler == Compiler.dart2js);
- assert(namePath.extension == 'dart');
+ switch (configuration.compiler) {
+ case Compiler.dart2js:
+ commands.add(_dart2jsCompileCommand(fromPath.toNativePath(),
+ '$tempDir/${namePath.filename}.js', tempDir, optionsFromFile));
+ break;
+
+ case Compiler.dartdevc:
+ commands.add(_dartdevcCompileCommand(fromPath.toNativePath(),
+ '$tempDir/$nameNoExt.js', optionsFromFile));
+ break;
- commands.add(_compileCommand(fromPath.toNativePath(),
- '$tempDir/${namePath.filename}.js', tempDir, optionsFromFile));
+ default:
+ assert(configuration.compiler == Compiler.none);
}
if (configuration.compiler == Compiler.none) {
@@ -1165,8 +1184,8 @@ class StandardTestSuite extends TestSuite {
}
// Variables for browser multi-tests.
- var multitest = info.optionsFromFile['isMultiHtmlTest'] as bool;
- var subtestNames = multitest
+ var isMultitest = info.optionsFromFile['isMultiHtmlTest'] as bool;
+ var subtestNames = isMultitest
? (info.optionsFromFile['subtestNames'] as List<String>)
: <String>[null];
for (var subtestName in subtestNames) {
@@ -1209,9 +1228,8 @@ class StandardTestSuite extends TestSuite {
}
// Create BrowserTestCase and queue it.
- var fullTestName = multitest ? '$testName/$subtestName' : testName;
- var expectation = (multitest ? expectations[fullTestName] : expectations)
- as Set<Expectation>;
+ var fullTestName = isMultitest ? '$testName/$subtestName' : testName;
+ var expectation = expectations[fullTestName];
var testCase = new BrowserTestCase('$suiteName/$fullTestName', commandSet,
configuration, expectation, info, isNegative(info), fullHtmlPath);
@@ -1224,6 +1242,13 @@ class StandardTestSuite extends TestSuite {
var compiler = configuration.compiler;
var runtime = configuration.runtime;
+ if (compiler == Compiler.dartdevc) {
+ // TODO(rnystrom): Support this for dartdevc (#29919).
+ print("Ignoring $testName on dartdevc since HTML tests are not "
+ "implemented for that compiler yet.");
+ return;
+ }
+
// HTML tests work only with the browser controller.
if (!runtime.isBrowser || runtime == Runtime.drt) return;
@@ -1273,7 +1298,7 @@ class StandardTestSuite extends TestSuite {
assert(compiler == Compiler.dart2js);
- commands.add(_compileCommand(
+ commands.add(_dart2jsCompileCommand(
script.toFilePath(), destination, tempDir, info.optionsFromFile));
}
}
@@ -1293,9 +1318,9 @@ class StandardTestSuite extends TestSuite {
enqueueNewTestCase(testCase);
}
- /** Helper to create a compilation command for a single input file. */
- Command _compileCommand(String inputFile, String outputFile, String dir,
- Map<String, dynamic> optionsFromFile) {
+ /// Creates a [Command] to compile a single .dart file using dart2js.
+ Command _dart2jsCompileCommand(String inputFile, String outputFile,
+ String dir, Map<String, dynamic> optionsFromFile) {
var args = <String>[];
if (compilerPath.endsWith('.dart')) {
@@ -1315,8 +1340,36 @@ class StandardTestSuite extends TestSuite {
var options = optionsFromFile['sharedOptions'] as List<String>;
if (options != null) args.addAll(options);
- return Command.compilation(Compiler.dart2js.name, outputFile, !useSdk,
- dart2JsBootstrapDependencies, compilerPath, args, environmentOverrides);
+ return Command.compilation(Compiler.dart2js.name, outputFile,
+ dart2JsBootstrapDependencies, compilerPath, args, environmentOverrides,
+ alwaysCompile: !useSdk);
+ }
+
+ /// Creates a [Command] to compile a single .dart file using dartdevc.
+ Command _dartdevcCompileCommand(String inputFile, String outputFile,
+ Map<String, dynamic> optionsFromFile) {
+ var args = [
+ "--dart-sdk",
+ "$buildDir/dart-sdk",
+ "--library-root",
+ new Path(inputFile).directoryPath.toString(),
+ "-o",
+ outputFile,
+ inputFile
+ ];
+
+ // TODO(29923): This compiles everything imported by the test into the
+ // same generated JS module, including other packages like expect,
+ // stack_trace, etc. Those should be compiled as separate JS modules (by
+ // build.py) and loaded dynamically by the test.
+
+ return Command.compilation(
+ Compiler.dartdevc.name,
+ outputFile,
+ configuration.compilerConfiguration.bootstrapDependencies(buildDir),
+ compilerPath,
+ args,
+ environmentOverrides);
}
/** Helper to create a Polymer deploy command for a single HTML file. */
@@ -1346,6 +1399,7 @@ class StandardTestSuite extends TestSuite {
return 'application/dart';
case Compiler.dart2js:
case Compiler.dart2analyzer:
+ case Compiler.dartdevc:
return 'text/javascript';
default:
print('Non-web runtime, so no scriptType for: '
@@ -1700,13 +1754,8 @@ class PKGTestSuite extends StandardTestSuite {
isTestFilePredicate: (f) => f.endsWith('_test.dart'),
recursive: true);
- void enqueueBrowserTest(
- Path packageRoot,
- packages,
- TestInformation info,
- String testName,
- /* Set<Expectation> | Map<String, Set<Expectation>> */ dynamic
- expectations) {
+ void enqueueBrowserTest(Path packageRoot, packages, TestInformation info,
+ String testName, Map<String, Set<Expectation>> expectations) {
var filePath = info.filePath;
var dir = filePath.directoryPath;
var nameNoExt = filePath.filenameWithoutExtension;
« no previous file with comments | « tools/testing/dart/test_runner.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698