OLD | NEW |
---|---|
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 'dart:convert'; | 7 import 'dart:convert'; |
8 | 8 |
9 import 'package:path/path.dart' as p; | |
9 import 'package:scheduled_test/descriptor.dart' as d; | 10 import 'package:scheduled_test/descriptor.dart' as d; |
10 import 'package:scheduled_test/scheduled_stream.dart'; | 11 import 'package:scheduled_test/scheduled_stream.dart'; |
11 import 'package:scheduled_test/scheduled_test.dart'; | 12 import 'package:scheduled_test/scheduled_test.dart'; |
12 | 13 |
13 import 'package:test/src/runner/version.dart'; | 14 import 'package:test/src/runner/version.dart'; |
14 | 15 |
15 import '../io.dart'; | 16 import '../io.dart'; |
16 | 17 |
17 /// The first event emitted by the JSON reporter. | 18 /// The first event emitted by the JSON reporter. |
18 final _start = { | 19 final _start = { |
(...skipping 10 matching lines...) Expand all Loading... | |
29 test('success 1', () {}); | 30 test('success 1', () {}); |
30 test('success 2', () {}); | 31 test('success 2', () {}); |
31 test('success 3', () {}); | 32 test('success 3', () {}); |
32 """, [ | 33 """, [ |
33 _start, | 34 _start, |
34 _allSuites(), | 35 _allSuites(), |
35 _suite(0), | 36 _suite(0), |
36 _testStart(1, "loading test.dart", groupIDs: []), | 37 _testStart(1, "loading test.dart", groupIDs: []), |
37 _testDone(1, hidden: true), | 38 _testDone(1, hidden: true), |
38 _group(2, testCount: 3), | 39 _group(2, testCount: 3), |
39 _testStart(3, "success 1"), | 40 _testStart(3, "success 1", line: 6, column: 7), |
40 _testDone(3), | 41 _testDone(3), |
41 _testStart(4, "success 2"), | 42 _testStart(4, "success 2", line: 7, column: 7), |
42 _testDone(4), | 43 _testDone(4), |
43 _testStart(5, "success 3"), | 44 _testStart(5, "success 3", line: 8, column: 7), |
44 _testDone(5), | 45 _testDone(5), |
45 _done() | 46 _done() |
46 ]); | 47 ]); |
47 }); | 48 }); |
48 | 49 |
49 test("runs several failing tests and reports when each fails", () { | 50 test("runs several failing tests and reports when each fails", () { |
50 _expectReport(""" | 51 _expectReport(""" |
51 test('failure 1', () => throw new TestFailure('oh no')); | 52 test('failure 1', () => throw new TestFailure('oh no')); |
52 test('failure 2', () => throw new TestFailure('oh no')); | 53 test('failure 2', () => throw new TestFailure('oh no')); |
53 test('failure 3', () => throw new TestFailure('oh no')); | 54 test('failure 3', () => throw new TestFailure('oh no')); |
54 """, [ | 55 """, [ |
55 _start, | 56 _start, |
56 _allSuites(), | 57 _allSuites(), |
57 _suite(0), | 58 _suite(0), |
58 _testStart(1, "loading test.dart", groupIDs: []), | 59 _testStart(1, "loading test.dart", groupIDs: []), |
59 _testDone(1, hidden: true), | 60 _testDone(1, hidden: true), |
60 _group(2, testCount: 3), | 61 _group(2, testCount: 3), |
61 _testStart(3, "failure 1"), | 62 _testStart(3, "failure 1", line: 6, column: 7), |
62 _error(3, "oh no", isFailure: true), | 63 _error(3, "oh no", isFailure: true), |
63 _testDone(3, result: "failure"), | 64 _testDone(3, result: "failure"), |
64 _testStart(4, "failure 2"), | 65 _testStart(4, "failure 2", line: 7, column: 7), |
65 _error(4, "oh no", isFailure: true), | 66 _error(4, "oh no", isFailure: true), |
66 _testDone(4, result: "failure"), | 67 _testDone(4, result: "failure"), |
67 _testStart(5, "failure 3"), | 68 _testStart(5, "failure 3", line: 8, column: 7), |
68 _error(5, "oh no", isFailure: true), | 69 _error(5, "oh no", isFailure: true), |
69 _testDone(5, result: "failure"), | 70 _testDone(5, result: "failure"), |
70 _done(success: false) | 71 _done(success: false) |
71 ]); | 72 ]); |
72 }); | 73 }); |
73 | 74 |
74 test("includes the full stack trace with --verbose-trace", () { | 75 test("includes the full stack trace with --verbose-trace", () { |
75 d.file("test.dart", """ | 76 d.file("test.dart", """ |
76 import 'dart:async'; | 77 import 'dart:async'; |
77 | 78 |
(...skipping 15 matching lines...) Expand all Loading... | |
93 test('success 1', () {}); | 94 test('success 1', () {}); |
94 test('failure 2', () => throw new TestFailure('oh no')); | 95 test('failure 2', () => throw new TestFailure('oh no')); |
95 test('success 2', () {}); | 96 test('success 2', () {}); |
96 """, [ | 97 """, [ |
97 _start, | 98 _start, |
98 _allSuites(), | 99 _allSuites(), |
99 _suite(0), | 100 _suite(0), |
100 _testStart(1, "loading test.dart", groupIDs: []), | 101 _testStart(1, "loading test.dart", groupIDs: []), |
101 _testDone(1, hidden: true), | 102 _testDone(1, hidden: true), |
102 _group(2, testCount: 4), | 103 _group(2, testCount: 4), |
103 _testStart(3, "failure 1"), | 104 _testStart(3, "failure 1", line: 6, column: 7), |
104 _error(3, "oh no", isFailure: true), | 105 _error(3, "oh no", isFailure: true), |
105 _testDone(3, result: "failure"), | 106 _testDone(3, result: "failure"), |
106 _testStart(4, "success 1"), | 107 _testStart(4, "success 1", line: 7, column: 7), |
107 _testDone(4), | 108 _testDone(4), |
108 _testStart(5, "failure 2"), | 109 _testStart(5, "failure 2", line: 8, column: 7), |
109 _error(5, "oh no", isFailure: true), | 110 _error(5, "oh no", isFailure: true), |
110 _testDone(5, result: "failure"), | 111 _testDone(5, result: "failure"), |
111 _testStart(6, "success 2"), | 112 _testStart(6, "success 2", line: 9, column: 7), |
112 _testDone(6), | 113 _testDone(6), |
113 _done(success: false) | 114 _done(success: false) |
114 ]); | 115 ]); |
115 }); | 116 }); |
116 | 117 |
117 test("gracefully handles multiple test failures in a row", () { | 118 test("gracefully handles multiple test failures in a row", () { |
118 _expectReport(""" | 119 _expectReport(""" |
119 // This completer ensures that the test isolate isn't killed until all | 120 // This completer ensures that the test isolate isn't killed until all |
120 // errors have been thrown. | 121 // errors have been thrown. |
121 var completer = new Completer(); | 122 var completer = new Completer(); |
122 test('failures', () { | 123 test('failures', () { |
123 new Future.microtask(() => throw 'first error'); | 124 new Future.microtask(() => throw 'first error'); |
124 new Future.microtask(() => throw 'second error'); | 125 new Future.microtask(() => throw 'second error'); |
125 new Future.microtask(() => throw 'third error'); | 126 new Future.microtask(() => throw 'third error'); |
126 new Future.microtask(completer.complete); | 127 new Future.microtask(completer.complete); |
127 }); | 128 }); |
128 test('wait', () => completer.future); | 129 test('wait', () => completer.future); |
129 """, [ | 130 """, [ |
130 _start, | 131 _start, |
131 _allSuites(), | 132 _allSuites(), |
132 _suite(0), | 133 _suite(0), |
133 _testStart(1, "loading test.dart", groupIDs: []), | 134 _testStart(1, "loading test.dart", groupIDs: []), |
134 _testDone(1, hidden: true), | 135 _testDone(1, hidden: true), |
135 _group(2, testCount: 2), | 136 _group(2, testCount: 2), |
136 _testStart(3, "failures"), | 137 _testStart(3, "failures", line: 9, column: 7), |
137 _error(3, "first error"), | 138 _error(3, "first error"), |
138 _error(3, "second error"), | 139 _error(3, "second error"), |
139 _error(3, "third error"), | 140 _error(3, "third error"), |
140 _testDone(3, result: "error"), | 141 _testDone(3, result: "error"), |
141 _testStart(4, "wait"), | 142 _testStart(4, "wait", line: 15, column: 7), |
142 _testDone(4), | 143 _testDone(4), |
143 _done(success: false) | 144 _done(success: false) |
144 ]); | 145 ]); |
145 }); | 146 }); |
146 | 147 |
147 test("gracefully handles a test failing after completion", () { | 148 test("gracefully handles a test failing after completion", () { |
148 _expectReport(""" | 149 _expectReport(""" |
149 // These completers ensure that the first test won't fail until the second | 150 // These completers ensure that the first test won't fail until the second |
150 // one is running, and that the test isolate isn't killed until all errors | 151 // one is running, and that the test isolate isn't killed until all errors |
151 // have been thrown. | 152 // have been thrown. |
152 var waitStarted = new Completer(); | 153 var waitStarted = new Completer(); |
153 var testDone = new Completer(); | 154 var testDone = new Completer(); |
154 test('failure', () { | 155 test('failure', () { |
155 waitStarted.future.then((_) { | 156 waitStarted.future.then((_) { |
156 new Future.microtask(testDone.complete); | 157 new Future.microtask(testDone.complete); |
157 throw 'oh no'; | 158 throw 'oh no'; |
158 }); | 159 }); |
159 }); | 160 }); |
160 test('wait', () { | 161 test('wait', () { |
161 waitStarted.complete(); | 162 waitStarted.complete(); |
162 return testDone.future; | 163 return testDone.future; |
163 }); | 164 }); |
164 """, [ | 165 """, [ |
165 _start, | 166 _start, |
166 _allSuites(), | 167 _allSuites(), |
167 _suite(0), | 168 _suite(0), |
168 _testStart(1, "loading test.dart", groupIDs: []), | 169 _testStart(1, "loading test.dart", groupIDs: []), |
169 _testDone(1, hidden: true), | 170 _testDone(1, hidden: true), |
170 _group(2, testCount: 2), | 171 _group(2, testCount: 2), |
171 _testStart(3, "failure"), | 172 _testStart(3, "failure", line: 11, column: 7), |
172 _testDone(3), | 173 _testDone(3), |
173 _testStart(4, "wait"), | 174 _testStart(4, "wait", line: 17, column: 7), |
174 _error(3, "oh no"), | 175 _error(3, "oh no"), |
175 _error(3, | 176 _error(3, |
176 "This test failed after it had already completed. Make sure to " | 177 "This test failed after it had already completed. Make sure to " |
177 "use [expectAsync]\n" | 178 "use [expectAsync]\n" |
178 "or the [completes] matcher when testing async code."), | 179 "or the [completes] matcher when testing async code."), |
179 _testDone(4), | 180 _testDone(4), |
180 _done(success: false) | 181 _done(success: false) |
181 ]); | 182 ]); |
182 }); | 183 }); |
183 | 184 |
184 test("reports each test in its proper groups", () { | 185 test("reports each test in its proper groups", () { |
185 _expectReport(""" | 186 _expectReport(""" |
186 group('group 1', () { | 187 group('group 1', () { |
187 group('.2', () { | 188 group('.2', () { |
188 group('.3', () { | 189 group('.3', () { |
189 test('success', () {}); | 190 test('success', () {}); |
190 }); | 191 }); |
191 }); | 192 }); |
192 | 193 |
193 test('success', () {}); | 194 test('success', () {}); |
194 test('success', () {}); | 195 test('success', () {}); |
195 }); | 196 }); |
196 """, [ | 197 """, [ |
197 _start, | 198 _start, |
198 _allSuites(), | 199 _allSuites(), |
199 _suite(0), | 200 _suite(0), |
200 _testStart(1, "loading test.dart", groupIDs: []), | 201 _testStart(1, "loading test.dart", groupIDs: []), |
201 _testDone(1, hidden: true), | 202 _testDone(1, hidden: true), |
202 _group(2, testCount: 3), | 203 _group(2, testCount: 3), |
203 _group(3, name: "group 1", parentID: 2, testCount: 3), | 204 _group(3, |
204 _group(4, name: "group 1 .2", parentID: 3), | 205 name: "group 1", parentID: 2, testCount: 3, line: 6, column: 7), |
205 _group(5, name: "group 1 .2 .3", parentID: 4), | 206 _group(4, name: "group 1 .2", parentID: 3, line: 7, column: 9), |
206 _testStart(6, 'group 1 .2 .3 success', groupIDs: [2, 3, 4, 5]), | 207 _group(5, name: "group 1 .2 .3", parentID: 4, line: 8, column: 11), |
208 _testStart(6, 'group 1 .2 .3 success', | |
209 groupIDs: [2, 3, 4, 5], line: 9, column: 13), | |
207 _testDone(6), | 210 _testDone(6), |
208 _testStart(7, 'group 1 success', groupIDs: [2, 3]), | 211 _testStart(7, 'group 1 success', groupIDs: [2, 3], line: 13, column: 9), |
209 _testDone(7), | 212 _testDone(7), |
210 _testStart(8, 'group 1 success', groupIDs: [2, 3]), | 213 _testStart(8, 'group 1 success', groupIDs: [2, 3], line: 14, column: 9), |
211 _testDone(8), | 214 _testDone(8), |
212 _done() | 215 _done() |
213 ]); | 216 ]); |
214 }); | 217 }); |
215 | 218 |
216 group("print:", () { | 219 group("print:", () { |
217 test("handles multiple prints", () { | 220 test("handles multiple prints", () { |
218 _expectReport(""" | 221 _expectReport(""" |
219 test('test', () { | 222 test('test', () { |
220 print("one"); | 223 print("one"); |
221 print("two"); | 224 print("two"); |
222 print("three"); | 225 print("three"); |
223 print("four"); | 226 print("four"); |
224 }); | 227 }); |
225 """, [ | 228 """, [ |
226 _start, | 229 _start, |
227 _allSuites(), | 230 _allSuites(), |
228 _suite(0), | 231 _suite(0), |
229 _testStart(1, "loading test.dart", groupIDs: []), | 232 _testStart(1, "loading test.dart", groupIDs: []), |
230 _testDone(1, hidden: true), | 233 _testDone(1, hidden: true), |
231 _group(2), | 234 _group(2), |
232 _testStart(3, 'test'), | 235 _testStart(3, 'test', line: 6, column: 9), |
233 _print(3, "one"), | 236 _print(3, "one"), |
234 _print(3, "two"), | 237 _print(3, "two"), |
235 _print(3, "three"), | 238 _print(3, "three"), |
236 _print(3, "four"), | 239 _print(3, "four"), |
237 _testDone(3), | 240 _testDone(3), |
238 _done() | 241 _done() |
239 ]); | 242 ]); |
240 }); | 243 }); |
241 | 244 |
242 test("handles a print after the test completes", () { | 245 test("handles a print after the test completes", () { |
(...skipping 16 matching lines...) Expand all Loading... | |
259 waitStarted.complete(); | 262 waitStarted.complete(); |
260 return testDone.future; | 263 return testDone.future; |
261 }); | 264 }); |
262 """, [ | 265 """, [ |
263 _start, | 266 _start, |
264 _allSuites(), | 267 _allSuites(), |
265 _suite(0), | 268 _suite(0), |
266 _testStart(1, "loading test.dart", groupIDs: []), | 269 _testStart(1, "loading test.dart", groupIDs: []), |
267 _testDone(1, hidden: true), | 270 _testDone(1, hidden: true), |
268 _group(2, testCount: 2), | 271 _group(2, testCount: 2), |
269 _testStart(3, 'test'), | 272 _testStart(3, 'test', line: 10, column: 9), |
270 _testDone(3), | 273 _testDone(3), |
271 _testStart(4, 'wait'), | 274 _testStart(4, 'wait', line: 20, column: 9), |
272 _print(3, "one"), | 275 _print(3, "one"), |
273 _print(3, "two"), | 276 _print(3, "two"), |
274 _print(3, "three"), | 277 _print(3, "three"), |
275 _print(3, "four"), | 278 _print(3, "four"), |
276 _testDone(4), | 279 _testDone(4), |
277 _done() | 280 _done() |
278 ]); | 281 ]); |
279 }); | 282 }); |
280 | 283 |
281 test("interleaves prints and errors", () { | 284 test("interleaves prints and errors", () { |
(...skipping 20 matching lines...) Expand all Loading... | |
302 }); | 305 }); |
303 | 306 |
304 test('wait', () => completer.future); | 307 test('wait', () => completer.future); |
305 """, [ | 308 """, [ |
306 _start, | 309 _start, |
307 _allSuites(), | 310 _allSuites(), |
308 _suite(0), | 311 _suite(0), |
309 _testStart(1, "loading test.dart", groupIDs: []), | 312 _testStart(1, "loading test.dart", groupIDs: []), |
310 _testDone(1, hidden: true), | 313 _testDone(1, hidden: true), |
311 _group(2, testCount: 2), | 314 _group(2, testCount: 2), |
312 _testStart(3, 'test'), | 315 _testStart(3, 'test', line: 9, column: 9), |
313 _print(3, "one"), | 316 _print(3, "one"), |
314 _print(3, "two"), | 317 _print(3, "two"), |
315 _error(3, "first error"), | 318 _error(3, "first error"), |
316 _print(3, "three"), | 319 _print(3, "three"), |
317 _print(3, "four"), | 320 _print(3, "four"), |
318 _error(3, "second error"), | 321 _error(3, "second error"), |
319 _print(3, "five"), | 322 _print(3, "five"), |
320 _print(3, "six"), | 323 _print(3, "six"), |
321 _testDone(3, result: "error"), | 324 _testDone(3, result: "error"), |
322 _testStart(4, 'wait'), | 325 _testStart(4, 'wait', line: 27, column: 9), |
323 _testDone(4), | 326 _testDone(4), |
324 _done(success: false) | 327 _done(success: false) |
325 ]); | 328 ]); |
326 }); | 329 }); |
327 }); | 330 }); |
328 | 331 |
329 group("skip:", () { | 332 group("skip:", () { |
330 test("reports skipped tests", () { | 333 test("reports skipped tests", () { |
331 _expectReport(""" | 334 _expectReport(""" |
332 test('skip 1', () {}, skip: true); | 335 test('skip 1', () {}, skip: true); |
333 test('skip 2', () {}, skip: true); | 336 test('skip 2', () {}, skip: true); |
334 test('skip 3', () {}, skip: true); | 337 test('skip 3', () {}, skip: true); |
335 """, [ | 338 """, [ |
336 _start, | 339 _start, |
337 _allSuites(), | 340 _allSuites(), |
338 _suite(0), | 341 _suite(0), |
339 _testStart(1, "loading test.dart", groupIDs: []), | 342 _testStart(1, "loading test.dart", groupIDs: []), |
340 _testDone(1, hidden: true), | 343 _testDone(1, hidden: true), |
341 _group(2, testCount: 3), | 344 _group(2, testCount: 3), |
342 _testStart(3, "skip 1", skip: true), | 345 _testStart(3, "skip 1", skip: true, line: 6, column: 9), |
343 _testDone(3), | 346 _testDone(3), |
344 _testStart(4, "skip 2", skip: true), | 347 _testStart(4, "skip 2", skip: true, line: 7, column: 9), |
345 _testDone(4), | 348 _testDone(4), |
346 _testStart(5, "skip 3", skip: true), | 349 _testStart(5, "skip 3", skip: true, line: 8, column: 9), |
347 _testDone(5), | 350 _testDone(5), |
348 _done() | 351 _done() |
349 ]); | 352 ]); |
350 }); | 353 }); |
351 | 354 |
352 test("reports skipped groups", () { | 355 test("reports skipped groups", () { |
353 _expectReport(""" | 356 _expectReport(""" |
354 group('skip', () { | 357 group('skip', () { |
355 test('success 1', () {}); | 358 test('success 1', () {}); |
356 test('success 2', () {}); | 359 test('success 2', () {}); |
357 test('success 3', () {}); | 360 test('success 3', () {}); |
358 }, skip: true); | 361 }, skip: true); |
359 """, [ | 362 """, [ |
360 _start, | 363 _start, |
361 _allSuites(), | 364 _allSuites(), |
362 _suite(0), | 365 _suite(0), |
363 _testStart(1, "loading test.dart", groupIDs: []), | 366 _testStart(1, "loading test.dart", groupIDs: []), |
364 _testDone(1, hidden: true), | 367 _testDone(1, hidden: true), |
365 _group(2, testCount: 0), | 368 _group(2, testCount: 0), |
366 _group(3, name: "skip", parentID: 2, skip: true, testCount: 0), | 369 _group(3, name: "skip", parentID: 2, skip: true, testCount: 0, |
367 _testStart(4, "skip", groupIDs: [2, 3], skip: true), | 370 line: 6, column: 9), |
371 _testStart(4, "skip", groupIDs: [2, 3], skip: true, | |
372 line: 6, column: 9), | |
368 _testDone(4), | 373 _testDone(4), |
369 _done() | 374 _done() |
370 ]); | 375 ]); |
371 }); | 376 }); |
372 | 377 |
373 test("reports the skip reason if available", () { | 378 test("reports the skip reason if available", () { |
374 _expectReport(""" | 379 _expectReport(""" |
375 test('skip 1', () {}, skip: 'some reason'); | 380 test('skip 1', () {}, skip: 'some reason'); |
376 test('skip 2', () {}, skip: 'or another'); | 381 test('skip 2', () {}, skip: 'or another'); |
377 """, [ | 382 """, [ |
378 _start, | 383 _start, |
379 _allSuites(), | 384 _allSuites(), |
380 _suite(0), | 385 _suite(0), |
381 _testStart(1, "loading test.dart", groupIDs: []), | 386 _testStart(1, "loading test.dart", groupIDs: []), |
382 _testDone(1, hidden: true), | 387 _testDone(1, hidden: true), |
383 _group(2, testCount: 2), | 388 _group(2, testCount: 2), |
384 _testStart(3, "skip 1", skip: "some reason"), | 389 _testStart(3, "skip 1", skip: "some reason", line: 6, column: 9), |
385 _testDone(3), | 390 _testDone(3), |
386 _testStart(4, "skip 2", skip: "or another"), | 391 _testStart(4, "skip 2", skip: "or another", line: 7, column: 9), |
387 _testDone(4), | 392 _testDone(4), |
388 _done() | 393 _done() |
389 ]); | 394 ]); |
390 }); | 395 }); |
391 }); | 396 }); |
397 | |
398 group("reports line and column numbers for", () { | |
399 test("the first call to setUpAll()", () { | |
400 _expectReport(""" | |
401 setUpAll(() {}); | |
402 setUpAll(() {}); | |
403 setUpAll(() {}); | |
404 test('success', () {}); | |
405 """, [ | |
406 _start, | |
407 _allSuites(), | |
408 _suite(0), | |
409 _testStart(1, "loading test.dart", groupIDs: []), | |
410 _testDone(1, hidden: true), | |
411 _group(2, testCount: 1), | |
412 _testStart(3, "(setUpAll)", line: 6, column: 9), | |
413 _testDone(3, hidden: true), | |
414 _testStart(4, "success", line: 9, column: 9), | |
415 _testDone(4), | |
416 _done() | |
417 ]); | |
418 }); | |
419 | |
420 test("the first call to tearDownAll()", () { | |
421 _expectReport(""" | |
422 tearDownAll(() {}); | |
423 tearDownAll(() {}); | |
424 tearDownAll(() {}); | |
425 test('success', () {}); | |
426 """, [ | |
427 _start, | |
428 _allSuites(), | |
429 _suite(0), | |
430 _testStart(1, "loading test.dart", groupIDs: []), | |
431 _testDone(1, hidden: true), | |
432 _group(2, testCount: 1), | |
433 _testStart(3, "success", line: 9, column: 9), | |
434 _testDone(3), | |
435 _testStart(4, "(tearDownAll)", line: 6, column: 9), | |
436 _testDone(4, hidden: true), | |
437 _done() | |
438 ]); | |
439 }); | |
440 | |
441 test("a test compiled to JS", () { | |
442 _expectReport(""" | |
443 test('success', () {}); | |
444 """, [ | |
445 _start, | |
446 _allSuites(), | |
447 _suite(0, platform: "chrome"), | |
448 _testStart(1, "compiling test.dart", groupIDs: []), | |
449 _testDone(1, hidden: true), | |
450 _group(2, testCount: 1), | |
451 _testStart(3, "success", line: 6, column: 9), | |
452 _testDone(3), | |
453 _done() | |
454 ], args: ["-p", "chrome"]); | |
455 }, tags: ["chrome"]); | |
456 }); | |
457 | |
458 | |
459 test("doesn't report line and column information for a test compiled to JS " | |
460 "with --js-trace", () { | |
461 _expectReport(""" | |
462 test('success', () {}); | |
463 """, [ | |
464 _start, | |
465 _allSuites(), | |
466 _suite(0, platform: "chrome"), | |
467 _testStart(1, "compiling test.dart", groupIDs: []), | |
468 _testDone(1, hidden: true), | |
469 _group(2, testCount: 1), | |
470 _testStart(3, "success"), | |
471 _testDone(3), | |
472 _done() | |
473 ], args: ["-p", "chrome", "--js-trace"]); | |
474 }, tags: ["chrome"]); | |
392 } | 475 } |
393 | 476 |
394 /// Asserts that the tests defined by [tests] produce the JSON events in | 477 /// Asserts that the tests defined by [tests] produce the JSON events in |
395 /// [expected]. | 478 /// [expected]. |
396 void _expectReport(String tests, List<Map> expected) { | 479 void _expectReport(String tests, List<Map> expected, {List<String> args}) { |
397 var dart = """ | 480 var dart = """ |
398 import 'dart:async'; | 481 import 'dart:async'; |
399 | 482 |
400 import 'package:test/test.dart'; | 483 import 'package:test/test.dart'; |
401 | 484 |
402 void main() { | 485 void main() { |
403 $tests | 486 $tests |
404 } | 487 } |
405 """; | 488 """; |
406 | 489 |
407 d.file("test.dart", dart).create(); | 490 d.file("test.dart", dart).create(); |
408 | 491 |
409 var test = runTest(["test.dart"], reporter: "json"); | 492 var test = runTest(["test.dart"]..addAll(args ?? []), reporter: "json"); |
410 test.shouldExit(); | 493 test.shouldExit(); |
411 | 494 |
412 schedule(() async { | 495 schedule(() async { |
413 var stdoutLines = await test.stdoutStream().toList(); | 496 var stdoutLines = await test.stdoutStream().toList(); |
414 | 497 |
415 expect(stdoutLines.length, equals(expected.length), | 498 expect(stdoutLines.length, equals(expected.length), |
416 reason: "Expected $stdoutLines to match ${JSON.encode(expected)}."); | 499 reason: "Expected $stdoutLines to match ${JSON.encode(expected)}."); |
417 | 500 |
418 // TODO(nweiz): validate each event against the JSON schema when | 501 // TODO(nweiz): validate each event against the JSON schema when |
419 // patefacio/json_schema#4 is merged. | 502 // patefacio/json_schema#4 is merged. |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
457 /// Returns the event emitted by the JSON reporter indicating that a group has | 540 /// Returns the event emitted by the JSON reporter indicating that a group has |
458 /// begun running. | 541 /// begun running. |
459 /// | 542 /// |
460 /// If [skip] is `true`, the group is expected to be marked as skipped without a | 543 /// If [skip] is `true`, the group is expected to be marked as skipped without a |
461 /// reason. If it's a [String], the group is expected to be marked as skipped | 544 /// reason. If it's a [String], the group is expected to be marked as skipped |
462 /// with that reason. | 545 /// with that reason. |
463 /// | 546 /// |
464 /// The [testCount] parameter indicates the number of tests in the group. It | 547 /// The [testCount] parameter indicates the number of tests in the group. It |
465 /// defaults to 1. | 548 /// defaults to 1. |
466 Map _group(int id, {String name, int suiteID, int parentID, skip, | 549 Map _group(int id, {String name, int suiteID, int parentID, skip, |
467 int testCount}) { | 550 int testCount, int line, int column}) { |
551 if ((line == null) != (column == null)) { | |
552 throw new ArgumentError( | |
553 "line and column must either both be null or both be passed"); | |
554 } | |
555 | |
468 return { | 556 return { |
469 "type": "group", | 557 "type": "group", |
470 "group": { | 558 "group": { |
471 "id": id, | 559 "id": id, |
472 "name": name, | 560 "name": name, |
473 "suiteID": suiteID ?? 0, | 561 "suiteID": suiteID ?? 0, |
474 "parentID": parentID, | 562 "parentID": parentID, |
475 "metadata": _metadata(skip: skip), | 563 "metadata": _metadata(skip: skip), |
476 "testCount": testCount ?? 1 | 564 "testCount": testCount ?? 1, |
565 "line": line, | |
566 "column": column, | |
567 "url": | |
568 line == null ? null : p.toUri(p.join(sandbox, "test.dart")).toString() | |
kevmoo
2016/06/15 19:50:38
Tests that validate the url (including below) fail
nweiz
2016/06/15 20:35:39
Uggggh, I hate Mac OS's crazy symlinks. Glad you c
| |
477 } | 569 } |
478 }; | 570 }; |
479 } | 571 } |
480 | 572 |
481 /// Returns the event emitted by the JSON reporter indicating that a test has | 573 /// Returns the event emitted by the JSON reporter indicating that a test has |
482 /// begun running. | 574 /// begun running. |
483 /// | 575 /// |
484 /// If [parentIDs] is passed, it's the IDs of groups containing this test. If | 576 /// If [parentIDs] is passed, it's the IDs of groups containing this test. If |
485 /// [skip] is `true`, the test is expected to be marked as skipped without a | 577 /// [skip] is `true`, the test is expected to be marked as skipped without a |
486 /// reason. If it's a [String], the test is expected to be marked as skipped | 578 /// reason. If it's a [String], the test is expected to be marked as skipped |
487 /// with that reason. | 579 /// with that reason. |
488 Map _testStart(int id, String name, {int suiteID, Iterable<int> groupIDs, | 580 Map _testStart(int id, String name, {int suiteID, Iterable<int> groupIDs, |
489 skip}) { | 581 int line, int column, skip}) { |
582 if ((line == null) != (column == null)) { | |
583 throw new ArgumentError( | |
584 "line and column must either both be null or both be passed"); | |
585 } | |
586 | |
490 return { | 587 return { |
491 "type": "testStart", | 588 "type": "testStart", |
492 "test": { | 589 "test": { |
493 "id": id, | 590 "id": id, |
494 "name": name, | 591 "name": name, |
495 "suiteID": suiteID ?? 0, | 592 "suiteID": suiteID ?? 0, |
496 "groupIDs": groupIDs ?? [2], | 593 "groupIDs": groupIDs ?? [2], |
497 "metadata": _metadata(skip: skip) | 594 "metadata": _metadata(skip: skip), |
595 "line": line, | |
596 "column": column, | |
597 "url": | |
598 line == null ? null : p.toUri(p.join(sandbox, "test.dart")).toString() | |
498 } | 599 } |
499 }; | 600 }; |
500 } | 601 } |
501 | 602 |
502 /// Returns the event emitted by the JSON reporter indicating that a test | 603 /// Returns the event emitted by the JSON reporter indicating that a test |
503 /// printed [message]. | 604 /// printed [message]. |
504 Map _print(int id, String message) { | 605 Map _print(int id, String message) { |
505 return { | 606 return { |
506 "type": "print", | 607 "type": "print", |
507 "testID": id, | 608 "testID": id, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
543 /// Returns the serialized metadata corresponding to [skip]. | 644 /// Returns the serialized metadata corresponding to [skip]. |
544 Map _metadata({skip}) { | 645 Map _metadata({skip}) { |
545 if (skip == true) { | 646 if (skip == true) { |
546 return {"skip": true, "skipReason": null}; | 647 return {"skip": true, "skipReason": null}; |
547 } else if (skip is String) { | 648 } else if (skip is String) { |
548 return {"skip": true, "skipReason": skip}; | 649 return {"skip": true, "skipReason": skip}; |
549 } else { | 650 } else { |
550 return {"skip": false, "skipReason": null}; | 651 return {"skip": false, "skipReason": null}; |
551 } | 652 } |
552 } | 653 } |
OLD | NEW |