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

Side by Side Diff: test/runner/tag_test.dart

Issue 1490973003: Clean up the warning for unknown tags. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Created 5 years 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
« lib/src/runner.dart ('K') | « lib/src/runner/load_suite.dart ('k') | no next file » | 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 @TestOn("vm") 5 @TestOn("vm")
6 6
7 import 'package:scheduled_test/descriptor.dart' as d; 7 import 'package:scheduled_test/descriptor.dart' as d;
8 import 'package:scheduled_test/scheduled_process.dart'; 8 import 'package:scheduled_test/scheduled_process.dart';
kevmoo 2015/12/02 04:57:01 unused import
nweiz 2015/12/02 22:21:16 Done.
9 import 'package:scheduled_test/scheduled_stream.dart'; 9 import 'package:scheduled_test/scheduled_stream.dart';
10 import 'package:scheduled_test/scheduled_test.dart'; 10 import 'package:scheduled_test/scheduled_test.dart';
11 11
12 import '../io.dart'; 12 import '../io.dart';
13 13
14 void main() { 14 void main() {
15 useSandbox(); 15 useSandbox();
16 16
17 setUp(() { 17 setUp(() {
18 d.file("test.dart", """ 18 d.file("test.dart", """
kevmoo 2015/12/02 05:03:56 Make sure this is cleaned up, too. I noticed it si
nweiz 2015/12/02 22:21:16 Everything in the sandbox should be cleaned up by
19 import 'package:test/test.dart'; 19 import 'package:test/test.dart';
20 20
21 void main() { 21 void main() {
22 test("no tags", () {}); 22 test("no tags", () {});
23 test("a", () {}, tags: "a"); 23 test("a", () {}, tags: "a");
24 test("b", () {}, tags: "b"); 24 test("b", () {}, tags: "b");
25 test("bc", () {}, tags: ["b", "c"]); 25 test("bc", () {}, tags: ["b", "c"]);
26 } 26 }
27 """).create(); 27 """).create();
28 }); 28 });
29 29
30 group("--tags", () { 30 group("--tags", () {
31 test("runs all tests when no tags are specified", () { 31 test("runs all tests when no tags are specified", () {
32 var test = runTest(["test.dart"]); 32 var test = runTest(["test.dart"]);
33 test.stdout.expect(tagWarnings(['a', 'b', 'c']));
33 test.stdout.expect(consumeThrough(contains(": no tags"))); 34 test.stdout.expect(consumeThrough(contains(": no tags")));
34 test.stdout.expect(consumeThrough(contains(": a"))); 35 test.stdout.expect(consumeThrough(contains(": a")));
35 test.stdout.expect(consumeThrough(contains(": b"))); 36 test.stdout.expect(consumeThrough(contains(": b")));
36 test.stdout.expect(consumeThrough(contains(": bc"))); 37 test.stdout.expect(consumeThrough(contains(": bc")));
37 test.stdout.expect(consumeThrough(contains("+4: All tests passed!"))); 38 test.stdout.expect(consumeThrough(contains("+4: All tests passed!")));
38 expectTagWarnings(test, [
39 ['a', 'a'],
40 ['b', 'b'],
41 ['b and c', 'bc']
42 ]);
43 test.shouldExit(0); 39 test.shouldExit(0);
44 }); 40 });
45 41
46 test("runs a test with only a specified tag", () { 42 test("runs a test with only a specified tag", () {
47 var test = runTest(["--tags=a", "test.dart"]); 43 var test = runTest(["--tags=a", "test.dart"]);
44 test.stdout.expect(tagWarnings(['b', 'c']));
48 test.stdout.expect(consumeThrough(contains(": a"))); 45 test.stdout.expect(consumeThrough(contains(": a")));
49 test.stdout.expect(consumeThrough(contains("+1: All tests passed!"))); 46 test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
50 expectTagWarnings(test, [
51 ['b', 'b'],
52 ['b and c', 'bc']
53 ]);
54 test.shouldExit(0); 47 test.shouldExit(0);
55 }); 48 });
56 49
57 test("runs a test with a specified tag among others", () { 50 test("runs a test with a specified tag among others", () {
58 var test = runTest(["--tags=c", "test.dart"]); 51 var test = runTest(["--tags=c", "test.dart"]);
52 test.stdout.expect(tagWarnings(['a', 'b']));
59 test.stdout.expect(consumeThrough(contains(": bc"))); 53 test.stdout.expect(consumeThrough(contains(": bc")));
60 test.stdout.expect(consumeThrough(contains("+1: All tests passed!"))); 54 test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
61 expectTagWarnings(test, [
62 ['a', 'a'],
63 ['b', 'b'],
64 ['b', 'bc']
65 ]);
66 test.shouldExit(0); 55 test.shouldExit(0);
67 }); 56 });
68 57
69 test("with multiple tags, runs only tests matching all of them", () { 58 test("with multiple tags, runs only tests matching all of them", () {
70 var test = runTest(["--tags=b,c", "test.dart"]); 59 var test = runTest(["--tags=b,c", "test.dart"]);
60 test.stdout.expect(tagWarnings(['a']));
71 test.stdout.expect(consumeThrough(contains(": bc"))); 61 test.stdout.expect(consumeThrough(contains(": bc")));
72 test.stdout.expect(consumeThrough(contains("+1: All tests passed!"))); 62 test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
73 expectTagWarnings(test, [
74 ['a', 'a']
75 ]);
76 test.shouldExit(0); 63 test.shouldExit(0);
77 }); 64 });
78 65
79 test("prints no warnings when all tags are specified", () { 66 test("prints no warnings when all tags are specified", () {
80 var test = runTest(["--tags=a,b,c", "test.dart"]); 67 var test = runTest(["--tags=a,b,c", "test.dart"]);
81 test.stdout.expect(consumeThrough(contains("No tests ran."))); 68 test.stdout.expect(consumeThrough(contains("No tests ran.")));
82 expectTagWarnings(test, []);
83 test.shouldExit(0); 69 test.shouldExit(0);
84 }); 70 });
85 }); 71 });
86 72
87 group("--exclude-tags", () { 73 group("--exclude-tags", () {
88 test("dosn't run a test with only an excluded tag", () { 74 test("dosn't run a test with only an excluded tag", () {
89 var test = runTest(["--exclude-tags=a", "test.dart"]); 75 var test = runTest(["--exclude-tags=a", "test.dart"]);
76 test.stdout.expect(tagWarnings(['b', 'c']));
90 test.stdout.expect(consumeThrough(contains(": no tags"))); 77 test.stdout.expect(consumeThrough(contains(": no tags")));
91 test.stdout.expect(consumeThrough(contains(": b"))); 78 test.stdout.expect(consumeThrough(contains(": b")));
92 test.stdout.expect(consumeThrough(contains(": bc"))); 79 test.stdout.expect(consumeThrough(contains(": bc")));
93 test.stdout.expect(consumeThrough(contains("+3: All tests passed!"))); 80 test.stdout.expect(consumeThrough(contains("+3: All tests passed!")));
94 expectTagWarnings(test, [
95 ['b', 'b'],
96 ['b and c', 'bc'],
97 ]);
98 test.shouldExit(0); 81 test.shouldExit(0);
99 }); 82 });
100 83
101 test("doesn't run a test with an exluded tag among others", () { 84 test("doesn't run a test with an exluded tag among others", () {
102 var test = runTest(["--exclude-tags=c", "test.dart"]); 85 var test = runTest(["--exclude-tags=c", "test.dart"]);
86 test.stdout.expect(tagWarnings(['a', 'b']));
103 test.stdout.expect(consumeThrough(contains(": no tags"))); 87 test.stdout.expect(consumeThrough(contains(": no tags")));
104 test.stdout.expect(consumeThrough(contains(": a"))); 88 test.stdout.expect(consumeThrough(contains(": a")));
105 test.stdout.expect(consumeThrough(contains(": b"))); 89 test.stdout.expect(consumeThrough(contains(": b")));
106 test.stdout.expect(consumeThrough(contains("+3: All tests passed!"))); 90 test.stdout.expect(consumeThrough(contains("+3: All tests passed!")));
107 expectTagWarnings(test, [
108 ['a', 'a'],
109 ['b', 'b'],
110 ['b', 'bc'],
111 ]);
112 test.shouldExit(0); 91 test.shouldExit(0);
113 }); 92 });
114 93
115 test("allows unused tags", () { 94 test("allows unused tags", () {
116 var test = runTest(["--exclude-tags=b,z", "test.dart"]); 95 var test = runTest(["--exclude-tags=b,z", "test.dart"]);
96 test.stdout.expect(tagWarnings(['a', 'c']));
117 test.stdout.expect(consumeThrough(contains(": no tags"))); 97 test.stdout.expect(consumeThrough(contains(": no tags")));
118 test.stdout.expect(consumeThrough(contains(": a"))); 98 test.stdout.expect(consumeThrough(contains(": a")));
119 test.stdout.expect(consumeThrough(contains("+2: All tests passed!"))); 99 test.stdout.expect(consumeThrough(contains("+2: All tests passed!")));
120 expectTagWarnings(test, [
121 ['a', 'a'],
122 ['c', 'bc'],
123 ]);
124 test.shouldExit(0); 100 test.shouldExit(0);
125 }); 101 });
126 102
127 test("prints no warnings when all tags are specified", () { 103 test("prints no warnings when all tags are specified", () {
128 var test = runTest(["--exclude-tags=a,b,c", "test.dart"]); 104 var test = runTest(["--exclude-tags=a,b,c", "test.dart"]);
129 test.stdout.expect(consumeThrough(contains(": no tags"))); 105 test.stdout.expect(consumeThrough(contains(": no tags")));
130 test.stdout.expect(consumeThrough(contains("+1: All tests passed!"))); 106 test.stdout.expect(consumeThrough(contains("+1: All tests passed!")));
131 expectTagWarnings(test, []);
132 test.shouldExit(0); 107 test.shouldExit(0);
133 }); 108 });
134 }); 109 });
135 110
136 group("with a tagged group", () { 111 group("with a tagged group", () {
137 setUp(() { 112 setUp(() {
138 d.file("test.dart", """ 113 d.file("test.dart", """
139 import 'package:test/test.dart'; 114 import 'package:test/test.dart';
140 115
141 void main() { 116 void main() {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 161
187 void main() { 162 void main() {
188 test("foo", () {}); 163 test("foo", () {});
189 } 164 }
190 """).create(); 165 """).create();
191 166
192 var test = runTest(["-x", "a", "test.dart"]); 167 var test = runTest(["-x", "a", "test.dart"]);
193 test.stdout.expect(consumeThrough(contains("No tests ran"))); 168 test.stdout.expect(consumeThrough(contains("No tests ran")));
194 test.shouldExit(0); 169 test.shouldExit(0);
195 }); 170 });
171
172 group("warning formatting", () {
173 test("for multiple tags", () {
174 d.file("test.dart", """
175 import 'package:test/test.dart';
176
177 void main() {
178 test("foo", () {}, tags: ["a", "b"]);
179 }
180 """).create();
181
182 var test = runTest(["test.dart"]);
183 test.stdout.expect(consumeThrough(lines(
184 'Warning: Tags were used that weren\'t specified on the command '
185 'line.\n'
186 ' a was used in the test "foo"\n'
187 ' b was used in the test "foo"')));
188 test.shouldExit(0);
189 });
190
191 test("for multiple tests", () {
192 d.file("test.dart", """
193 import 'package:test/test.dart';
194
195 void main() {
196 test("foo", () {}, tags: "a");
197 test("bar", () {}, tags: "a");
198 }
199 """).create();
200
201 var test = runTest(["test.dart"]);
202 test.stdout.expect(consumeThrough(lines(
203 'Warning: A tag was used that wasn\'t specified on the command '
204 'line.\n'
205 ' a was used in:\n'
206 ' the test "foo"\n'
207 ' the test "bar"')));
208 test.shouldExit(0);
209 });
210
211 test("for groups", () {
212 d.file("test.dart", """
213 import 'package:test/test.dart';
214
215 void main() {
216 group("group", () {
217 test("foo", () {});
218 test("bar", () {});
219 }, tags: "a");
220 }
221 """).create();
222
223 var test = runTest(["test.dart"]);
224 test.stdout.expect(consumeThrough(lines(
225 'Warning: A tag was used that wasn\'t specified on the command '
226 'line.\n'
227 ' a was used in the group "group"')));
228 test.shouldExit(0);
229 });
230
231 test("for suites", () {
232 d.file("test.dart", """
233 @Tags(const ["a"])
234 import 'package:test/test.dart';
235
236 void main() {
237 test("foo", () {});
238 test("bar", () {});
239 }
240 """).create();
241
242 var test = runTest(["test.dart"]);
243 test.stdout.expect(consumeThrough(lines(
244 'Warning: A tag was used that wasn\'t specified on the command '
245 'line.\n'
246 ' a was used in the suite itself')));
247 test.shouldExit(0);
248 });
249
250 test("doesn't double-print a tag warning", () {
251 d.file("test.dart", """
252 import 'package:test/test.dart';
253
254 void main() {
255 test("foo", () {}, tags: "a");
256 }
257 """).create();
258
259 var test = runTest(["-p", "vm,content-shell", "test.dart"]);
260 test.stdout.expect(consumeThrough(lines(
261 'Warning: A tag was used that wasn\'t specified on the command '
262 'line.\n'
263 ' a was used in the test "foo"')));
264 test.stdout.expect(never(startsWith("Warning:")));
265 test.shouldExit(0);
266 });
267 });
196 } 268 }
197 269
198 /// Asserts that [test] emits [warnings] in order. 270 /// Returns a [StreamMatcher] that asserts that a test emits warnings for [tags]
199 /// 271 /// in order.
200 /// Each element of [warnings] should be a pair whose first element is the 272 StreamMatcher tagWarnings(List<String> tags) => inOrder(() sync* {
201 /// unrecognized tags and whose second is the name of the test in which they 273 yield consumeThrough(
202 /// were detected. 274 "Warning: ${tags.length == 1 ? 'A tag was' : 'Tags were'} used that "
203 expectTagWarnings(ScheduledProcess test, List<List<String>> warnings) { 275 "${tags.length == 1 ? "wasn't" : "weren't"} specified on the command "
204 for (var warning in warnings) { 276 "line.");
205 test.stderr.expect(consumeThrough(allOf([ 277
206 startsWith("Warning: Unknown tag"), 278 for (var tag in tags) {
207 endsWith('${warning.first} in test "${warning.last}".') 279 yield consumeWhile(isNot(contains(" was used in")));
208 ]))); 280 yield consumeThrough(startsWith(" $tag was used in"));
209 } 281 }
210 test.stderr.expect(never(startsWith("Warning:"))); 282
211 } 283 // Consume until the end of the warning block, and assert that it has no
284 // further tags than the ones we specified.
285 yield consumeWhile(isNot(anyOf([contains(" was used in"), isEmpty])));
286 yield isEmpty;
287 }());
288
289 /// Returns a [StreamMatcher] that matches the lines of [string] in order.
290 StreamMatcher lines(String string) => inOrder(string.split("\n"));
OLDNEW
« lib/src/runner.dart ('K') | « lib/src/runner/load_suite.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698