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

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

Issue 11810004: Make browser tests all run from a server instead of the local filesystem. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 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
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);
}
}

Powered by Google App Engine
This is Rietveld 408576698