Commit 2eebf6a0 authored by Sam Rawlins's avatar Sam Rawlins Committed by Siva

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
parent 3fd0423a
...@@ -19,48 +19,46 @@ void main() { ...@@ -19,48 +19,46 @@ void main() {
/// returns. /// returns.
Widget refreshIndicator; 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(() { setUp(() {
mockHelper = new MockHelper(); mockHelper = new MockHelper();
refreshCompleter = new Completer<void>.sync(); refreshCompleter = new Completer<void>.sync();
refreshIndicator = new Container(); refreshIndicator = new Container();
when(mockHelper.builder).thenReturn( when(mockHelper.builder(
( typed(any), typed(any), typed(any), typed(any), typed(any)))
BuildContext context, .thenAnswer((Invocation i) {
RefreshIndicatorMode refreshState, final RefreshIndicatorMode refreshState = i.positionalArguments[1];
double pulledExtent, final double pulledExtent = i.positionalArguments[2];
double refreshTriggerPullDistance, final double refreshTriggerPullDistance = i.positionalArguments[3];
double refreshIndicatorExtent, final double refreshIndicatorExtent = i.positionalArguments[4];
) { if (refreshState == RefreshIndicatorMode.inactive) {
if (refreshState == RefreshIndicatorMode.inactive) { throw new TestFailure(
throw new TestFailure( 'RefreshControlIndicatorBuilder should never be called with the '
'RefreshControlIndicatorBuilder should never be called with the ' "inactive state because there's nothing to build in that case"
"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,
); );
return refreshIndicator; }
}, if (pulledExtent < 0.0) {
); throw new TestFailure('The pulledExtent should never be less than 0.0');
// Make the function reference itself concrete. }
when(mockHelper.refreshTask).thenReturn(() => mockHelper.refreshTask()); 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); when(mockHelper.refreshTask()).thenReturn(refreshCompleter.future);
}); });
...@@ -88,7 +86,7 @@ void main() { ...@@ -88,7 +86,7 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -96,9 +94,6 @@ void main() { ...@@ -96,9 +94,6 @@ void main() {
), ),
); );
// The function is referenced once while passing into CupertinoRefreshControl
// but never called.
verify(mockHelper.builder);
verifyNoMoreInteractions(mockHelper); verifyNoMoreInteractions(mockHelper);
expect( expect(
...@@ -118,7 +113,7 @@ void main() { ...@@ -118,7 +113,7 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -131,8 +126,7 @@ void main() { ...@@ -131,8 +126,7 @@ void main() {
await tester.pump(); await tester.pump();
// The function is referenced once while passing into CupertinoRefreshControl // The function is referenced once while passing into CupertinoRefreshControl
// but never called. // and is called.
verify(mockHelper.builder);
verify(mockHelper.builder( verify(mockHelper.builder(
typed(any), typed(any),
RefreshIndicatorMode.drag, RefreshIndicatorMode.drag,
...@@ -161,7 +155,7 @@ void main() { ...@@ -161,7 +155,7 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -173,9 +167,6 @@ void main() { ...@@ -173,9 +167,6 @@ void main() {
await tester.drag(find.text('0'), const Offset(0.0, 50.0)); await tester.drag(find.text('0'), const Offset(0.0, 50.0));
await tester.pump(); await tester.pump();
// The function is referenced once while passing into CupertinoRefreshControl
// but never called.
verify(mockHelper.builder);
verifyNoMoreInteractions(mockHelper); verifyNoMoreInteractions(mockHelper);
expect( expect(
...@@ -196,7 +187,7 @@ void main() { ...@@ -196,7 +187,7 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -212,7 +203,6 @@ void main() { ...@@ -212,7 +203,6 @@ void main() {
await tester.pump(const Duration(seconds: 3)); await tester.pump(const Duration(seconds: 3));
verifyInOrder(<void>[ verifyInOrder(<void>[
mockHelper.builder,
mockHelper.builder( mockHelper.builder(
typed(any), typed(any),
RefreshIndicatorMode.drag, RefreshIndicatorMode.drag,
...@@ -261,8 +251,8 @@ void main() { ...@@ -261,8 +251,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -279,8 +269,6 @@ void main() { ...@@ -279,8 +269,6 @@ void main() {
await tester.pump(); await tester.pump();
verifyInOrder(<void>[ verifyInOrder(<void>[
mockHelper.builder,
mockHelper.refreshTask,
mockHelper.builder( mockHelper.builder(
typed(any), typed(any),
RefreshIndicatorMode.drag, RefreshIndicatorMode.drag,
...@@ -325,8 +313,8 @@ void main() { ...@@ -325,8 +313,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -340,8 +328,6 @@ void main() { ...@@ -340,8 +328,6 @@ void main() {
await tester.pump(const Duration(milliseconds: 50)); await tester.pump(const Duration(milliseconds: 50));
verifyInOrder(<void>[ verifyInOrder(<void>[
mockHelper.builder,
mockHelper.refreshTask,
mockHelper.builder( mockHelper.builder(
typed(any), typed(any),
RefreshIndicatorMode.armed, RefreshIndicatorMode.armed,
...@@ -404,8 +390,8 @@ void main() { ...@@ -404,8 +390,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -484,8 +470,8 @@ void main() { ...@@ -484,8 +470,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -561,8 +547,8 @@ void main() { ...@@ -561,8 +547,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -650,8 +636,8 @@ void main() { ...@@ -650,8 +636,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -706,8 +692,8 @@ void main() { ...@@ -706,8 +692,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -794,8 +780,8 @@ void main() { ...@@ -794,8 +780,8 @@ void main() {
slivers: <Widget>[ slivers: <Widget>[
buildAListOfStuff(), buildAListOfStuff(),
new CupertinoRefreshControl( // it's in the middle now. new CupertinoRefreshControl( // it's in the middle now.
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -807,8 +793,6 @@ void main() { ...@@ -807,8 +793,6 @@ void main() {
await tester.fling(find.byType(Container).first, const Offset(0.0, -200.0), 3000.0); await tester.fling(find.byType(Container).first, const Offset(0.0, -200.0), 3000.0);
verify(mockHelper.builder);
verify(mockHelper.refreshTask);
verifyNoMoreInteractions(mockHelper); verifyNoMoreInteractions(mockHelper);
debugDefaultTargetPlatformOverride = null; debugDefaultTargetPlatformOverride = null;
...@@ -828,7 +812,7 @@ void main() { ...@@ -828,7 +812,7 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -879,7 +863,7 @@ void main() { ...@@ -879,7 +863,7 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -904,7 +888,7 @@ void main() { ...@@ -904,7 +888,7 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -939,7 +923,7 @@ void main() { ...@@ -939,7 +923,7 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
refreshTriggerPullDistance: 80.0, refreshTriggerPullDistance: 80.0,
), ),
buildAListOfStuff(), buildAListOfStuff(),
...@@ -977,8 +961,8 @@ void main() { ...@@ -977,8 +961,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
refreshTriggerPullDistance: 90.0, refreshTriggerPullDistance: 90.0,
refreshIndicatorExtent: 50.0, refreshIndicatorExtent: 50.0,
), ),
...@@ -1022,8 +1006,8 @@ void main() { ...@@ -1022,8 +1006,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -1074,8 +1058,8 @@ void main() { ...@@ -1074,8 +1058,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -1137,8 +1121,8 @@ void main() { ...@@ -1137,8 +1121,8 @@ void main() {
child: new CustomScrollView( child: new CustomScrollView(
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: mockHelper.builder, builder: builder,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
), ),
buildAListOfStuff(), buildAListOfStuff(),
], ],
...@@ -1204,7 +1188,7 @@ void main() { ...@@ -1204,7 +1188,7 @@ void main() {
slivers: <Widget>[ slivers: <Widget>[
new CupertinoRefreshControl( new CupertinoRefreshControl(
builder: null, builder: null,
onRefresh: mockHelper.refreshTask, onRefresh: onRefresh,
refreshIndicatorExtent: 0.0, refreshIndicatorExtent: 0.0,
), ),
buildAListOfStuff(), buildAListOfStuff(),
...@@ -1257,4 +1241,4 @@ class MockHelper extends Mock { ...@@ -1257,4 +1241,4 @@ class MockHelper extends Mock {
); );
Future<void> refreshTask(); Future<void> refreshTask();
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment