blob: 54aa7c8ca5f599a2f0c34806c9aa70fcdd24b751 [file] [log] [blame]
// Copyright (c) 2016, 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.md file.
library testing.suite;
import 'chain.dart' show Chain;
import 'test_dart.dart' show TestDart;
/// Records the properties of a test suite.
abstract class Suite {
final String name;
final String kind;
final Uri statusFile;
Suite(this.name, this.kind, this.statusFile);
factory Suite.fromJsonMap(Uri base, Map json) {
String kind = json["kind"].toLowerCase();
String name = json["name"];
switch (kind) {
case "dart":
return new Dart.fromJsonMap(base, json, name);
case "chain":
return new Chain.fromJsonMap(base, json, name, kind);
case "test_dart":
return new TestDart.fromJsonMap(base, json, name, kind);
default:
throw "Suite '$name' has unknown kind '$kind'.";
}
}
String toString() => "Suite($name, $kind)";
}
/// A suite of standalone tests. The tests are combined and run as one program.
///
/// A standalone test is a test with a `main` method. The test is considered
/// successful if main doesn't throw an error (or if `main` returns a future,
/// that future completes without errors).
///
/// The tests are combined by generating a Dart file which imports all the main
/// methods and calls them sequentially.
///
/// Example JSON configuration:
///
/// {
/// "name": "test",
/// "kind": "Dart",
/// # Root directory of tests in this suite.
/// "path": "test/",
/// # Files in `path` that match any of the following regular expressions
/// # are considered to be part of this suite.
/// "pattern": [
/// "_test.dart$"
/// ],
/// # Except if they match any of the following regular expressions.
/// "exclude": [
/// "/golden/"
/// ]
/// }
class Dart extends Suite {
final Uri uri;
final List<RegExp> pattern;
final List<RegExp> exclude;
Dart(String name, this.uri, this.pattern, this.exclude)
: super(name, "dart", null);
factory Dart.fromJsonMap(Uri base, Map json, String name) {
Uri uri = base.resolve(json["path"]);
List<RegExp> pattern =
new List<RegExp>.from(json["pattern"].map((String p) => new RegExp(p)));
List<RegExp> exclude =
new List<RegExp>.from(json["exclude"].map((String p) => new RegExp(p)));
return new Dart(name, uri, pattern, exclude);
}
String toString() => "Dart($name, $uri, $pattern, $exclude)";
}