Index: lib/src/frontend/expect_async.dart |
diff --git a/lib/src/frontend/expect_async.dart b/lib/src/frontend/expect_async.dart |
index aa4b8b6114efa3d6b8fe71dc61b3eebcdcf6b1a3..e437a54289eb0d8a99e95e879bbc2908aa0ca7dc 100644 |
--- a/lib/src/frontend/expect_async.dart |
+++ b/lib/src/frontend/expect_async.dart |
@@ -11,13 +11,13 @@ import 'expect.dart'; |
const _PLACEHOLDER = const Object(); |
// Functions used to check how many arguments a callback takes. |
-typedef _Func0(); |
-typedef _Func1(a); |
-typedef _Func2(a, b); |
-typedef _Func3(a, b, c); |
-typedef _Func4(a, b, c, d); |
-typedef _Func5(a, b, c, d, e); |
-typedef _Func6(a, b, c, d, e, f); |
+typedef T Func0<T>(); |
+typedef T Func1<T, A>(A a); |
+typedef T Func2<T, A, B>(A a, B b); |
+typedef T Func3<T, A, B, C>(A a, B b, C c); |
+typedef T Func4<T, A, B, C, D>(A a, B b, C c, D d); |
+typedef T Func5<T, A, B, C, D, E>(A a, B b, C c, D d, E e); |
+typedef T Func6<T, A, B, C, D, E, F>(A a, B b, C c, D d, E e, F f); |
typedef bool _IsDoneCallback(); |
@@ -29,7 +29,7 @@ typedef bool _IsDoneCallback(); |
/// |
/// The wrapper function is accessible via [func]. It supports up to six |
/// optional and/or required positional arguments, but no named arguments. |
-class _ExpectedFunction { |
+class _ExpectedFunction<T> { |
/// The wrapped callback. |
final Function _callback; |
@@ -128,13 +128,13 @@ class _ExpectedFunction { |
/// Returns a function that has the same number of positional arguments as the |
/// wrapped function (up to a total of 6). |
Function get func { |
- if (_callback is _Func6) return _max6; |
- if (_callback is _Func5) return _max5; |
- if (_callback is _Func4) return _max4; |
- if (_callback is _Func3) return _max3; |
- if (_callback is _Func2) return _max2; |
- if (_callback is _Func1) return _max1; |
- if (_callback is _Func0) return _max0; |
+ if (_callback is Func6) return max6; |
+ if (_callback is Func5) return max5; |
+ if (_callback is Func4) return max4; |
+ if (_callback is Func3) return max3; |
+ if (_callback is Func2) return max2; |
+ if (_callback is Func1) return max1; |
+ if (_callback is Func0) return max0; |
_invoker.removeOutstandingCallback(); |
throw new ArgumentError( |
@@ -143,27 +143,44 @@ class _ExpectedFunction { |
// This indirection is critical. It ensures the returned function has an |
// argument count of zero. |
- _max0() => _max6(); |
- |
- _max1([a0 = _PLACEHOLDER]) => _max6(a0); |
- |
- _max2([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER]) => _max6(a0, a1); |
- |
- _max3([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER]) => |
- _max6(a0, a1, a2); |
- |
- _max4([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER, |
- a3 = _PLACEHOLDER]) => _max6(a0, a1, a2, a3); |
- |
- _max5([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER, |
- a3 = _PLACEHOLDER, a4 = _PLACEHOLDER]) => _max6(a0, a1, a2, a3, a4); |
- |
- _max6([a0 = _PLACEHOLDER, a1 = _PLACEHOLDER, a2 = _PLACEHOLDER, |
- a3 = _PLACEHOLDER, a4 = _PLACEHOLDER, a5 = _PLACEHOLDER]) => |
+ T max0() => max6(); |
+ |
+ T max1([Object a0 = _PLACEHOLDER]) => max6(a0); |
+ |
+ T max2([Object a0 = _PLACEHOLDER, Object a1 = _PLACEHOLDER]) => max6(a0, a1); |
+ |
+ T max3( |
+ [Object a0 = _PLACEHOLDER, |
+ Object a1 = _PLACEHOLDER, |
+ Object a2 = _PLACEHOLDER]) => |
+ max6(a0, a1, a2); |
+ |
+ T max4( |
+ [Object a0 = _PLACEHOLDER, |
+ Object a1 = _PLACEHOLDER, |
+ Object a2 = _PLACEHOLDER, |
+ Object a3 = _PLACEHOLDER]) => |
+ max6(a0, a1, a2, a3); |
+ |
+ T max5( |
+ [Object a0 = _PLACEHOLDER, |
+ Object a1 = _PLACEHOLDER, |
+ Object a2 = _PLACEHOLDER, |
+ Object a3 = _PLACEHOLDER, |
+ Object a4 = _PLACEHOLDER]) => |
+ max6(a0, a1, a2, a3, a4); |
+ |
+ T max6( |
+ [Object a0 = _PLACEHOLDER, |
+ Object a1 = _PLACEHOLDER, |
+ Object a2 = _PLACEHOLDER, |
+ Object a3 = _PLACEHOLDER, |
+ Object a4 = _PLACEHOLDER, |
+ Object a5 = _PLACEHOLDER]) => |
_run([a0, a1, a2, a3, a4, a5].where((a) => a != _PLACEHOLDER)); |
/// Runs the wrapped function with [args] and returns its return value. |
- _run(Iterable args) { |
+ T _run(Iterable args) { |
// Note that in the old test, this returned `null` if it encountered an |
// error, where now it just re-throws that error because Zone machinery will |
// pass it to the invoker anyway. |
@@ -171,13 +188,13 @@ class _ExpectedFunction { |
_actualCalls++; |
if (_invoker.liveTest.state.shouldBeDone) { |
throw 'Callback ${_id}called ($_actualCalls) after test case ' |
- '${_invoker.liveTest.test.name} had already completed.$_reason'; |
+ '${_invoker.liveTest.test.name} had already completed.$_reason'; |
} else if (_maxExpectedCalls >= 0 && _actualCalls > _maxExpectedCalls) { |
throw new TestFailure('Callback ${_id}called more times than expected ' |
- '($_maxExpectedCalls).$_reason'); |
+ '($_maxExpectedCalls).$_reason'); |
} |
- return Function.apply(_callback, args.toList()); |
+ return Function.apply(_callback, args.toList()) as T; |
} catch (error, stackTrace) { |
_zone.handleUncaughtError(error, stackTrace); |
return null; |
@@ -199,13 +216,29 @@ class _ExpectedFunction { |
} |
} |
-/// Indicate that [callback] is expected to be called [count] number of times |
-/// (by default 1). |
+/// This function is deprecated because it doesn't work well with strong mode. |
+/// Use [expectAsync0], [expectAsync1], |
+/// [expectAsync2], [expectAsync3], [expectAsync4], [expectAsync5], or |
+/// [expectAsync6] instead. |
+@Deprecated("Will be removed in 0.13.0") |
+Function expectAsync(Function callback, |
+ {int count: 1, int max: 0, String id, String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError("expectAsync() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction(callback, count, max, id: id, reason: reason) |
+ .func; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 0 is expected to be |
+/// called [count] number of times (by default 1). |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
/// |
/// The test framework will wait for the callback to run the [count] times |
-/// before it considers the current test to be complete. [callback] may take up |
-/// to six optional or required positional arguments; named arguments are not |
-/// supported. |
+/// before it considers the current test to be complete. |
/// |
/// [max] can be used to specify an upper bound on the number of calls; if this |
/// is exceeded the test will fail. If [max] is `0` (the default), the callback |
@@ -215,27 +248,253 @@ class _ExpectedFunction { |
/// Both [id] and [reason] are optional and provide extra information about the |
/// callback when debugging. [id] should be the name of the callback, while |
/// [reason] should be the reason the callback is expected to be called. |
-Function expectAsync(Function callback, |
- {int count: 1, int max: 0, String id, String reason}) { |
+/// |
+/// This method takes callbacks with zero arguments. See also |
+/// [expectAsync1], [expectAsync2], [expectAsync3], [expectAsync4], |
+/// [expectAsync5], and [expectAsync6] for callbacks with different arity. |
+Func0<dynamic/*=T*/ > expectAsync0/*<T>*/(dynamic/*=T*/ callback(), |
+ {int count: 1, int max: 0, String id, String reason}) { |
if (Invoker.current == null) { |
- throw new StateError("expectAsync() may only be called within a test."); |
+ throw new StateError("expectAsync0() may only be called within a test."); |
} |
- return new _ExpectedFunction(callback, count, max, id: id, reason: reason) |
- .func; |
+ return new _ExpectedFunction/*<T>*/(callback, count, max, |
+ id: id, reason: reason) |
+ .max0; |
} |
-/// Indicate that [callback] is expected to be called until [isDone] returns |
-/// true. |
+/// Informs the framework that the given [callback] of arity 1 is expected to be |
+/// called [count] number of times (by default 1). |
/// |
-/// [isDone] is called after each time the function is run. Only when it returns |
-/// true will the callback be considered complete. [callback] may take up to six |
-/// optional or required positional arguments; named arguments are not |
-/// supported. |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// The test framework will wait for the callback to run the [count] times |
+/// before it considers the current test to be complete. |
+/// |
+/// [max] can be used to specify an upper bound on the number of calls; if this |
+/// is exceeded the test will fail. If [max] is `0` (the default), the callback |
+/// is expected to be called exactly [count] times. If [max] is `-1`, the |
+/// callback is allowed to be called any number of times greater than [count]. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with one argument. See also |
+/// [expectAsync0], [expectAsync2], [expectAsync3], [expectAsync4], |
+/// [expectAsync5], and [expectAsync6] for callbacks with different arity. |
+Func1<dynamic/*=T*/, dynamic/*=A*/ > expectAsync1/*<T, A>*/( |
+ dynamic/*=T*/ callback(dynamic/*=A*/ a), |
+ {int count: 1, |
+ int max: 0, |
+ String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError("expectAsync1() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, count, max, |
+ id: id, reason: reason) |
+ .max1; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 2 is expected to be |
+/// called [count] number of times (by default 1). |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// The test framework will wait for the callback to run the [count] times |
+/// before it considers the current test to be complete. |
+/// |
+/// [max] can be used to specify an upper bound on the number of calls; if this |
+/// is exceeded the test will fail. If [max] is `0` (the default), the callback |
+/// is expected to be called exactly [count] times. If [max] is `-1`, the |
+/// callback is allowed to be called any number of times greater than [count]. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with two arguments. See also |
+/// [expectAsync0], [expectAsync1], [expectAsync3], [expectAsync4], |
+/// [expectAsync5], and [expectAsync6] for callbacks with different arity. |
+Func2<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/ > expectAsync2/*<T, A, B>*/( |
+ dynamic/*=T*/ callback(dynamic/*=A*/ a, dynamic/*=B*/ b), |
+ {int count: 1, |
+ int max: 0, |
+ String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError("expectAsync2() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, count, max, |
+ id: id, reason: reason) |
+ .max2; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 3 is expected to be |
+/// called [count] number of times (by default 1). |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// The test framework will wait for the callback to run the [count] times |
+/// before it considers the current test to be complete. |
+/// |
+/// [max] can be used to specify an upper bound on the number of calls; if this |
+/// is exceeded the test will fail. If [max] is `0` (the default), the callback |
+/// is expected to be called exactly [count] times. If [max] is `-1`, the |
+/// callback is allowed to be called any number of times greater than [count]. |
/// |
/// Both [id] and [reason] are optional and provide extra information about the |
/// callback when debugging. [id] should be the name of the callback, while |
/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with three arguments. See also |
+/// [expectAsync0], [expectAsync1], [expectAsync2], [expectAsync4], |
+/// [expectAsync5], and [expectAsync6] for callbacks with different arity. |
+Func3<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/, dynamic/*=C*/ > |
+ expectAsync3/*<T, A, B, C>*/( |
+ dynamic/*=T*/ callback( |
+ dynamic/*=A*/ a, dynamic/*=B*/ b, dynamic/*=C*/ c), |
+ {int count: 1, |
+ int max: 0, |
+ String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError("expectAsync3() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, count, max, |
+ id: id, reason: reason) |
+ .max3; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 4 is expected to be |
+/// called [count] number of times (by default 1). |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// The test framework will wait for the callback to run the [count] times |
+/// before it considers the current test to be complete. |
+/// |
+/// [max] can be used to specify an upper bound on the number of calls; if this |
+/// is exceeded the test will fail. If [max] is `0` (the default), the callback |
+/// is expected to be called exactly [count] times. If [max] is `-1`, the |
+/// callback is allowed to be called any number of times greater than [count]. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with four arguments. See also |
+/// [expectAsync0], [expectAsync1], [expectAsync2], [expectAsync3], |
+/// [expectAsync5], and [expectAsync6] for callbacks with different arity. |
+Func4<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/, dynamic/*=C*/, |
+ dynamic/*=D*/ > |
+ expectAsync4/*<T, A, B, C, D>*/( |
+ dynamic/*=T*/ callback( |
+ dynamic/*=A*/ a, dynamic/*=B*/ b, dynamic/*=C*/ c, dynamic/*=D*/ d), |
+ {int count: 1, |
+ int max: 0, |
+ String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError("expectAsync4() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, count, max, |
+ id: id, reason: reason) |
+ .max4; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 5 is expected to be |
+/// called [count] number of times (by default 1). |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// The test framework will wait for the callback to run the [count] times |
+/// before it considers the current test to be complete. |
+/// |
+/// [max] can be used to specify an upper bound on the number of calls; if this |
+/// is exceeded the test will fail. If [max] is `0` (the default), the callback |
+/// is expected to be called exactly [count] times. If [max] is `-1`, the |
+/// callback is allowed to be called any number of times greater than [count]. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with five arguments. See also |
+/// [expectAsync0], [expectAsync1], [expectAsync2], [expectAsync3], |
+/// [expectAsync4], and [expectAsync6] for callbacks with different arity. |
+Func5<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/, dynamic/*=C*/, |
+ dynamic/*=D*/, dynamic/*=E*/ > |
+ expectAsync5/*<T, A, B, C, D, E>*/( |
+ dynamic/*=T*/ callback(dynamic/*=A*/ a, dynamic/*=B*/ b, |
+ dynamic/*=C*/ c, dynamic/*=D*/ d, dynamic/*=E*/ e), |
+ {int count: 1, |
+ int max: 0, |
+ String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError("expectAsync5() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, count, max, |
+ id: id, reason: reason) |
+ .max5; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 6 is expected to be |
+/// called [count] number of times (by default 1). |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// The test framework will wait for the callback to run the [count] times |
+/// before it considers the current test to be complete. |
+/// |
+/// [max] can be used to specify an upper bound on the number of calls; if this |
+/// is exceeded the test will fail. If [max] is `0` (the default), the callback |
+/// is expected to be called exactly [count] times. If [max] is `-1`, the |
+/// callback is allowed to be called any number of times greater than [count]. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with six arguments. See also |
+/// [expectAsync0], [expectAsync1], [expectAsync2], [expectAsync3], |
+/// [expectAsync4], and [expectAsync5] for callbacks with different arity. |
+Func6<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/, dynamic/*=C*/, |
+ dynamic/*=D*/, dynamic/*=E*/, dynamic/*=F*/ > |
+ expectAsync6/*<T, A, B, C, D, E, F>*/( |
+ dynamic/*=T*/ callback(dynamic/*=A*/ a, dynamic/*=B*/ b, |
+ dynamic/*=C*/ c, dynamic/*=D*/ d, dynamic/*=E*/ e, dynamic/*=F*/ f), |
+ {int count: 1, |
+ int max: 0, |
+ String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError("expectAsync6() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, count, max, |
+ id: id, reason: reason) |
+ .max6; |
+} |
+ |
+/// This function is deprecated because it doesn't work well with strong mode. |
+/// Use [expectAsyncUntil0], [expectAsyncUntil1], |
+/// [expectAsyncUntil2], [expectAsyncUntil3], [expectAsyncUntil4], |
+/// [expectAsyncUntil5], or [expectAsyncUntil6] instead. |
+@Deprecated("Will be removed in 0.13.0") |
Function expectAsyncUntil(Function callback, bool isDone(), |
{String id, String reason}) { |
if (Invoker.current == null) { |
@@ -244,5 +503,236 @@ Function expectAsyncUntil(Function callback, bool isDone(), |
} |
return new _ExpectedFunction(callback, 0, -1, |
- id: id, reason: reason, isDone: isDone).func; |
+ id: id, reason: reason, isDone: isDone) |
+ .func; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 0 is expected to be |
+/// called until [isDone] returns true. |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// [isDone] is called after each time the function is run. Only when it returns |
+/// true will the callback be considered complete. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with zero arguments. See also |
+/// [expectAsyncUntil1], [expectAsyncUntil2], [expectAsyncUntil3], |
+/// [expectAsyncUntil4], [expectAsyncUntil5], and [expectAsyncUntil6] for |
+/// callbacks with different arity. |
+Func0<dynamic/*=T*/ > expectAsyncUntil0/*<T>*/( |
+ dynamic/*=T*/ callback(), bool isDone(), |
+ {String id, String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError( |
+ "expectAsyncUntil0() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
+ id: id, reason: reason, isDone: isDone) |
+ .max0; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 1 is expected to be |
+/// called until [isDone] returns true. |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// [isDone] is called after each time the function is run. Only when it returns |
+/// true will the callback be considered complete. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with one argument. See also |
+/// [expectAsyncUntil0], [expectAsyncUntil2], [expectAsyncUntil3], |
+/// [expectAsyncUntil4], [expectAsyncUntil5], and [expectAsyncUntil6] for |
+/// callbacks with different arity. |
+Func1<dynamic/*=T*/, dynamic/*=A*/ > expectAsyncUntil1/*<T, A>*/( |
+ dynamic/*=T*/ callback(dynamic/*=A*/ a), bool isDone(), |
+ {String id, String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError( |
+ "expectAsyncUntil1() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
+ id: id, reason: reason, isDone: isDone) |
+ .max1; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 2 is expected to be |
+/// called until [isDone] returns true. |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// [isDone] is called after each time the function is run. Only when it returns |
+/// true will the callback be considered complete. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with two arguments. See also |
+/// [expectAsyncUntil0], [expectAsyncUntil1], [expectAsyncUntil3], |
+/// [expectAsyncUntil4], [expectAsyncUntil5], and [expectAsyncUntil6] for |
+/// callbacks with different arity. |
+Func2<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/ > |
+ expectAsyncUntil2/*<T, A, B>*/( |
+ dynamic/*=T*/ callback(dynamic/*=A*/ a, dynamic/*=B*/ b), bool isDone(), |
+ {String id, String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError( |
+ "expectAsyncUntil2() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
+ id: id, reason: reason, isDone: isDone) |
+ .max2; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 3 is expected to be |
+/// called until [isDone] returns true. |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// [isDone] is called after each time the function is run. Only when it returns |
+/// true will the callback be considered complete. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with three arguments. See also |
+/// [expectAsyncUntil0], [expectAsyncUntil1], [expectAsyncUntil2], |
+/// [expectAsyncUntil4], [expectAsyncUntil5], and [expectAsyncUntil6] for |
+/// callbacks with different arity. |
+Func3<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/, dynamic/*=C*/ > |
+ expectAsyncUntil3/*<T, A, B, C>*/( |
+ dynamic/*=T*/ callback( |
+ dynamic/*=A*/ a, dynamic/*=B*/ b, dynamic/*=C*/ c), |
+ bool isDone(), |
+ {String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError( |
+ "expectAsyncUntil3() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
+ id: id, reason: reason, isDone: isDone) |
+ .max3; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 4 is expected to be |
+/// called until [isDone] returns true. |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// [isDone] is called after each time the function is run. Only when it returns |
+/// true will the callback be considered complete. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with four arguments. See also |
+/// [expectAsyncUntil0], [expectAsyncUntil1], [expectAsyncUntil2], |
+/// [expectAsyncUntil3], [expectAsyncUntil5], and [expectAsyncUntil6] for |
+/// callbacks with different arity. |
+Func4<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/, dynamic/*=C*/, |
+ dynamic/*=D*/ > |
+ expectAsyncUntil4/*<T, A, B, C, D>*/( |
+ dynamic/*=T*/ callback( |
+ dynamic/*=A*/ a, dynamic/*=B*/ b, dynamic/*=C*/ c, dynamic/*=D*/ d), |
+ bool isDone(), |
+ {String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError( |
+ "expectAsyncUntil4() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
+ id: id, reason: reason, isDone: isDone) |
+ .max4; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 5 is expected to be |
+/// called until [isDone] returns true. |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// [isDone] is called after each time the function is run. Only when it returns |
+/// true will the callback be considered complete. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with five arguments. See also |
+/// [expectAsyncUntil0], [expectAsyncUntil1], [expectAsyncUntil2], |
+/// [expectAsyncUntil3], [expectAsyncUntil4], and [expectAsyncUntil6] for |
+/// callbacks with different arity. |
+Func5<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/, dynamic/*=C*/, |
+ dynamic/*=D*/, dynamic/*=E*/ > |
+ expectAsyncUntil5/*<T, A, B, C, D, E>*/( |
+ dynamic/*=T*/ callback(dynamic/*=A*/ a, dynamic/*=B*/ b, |
+ dynamic/*=C*/ c, dynamic/*=D*/ d, dynamic/*=E*/ e), |
+ bool isDone(), |
+ {String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError( |
+ "expectAsyncUntil5() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
+ id: id, reason: reason, isDone: isDone) |
+ .max5; |
+} |
+ |
+/// Informs the framework that the given [callback] of arity 6 is expected to be |
+/// called until [isDone] returns true. |
+/// |
+/// Returns a wrapped function that should be used as a replacement of the |
+/// original callback. |
+/// |
+/// [isDone] is called after each time the function is run. Only when it returns |
+/// true will the callback be considered complete. |
+/// |
+/// Both [id] and [reason] are optional and provide extra information about the |
+/// callback when debugging. [id] should be the name of the callback, while |
+/// [reason] should be the reason the callback is expected to be called. |
+/// |
+/// This method takes callbacks with six arguments. See also |
+/// [expectAsyncUntil0], [expectAsyncUntil1], [expectAsyncUntil2], |
+/// [expectAsyncUntil3], [expectAsyncUntil4], and [expectAsyncUntil5] for |
+/// callbacks with different arity. |
+Func6<dynamic/*=T*/, dynamic/*=A*/, dynamic/*=B*/, dynamic/*=C*/, |
+ dynamic/*=D*/, dynamic/*=E*/, dynamic/*=F*/ > |
+ expectAsyncUntil6/*<T, A, B, C, D, E, F>*/( |
+ dynamic/*=T*/ callback(dynamic/*=A*/ a, dynamic/*=B*/ b, |
+ dynamic/*=C*/ c, dynamic/*=D*/ d, dynamic/*=E*/ e, dynamic/*=F*/ f), |
+ bool isDone(), |
+ {String id, |
+ String reason}) { |
+ if (Invoker.current == null) { |
+ throw new StateError( |
+ "expectAsyncUntil() may only be called within a test."); |
+ } |
+ |
+ return new _ExpectedFunction/*<T>*/(callback, 0, -1, |
+ id: id, reason: reason, isDone: isDone) |
+ .max6; |
} |