| Index: pkg/testing/lib/src/expectation.dart
|
| diff --git a/pkg/testing/lib/src/expectation.dart b/pkg/testing/lib/src/expectation.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0900c525a475527ec761fd4015d66dd7b189cbb9
|
| --- /dev/null
|
| +++ b/pkg/testing/lib/src/expectation.dart
|
| @@ -0,0 +1,120 @@
|
| +// Copyright (c) 2017, 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.expectation;
|
| +
|
| +/// An expectation represents the expected outcome of a test (or if it should
|
| +/// be skipped).
|
| +///
|
| +/// An expectation belongs to a group, for example, [ExpectationGroup.Fail].
|
| +///
|
| +/// Each expectation group has a canonical expectation, defined below. You can
|
| +/// use the canonical expectation instead of a more specific one. Note this
|
| +/// isn't implemented yet.
|
| +class Expectation {
|
| + static const Expectation Pass =
|
| + const Expectation("Pass", ExpectationGroup.Pass);
|
| +
|
| + static const Expectation Crash =
|
| + const Expectation("Crash", ExpectationGroup.Crash);
|
| +
|
| + static const Expectation Timeout =
|
| + const Expectation("Timeout", ExpectationGroup.Timeout);
|
| +
|
| + static const Expectation Fail =
|
| + const Expectation("Fail", ExpectationGroup.Fail);
|
| +
|
| + static const Expectation Skip =
|
| + const Expectation("Skip", ExpectationGroup.Skip);
|
| +
|
| + final String name;
|
| +
|
| + final ExpectationGroup group;
|
| +
|
| + const Expectation(this.name, this.group);
|
| +
|
| + String toString() => name;
|
| +}
|
| +
|
| +class ExpectationSet {
|
| + static const ExpectationSet Default = const ExpectationSet(
|
| + const <String, Expectation>{
|
| + "pass": Expectation.Pass,
|
| + "crash": Expectation.Crash,
|
| + "timeout": Expectation.Timeout,
|
| + "fail": Expectation.Fail,
|
| + "skip": Expectation.Skip,
|
| + "missingcompiletimeerror":
|
| + const Expectation("MissingCompileTimeError", ExpectationGroup.Fail),
|
| + "missingruntimeerror":
|
| + const Expectation("MissingRuntimeError", ExpectationGroup.Fail),
|
| + });
|
| +
|
| + final Map<String, Expectation> internalMap;
|
| +
|
| + const ExpectationSet(this.internalMap);
|
| +
|
| + operator[] (String name) {
|
| + return internalMap[name.toLowerCase()]
|
| + ?? (throw "No expectation named: '$name'.");
|
| + }
|
| +
|
| + factory ExpectationSet.fromJsonList(List data) {
|
| + Map<String, Expectation> internalMap =
|
| + new Map<String, Expectation>.from(Default.internalMap);
|
| + for (Map map in data) {
|
| + String name;
|
| + String group;
|
| + map.forEach((String key, String value) {
|
| + switch (key) {
|
| + case "name":
|
| + name = value;
|
| + break;
|
| +
|
| + case "group":
|
| + group = value;
|
| + break;
|
| +
|
| + default:
|
| + throw "Unrecoginized key: '$key' in '$map'.";
|
| + }
|
| + });
|
| + if (name == null) {
|
| + throw "No name provided in '$map'";
|
| + }
|
| + if (group == null) {
|
| + throw "No group provided in '$map'";
|
| + }
|
| + Expectation expectation = new Expectation(name, groupFromString(group));
|
| + name = name.toLowerCase();
|
| + if (internalMap.containsKey(name)) {
|
| + throw "Duplicated expectation name: '$name'.";
|
| + }
|
| + internalMap[name] = expectation;
|
| + }
|
| + return new ExpectationSet(internalMap);
|
| + }
|
| +}
|
| +
|
| +enum ExpectationGroup {
|
| + Crash,
|
| + Fail,
|
| + Meta,
|
| + Pass,
|
| + Skip,
|
| + Timeout,
|
| +}
|
| +
|
| +ExpectationGroup groupFromString(String name) {
|
| + switch (name) {
|
| + case "Crash": return ExpectationGroup.Crash;
|
| + case "Fail": return ExpectationGroup.Fail;
|
| + case "Meta": return ExpectationGroup.Meta;
|
| + case "Pass": return ExpectationGroup.Pass;
|
| + case "Skip": return ExpectationGroup.Skip;
|
| + case "Timeout": return ExpectationGroup.Timeout;
|
| + default:
|
| + throw "Unrecognized group: '$name'.";
|
| + }
|
| +}
|
|
|