Index: tools/testing/dart/test_suite.dart |
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart |
index 53cc4f0b7c41d967e7b1c2f3432e457b9b4ef714..0adb7cd196848399e474e311441e8b2b8404d2e4 100644 |
--- a/tools/testing/dart/test_suite.dart |
+++ b/tools/testing/dart/test_suite.dart |
@@ -22,6 +22,7 @@ import "test_runner.dart"; |
import "multitest.dart"; |
import "drt_updater.dart"; |
import "dart:uri"; |
+import '../../../pkg/path/lib/path.dart' as pathLib; |
ahe
2013/01/16 13:30:37
Also breaks test.dart.
|
part "browser_test.dart"; |
@@ -408,13 +409,19 @@ class StandardTestSuite extends TestSuite { |
final Path dartDir; |
Predicate<String> isTestFilePredicate; |
final bool listRecursively; |
+ /** |
+ * The set of servers that have been started to run these tests (Could be |
+ * none). |
+ */ |
+ List serverList; |
StandardTestSuite(Map configuration, |
String suiteName, |
Path suiteDirectory, |
this.statusFilePaths, |
{this.isTestFilePredicate, |
- bool recursive: false}) |
+ bool recursive: false, |
+ this.serverList: const []}) |
: super(configuration, suiteName), |
dartDir = TestUtils.dartDir(), |
listRecursively = recursive, |
@@ -446,16 +453,19 @@ class StandardTestSuite extends TestSuite { |
* instead of having to create a custom [StandardTestSuite] subclass. In |
* particular, if you add 'path/to/mytestsuite' to [TEST_SUITE_DIRECTORIES] |
* in test.dart, this will all be set up for you. |
+ * |
+ * The [StandardTestSuite] also optionally takes a list of servers that have |
+ * been started up by the test harness, to be used by browser tests. |
*/ |
factory StandardTestSuite.forDirectory( |
- Map configuration, Path directory) { |
+ Map configuration, Path directory, {List serverList : const []}) { |
final name = directory.filename; |
return new StandardTestSuite(configuration, |
name, directory, |
['$directory/$name.status', '$directory/${name}_dart2js.status'], |
isTestFilePredicate: (filename) => filename.endsWith('_test.dart'), |
- recursive: true); |
+ recursive: true, serverList: serverList); |
} |
Collection<Uri> get dart2JsBootstrapDependencies { |
@@ -850,17 +860,19 @@ class StandardTestSuite extends TestSuite { |
// or indirectly through test_as_library.dart, if it is not. |
Path dartLibraryFilename = filePath; |
if (!isLibraryDefinition) { |
- dartLibraryFilename = new Path('test_as_library.dart'); |
- File file = new File('$tempDir/$dartLibraryFilename'); |
+ dartLibraryFilename = new Path(tempDir).append( |
+ 'test_as_library.dart'); |
+ File file = new File(dartLibraryFilename.toNativePath()); |
RandomAccessFile dartLibrary = file.openSync(FileMode.WRITE); |
- dartLibrary.writeStringSync(wrapDartTestInLibrary(filePath)); |
+ dartLibrary.writeStringSync( |
+ wrapDartTestInLibrary(filePath, file.name)); |
dartLibrary.closeSync(); |
} |
File file = new File(dartWrapperFilename); |
RandomAccessFile dartWrapper = file.openSync(FileMode.WRITE); |
dartWrapper.writeStringSync( |
- dartTestWrapper(dartDir, dartLibraryFilename)); |
+ dartTestWrapper(dartDir, file.name, dartLibraryFilename)); |
dartWrapper.closeSync(); |
} else { |
dartWrapperFilename = filename; |
@@ -882,12 +894,6 @@ class StandardTestSuite extends TestSuite { |
dartWrapperFilename : compiledDartWrapperFilename; |
// Create the HTML file for the test. |
RandomAccessFile htmlTest = new File(htmlPath).openSync(FileMode.WRITE); |
- String filePrefix = ''; |
- if (Platform.operatingSystem == 'windows') { |
- // Firefox on Windows does not like absolute file path names that start |
- // with 'C:' adding 'file:///' solves the problem. |
- filePrefix = 'file:///'; |
- } |
String content = null; |
Path dir = filePath.directoryPath; |
String nameNoExt = filePath.filenameWithoutExtension; |
@@ -896,10 +902,13 @@ class StandardTestSuite extends TestSuite { |
Path expectedOutput = null; |
if (new File.fromPath(pngPath).existsSync()) { |
expectedOutput = pngPath; |
- content = getHtmlLayoutContents(scriptType, '$filePrefix$scriptPath'); |
+ // TODO(efortuna): Unify path libraries in test.dart. |
+ content = getHtmlLayoutContents(scriptType, pathLib.relative(scriptPath, |
+ from: pathLib.dirname(htmlPath))); |
} else if (new File.fromPath(txtPath).existsSync()) { |
expectedOutput = txtPath; |
- content = getHtmlLayoutContents(scriptType, '$filePrefix$scriptPath'); |
+ content = getHtmlLayoutContents(scriptType, pathLib.relative(scriptPath, |
+ from: pathLib.dirname(htmlPath))); |
} else { |
final htmlLocation = new Path.fromNative(htmlPath); |
content = getHtmlContents( |
@@ -949,10 +958,17 @@ class StandardTestSuite extends TestSuite { |
} |
List<String> args = <String>[]; |
- String fullHtmlPath = htmlPath.startsWith('http:') ? htmlPath : |
- (htmlPath.startsWith('/') ? |
- 'file://$htmlPath' : |
- 'file:///$htmlPath'); |
+ var basePath = TestUtils.dartDir().toString(); |
+ if (!htmlPath.startsWith('/') && !htmlPath.startsWith('http')) { |
+ htmlPath = '/$htmlPath'; |
+ } |
+ htmlPath = htmlPath.startsWith(basePath) ? |
+ htmlPath.substring(basePath.length) : htmlPath; |
+ String fullHtmlPath = htmlPath; |
+ if (!htmlPath.startsWith('http')) { |
+ fullHtmlPath = 'http://127.0.0.1:${serverList[0].port}$htmlPath?' |
+ 'crossOriginPort=${serverList[1].port}'; |
+ } |
if (info.optionsFromFile['isMultiHtmlTest'] |
&& subtestNames.length > 0) { |
fullHtmlPath = '${fullHtmlPath}#${subtestNames[subtestIndex]}'; |
@@ -976,7 +992,6 @@ class StandardTestSuite extends TestSuite { |
var dartFlags = []; |
var dumpRenderTreeOptions = []; |
- var packageRootUri; |
dumpRenderTreeOptions.add('--no-timeout'); |
@@ -988,16 +1003,6 @@ class StandardTestSuite extends TestSuite { |
} |
dartFlags.addAll(vmOptions); |
} |
- if (compiler == 'none') { |
- var packageRootPath = packageRoot(optionsFromFile['packageRoot']); |
- if (packageRootPath != null) { |
- var absolutePath = |
- TestUtils.absolutePath(new Path(packageRootPath)); |
- packageRootUri = new Uri.fromComponents( |
- scheme: 'file', |
- path: absolutePath.toString()); |
- } |
- } |
if (expectedOutput != null) { |
if (expectedOutput.toNativePath().endsWith('.png')) { |
@@ -1010,7 +1015,6 @@ class StandardTestSuite extends TestSuite { |
fullHtmlPath, |
dumpRenderTreeOptions, |
dartFlags, |
- packageRootUri, |
expectedOutput)); |
} |
@@ -1104,7 +1108,8 @@ class StandardTestSuite extends TestSuite { |
var minified = configuration['minified'] ? '-minified' : ''; |
var dirName = "${configuration['compiler']}-${configuration['runtime']}" |
"$checked$minified"; |
- Path generatedTestPath = new Path.fromNative(buildDir) |
+ Path generatedTestPath = new Path.fromNative(dartDir.toNativePath()) |
+ .append(buildDir) |
.append('generated_tests') |
.append(dirName) |
.append(testUniqueName); |
@@ -1756,9 +1761,30 @@ class TestUtils { |
} |
static String configurationDir(Map configuration) { |
+ // For regular dart checkouts, the configDir by default is mode+arch. |
+ // For Dartium, the configDir by default is mode (as defined by the Chrome |
+ // build setup). We can detect this because in the dartium checkout, the |
+ // "output" directory is a sibling of the dart directory instead of a child. |
var mode = (configuration['mode'] == 'debug') ? 'Debug' : 'Release'; |
var arch = configuration['arch'].toUpperCase(); |
- return '$mode$arch'; |
+ if (currentWorkingDirectory != dartDir()) { |
+ return '$mode$arch'; |
+ } else { |
+ return mode; |
+ } |
+ } |
+ |
+ /** |
+ * Returns the path to the dart binary checked into the repo, used for |
+ * bootstrapping test.dart. |
+ */ |
+ static Path get dartTestExecutable { |
+ var path = '${TestUtils.dartDir()}/tools/testing/bin/' |
+ '${Platform.operatingSystem}/dart'; |
+ if (Platform.operatingSystem == 'windows') { |
+ path = '$path.exe'; |
+ } |
+ return new Path(path); |
} |
} |