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 import 'dart:collection'; | 6 import 'dart:collection'; |
7 | 7 |
8 import 'package:stack_trace/stack_trace.dart'; | 8 import 'package:stack_trace/stack_trace.dart'; |
9 | 9 |
10 import 'group.dart'; | 10 import 'group.dart'; |
11 import 'live_test.dart'; | 11 import 'live_test.dart'; |
| 12 import 'message.dart'; |
12 import 'state.dart'; | 13 import 'state.dart'; |
13 import 'suite.dart'; | 14 import 'suite.dart'; |
14 import 'test.dart'; | 15 import 'test.dart'; |
15 | 16 |
16 /// An implementation of [LiveTest] that's controlled by a [LiveTestController]. | 17 /// An implementation of [LiveTest] that's controlled by a [LiveTestController]. |
17 class _LiveTest extends LiveTest { | 18 class _LiveTest extends LiveTest { |
18 final LiveTestController _controller; | 19 final LiveTestController _controller; |
19 | 20 |
20 Suite get suite => _controller._suite; | 21 Suite get suite => _controller._suite; |
21 | 22 |
22 List<Group> get groups => _controller._groups; | 23 List<Group> get groups => _controller._groups; |
23 | 24 |
24 Test get test => _controller._test; | 25 Test get test => _controller._test; |
25 | 26 |
26 State get state => _controller._state; | 27 State get state => _controller._state; |
27 | 28 |
28 Stream<State> get onStateChange => | 29 Stream<State> get onStateChange => |
29 _controller._onStateChangeController.stream; | 30 _controller._onStateChangeController.stream; |
30 | 31 |
31 List<AsyncError> get errors => new UnmodifiableListView(_controller._errors); | 32 List<AsyncError> get errors => new UnmodifiableListView(_controller._errors); |
32 | 33 |
33 Stream<AsyncError> get onError => _controller._onErrorController.stream; | 34 Stream<AsyncError> get onError => _controller._onErrorController.stream; |
34 | 35 |
35 Stream<String> get onPrint => _controller._onPrintController.stream; | 36 Stream<Message> get onMessage => _controller._onMessageController.stream; |
36 | 37 |
37 Future get onComplete => _controller.completer.future; | 38 Future get onComplete => _controller.completer.future; |
38 | 39 |
39 Future run() => _controller._run(); | 40 Future run() => _controller._run(); |
40 | 41 |
41 Future close() => _controller._close(); | 42 Future close() => _controller._close(); |
42 | 43 |
43 _LiveTest(this._controller); | 44 _LiveTest(this._controller); |
44 } | 45 } |
45 | 46 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 final _onStateChangeController = new StreamController<State> | 88 final _onStateChangeController = new StreamController<State> |
88 .broadcast(sync: true); | 89 .broadcast(sync: true); |
89 | 90 |
90 /// The controller for [LiveTest.onError]. | 91 /// The controller for [LiveTest.onError]. |
91 /// | 92 /// |
92 /// This is synchronous to ensure that events are well-ordered across multiple | 93 /// This is synchronous to ensure that events are well-ordered across multiple |
93 /// streams. | 94 /// streams. |
94 final _onErrorController = new StreamController<AsyncError> | 95 final _onErrorController = new StreamController<AsyncError> |
95 .broadcast(sync: true); | 96 .broadcast(sync: true); |
96 | 97 |
97 /// The controller for [LiveTest.onPrint]. | 98 /// The controller for [LiveTest.onMessage]. |
98 /// | 99 /// |
99 /// This is synchronous to ensure that events are well-ordered across multiple | 100 /// This is synchronous to ensure that events are well-ordered across multiple |
100 /// streams. | 101 /// streams. |
101 final _onPrintController = new StreamController<String>.broadcast(sync: true); | 102 final _onMessageController = |
| 103 new StreamController<Message>.broadcast(sync: true); |
102 | 104 |
103 /// The completer for [LiveTest.onComplete]; | 105 /// The completer for [LiveTest.onComplete]; |
104 final completer = new Completer(); | 106 final completer = new Completer(); |
105 | 107 |
106 /// Whether [run] has been called. | 108 /// Whether [run] has been called. |
107 var _runCalled = false; | 109 var _runCalled = false; |
108 | 110 |
109 /// Whether [close] has been called. | 111 /// Whether [close] has been called. |
110 bool get _isClosed => _onErrorController.isClosed; | 112 bool get _isClosed => _onErrorController.isClosed; |
111 | 113 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 /// [LiveTest.state] and emits the new state via [LiveTest.onStateChanged]. If | 157 /// [LiveTest.state] and emits the new state via [LiveTest.onStateChanged]. If |
156 /// it's not different, this does nothing. | 158 /// it's not different, this does nothing. |
157 void setState(State newState) { | 159 void setState(State newState) { |
158 if (_isClosed) return; | 160 if (_isClosed) return; |
159 if (_state == newState) return; | 161 if (_state == newState) return; |
160 | 162 |
161 _state = newState; | 163 _state = newState; |
162 _onStateChangeController.add(newState); | 164 _onStateChangeController.add(newState); |
163 } | 165 } |
164 | 166 |
165 /// Emits a line printed by the test over [LiveTest.onPrint]. | 167 /// Emits message over [LiveTest.onMessage]. |
166 void print(String line) { | 168 void message(Message message) { |
167 if (_onPrintController.hasListener) { | 169 if (_onMessageController.hasListener) { |
168 _onPrintController.add(line); | 170 _onMessageController.add(message); |
169 } else { | 171 } else { |
170 // Make sure all prints get surfaced one way or another to aid in | 172 // Make sure all messages get surfaced one way or another to aid in |
171 // debugging. | 173 // debugging. |
172 Zone.ROOT.print(line); | 174 Zone.ROOT.print(message.text); |
173 } | 175 } |
174 } | 176 } |
175 | 177 |
176 /// A wrapper for [_onRun] that ensures that it follows the guarantees for | 178 /// A wrapper for [_onRun] that ensures that it follows the guarantees for |
177 /// [LiveTest.run]. | 179 /// [LiveTest.run]. |
178 Future _run() { | 180 Future _run() { |
179 if (_runCalled) { | 181 if (_runCalled) { |
180 throw new StateError("LiveTest.run() may not be called more than once."); | 182 throw new StateError("LiveTest.run() may not be called more than once."); |
181 } else if (_isClosed) { | 183 } else if (_isClosed) { |
182 throw new StateError("LiveTest.run() may not be called for a closed " | 184 throw new StateError("LiveTest.run() may not be called for a closed " |
(...skipping 14 matching lines...) Expand all Loading... |
197 | 199 |
198 if (_runCalled) { | 200 if (_runCalled) { |
199 _onClose(); | 201 _onClose(); |
200 } else { | 202 } else { |
201 completer.complete(); | 203 completer.complete(); |
202 } | 204 } |
203 | 205 |
204 return completer.future; | 206 return completer.future; |
205 } | 207 } |
206 } | 208 } |
OLD | NEW |