blob: 932135208c382b871b36f4dfe01f1c95d7f7328c [file] [log] [blame]
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'group.dart';
import 'metadata.dart';
import 'suite_platform.dart';
import 'test.dart';
/// A test suite.
/// A test suite is a set of tests that are intended to be run together and that
/// share default configuration.
class Suite {
/// The platform on which the suite is running.
final SuitePlatform platform;
/// The path to the Dart test suite, or `null` if that path is unknown.
final String? path;
/// The metadata associated with this test suite.
/// This is a shortcut for [group.metadata].
Metadata get metadata => group.metadata;
/// The top-level group for this test suite.
final Group group;
/// Creates a new suite containing [entires].
/// 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(Group group, this.platform, {this.path})
: group = _filterGroup(group, platform);
/// Returns [entries] filtered according to [platform] and [os].
/// Gracefully handles [platform] being null.
static Group _filterGroup(Group group, SuitePlatform platform) {
var filtered = group.forPlatform(platform);
if (filtered != null) return filtered;
return Group.root([], metadata: group.metadata);
/// Returns a new suite with all tests matching [test] removed.
/// Unlike [GroupEntry.filter], this never returns `null`. If all entries are
/// filtered out, it returns an empty suite.
Suite filter(bool Function(Test) callback) {
var filtered = group.filter(callback);
filtered ??= Group.root([], metadata: metadata);
return Suite(filtered, platform, path: path);
bool get isLoadSuite => false;