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

Unified Diff: lib/src/runner/engine.dart

Issue 1469863005: Add JSON protocol support for groups. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Code review changes Created 5 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 | « lib/src/runner/browser/iframe_test.dart ('k') | lib/src/runner/reporter/json.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/runner/engine.dart
diff --git a/lib/src/runner/engine.dart b/lib/src/runner/engine.dart
index 8862ee312f237e2a86388a3ae98c63b0f21fa633..2ec9ca6a81aa783c14d755de6eedd5ac5741f1ef 100644
--- a/lib/src/runner/engine.dart
+++ b/lib/src/runner/engine.dart
@@ -205,7 +205,7 @@ class Engine {
await _runPool.withResource(() async {
if (_closed) return;
- await _runGroup(suite, suite.group);
+ await _runGroup(suite, suite.group, []);
loadResource.allowRelease(() => suite.close());
});
}));
@@ -215,45 +215,57 @@ class Engine {
}
/// Runs all the entries in [entries] in sequence.
- Future _runGroup(RunnerSuite suite, Group group) async {
+ ///
+ /// [parents] is a list of groups that contain [group]. It may be modified,
+ /// but it's guaranteed to be in its original state once this function has
+ /// finished.
+ Future _runGroup(RunnerSuite suite, Group group, List<Group> parents) async {
if (group.metadata.skip) {
- await _runLiveTest(_skippedTest(suite, group));
+ await _runLiveTest(_skippedTest(suite, group, parents));
return;
}
var setUpAllSucceeded = true;
if (group.setUpAll != null) {
- var liveTest = group.setUpAll.load(suite);
+ var liveTest = group.setUpAll.load(suite, groups: parents);
await _runLiveTest(liveTest, countSuccess: false);
setUpAllSucceeded = liveTest.state.result == Result.success;
}
if (!_closed && setUpAllSucceeded) {
- for (var entry in group.entries) {
- if (_closed) return;
-
- if (entry is Group) {
- await _runGroup(suite, entry);
- } else if (entry.metadata.skip) {
- await _runLiveTest(_skippedTest(suite, entry));
- } else {
- var test = entry as Test;
- await _runLiveTest(test.load(suite));
+ parents.add(group);
+ try {
+ for (var entry in group.entries) {
+ if (_closed) return;
+
+ if (entry is Group) {
+ await _runGroup(suite, entry, parents);
+ } else if (entry.metadata.skip) {
+ await _runLiveTest(_skippedTest(suite, entry, parents));
+ } else {
+ var test = entry as Test;
+ await _runLiveTest(test.load(suite, groups: parents));
+ }
}
+ } finally {
+ parents.remove(group);
}
}
// Even if we're closed or setUpAll failed, we want to run all the teardowns
// to ensure that any state is properly cleaned up.
if (group.tearDownAll != null) {
- var liveTest = group.tearDownAll.load(suite);
+ var liveTest = group.tearDownAll.load(suite, groups: parents);
await _runLiveTest(liveTest, countSuccess: false);
if (_closed) await liveTest.close();
}
}
/// Returns a dummy [LiveTest] for a test or group marked as "skip".
- LiveTest _skippedTest(RunnerSuite suite, GroupEntry entry) {
+ ///
+ /// [parents] is a list of groups that contain [entry].
+ LiveTest _skippedTest(RunnerSuite suite, GroupEntry entry,
+ List<Group> parents) {
// The netry name will be `null` for the root group.
var test = new LocalTest(entry.name ?? "(suite)", entry.metadata, () {});
@@ -262,7 +274,7 @@ class Engine {
controller.setState(const State(Status.running, Result.success));
controller.setState(const State(Status.complete, Result.success));
controller.completer.complete();
- }, () {});
+ }, () {}, groups: parents);
return controller.liveTest;
}
« no previous file with comments | « lib/src/runner/browser/iframe_test.dart ('k') | lib/src/runner/reporter/json.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698