Index: tools/testing/dart/test_suite.dart |
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart |
index 887f82dd33adf26efeafc0426b12f55a52aad1c3..7bce35d5660701b13d2cb17f83ea956b39d2a3e4 100644 |
--- a/tools/testing/dart/test_suite.dart |
+++ b/tools/testing/dart/test_suite.dart |
@@ -752,24 +752,6 @@ class StandardTestSuite extends TestSuite { |
} |
} |
- static Path _findPubspecYamlFile(Path filePath) { |
- var root = TestUtils.dartDir; |
- assert("$filePath".startsWith("$root")); |
- |
- // We start with the parent directory of [filePath] and go up until |
- // the root directory (excluding the root). |
- List<String> segments = filePath.directoryPath.relativeTo(root).segments(); |
- while (segments.length > 0) { |
- var pubspecYamlPath = new Path(segments.join('/')).append('pubspec.yaml'); |
- if (TestUtils.existsCache.doesFileExist(pubspecYamlPath.toNativePath())) { |
- return root.join(pubspecYamlPath); |
- } |
- segments.removeLast(); |
- } |
- |
- return null; |
- } |
- |
void enqueueTestCaseFromTestInformation(TestInformation info) { |
String testName = buildTestCaseDisplayName(suiteDir, info.originTestPath, |
multitestName: info.optionsFromFile['isMultitest'] as bool |
@@ -777,7 +759,7 @@ class StandardTestSuite extends TestSuite { |
: ""); |
Set<Expectation> expectations = testExpectations.expectations(testName); |
if (info is HtmlTestInformation) { |
- enqueueHtmlTest(info, testName, expectations); |
+ _enqueueHtmlTest(info, testName, expectations); |
return; |
} |
@@ -822,7 +804,7 @@ class StandardTestSuite extends TestSuite { |
expectationsMap = {testName: expectations}; |
} |
- enqueueBrowserTest( |
+ _enqueueBrowserTest( |
packageRoot, packages, info, testName, expectationsMap); |
} else { |
enqueueStandardTest(info, testName, expectations); |
@@ -1022,8 +1004,12 @@ 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, Map<String, Set<Expectation>> 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; |
@@ -1031,12 +1017,12 @@ class StandardTestSuite extends TestSuite { |
var optionsName = |
multipleOptions ? vmOptions.join('-').replaceAll(badChars, '') : ''; |
var tempDir = createOutputDirectory(info.filePath, optionsName); |
- enqueueBrowserTestWithOptions(packageRoot, packages, info, testName, |
+ _enqueueBrowserTestWithOptions(packageRoot, packages, info, testName, |
expectations, vmOptions, tempDir); |
} |
} |
- void enqueueBrowserTestWithOptions( |
+ void _enqueueBrowserTestWithOptions( |
Path packageRoot, |
Path packages, |
TestInformation info, |
@@ -1058,54 +1044,28 @@ class StandardTestSuite extends TestSuite { |
var customHtmlPath = dir.append('$nameNoExt.html').toNativePath(); |
var customHtml = new File(customHtmlPath); |
- // Construct the command(s) that compile all the inputs needed by the |
- // browser test. For running Dart in DRT, this will be noop commands. |
- var commands = <Command>[]; |
- |
// 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( |
- _polymerDeployCommand(customHtmlPath, tempDir, optionsFromFile)); |
- |
- Path pubspecYamlFile = _findPubspecYamlFile(filePath); |
- Path homeDir = |
- (pubspecYamlFile == null) ? dir : pubspecYamlFile.directoryPath; |
- htmlPath = '$tempDir/${dir.relativeTo(homeDir)}/$nameNoExt.html'; |
- dartWrapperFilename = '${htmlPath}_bootstrap.dart'; |
- compiledDartWrapperFilename = '$dartWrapperFilename.js'; |
- } else { |
- htmlPath = customHtmlPath; |
- } |
+ htmlPath = '$tempDir/test.html'; |
+ dartWrapperFilename = filePath.toNativePath(); |
+ |
+ var htmlContents = customHtml.readAsStringSync(); |
+ if (configuration.compiler == Compiler.none) { |
+ var dartUrl = _createUrlPathFromFile(filePath); |
+ var dartScript = |
+ '<script type="application/dart" src="$dartUrl"></script>'; |
+ var jsUrl = '/packages/browser/dart.js'; |
+ var jsScript = '<script type="text/javascript" src="$jsUrl"></script>'; |
+ htmlContents = |
+ htmlContents.replaceAll('%TEST_SCRIPTS%', '$dartScript\n$jsScript'); |
} else { |
- htmlPath = '$tempDir/test.html'; |
- dartWrapperFilename = filePath.toNativePath(); |
- |
- var htmlContents = customHtml.readAsStringSync(); |
- if (configuration.compiler == Compiler.none) { |
- var dartUrl = _createUrlPathFromFile(filePath); |
- var dartScript = |
- '<script type="application/dart" src="$dartUrl"></script>'; |
- var jsUrl = '/packages/browser/dart.js'; |
- var jsScript = |
- '<script type="text/javascript" src="$jsUrl"></script>'; |
- htmlContents = htmlContents.replaceAll( |
- '%TEST_SCRIPTS%', '$dartScript\n$jsScript'); |
- } else { |
- compiledDartWrapperFilename = '$tempDir/$nameNoExt.js'; |
- var jsUrl = '$nameNoExt.js'; |
- htmlContents = htmlContents.replaceAll( |
- '%TEST_SCRIPTS%', '<script src="$jsUrl"></script>'); |
- } |
- new File(htmlPath).writeAsStringSync(htmlContents); |
+ compiledDartWrapperFilename = '$tempDir/$nameNoExt.js'; |
+ htmlContents = htmlContents.replaceAll( |
+ '%TEST_SCRIPTS%', '<script src="$nameNoExt.js"></script>'); |
} |
+ new File(htmlPath).writeAsStringSync(htmlContents); |
} else { |
htmlPath = '$tempDir/test.html'; |
if (configuration.compiler != Compiler.dart2js && |
@@ -1117,8 +1077,6 @@ class StandardTestSuite extends TestSuite { |
} |
// Create the HTML file for the test. |
- var htmlTest = new File(htmlPath).openSync(mode: FileMode.WRITE); |
- |
var scriptPath = dartWrapperFilename; |
if (configuration.compiler != Compiler.none) { |
scriptPath = compiledDartWrapperFilename; |
@@ -1134,10 +1092,13 @@ class StandardTestSuite extends TestSuite { |
content = dartdevcHtml(nameNoExt, jsDir); |
} |
- htmlTest.writeStringSync(content); |
- htmlTest.closeSync(); |
+ new File(htmlPath).writeAsStringSync(content); |
} |
+ // Construct the command(s) that compile all the inputs needed by the |
+ // browser test. For running Dart in DRT, this will be noop commands. |
+ var commands = <Command>[]; |
+ |
switch (configuration.compiler) { |
case Compiler.dart2js: |
commands.add(_dart2jsCompileCommand(dartWrapperFilename, |
@@ -1157,8 +1118,7 @@ class StandardTestSuite extends TestSuite { |
} |
// Some tests require compiling multiple input scripts. |
- var otherScripts = optionsFromFile['otherScripts'] as List<String>; |
- for (var name in otherScripts) { |
+ for (var name in optionsFromFile['otherScripts'] as List<String>) { |
var namePath = new Path(name); |
var fromPath = filePath.directoryPath.join(namePath); |
@@ -1170,7 +1130,7 @@ class StandardTestSuite extends TestSuite { |
case Compiler.dartdevc: |
commands.add(_dartdevcCompileCommand(fromPath.toNativePath(), |
- '$tempDir/$nameNoExt.js', optionsFromFile)); |
+ '$tempDir/${namePath.filename}.js', optionsFromFile)); |
break; |
default: |
@@ -1181,66 +1141,80 @@ class StandardTestSuite extends TestSuite { |
// For the tests that require multiple input scripts but are not |
// compiled, move the input scripts over with the script so they can |
// be accessed. |
- var result = new File(fromPath.toNativePath()).readAsStringSync(); |
- new File('$tempDir/${namePath.filename}').writeAsStringSync(result); |
+ new File(fromPath.toNativePath()) |
+ .copySync('$tempDir/${namePath.filename}'); |
} |
} |
- // Variables for browser multi-tests. |
- var isMultitest = info.optionsFromFile['isMultiHtmlTest'] as bool; |
- var subtestNames = isMultitest |
- ? (info.optionsFromFile['subtestNames'] as List<String>) |
- : <String>[null]; |
- for (var subtestName in subtestNames) { |
- // Construct the command that executes the browser test |
- var commandSet = commands.toList(); |
- |
- var htmlPath_subtest = _createUrlPathFromFile(new Path(htmlPath)); |
- var fullHtmlPath = |
- _getUriForBrowserTest(htmlPath_subtest, subtestName).toString(); |
- |
- if (configuration.runtime == Runtime.drt) { |
- var dartFlags = <String>[]; |
- var contentShellOptions = ['--no-timeout', '--run-layout-test']; |
- |
- // Disable the GPU under Linux and Dartium. If the GPU is enabled, |
- // Chrome may send a termination signal to a test. The test will be |
- // terminated if a machine (bot) doesn't have a GPU or if a test is |
- // still running after a certain period of time. |
- if (configuration.system == System.linux && |
- configuration.runtime == Runtime.drt) { |
- contentShellOptions.add('--disable-gpu'); |
- // TODO(terry): Roll 50 need this in conjection with disable-gpu. |
- contentShellOptions.add('--disable-gpu-early-init'); |
- } |
- |
- if (configuration.compiler == Compiler.none) { |
- dartFlags.add('--ignore-unrecognized-flags'); |
- if (configuration.isChecked) { |
- dartFlags.add('--enable_asserts'); |
- dartFlags.add("--enable_type_checks"); |
- } |
- dartFlags.addAll(vmOptions); |
- } |
+ if (info.optionsFromFile['isMultiHtmlTest'] as bool) { |
+ // Variables for browser multi-tests. |
+ var subtestNames = info.optionsFromFile['subtestNames'] as List<String>; |
+ for (var subtestName in subtestNames) { |
+ _enqueueSingleBrowserTest(commands, info, '$testName/$subtestName', |
+ subtestName, expectations, vmOptions, htmlPath); |
+ } |
+ } else { |
+ _enqueueSingleBrowserTest( |
+ commands, info, testName, null, expectations, vmOptions, htmlPath); |
+ } |
+ } |
- commandSet.add(Command.contentShell(contentShellFilename, fullHtmlPath, |
- contentShellOptions, dartFlags, environmentOverrides)); |
- } else { |
- commandSet.add(Command.browserTest(fullHtmlPath, configuration, |
- retry: !isNegative(info))); |
+ /// Enqueues a single browser test, or a single subtest of an HTML multitest. |
+ void _enqueueSingleBrowserTest( |
+ List<Command> commands, |
+ TestInformation info, |
+ String testName, |
+ String subtestName, |
+ Map<String, Set<Expectation>> expectations, |
+ List<String> vmOptions, |
+ String htmlPath) { |
+ // Construct the command that executes the browser test. |
+ commands = commands.toList(); |
+ |
+ var htmlPathSubtest = _createUrlPathFromFile(new Path(htmlPath)); |
+ var fullHtmlPath = |
+ _getUriForBrowserTest(htmlPathSubtest, subtestName).toString(); |
+ |
+ if (configuration.runtime == Runtime.drt) { |
+ var dartFlags = <String>[]; |
+ var contentShellOptions = ['--no-timeout', '--run-layout-test']; |
+ |
+ // Disable the GPU under Linux and Dartium. If the GPU is enabled, |
+ // Chrome may send a termination signal to a test. The test will be |
+ // terminated if a machine (bot) doesn't have a GPU or if a test is |
+ // still running after a certain period of time. |
+ if (configuration.system == System.linux && |
+ configuration.runtime == Runtime.drt) { |
+ contentShellOptions.add('--disable-gpu'); |
+ // TODO(terry): Roll 50 need this in conjection with disable-gpu. |
+ contentShellOptions.add('--disable-gpu-early-init'); |
} |
- // Create BrowserTestCase and queue it. |
- var fullTestName = isMultitest ? '$testName/$subtestName' : testName; |
- var expectation = expectations[fullTestName]; |
- var testCase = new BrowserTestCase('$suiteName/$fullTestName', commandSet, |
- configuration, expectation, info, isNegative(info), fullHtmlPath); |
+ if (configuration.compiler == Compiler.none) { |
+ dartFlags.add('--ignore-unrecognized-flags'); |
+ if (configuration.isChecked) { |
+ dartFlags.add('--enable_asserts'); |
+ dartFlags.add("--enable_type_checks"); |
+ } |
+ dartFlags.addAll(vmOptions); |
+ } |
- enqueueNewTestCase(testCase); |
+ commands.add(Command.contentShell(contentShellFilename, fullHtmlPath, |
+ contentShellOptions, dartFlags, environmentOverrides)); |
+ } else { |
+ commands.add(Command.browserTest(fullHtmlPath, configuration, |
+ retry: !isNegative(info))); |
} |
+ |
+ // Create BrowserTestCase and queue it. |
+ var expectation = expectations[testName]; |
+ var testCase = new BrowserTestCase('$suiteName/$testName', commands, |
+ configuration, expectation, info, isNegative(info), fullHtmlPath); |
+ |
+ enqueueNewTestCase(testCase); |
} |
- void enqueueHtmlTest(HtmlTestInformation info, String testName, |
+ void _enqueueHtmlTest(HtmlTestInformation info, String testName, |
Set<Expectation> expectations) { |
var compiler = configuration.compiler; |
var runtime = configuration.runtime; |
@@ -1375,27 +1349,6 @@ class StandardTestSuite extends TestSuite { |
environmentOverrides); |
} |
- /** Helper to create a Polymer deploy command for a single HTML file. */ |
- Command _polymerDeployCommand(String inputFile, String outputDir, |
- Map<String, dynamic> optionsFromFile) { |
- var args = <String>[]; |
- var packages = packagesArgument(optionsFromFile['packageRoot'] as String, |
- optionsFromFile['packages'] as String); |
- if (packages != null) args.add(packages); |
- args |
- ..add('package:polymer/deploy.dart') |
- ..add('--test') |
- ..add(inputFile) |
- ..add('--out') |
- ..add(outputDir) |
- ..add('--file-filter') |
- ..add('.svn'); |
- if (configuration.isCsp) args.add('--csp'); |
- |
- return Command.process( |
- 'polymer_deploy', dartVmBinaryFileName, args, environmentOverrides); |
- } |
- |
String get scriptType { |
switch (configuration.compiler) { |
case Compiler.none: |
@@ -1757,7 +1710,7 @@ class PKGTestSuite extends StandardTestSuite { |
isTestFilePredicate: (f) => f.endsWith('_test.dart'), |
recursive: true); |
- void enqueueBrowserTest(Path packageRoot, packages, TestInformation info, |
+ void _enqueueBrowserTest(Path packageRoot, packages, TestInformation info, |
String testName, Map<String, Set<Expectation>> expectations) { |
var filePath = info.filePath; |
var dir = filePath.directoryPath; |
@@ -1765,7 +1718,7 @@ class PKGTestSuite extends StandardTestSuite { |
var customHtmlPath = dir.append('$nameNoExt.html'); |
var customHtml = new File(customHtmlPath.toNativePath()); |
if (!customHtml.existsSync()) { |
- super.enqueueBrowserTest( |
+ super._enqueueBrowserTest( |
packageRoot, packages, info, testName, expectations); |
} else { |
var relativeHtml = customHtmlPath.relativeTo(TestUtils.dartDir); |