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 library test.backend.invoker; | 5 library test.backend.invoker; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:stack_trace/stack_trace.dart'; | 9 import 'package:stack_trace/stack_trace.dart'; |
10 | 10 |
| 11 import '../backend/group.dart'; |
11 import '../frontend/expect.dart'; | 12 import '../frontend/expect.dart'; |
12 import '../utils.dart'; | 13 import '../utils.dart'; |
13 import 'closed_exception.dart'; | 14 import 'closed_exception.dart'; |
14 import 'live_test.dart'; | 15 import 'live_test.dart'; |
15 import 'live_test_controller.dart'; | 16 import 'live_test_controller.dart'; |
16 import 'metadata.dart'; | 17 import 'metadata.dart'; |
17 import 'operating_system.dart'; | 18 import 'operating_system.dart'; |
18 import 'outstanding_callback_counter.dart'; | 19 import 'outstanding_callback_counter.dart'; |
19 import 'state.dart'; | 20 import 'state.dart'; |
20 import 'suite.dart'; | 21 import 'suite.dart'; |
21 import 'test.dart'; | 22 import 'test.dart'; |
22 import 'test_platform.dart'; | 23 import 'test_platform.dart'; |
23 | 24 |
24 /// A test in this isolate. | 25 /// A test in this isolate. |
25 class LocalTest extends Test { | 26 class LocalTest extends Test { |
26 final String name; | 27 final String name; |
27 final Metadata metadata; | 28 final Metadata metadata; |
28 | 29 |
29 /// The test body. | 30 /// The test body. |
30 final AsyncFunction _body; | 31 final AsyncFunction _body; |
31 | 32 |
32 LocalTest(this.name, this.metadata, body()) | 33 LocalTest(this.name, this.metadata, body()) |
33 : _body = body; | 34 : _body = body; |
34 | 35 |
35 /// Loads a single runnable instance of this test. | 36 /// Loads a single runnable instance of this test. |
36 LiveTest load(Suite suite) { | 37 LiveTest load(Suite suite, {Iterable<Group> groups}) { |
37 var invoker = new Invoker._(suite, this); | 38 var invoker = new Invoker._(suite, this, groups: groups); |
38 return invoker.liveTest; | 39 return invoker.liveTest; |
39 } | 40 } |
40 | 41 |
41 Test forPlatform(TestPlatform platform, {OperatingSystem os}) { | 42 Test forPlatform(TestPlatform platform, {OperatingSystem os}) { |
42 if (!metadata.testOn.evaluate(platform, os: os)) return null; | 43 if (!metadata.testOn.evaluate(platform, os: os)) return null; |
43 return new LocalTest(name, metadata.forPlatform(platform, os: os), _body); | 44 return new LocalTest(name, metadata.forPlatform(platform, os: os), _body); |
44 } | 45 } |
45 } | 46 } |
46 | 47 |
47 /// The class responsible for managing the lifecycle of a single local test. | 48 /// The class responsible for managing the lifecycle of a single local test. |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 /// | 111 /// |
111 /// Tracking this ensures that [_timeoutTimer] isn't created in a | 112 /// Tracking this ensures that [_timeoutTimer] isn't created in a |
112 /// timer-mocking zone created by the test. | 113 /// timer-mocking zone created by the test. |
113 Zone _invokerZone; | 114 Zone _invokerZone; |
114 | 115 |
115 /// The timer for tracking timeouts. | 116 /// The timer for tracking timeouts. |
116 /// | 117 /// |
117 /// This will be `null` until the test starts running. | 118 /// This will be `null` until the test starts running. |
118 Timer _timeoutTimer; | 119 Timer _timeoutTimer; |
119 | 120 |
120 Invoker._(Suite suite, LocalTest test) { | 121 Invoker._(Suite suite, LocalTest test, {Iterable<Group> groups}) { |
121 _controller = new LiveTestController( | 122 _controller = new LiveTestController( |
122 suite, test, _onRun, _onCloseCompleter.complete); | 123 suite, test, _onRun, _onCloseCompleter.complete, groups: groups); |
123 } | 124 } |
124 | 125 |
125 /// Tells the invoker that there's a callback running that it should wait for | 126 /// Tells the invoker that there's a callback running that it should wait for |
126 /// before considering the test successful. | 127 /// before considering the test successful. |
127 /// | 128 /// |
128 /// Each call to [addOutstandingCallback] should be followed by a call to | 129 /// Each call to [addOutstandingCallback] should be followed by a call to |
129 /// [removeOutstandingCallback] once the callbak is no longer running. Note | 130 /// [removeOutstandingCallback] once the callbak is no longer running. Note |
130 /// that only successful tests wait for outstanding callbacks; as soon as a | 131 /// that only successful tests wait for outstanding callbacks; as soon as a |
131 /// test experiences an error, any further calls to [addOutstandingCallback] | 132 /// test experiences an error, any further calls to [addOutstandingCallback] |
132 /// or [removeOutstandingCallback] will do nothing. | 133 /// or [removeOutstandingCallback] will do nothing. |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 // outstanding callback counters at once. | 278 // outstanding callback counters at once. |
278 _counterKey: outstandingCallbacksForBody, | 279 _counterKey: outstandingCallbacksForBody, |
279 _closableKey: true | 280 _closableKey: true |
280 }, | 281 }, |
281 zoneSpecification: new ZoneSpecification( | 282 zoneSpecification: new ZoneSpecification( |
282 print: (self, parent, zone, line) => _controller.print(line)), | 283 print: (self, parent, zone, line) => _controller.print(line)), |
283 onError: _handleError); | 284 onError: _handleError); |
284 }); | 285 }); |
285 } | 286 } |
286 } | 287 } |
OLD | NEW |