Index: lib/src/backend/suite.dart |
diff --git a/lib/src/backend/suite.dart b/lib/src/backend/suite.dart |
index 400ee880ef041f3e8e1274b942e43c7ce5593f76..0cb8f5c42660bd18b0ba48fb9eb67bd56fbcbe19 100644 |
--- a/lib/src/backend/suite.dart |
+++ b/lib/src/backend/suite.dart |
@@ -4,11 +4,9 @@ |
library test.backend.suite; |
-import 'dart:collection'; |
- |
import 'metadata.dart'; |
import 'operating_system.dart'; |
-import 'suite_entry.dart'; |
+import 'group.dart'; |
import 'test.dart'; |
import 'test_platform.dart'; |
@@ -31,62 +29,47 @@ class Suite { |
final String path; |
/// The metadata associated with this test suite. |
- final Metadata metadata; |
+ /// |
+ /// This is a shortcut for [group.metadata]. |
+ Metadata get metadata => group.metadata; |
- /// The tests and groups in this test suite. |
- final List<SuiteEntry> entries; |
+ /// The top-level group for this test suite. |
+ final Group group; |
/// Creates a new suite containing [entires]. |
/// |
- /// If [platform] and/or [os] are passed, [entries] and [metadata] are filtered |
- /// to match that platform information. |
+ /// If [platform] and/or [os] are passed, [group] is filtered to match that |
+ /// platform information. |
/// |
/// If [os] is passed without [platform], throws an [ArgumentError]. |
- Suite(Iterable<SuiteEntry> entries, {this.path, TestPlatform platform, |
- OperatingSystem os, Metadata metadata}) |
+ Suite(Group group, {this.path, TestPlatform platform, OperatingSystem os}) |
: platform = platform, |
os = os, |
- metadata = _filterMetadata(metadata, platform, os), |
- entries = new UnmodifiableListView<SuiteEntry>( |
- _filterEntries(entries, platform, os)); |
+ group = _filterGroup(group, platform, os); |
- /// Returns [metadata] filtered according to [platform] and [os]. |
+ /// Returns [entries] filtered according to [platform] and [os]. |
/// |
- /// Gracefully handles either [metadata] or [platform] being null. |
- static Metadata _filterMetadata(Metadata metadata, TestPlatform platform, |
+ /// Gracefully handles [platform] being null. |
+ static Group _filterGroup(Group group, TestPlatform platform, |
OperatingSystem os) { |
if (platform == null && os != null) { |
throw new ArgumentError.value(null, "os", |
"If os is passed, platform must be passed as well"); |
} |
- if (metadata == null) return new Metadata(); |
- if (platform == null) return metadata; |
- return metadata.forPlatform(platform, os: os); |
- } |
- |
- /// Returns [entries] filtered according to [platform] and [os]. |
- /// |
- /// Gracefully handles [platform] being null. |
- static List<SuiteEntry> _filterEntries(Iterable<SuiteEntry> entries, |
- TestPlatform platform, OperatingSystem os) { |
- if (platform == null) return entries.toList(); |
- |
- return entries.map((entry) { |
- return entry.forPlatform(platform, os: os); |
- }).where((entry) => entry != null).toList(); |
+ if (platform == null) return group; |
+ var filtered = group.forPlatform(platform, os: os); |
+ if (filtered != null) return filtered; |
+ return new Group.root([], metadata: group.metadata); |
} |
/// Returns a new suite with all tests matching [test] removed. |
/// |
- /// Unlike [SuiteEntry.filter], this never returns `null`. If all entries are |
+ /// Unlike [GroupEntry.filter], this never returns `null`. If all entries are |
/// filtered out, it returns an empty suite. |
Suite filter(bool callback(Test test)) { |
- var filtered = entries |
- .map((entry) => entry.filter(callback)) |
- .where((entry) => entry != null) |
- .toList(); |
- return new Suite(filtered, |
- platform: platform, os: os, path: path, metadata: metadata); |
+ var filtered = group.filter(callback); |
+ if (filtered == null) filtered = new Group.root([], metadata: metadata); |
+ return new Suite(filtered, platform: platform, os: os, path: path); |
} |
} |