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; |