Remove tear-off mocking in refresh_test (#15869)
* Remove tear-off mocking in refresh_test
* Comments
* Analyzer fix
* Final final final final mushroom mushroom!
* Fix for Dart 1 AND Dart 2 semantics; anonymous closure over tear-off
* Final final
diff --git a/packages/flutter/test/cupertino/refresh_test.dart b/packages/flutter/test/cupertino/refresh_test.dart
index de41431..af07d23 100644
--- a/packages/flutter/test/cupertino/refresh_test.dart
+++ b/packages/flutter/test/cupertino/refresh_test.dart
@@ -19,48 +19,46 @@
/// returns.
Widget refreshIndicator;
+ /// These two Functions are required to avoid tearing off of the MockHelper object,
+ /// which is not supported when using Dart 2 runtime semantics.
+ final Function builder = (BuildContext context, RefreshIndicatorMode refreshState,
+ double pulledExtent,
+ double refreshTriggerPullDistance,
+ double refreshIndicatorExtent) =>
+ mockHelper.builder(context, refreshState, pulledExtent, refreshTriggerPullDistance,
+ refreshIndicatorExtent);
+
+ final Function onRefresh = () => mockHelper.refreshTask();
+
setUp(() {
mockHelper = new MockHelper();
refreshCompleter = new Completer<void>.sync();
refreshIndicator = new Container();
- when(mockHelper.builder).thenReturn(
- (
- BuildContext context,
- RefreshIndicatorMode refreshState,
- double pulledExtent,
- double refreshTriggerPullDistance,
- double refreshIndicatorExtent,
- ) {
- if (refreshState == RefreshIndicatorMode.inactive) {
- throw new TestFailure(
- 'RefreshControlIndicatorBuilder should never be called with the '
- "inactive state because there's nothing to build in that case"
- );
- }
- if (pulledExtent < 0.0) {
- throw new TestFailure('The pulledExtent should never be less than 0.0');
- }
- if (refreshTriggerPullDistance < 0.0) {
- throw new TestFailure('The refreshTriggerPullDistance should never be less than 0.0');
- }
- if (refreshIndicatorExtent < 0.0) {
- throw new TestFailure('The refreshIndicatorExtent should never be less than 0.0');
- }
- // This closure is now shadowing the mock implementation which logs.
- // Pass the call to the mock to log.
- mockHelper.builder(
- context,
- refreshState,
- pulledExtent,
- refreshTriggerPullDistance,
- refreshIndicatorExtent,
+ when(mockHelper.builder(
+ typed(any), typed(any), typed(any), typed(any), typed(any)))
+ .thenAnswer((Invocation i) {
+ final RefreshIndicatorMode refreshState = i.positionalArguments[1];
+ final double pulledExtent = i.positionalArguments[2];
+ final double refreshTriggerPullDistance = i.positionalArguments[3];
+ final double refreshIndicatorExtent = i.positionalArguments[4];
+ if (refreshState == RefreshIndicatorMode.inactive) {
+ throw new TestFailure(
+ 'RefreshControlIndicatorBuilder should never be called with the '
+ "inactive state because there's nothing to build in that case"
);
- return refreshIndicator;
- },
- );
- // Make the function reference itself concrete.
- when(mockHelper.refreshTask).thenReturn(() => mockHelper.refreshTask());
+ }
+ if (pulledExtent < 0.0) {
+ throw new TestFailure('The pulledExtent should never be less than 0.0');
+ }
+ if (refreshTriggerPullDistance < 0.0) {
+ throw new TestFailure('The refreshTriggerPullDistance should never be less than 0.0');
+ }
+ if (refreshIndicatorExtent < 0.0) {
+ throw new TestFailure('The refreshIndicatorExtent should never be less than 0.0');
+ }
+ return refreshIndicator;
+ });
when(mockHelper.refreshTask()).thenReturn(refreshCompleter.future);
});
@@ -88,7 +86,7 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
+ builder: builder,
),
buildAListOfStuff(),
],
@@ -96,9 +94,6 @@
),
);
- // The function is referenced once while passing into CupertinoRefreshControl
- // but never called.
- verify(mockHelper.builder);
verifyNoMoreInteractions(mockHelper);
expect(
@@ -118,7 +113,7 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
+ builder: builder,
),
buildAListOfStuff(),
],
@@ -131,8 +126,7 @@
await tester.pump();
// The function is referenced once while passing into CupertinoRefreshControl
- // but never called.
- verify(mockHelper.builder);
+ // and is called.
verify(mockHelper.builder(
typed(any),
RefreshIndicatorMode.drag,
@@ -161,7 +155,7 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
+ builder: builder,
),
buildAListOfStuff(),
],
@@ -173,9 +167,6 @@
await tester.drag(find.text('0'), const Offset(0.0, 50.0));
await tester.pump();
- // The function is referenced once while passing into CupertinoRefreshControl
- // but never called.
- verify(mockHelper.builder);
verifyNoMoreInteractions(mockHelper);
expect(
@@ -196,7 +187,7 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
+ builder: builder,
),
buildAListOfStuff(),
],
@@ -212,7 +203,6 @@
await tester.pump(const Duration(seconds: 3));
verifyInOrder(<void>[
- mockHelper.builder,
mockHelper.builder(
typed(any),
RefreshIndicatorMode.drag,
@@ -261,8 +251,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -279,8 +269,6 @@
await tester.pump();
verifyInOrder(<void>[
- mockHelper.builder,
- mockHelper.refreshTask,
mockHelper.builder(
typed(any),
RefreshIndicatorMode.drag,
@@ -325,8 +313,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -340,8 +328,6 @@
await tester.pump(const Duration(milliseconds: 50));
verifyInOrder(<void>[
- mockHelper.builder,
- mockHelper.refreshTask,
mockHelper.builder(
typed(any),
RefreshIndicatorMode.armed,
@@ -404,8 +390,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -484,8 +470,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -561,8 +547,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -650,8 +636,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -706,8 +692,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -794,8 +780,8 @@
slivers: <Widget>[
buildAListOfStuff(),
new CupertinoRefreshControl( // it's in the middle now.
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -807,8 +793,6 @@
await tester.fling(find.byType(Container).first, const Offset(0.0, -200.0), 3000.0);
- verify(mockHelper.builder);
- verify(mockHelper.refreshTask);
verifyNoMoreInteractions(mockHelper);
debugDefaultTargetPlatformOverride = null;
@@ -828,7 +812,7 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
+ builder: builder,
),
buildAListOfStuff(),
],
@@ -879,7 +863,7 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
+ builder: builder,
),
buildAListOfStuff(),
],
@@ -904,7 +888,7 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
+ builder: builder,
),
buildAListOfStuff(),
],
@@ -939,7 +923,7 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
+ builder: builder,
refreshTriggerPullDistance: 80.0,
),
buildAListOfStuff(),
@@ -977,8 +961,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
refreshTriggerPullDistance: 90.0,
refreshIndicatorExtent: 50.0,
),
@@ -1022,8 +1006,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -1074,8 +1058,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -1137,8 +1121,8 @@
child: new CustomScrollView(
slivers: <Widget>[
new CupertinoRefreshControl(
- builder: mockHelper.builder,
- onRefresh: mockHelper.refreshTask,
+ builder: builder,
+ onRefresh: onRefresh,
),
buildAListOfStuff(),
],
@@ -1204,7 +1188,7 @@
slivers: <Widget>[
new CupertinoRefreshControl(
builder: null,
- onRefresh: mockHelper.refreshTask,
+ onRefresh: onRefresh,
refreshIndicatorExtent: 0.0,
),
buildAListOfStuff(),
@@ -1257,4 +1241,4 @@
);
Future<void> refreshTask();
-}
\ No newline at end of file
+}