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

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

Issue 8715006: tools/test.dart: Add multitest support to Dart implementation of test runner. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 9 years, 1 month 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/multitest.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 7d157583e9642d9d06e179a6a29707b3f7b3ff56..4ee819fb6f26e43e0b54466b09f5fe803137e4a5 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -6,6 +6,8 @@
#import("status_file_parser.dart");
#import("test_runner.dart");
+#import("multitest.dart");
+
interface TestSuite {
void forEachTest(Function onTest, [Function onDone]);
@@ -180,25 +182,49 @@ class StandardTestSuite implements TestSuite {
return;
}
- int start = filename.lastIndexOf('src' + new Platform().pathSeparator());
- String testName = filename.substring(start + 4, filename.length - 5);
- Set<String> expectations = testExpectations.expectations(testName);
-
- if (expectations.contains(SKIP)) return;
- var optionsFromFile = optionsFromFile(filename);
- var isNegative = optionsFromFile['isNegative'];
- var argumentLists = argumentListsFromFile(filename, optionsFromFile);
var timeout = configuration['timeout'];
+ var optionsFromFile = optionsFromFile(filename);
- for (var args in argumentLists) {
- doTest(new TestCase(testName,
- shellPath,
- args,
- timeout,
- completeHandler,
- expectations,
- isNegative));
+ Function createTestCase(String filename,
+ bool isNegative,
+ [bool isNegativeIfChecked = false]) {
+ // Look up expectations in status files using a modified file path.
+ String pathSeparator = new Platform().pathSeparator();
+ String testName;
+ int start = filename.lastIndexOf('src' + pathSeparator);
+ if (start != -1) {
+ testName = filename.substring(start + 4, filename.length - 5);
+ } else {
+ // Only multitests in a temporary directory should reach here.
+ start = filename.lastIndexOf(pathSeparator);
+ int middle = filename.lastIndexOf('_');
+ testName = filename.substring(start + 1, middle) + pathSeparator +
+ filename.substring(middle + 1, filename.length - 5);
+ }
+ Set<String> expectations = testExpectations.expectations(testName);
+
+ if (expectations.contains(SKIP)) return;
+
+ isNegative = isNegative ||
+ (configuration['checked'] && isNegativeIfChecked);
+ var argumentLists = argumentListsFromFile(filename, optionsFromFile);
+ for (var args in argumentLists) {
+ doTest(new TestCase(testName,
+ shellPath,
+ args,
+ timeout,
+ completeHandler,
+ expectations,
+ isNegative));
+ }
+ }
+
+
+ if (optionsFromFile['isMultitest']) {
+ DoMultitest(filename, createTestCase);
+ } else {
+ createTestCase(filename, optionsFromFile['isNegative']);
}
}
@@ -210,18 +236,21 @@ class StandardTestSuite implements TestSuite {
Map optionsFromFile) {
List args = TestUtils.standardOptions(configuration);
+ bool isMultitest = optionsFromFile["isMultitest"];
List<String> dartOptions = optionsFromFile["dartOptions"];
+ List<List<String>> vmOptionsList = optionsFromFile["vmOptions"];
+ Expect.isTrue(!isMultitest || dartOptions == null);
args.addAll(dartOptions == null ? [filename] : dartOptions);
var result = new List<List<String>>();
- List<List<String>> vmOptionsList = optionsFromFile["vmOptions"];
- if (vmOptionsList.isEmpty()) {
- result.add(args);
- } else {
- for (var vmOptions in vmOptionsList) {
- vmOptions.addAll(args);
- result.add(vmOptions);
+ Expect.isFalse(vmOptionsList.isEmpty(), "empty vmOptionsList");
+ for (var vmOptions in vmOptionsList) {
+ if (isMultitest) {
+ // Make copy of vmOptions, since we will modify it at each iteration.
+ vmOptions = new List<String>.from(vmOptions);
}
+ vmOptions.addAll(args);
+ result.add(vmOptions);
}
return result;
@@ -254,6 +283,7 @@ class StandardTestSuite implements TestSuite {
for (var match in matches) {
result.add(match[1].split(' ').filter((e) => e != ''));
}
+ if (result.isEmpty()) result.add([]);
matches = dartOptionsRegExp.allMatches(contents);
for (var match in matches) {
@@ -272,9 +302,12 @@ class StandardTestSuite implements TestSuite {
isNegative = true;
}
+ bool isMultitest = contents.contains("///");
+
return { "vmOptions": result,
"dartOptions": dartOptions,
- "isNegative" : isNegative };
+ "isNegative": isNegative,
+ "isMultitest": isMultitest};
}
}
« no previous file with comments | « tools/testing/dart/multitest.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698