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 '../frontend/timeout.dart'; | 7 import '../frontend/timeout.dart'; |
8 import '../utils.dart'; | 8 import '../utils.dart'; |
9 import 'group.dart'; | 9 import 'group.dart'; |
10 import 'group_entry.dart'; | 10 import 'group_entry.dart'; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 | 71 |
72 /// Defines a test case with the given name and body. | 72 /// Defines a test case with the given name and body. |
73 void test(String name, body(), {String testOn, Timeout timeout, skip, | 73 void test(String name, body(), {String testOn, Timeout timeout, skip, |
74 Map<String, dynamic> onPlatform, tags}) { | 74 Map<String, dynamic> onPlatform, tags}) { |
75 _checkNotBuilt("test"); | 75 _checkNotBuilt("test"); |
76 | 76 |
77 var metadata = _metadata.merge(new Metadata.parse( | 77 var metadata = _metadata.merge(new Metadata.parse( |
78 testOn: testOn, timeout: timeout, skip: skip, onPlatform: onPlatform, | 78 testOn: testOn, timeout: timeout, skip: skip, onPlatform: onPlatform, |
79 tags: tags)); | 79 tags: tags)); |
80 | 80 |
81 _entries.add(new LocalTest(_prefix(name), metadata, () { | 81 _entries.add(new LocalTest(_prefix(name), metadata, () async { |
82 // TODO(nweiz): It might be useful to throw an error here if a test starts | 82 // TODO(nweiz): It might be useful to throw an error here if a test starts |
83 // running while other tests from the same declarer are also running, | 83 // running while other tests from the same declarer are also running, |
84 // since they might share closurized state. | 84 // since they might share closurized state. |
85 | 85 |
86 // TODO(nweiz): Use async/await here once issue 23497 has been fixed in | 86 await Invoker.current.waitForOutstandingCallbacks(() async { |
87 // two stable versions. | 87 await _runSetUps(); |
88 return Invoker.current.waitForOutstandingCallbacks(() { | 88 await body(); |
89 return _runSetUps().then((_) => body()); | 89 }); |
90 }).then((_) => _runTearDowns()); | 90 await _runTearDowns(); |
91 })); | 91 })); |
92 } | 92 } |
93 | 93 |
94 /// Creates a group of tests. | 94 /// Creates a group of tests. |
95 void group(String name, void body(), {String testOn, Timeout timeout, skip, | 95 void group(String name, void body(), {String testOn, Timeout timeout, skip, |
96 Map<String, dynamic> onPlatform, tags}) { | 96 Map<String, dynamic> onPlatform, tags}) { |
97 _checkNotBuilt("group"); | 97 _checkNotBuilt("group"); |
98 | 98 |
99 var metadata = _metadata.merge(new Metadata.parse( | 99 var metadata = _metadata.merge(new Metadata.parse( |
100 testOn: testOn, timeout: timeout, skip: skip, onPlatform: onPlatform, | 100 testOn: testOn, timeout: timeout, skip: skip, onPlatform: onPlatform, |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 /// [name] should be the name of the method being called. | 154 /// [name] should be the name of the method being called. |
155 void _checkNotBuilt(String name) { | 155 void _checkNotBuilt(String name) { |
156 if (!_built) return; | 156 if (!_built) return; |
157 throw new StateError("Can't call $name() once tests have begun running."); | 157 throw new StateError("Can't call $name() once tests have begun running."); |
158 } | 158 } |
159 | 159 |
160 /// Run the set-up functions for this and any parent groups. | 160 /// Run the set-up functions for this and any parent groups. |
161 /// | 161 /// |
162 /// If no set-up functions are declared, this returns a [Future] that | 162 /// If no set-up functions are declared, this returns a [Future] that |
163 /// completes immediately. | 163 /// completes immediately. |
164 Future _runSetUps() { | 164 Future _runSetUps() async { |
165 // TODO(nweiz): Use async/await here once issue 23497 has been fixed in two | 165 if (_parent != null) await _parent._runSetUps(); |
166 // stable versions. | 166 await Future.forEach(_setUps, (setUp) => setUp()); |
167 if (_parent != null) { | |
168 return _parent._runSetUps().then((_) { | |
169 return Future.forEach(_setUps, (setUp) => setUp()); | |
170 }); | |
171 } | |
172 | |
173 return Future.forEach(_setUps, (setUp) => setUp()); | |
174 } | 167 } |
175 | 168 |
176 /// Run the tear-up functions for this and any parent groups. | 169 /// Run the tear-up functions for this and any parent groups. |
177 /// | 170 /// |
178 /// If no set-up functions are declared, this returns a [Future] that | 171 /// If no set-up functions are declared, this returns a [Future] that |
179 /// completes immediately. | 172 /// completes immediately. |
180 /// | 173 /// |
181 /// This should only be called within a test. | 174 /// This should only be called within a test. |
182 Future _runTearDowns() { | 175 Future _runTearDowns() { |
183 return Invoker.current.unclosable(() { | 176 return Invoker.current.unclosable(() { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 var completer = new Completer(); | 212 var completer = new Completer(); |
220 | 213 |
221 Invoker.current.addOutstandingCallback(); | 214 Invoker.current.addOutstandingCallback(); |
222 Invoker.current.waitForOutstandingCallbacks(() { | 215 Invoker.current.waitForOutstandingCallbacks(() { |
223 new Future.sync(body).whenComplete(completer.complete); | 216 new Future.sync(body).whenComplete(completer.complete); |
224 }).then((_) => Invoker.current.removeOutstandingCallback()); | 217 }).then((_) => Invoker.current.removeOutstandingCallback()); |
225 | 218 |
226 return completer.future; | 219 return completer.future; |
227 } | 220 } |
228 } | 221 } |
OLD | NEW |