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

Side by Side Diff: lib/src/backend/state.dart

Issue 2099503002: Add a dedicated Result for skipped tests. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Code review changes Created 4 years, 6 months 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 unified diff | Download patch
« no previous file with comments | « lib/src/backend/invoker.dart ('k') | lib/src/frontend/expect_async.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// The state of a [LiveTest]. 5 /// The state of a [LiveTest].
6 /// 6 ///
7 /// A test's state is made up of two components, its [status] and its [result]. 7 /// A test's state is made up of two components, its [status] and its [result].
8 /// The [status] represents where the test is in its process of running; the 8 /// The [status] represents where the test is in its process of running; the
9 /// [result] represents the outcome as far as its known. 9 /// [result] represents the outcome as far as its known.
10 class State { 10 class State {
11 /// Where the test is in its process of running. 11 /// Where the test is in its process of running.
12 final Status status; 12 final Status status;
13 13
14 /// The outcome of the test, as far as it's known. 14 /// The outcome of the test, as far as it's known.
15 /// 15 ///
16 /// Note that if [status] is [Status.pending], [result] will always be 16 /// Note that if [status] is [Status.pending], [result] will always be
17 /// [Result.success] since the test hasn't yet had a chance to fail. 17 /// [Result.success] since the test hasn't yet had a chance to fail.
18 final Result result; 18 final Result result;
19 19
20 /// Whether a test in this state is expected to be done running code.
21 ///
22 /// If [status] is [Status.complete] and [result] doesn't indicate an error, a
23 /// properly-written test case should not be running any more code. However,
24 /// it may have started asynchronous processes without notifying the test
25 /// runner.
26 bool get shouldBeDone => status == Status.complete && result.isPassing;
27
20 const State(this.status, this.result); 28 const State(this.status, this.result);
21 29
22 bool operator==(other) => other is State && status == other.status && 30 bool operator==(other) => other is State && status == other.status &&
23 result == other.result; 31 result == other.result;
24 32
25 int get hashCode => status.hashCode ^ (7 * result.hashCode); 33 int get hashCode => status.hashCode ^ (7 * result.hashCode);
26 34
27 String toString() { 35 String toString() {
28 if (status == Status.pending) return "pending"; 36 if (status == Status.pending) return "pending";
29 if (status == Status.complete) return result.toString(); 37 if (status == Status.complete) return result.toString();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 String toString() => name; 75 String toString() => name;
68 } 76 }
69 77
70 /// The outcome of the test, as far as it's known. 78 /// The outcome of the test, as far as it's known.
71 class Result { 79 class Result {
72 /// The test has not yet failed in any way. 80 /// The test has not yet failed in any way.
73 /// 81 ///
74 /// Note that this doesn't mean that the test won't fail in the future. 82 /// Note that this doesn't mean that the test won't fail in the future.
75 static const success = const Result._("success"); 83 static const success = const Result._("success");
76 84
85 /// The test, or some part of it, has been skipped.
86 ///
87 /// This implies that the test hasn't failed *yet*. However, it this doesn't
88 /// mean that the test won't fail in the future.
89 static const skipped = const Result._("skipped");
90
77 /// The test has failed. 91 /// The test has failed.
78 /// 92 ///
79 /// A failure is specifically caused by a [TestFailure] being thrown; any 93 /// A failure is specifically caused by a [TestFailure] being thrown; any
80 /// other exception causes an error. 94 /// other exception causes an error.
81 static const failure = const Result._("failure"); 95 static const failure = const Result._("failure");
82 96
83 /// The test has crashed. 97 /// The test has crashed.
84 /// 98 ///
85 /// Any exception other than a [TestFailure] is considered to be an error. 99 /// Any exception other than a [TestFailure] is considered to be an error.
86 static const error = const Result._("error"); 100 static const error = const Result._("error");
87 101
88 /// The name of the result. 102 /// The name of the result.
89 final String name; 103 final String name;
90 104
105 /// Whether this is a passing result.
106 ///
107 /// A test is considered to have passed if it's a success or if it was
108 /// skipped.
109 bool get isPassing => this == success || this == skipped;
110
111 /// Whether this is a failing result.
112 ///
113 /// A test is considered to have failed if it experiences a failure or an
114 /// error.
115 bool get isFailing => !isPassing;
116
91 factory Result.parse(String name) { 117 factory Result.parse(String name) {
92 switch (name) { 118 switch (name) {
93 case "success": return Result.success; 119 case "success": return Result.success;
120 case "skipped": return Result.skipped;
94 case "failure": return Result.failure; 121 case "failure": return Result.failure;
95 case "error": return Result.error; 122 case "error": return Result.error;
96 default: 123 default:
97 throw new ArgumentError('Invalid result name "$name".'); 124 throw new ArgumentError('Invalid result name "$name".');
98 } 125 }
99 } 126 }
100 127
101 const Result._(this.name); 128 const Result._(this.name);
102 129
103 String toString() => name; 130 String toString() => name;
104 } 131 }
OLDNEW
« no previous file with comments | « lib/src/backend/invoker.dart ('k') | lib/src/frontend/expect_async.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698