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 import 'dart:async'; | 5 import 'dart:async'; |
6 | 6 |
7 import 'package:stack_trace/stack_trace.dart'; | 7 import 'package:stack_trace/stack_trace.dart'; |
8 | 8 |
9 import '../backend/group.dart'; | 9 import '../backend/group.dart'; |
10 import '../frontend/expect.dart'; | 10 import '../frontend/expect.dart'; |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 new TimeoutException( | 227 new TimeoutException( |
228 "Test timed out after ${niceDuration(timeout)}.", timeout)); | 228 "Test timed out after ${niceDuration(timeout)}.", timeout)); |
229 }); | 229 }); |
230 }); | 230 }); |
231 } | 231 } |
232 | 232 |
233 /// Notifies the invoker of an asynchronous error. | 233 /// Notifies the invoker of an asynchronous error. |
234 void _handleError(error, [StackTrace stackTrace]) { | 234 void _handleError(error, [StackTrace stackTrace]) { |
235 if (stackTrace == null) stackTrace = new Chain.current(); | 235 if (stackTrace == null) stackTrace = new Chain.current(); |
236 | 236 |
237 var afterSuccess = liveTest.isComplete && | 237 // Store this here because it'll change when we set the state below. |
238 liveTest.state.result == Result.success; | 238 var shouldBeDone = liveTest.state.shouldBeDone; |
239 | 239 |
240 if (error is! TestFailure) { | 240 if (error is! TestFailure) { |
241 _controller.setState(const State(Status.complete, Result.error)); | 241 _controller.setState(const State(Status.complete, Result.error)); |
242 } else if (liveTest.state.result != Result.error) { | 242 } else if (liveTest.state.result != Result.error) { |
243 _controller.setState(const State(Status.complete, Result.failure)); | 243 _controller.setState(const State(Status.complete, Result.failure)); |
244 } | 244 } |
245 | 245 |
246 _controller.addError(error, stackTrace); | 246 _controller.addError(error, stackTrace); |
247 removeAllOutstandingCallbacks(); | 247 removeAllOutstandingCallbacks(); |
248 | 248 |
249 // If a test was marked as success but then had an error, that indicates | 249 // If a test was supposed to be done but then had an error, that indicates |
250 // that it was poorly-written and could be flaky. | 250 // that it was poorly-written and could be flaky. |
251 if (!afterSuccess) return; | 251 if (!shouldBeDone) return; |
252 | 252 |
253 // However, users don't think of load tests as "tests", so the error isn't | 253 // However, users don't think of load tests as "tests", so the error isn't |
254 // helpful for them. | 254 // helpful for them. |
255 // | 255 // |
256 // TODO(nweiz): Find a way of avoiding this error that doesn't require | 256 // TODO(nweiz): Find a way of avoiding this error that doesn't require |
257 // Invoker to refer to a class from the runner. | 257 // Invoker to refer to a class from the runner. |
258 if (liveTest.suite is LoadSuite) return; | 258 if (liveTest.suite is LoadSuite) return; |
259 | 259 |
260 _handleError( | 260 _handleError( |
261 "This test failed after it had already completed. Make sure to use " | 261 "This test failed after it had already completed. Make sure to use " |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 // outstanding callback counters at once. | 300 // outstanding callback counters at once. |
301 _counterKey: outstandingCallbacksForBody, | 301 _counterKey: outstandingCallbacksForBody, |
302 _closableKey: true | 302 _closableKey: true |
303 }, | 303 }, |
304 zoneSpecification: new ZoneSpecification( | 304 zoneSpecification: new ZoneSpecification( |
305 print: (self, parent, zone, line) => _controller.print(line)), | 305 print: (self, parent, zone, line) => _controller.print(line)), |
306 onError: _handleError); | 306 onError: _handleError); |
307 }); | 307 }); |
308 } | 308 } |
309 } | 309 } |
OLD | NEW |