| 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 '../backend/invoker.dart'; | 7 import '../backend/invoker.dart'; |
| 8 import 'expect.dart'; | 8 import 'expect.dart'; |
| 9 | 9 |
| 10 /// An object used to detect unpassed arguments. | 10 /// An object used to detect unpassed arguments. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 typedef bool _IsDoneCallback(); | 22 typedef bool _IsDoneCallback(); |
| 23 | 23 |
| 24 /// A wrapper for a function that ensures that it's called the appropriate | 24 /// A wrapper for a function that ensures that it's called the appropriate |
| 25 /// number of times. | 25 /// number of times. |
| 26 /// | 26 /// |
| 27 /// The containing test won't be considered to have completed successfully until | 27 /// The containing test won't be considered to have completed successfully until |
| 28 /// this function has been called the appropriate number of times. | 28 /// this function has been called the appropriate number of times. |
| 29 /// | 29 /// |
| 30 /// The wrapper function is accessible via [func]. It supports up to six | 30 /// The wrapper function is accessible via [func]. It supports up to six |
| 31 /// optional and/or required positional arguments, but no named arguments. | 31 /// optional and/or required positional arguments, but no named arguments. |
| 32 class _ExpectedFunction { | 32 class _ExpectedFunction<T> { |
| 33 /// The wrapped callback. | 33 /// The wrapped callback. |
| 34 final Function _callback; | 34 final Function _callback; |
| 35 | 35 |
| 36 /// The minimum number of calls that are expected to be made to the function. | 36 /// The minimum number of calls that are expected to be made to the function. |
| 37 /// | 37 /// |
| 38 /// If fewer calls than this are made, the test will fail. | 38 /// If fewer calls than this are made, the test will fail. |
| 39 final int _minExpectedCalls; | 39 final int _minExpectedCalls; |
| 40 | 40 |
| 41 /// The maximum number of calls that are expected to be made to the function. | 41 /// The maximum number of calls that are expected to be made to the function. |
| 42 /// | 42 /// |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 /// Wraps [callback] in a function that asserts that it's called at least | 76 /// Wraps [callback] in a function that asserts that it's called at least |
| 77 /// [minExpected] times and no more than [maxExpected] times. | 77 /// [minExpected] times and no more than [maxExpected] times. |
| 78 /// | 78 /// |
| 79 /// If passed, [id] is used as a descriptive name fo the function and [reason] | 79 /// If passed, [id] is used as a descriptive name fo the function and [reason] |
| 80 /// as a reason it's expected to be called. If [isDone] is passed, the test | 80 /// as a reason it's expected to be called. If [isDone] is passed, the test |
| 81 /// won't be allowed to complete until it returns `true`. | 81 /// won't be allowed to complete until it returns `true`. |
| 82 _ExpectedFunction(Function callback, int minExpected, int maxExpected, | 82 _ExpectedFunction(Function callback, int minExpected, int maxExpected, |
| 83 {String id, String reason, bool isDone()}) | 83 {String id, String reason, bool isDone()}) |
| 84 : this._callback = callback, | 84 : this._callback = callback, |
| 85 _minExpectedCalls = minExpected, | 85 _minExpectedCalls = minExpected, |
| 86 _maxExpectedCalls = (maxExpected == 0 && minExpected > 0) | 86 _maxExpectedCalls = |
| 87 ? minExpected | 87 (maxExpected == 0 && minExpected > 0) ? minExpected : maxExpected, |
| 88 : maxExpected, | |
| 89 this._isDone = isDone, | 88 this._isDone = isDone, |
| 90 this._reason = reason == null ? '' : '\n$reason', | 89 this._reason = reason == null ? '' : '\n$reason', |
| 91 this._zone = Zone.current, | 90 this._zone = Zone.current, |
| 92 this._id = _makeCallbackId(id, callback) { | 91 this._id = _makeCallbackId(id, callback) { |
| 93 if (_invoker == null) { | 92 if (_invoker == null) { |
| 94 throw new StateError("[expectAsync] was called outside of a test."); | 93 throw new StateError("[expectAsync] was called outside of a test."); |
| 95 } else if (maxExpected > 0 && minExpected > maxExpected) { | 94 } else if (maxExpected > 0 && minExpected > maxExpected) { |
| 96 throw new ArgumentError("max ($maxExpected) may not be less than count " | 95 throw new ArgumentError("max ($maxExpected) may not be less than count " |
| 97 "($minExpected)."); | 96 "($minExpected)."); |
| 98 } | 97 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 if (_callback is _Func1) return _max1; | 135 if (_callback is _Func1) return _max1; |
| 137 if (_callback is _Func0) return _max0; | 136 if (_callback is _Func0) return _max0; |
| 138 | 137 |
| 139 _invoker.removeOutstandingCallback(); | 138 _invoker.removeOutstandingCallback(); |
| 140 throw new ArgumentError( | 139 throw new ArgumentError( |
| 141 'The wrapped function has more than 6 required arguments'); | 140 'The wrapped function has more than 6 required arguments'); |
| 142 } | 141 } |
| 143 | 142 |
| 144 // This indirection is critical. It ensures the returned function has an | 143 // This indirection is critical. It ensures the returned function has an |
| 145 // argument count of zero. | 144 // argument count of zero. |
| 146 _max0() => _max6(); | 145 T _max0() => _max6(); |
| 147 | 146 |
| 148 _max1([a0 = _PLACEHOLDER]) => _max6(a0); | 147 T _max1([a0 = _PLACEHOLDER]) => _max6(a0); |
| 149 | 148 |
| 150 _max2([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER]) => _max6(a0, a1); | 149 T _max2([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER]) => _max6(a0, a1); |
| 151 | 150 |
| 152 _max3([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER]) => | 151 T _max3([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER]) => |
| 153 _max6(a0, a1, a2); | 152 _max6(a0, a1, a2); |
| 154 | 153 |
| 155 _max4([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER, | 154 T _max4( |
| 156 a3 = _PLACEHOLDER]) => _max6(a0, a1, a2, a3); | 155 [a0 = _PLACEHOLDER, |
| 156 a1 = _PLACEHOLDER, |
| 157 a2 = _PLACEHOLDER, |
| 158 a3 = _PLACEHOLDER]) => |
| 159 _max6(a0, a1, a2, a3); |
| 157 | 160 |
| 158 _max5([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER, | 161 T _max5( |
| 159 a3 = _PLACEHOLDER, a4 = _PLACEHOLDER]) => _max6(a0, a1, a2, a3, a4); | 162 [a0 = _PLACEHOLDER, |
| 163 a1 = _PLACEHOLDER, |
| 164 a2 = _PLACEHOLDER, |
| 165 a3 = _PLACEHOLDER, |
| 166 a4 = _PLACEHOLDER]) => |
| 167 _max6(a0, a1, a2, a3, a4); |
| 160 | 168 |
| 161 _max6([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER, | 169 T _max6( |
| 162 a3 = _PLACEHOLDER, a4 = _PLACEHOLDER, a5 = _PLACEHOLDER]) => | 170 [a0 = _PLACEHOLDER, |
| 171 a1 = _PLACEHOLDER, |
| 172 a2 = _PLACEHOLDER, |
| 173 a3 = _PLACEHOLDER, |
| 174 a4 = _PLACEHOLDER, |
| 175 a5 = _PLACEHOLDER]) => |
| 163 _run([a0, a1, a2, a3, a4, a5].where((a) => a != _PLACEHOLDER)); | 176 _run([a0, a1, a2, a3, a4, a5].where((a) => a != _PLACEHOLDER)); |
| 164 | 177 |
| 165 /// Runs the wrapped function with [args] and returns its return value. | 178 /// Runs the wrapped function with [args] and returns its return value. |
| 166 _run(Iterable args) { | 179 T _run(Iterable args) { |
| 167 // Note that in the old test, this returned `null` if it encountered an | 180 // Note that in the old test, this returned `null` if it encountered an |
| 168 // error, where now it just re-throws that error because Zone machinery will | 181 // error, where now it just re-throws that error because Zone machinery will |
| 169 // pass it to the invoker anyway. | 182 // pass it to the invoker anyway. |
| 170 try { | 183 try { |
| 171 _actualCalls++; | 184 _actualCalls++; |
| 172 if (_invoker.liveTest.state.shouldBeDone) { | 185 if (_invoker.liveTest.state.shouldBeDone) { |
| 173 throw 'Callback ${_id}called ($_actualCalls) after test case ' | 186 throw 'Callback ${_id}called ($_actualCalls) after test case ' |
| 174 '${_invoker.liveTest.test.name} had already completed.$_reason'; | 187 '${_invoker.liveTest.test.name} had already completed.$_reason'; |
| 175 } else if (_maxExpectedCalls >= 0 && _actualCalls > _maxExpectedCalls) { | 188 } else if (_maxExpectedCalls >= 0 && _actualCalls > _maxExpectedCalls) { |
| 176 throw new TestFailure('Callback ${_id}called more times than expected ' | 189 throw new TestFailure('Callback ${_id}called more times than expected ' |
| 177 '($_maxExpectedCalls).$_reason'); | 190 '($_maxExpectedCalls).$_reason'); |
| 178 } | 191 } |
| 179 | 192 |
| 180 return Function.apply(_callback, args.toList()); | 193 return Function.apply(_callback, args.toList()) as T; |
| 181 } catch (error, stackTrace) { | 194 } catch (error, stackTrace) { |
| 182 _zone.handleUncaughtError(error, stackTrace); | 195 _zone.handleUncaughtError(error, stackTrace); |
| 183 return null; | 196 return null; |
| 184 } finally { | 197 } finally { |
| 185 _afterRun(); | 198 _afterRun(); |
| 186 } | 199 } |
| 187 } | 200 } |
| 188 | 201 |
| 189 /// After each time the function is run, check to see if it's complete. | 202 /// After each time the function is run, check to see if it's complete. |
| 190 void _afterRun() { | 203 void _afterRun() { |
| 191 if (_complete) return; | 204 if (_complete) return; |
| 192 if (_minExpectedCalls > 0 && _actualCalls < _minExpectedCalls) return; | 205 if (_minExpectedCalls > 0 && _actualCalls < _minExpectedCalls) return; |
| 193 if (_isDone != null && !_isDone()) return; | 206 if (_isDone != null && !_isDone()) return; |
| 194 | 207 |
| 195 // Mark this callback as complete and remove it from the test case's | 208 // Mark this callback as complete and remove it from the test case's |
| 196 // oustanding callback count; if that hits zero the test is done. | 209 // oustanding callback count; if that hits zero the test is done. |
| 197 _complete = true; | 210 _complete = true; |
| 198 _invoker.removeOutstandingCallback(); | 211 _invoker.removeOutstandingCallback(); |
| 199 } | 212 } |
| 200 } | 213 } |
| 201 | 214 |
| 202 /// Indicate that [callback] is expected to be called [count] number of times | 215 /// Indicate that [callback] is expected to be called [count] number of times |
| 203 /// (by default 1). | 216 /// (by default 1). |
| 204 /// | 217 /// |
| 218 /// This function is deprecated. Use [expectAsync0], [expectAsync1], |
| 219 /// [expectAsync2], [expectAsync3], [expectAsync4], [expectAsync5], or |
| 220 /// [expectAsync6] instead. |
| 221 /// |
| 205 /// The test framework will wait for the callback to run the [count] times | 222 /// The test framework will wait for the callback to run the [count] times |
| 206 /// before it considers the current test to be complete. [callback] may take up | 223 /// before it considers the current test to be complete. [callback] may take up |
| 207 /// to six optional or required positional arguments; named arguments are not | 224 /// to six optional or required positional arguments; named arguments are not |
| 208 /// supported. | 225 /// supported. |
| 209 /// | 226 /// |
| 210 /// [max] can be used to specify an upper bound on the number of calls; if this | 227 /// [max] can be used to specify an upper bound on the number of calls; if this |
| 211 /// is exceeded the test will fail. If [max] is `0` (the default), the callback | 228 /// is exceeded the test will fail. If [max] is `0` (the default), the callback |
| 212 /// is expected to be called exactly [count] times. If [max] is `-1`, the | 229 /// is expected to be called exactly [count] times. If [max] is `-1`, the |
| 213 /// callback is allowed to be called any number of times greater than [count]. | 230 /// callback is allowed to be called any number of times greater than [count]. |
| 214 /// | 231 /// |
| 215 /// Both [id] and [reason] are optional and provide extra information about the | 232 /// Both [id] and [reason] are optional and provide extra information about the |
| 216 /// callback when debugging. [id] should be the name of the callback, while | 233 /// callback when debugging. [id] should be the name of the callback, while |
| 217 /// [reason] should be the reason the callback is expected to be called. | 234 /// [reason] should be the reason the callback is expected to be called. |
| 235 @deprecated |
| 218 Function expectAsync(Function callback, | 236 Function expectAsync(Function callback, |
| 219 {int count: 1, int max: 0, String id, String reason}) { | 237 {int count: 1, int max: 0, String id, String reason}) { |
| 220 if (Invoker.current == null) { | 238 if (Invoker.current == null) { |
| 221 throw new StateError("expectAsync() may only be called within a test."); | 239 throw new StateError("expectAsync() may only be called within a test."); |
| 222 } | 240 } |
| 223 | 241 |
| 224 return new _ExpectedFunction(callback, count, max, id: id, reason: reason) | 242 return new _ExpectedFunction(callback, count, max, id: id, reason: reason) |
| 225 .func; | 243 .func; |
| 226 } | 244 } |
| 227 | 245 |
| 246 typedef T F0<T>(); |
| 247 typedef T F1<T, P0>(P0 p0); |
| 248 typedef T F2<T, P0, P1>(P0 p0, P1 p1); |
| 249 typedef T F3<T, P0, P1, P2>(P0 p0, P1 p1, P2 p2); |
| 250 typedef T F4<T, P0, P1, P2, P3>(P0 p0, P1 p1, P2 p2, P3 p3); |
| 251 typedef T F5<T, P0, P1, P2, P3, P4>(P0 p0, P1 p1, P2 p2, P3 p3, P4 p4); |
| 252 typedef T F6<T, P0, P1, P2, P3, P4, P5>( |
| 253 P0 p0, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5); |
| 254 |
| 255 /// Indicate that [callback] is expected to be called [count] number of times |
| 256 /// (by default 1). |
| 257 /// |
| 258 /// The test framework will wait for the callback to run the [count] times |
| 259 /// before it considers the current test to be complete. |
| 260 /// |
| 261 /// [max] can be used to specify an upper bound on the number of calls; if this |
| 262 /// is exceeded the test will fail. If [max] is `0` (the default), the callback |
| 263 /// is expected to be called exactly [count] times. If [max] is `-1`, the |
| 264 /// callback is allowed to be called any number of times greater than [count]. |
| 265 /// |
| 266 /// Both [id] and [reason] are optional and provide extra information about the |
| 267 /// callback when debugging. [id] should be the name of the callback, while |
| 268 /// [reason] should be the reason the callback is expected to be called. |
| 269 F0<dynamic/*=T*/ > expectAsync0/*<T>*/(dynamic/*=T*/ callback(), |
| 270 {int count: 1, int max: 0, String id, String reason}) { |
| 271 if (Invoker.current == null) { |
| 272 throw new StateError("expectAsync() may only be called within a test."); |
| 273 } |
| 274 |
| 275 return new _ExpectedFunction/*<T>*/(callback, count, max, |
| 276 id: id, reason: reason) |
| 277 ._max0; |
| 278 } |
| 279 |
| 280 /// See [expectAsync0]. |
| 281 F1<dynamic/*=T*/, dynamic/*=P0*/ > expectAsync1/*<T, P0>*/( |
| 282 dynamic/*=T*/ callback(dynamic/*=P0*/ p0), |
| 283 {int count: 1, |
| 284 int max: 0, |
| 285 String id, |
| 286 String reason}) { |
| 287 if (Invoker.current == null) { |
| 288 throw new StateError("expectAsync() may only be called within a test."); |
| 289 } |
| 290 |
| 291 return new _ExpectedFunction/*<T>*/(callback, count, max, |
| 292 id: id, reason: reason) |
| 293 ._max1; |
| 294 } |
| 295 |
| 296 /// See [expectAsync0]. |
| 297 F2<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/ > expectAsync2/*<T, P0, P1>*/( |
| 298 dynamic/*=T*/ callback(dynamic/*=P0*/ p0, dynamic/*=P1*/ p1), |
| 299 {int count: 1, |
| 300 int max: 0, |
| 301 String id, |
| 302 String reason}) { |
| 303 if (Invoker.current == null) { |
| 304 throw new StateError("expectAsync() may only be called within a test."); |
| 305 } |
| 306 |
| 307 return new _ExpectedFunction/*<T>*/(callback, count, max, |
| 308 id: id, reason: reason) |
| 309 ._max2; |
| 310 } |
| 311 |
| 312 /// See [expectAsync0]. |
| 313 F3<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/, dynamic/*=P2*/ > |
| 314 expectAsync3/*<T, P0, P1, P2>*/( |
| 315 dynamic/*=T*/ callback( |
| 316 dynamic/*=P0*/ p0, dynamic/*=P1*/ p1, dynamic/*=P2*/ p2), |
| 317 {int count: 1, |
| 318 int max: 0, |
| 319 String id, |
| 320 String reason}) { |
| 321 if (Invoker.current == null) { |
| 322 throw new StateError("expectAsync() may only be called within a test."); |
| 323 } |
| 324 |
| 325 return new _ExpectedFunction/*<T>*/(callback, count, max, |
| 326 id: id, reason: reason) |
| 327 ._max3; |
| 328 } |
| 329 |
| 330 /// See [expectAsync0]. |
| 331 F4<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/, dynamic/*=P2*/, |
| 332 dynamic/*=P3*/ > |
| 333 expectAsync4/*<T, P0, P1, P2, P3>*/( |
| 334 dynamic/*=T*/ callback(dynamic/*=P0*/ p0, dynamic/*=P1*/ p1, |
| 335 dynamic/*=P2*/ p2, dynamic/*=P3*/ p3), |
| 336 {int count: 1, |
| 337 int max: 0, |
| 338 String id, |
| 339 String reason}) { |
| 340 if (Invoker.current == null) { |
| 341 throw new StateError("expectAsync() may only be called within a test."); |
| 342 } |
| 343 |
| 344 return new _ExpectedFunction/*<T>*/(callback, count, max, |
| 345 id: id, reason: reason) |
| 346 ._max4; |
| 347 } |
| 348 |
| 349 /// See [expectAsync0]. |
| 350 F5<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/, dynamic/*=P2*/, |
| 351 dynamic/*=P3*/, dynamic/*=P4*/ > |
| 352 expectAsync5/*<T, P0, P1, P2, P3, P4>*/( |
| 353 dynamic/*=T*/ callback(dynamic/*=P0*/ p0, dynamic/*=P1*/ p1, |
| 354 dynamic/*=P2*/ p2, dynamic/*=P3*/ p3, dynamic/*=P4*/ p4), |
| 355 {int count: 1, |
| 356 int max: 0, |
| 357 String id, |
| 358 String reason}) { |
| 359 if (Invoker.current == null) { |
| 360 throw new StateError("expectAsync() may only be called within a test."); |
| 361 } |
| 362 |
| 363 return new _ExpectedFunction/*<T>*/(callback, count, max, |
| 364 id: id, reason: reason) |
| 365 ._max5; |
| 366 } |
| 367 |
| 368 /// See [expectAsync0]. |
| 369 F6<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/, dynamic/*=P2*/, |
| 370 dynamic/*=P3*/, dynamic/*=P4*/, dynamic/*=P5*/ > |
| 371 expectAsync6/*<T, P0, P1, P2, P3, P4, P5>*/( |
| 372 dynamic/*=T*/ callback( |
| 373 dynamic/*=P0*/ p0, |
| 374 dynamic/*=P1*/ p1, |
| 375 dynamic/*=P2*/ p2, |
| 376 dynamic/*=P3*/ p3, |
| 377 dynamic/*=P4*/ p4, |
| 378 dynamic/*=P5*/ p5), |
| 379 {int count: 1, |
| 380 int max: 0, |
| 381 String id, |
| 382 String reason}) { |
| 383 if (Invoker.current == null) { |
| 384 throw new StateError("expectAsync() may only be called within a test."); |
| 385 } |
| 386 |
| 387 return new _ExpectedFunction/*<T>*/(callback, count, max, |
| 388 id: id, reason: reason) |
| 389 ._max6; |
| 390 } |
| 391 |
| 228 /// Indicate that [callback] is expected to be called until [isDone] returns | 392 /// Indicate that [callback] is expected to be called until [isDone] returns |
| 229 /// true. | 393 /// true. |
| 230 /// | 394 /// |
| 395 /// Deprecated. Use [expectAsyncUntil0], [expectAsyncUntil1], |
| 396 /// [expectAsyncUntil2], [expectAsyncUntil3], [expectAsyncUntil4], |
| 397 /// [expectAsyncUntil5], or [expectAsyncUntil6] instead. |
| 398 /// |
| 231 /// [isDone] is called after each time the function is run. Only when it returns | 399 /// [isDone] is called after each time the function is run. Only when it returns |
| 232 /// true will the callback be considered complete. [callback] may take up to six | 400 /// true will the callback be considered complete. [callback] may take up to six |
| 233 /// optional or required positional arguments; named arguments are not | 401 /// optional or required positional arguments; named arguments are not |
| 234 /// supported. | 402 /// supported. |
| 235 /// | 403 /// |
| 236 /// Both [id] and [reason] are optional and provide extra information about the | 404 /// Both [id] and [reason] are optional and provide extra information about the |
| 237 /// callback when debugging. [id] should be the name of the callback, while | 405 /// callback when debugging. [id] should be the name of the callback, while |
| 238 /// [reason] should be the reason the callback is expected to be called. | 406 /// [reason] should be the reason the callback is expected to be called. |
| 407 @deprecated |
| 239 Function expectAsyncUntil(Function callback, bool isDone(), | 408 Function expectAsyncUntil(Function callback, bool isDone(), |
| 240 {String id, String reason}) { | 409 {String id, String reason}) { |
| 241 if (Invoker.current == null) { | 410 if (Invoker.current == null) { |
| 242 throw new StateError( | 411 throw new StateError( |
| 243 "expectAsyncUntil() may only be called within a test."); | 412 "expectAsyncUntil() may only be called within a test."); |
| 244 } | 413 } |
| 245 | 414 |
| 246 return new _ExpectedFunction(callback, 0, -1, | 415 return new _ExpectedFunction(callback, 0, -1, |
| 247 id: id, reason: reason, isDone: isDone).func; | 416 id: id, reason: reason, isDone: isDone) |
| 417 .func; |
| 248 } | 418 } |
| 419 |
| 420 /// Indicate that [callback] is expected to be called until [isDone] returns |
| 421 /// true. |
| 422 /// |
| 423 /// [isDone] is called after each time the function is run. Only when it returns |
| 424 /// true will the callback be considered complete. |
| 425 /// |
| 426 /// Both [id] and [reason] are optional and provide extra information about the |
| 427 /// callback when debugging. [id] should be the name of the callback, while |
| 428 /// [reason] should be the reason the callback is expected to be called. |
| 429 F0<dynamic/*=T*/ > expectAsyncUntil0/*<T>*/( |
| 430 dynamic/*=T*/ callback(), bool isDone(), |
| 431 {String id, String reason}) { |
| 432 if (Invoker.current == null) { |
| 433 throw new StateError( |
| 434 "expectAsyncUntil() may only be called within a test."); |
| 435 } |
| 436 |
| 437 return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
| 438 id: id, reason: reason, isDone: isDone) |
| 439 ._max0; |
| 440 } |
| 441 |
| 442 /// See [expectAsyncUntil0]. |
| 443 F1<dynamic/*=T*/, dynamic/*=P0*/ > expectAsyncUntil1/*<T, P0>*/( |
| 444 dynamic/*=T*/ callback(dynamic/*=P0*/ p0), bool isDone(), |
| 445 {String id, String reason}) { |
| 446 if (Invoker.current == null) { |
| 447 throw new StateError( |
| 448 "expectAsyncUntil() may only be called within a test."); |
| 449 } |
| 450 |
| 451 return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
| 452 id: id, reason: reason, isDone: isDone) |
| 453 ._max1; |
| 454 } |
| 455 |
| 456 /// See [expectAsyncUntil0]. |
| 457 F2<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/ > |
| 458 expectAsyncUntil2/*<T, P0, P1>*/( |
| 459 dynamic/*=T*/ callback(dynamic/*=P0*/ p0, dynamic/*=P1*/ p1), |
| 460 bool isDone(), |
| 461 {String id, |
| 462 String reason}) { |
| 463 if (Invoker.current == null) { |
| 464 throw new StateError( |
| 465 "expectAsyncUntil() may only be called within a test."); |
| 466 } |
| 467 |
| 468 return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
| 469 id: id, reason: reason, isDone: isDone) |
| 470 ._max2; |
| 471 } |
| 472 |
| 473 /// See [expectAsyncUntil0]. |
| 474 F3<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/, dynamic/*=P2*/ > |
| 475 expectAsyncUntil3/*<T, P0, P1, P2>*/( |
| 476 dynamic/*=T*/ callback( |
| 477 dynamic/*=P0*/ p0, dynamic/*=P1*/ p1, dynamic/*=P2*/ p2), |
| 478 bool isDone(), |
| 479 {String id, |
| 480 String reason}) { |
| 481 if (Invoker.current == null) { |
| 482 throw new StateError( |
| 483 "expectAsyncUntil() may only be called within a test."); |
| 484 } |
| 485 |
| 486 return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
| 487 id: id, reason: reason, isDone: isDone) |
| 488 ._max3; |
| 489 } |
| 490 |
| 491 /// See [expectAsyncUntil0]. |
| 492 F4<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/, dynamic/*=P2*/, |
| 493 dynamic/*=P3*/ > |
| 494 expectAsyncUntil4/*<T, P0, P1, P2, P3>*/( |
| 495 dynamic/*=T*/ callback(dynamic/*=P0*/ p0, dynamic/*=P1*/ p1, |
| 496 dynamic/*=P2*/ p2, dynamic/*=P3*/ p3), |
| 497 bool isDone(), |
| 498 {String id, |
| 499 String reason}) { |
| 500 if (Invoker.current == null) { |
| 501 throw new StateError( |
| 502 "expectAsyncUntil() may only be called within a test."); |
| 503 } |
| 504 |
| 505 return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
| 506 id: id, reason: reason, isDone: isDone) |
| 507 ._max4; |
| 508 } |
| 509 |
| 510 /// See [expectAsyncUntil0]. |
| 511 F5<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/, dynamic/*=P2*/, |
| 512 dynamic/*=P3*/, dynamic/*=P4*/ > |
| 513 expectAsyncUntil5/*<T, P0, P1, P2, P3, P4>*/( |
| 514 dynamic/*=T*/ callback(dynamic/*=P0*/ p0, dynamic/*=P1*/ p1, |
| 515 dynamic/*=P2*/ p2, dynamic/*=P3*/ p3, dynamic/*=P4*/ p4), |
| 516 bool isDone(), |
| 517 {String id, |
| 518 String reason}) { |
| 519 if (Invoker.current == null) { |
| 520 throw new StateError( |
| 521 "expectAsyncUntil() may only be called within a test."); |
| 522 } |
| 523 |
| 524 return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
| 525 id: id, reason: reason, isDone: isDone) |
| 526 ._max5; |
| 527 } |
| 528 |
| 529 /// See [expectAsyncUntil0]. |
| 530 F6<dynamic/*=T*/, dynamic/*=P0*/, dynamic/*=P1*/, dynamic/*=P2*/, |
| 531 dynamic/*=P3*/, dynamic/*=P4*/, dynamic/*=P5*/ > |
| 532 expectAsyncUntil6/*<T, P0, P1, P2, P3, P4, P5>*/( |
| 533 dynamic/*=T*/ callback( |
| 534 dynamic/*=P0*/ p0, |
| 535 dynamic/*=P1*/ p1, |
| 536 dynamic/*=P2*/ p2, |
| 537 dynamic/*=P3*/ p3, |
| 538 dynamic/*=P4*/ p4, |
| 539 dynamic/*=P5*/ p5), |
| 540 bool isDone(), |
| 541 {String id, |
| 542 String reason}) { |
| 543 if (Invoker.current == null) { |
| 544 throw new StateError( |
| 545 "expectAsyncUntil() may only be called within a test."); |
| 546 } |
| 547 |
| 548 return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
| 549 id: id, reason: reason, isDone: isDone) |
| 550 ._max6; |
| 551 } |
| OLD | NEW |