import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:provider/provider.dart'; import 'common.dart'; class ConsumerBuilderMock extends Mock { Widget call(Combined foo); } class Combined { final A a; final B b; final C c; final D d; final E e; final F f; final Widget child; final BuildContext context; Combined(this.context, this.child, this.a, [this.b, this.c, this.d, this.e, this.f]); @override // ignore: hash_and_equals bool operator ==(Object other) => other is Combined && other.context == context && other.child == child && other.a == a && other.b == b && other.c == c && other.e == e && other.f == f; } void main() { final a = A(); final b = B(); final c = C(); final d = D(); final e = E(); final f = F(); final provider = MultiProvider( providers: [ Provider.value(value: a), Provider.value(value: b), Provider.value(value: c), Provider.value(value: d), Provider.value(value: e), Provider.value(value: f), ], ); final mock = ConsumerBuilderMock(); setUp(() { when(mock(any)).thenReturn(Container()); }); tearDown(() { clearInteractions(mock); }); group('consumer', () { testWidgets('obtains value from Provider', (tester) async { final key = GlobalKey(); final child = Container(); await tester.pumpWidget( provider.cloneWithChild( Consumer( key: key, builder: (context, value, child) => mock(Combined(context, child, value)), child: child, ), ), ); verify(mock(Combined(key.currentContext, child, a))); }); testWidgets('crashed with no builder', (tester) async { expect( () => Consumer(builder: null), throwsAssertionError, ); }); }); group('consumer2', () { testWidgets('obtains value from Provider', (tester) async { final key = GlobalKey(); final child = Container(); await tester.pumpWidget( provider.cloneWithChild( Consumer2( key: key, builder: (context, value, v2, child) => mock(Combined(context, child, value, v2)), child: child, ), ), ); verify(mock(Combined(key.currentContext, child, a, b))); }); testWidgets('crashed with no builder', (tester) async { expect( () => Consumer2(builder: null), throwsAssertionError, ); }); }); group('consumer3', () { testWidgets('obtains value from Provider', (tester) async { final key = GlobalKey(); final child = Container(); await tester.pumpWidget( provider.cloneWithChild( Consumer3( key: key, builder: (context, value, v2, v3, child) => mock(Combined(context, child, value, v2, v3)), child: child, ), ), ); verify(mock(Combined(key.currentContext, child, a, b, c))); }); testWidgets('crashed with no builder', (tester) async { expect( () => Consumer3(builder: null), throwsAssertionError, ); }); }); group('consumer4', () { testWidgets('obtains value from Provider', (tester) async { final key = GlobalKey(); final child = Container(); await tester.pumpWidget( provider.cloneWithChild( Consumer4( key: key, builder: (context, value, v2, v3, v4, child) => mock(Combined(context, child, value, v2, v3, v4)), child: child, ), ), ); verify(mock(Combined(key.currentContext, child, a, b, c, d))); }); testWidgets('crashed with no builder', (tester) async { expect( () => Consumer4(builder: null), throwsAssertionError, ); }); }); group('consumer5', () { testWidgets('obtains value from Provider', (tester) async { final key = GlobalKey(); final child = Container(); await tester.pumpWidget( provider.cloneWithChild( Consumer5( key: key, builder: (context, value, v2, v3, v4, v5, child) => mock(Combined(context, child, value, v2, v3, v4, v5)), child: child, ), ), ); verify(mock(Combined(key.currentContext, child, a, b, c, d, e))); }); testWidgets('crashed with no builder', (tester) async { expect( () => Consumer5(builder: null), throwsAssertionError, ); }); }); group('consumer6', () { testWidgets('obtains value from Provider', (tester) async { final key = GlobalKey(); final child = Container(); await tester.pumpWidget( provider.cloneWithChild( Consumer6( key: key, builder: (context, value, v2, v3, v4, v5, v6, child) => mock(Combined(context, child, value, v2, v3, v4, v5, v6)), child: child, ), ), ); verify(mock(Combined(key.currentContext, child, a, b, c, d, e, f))); }); testWidgets('crashed with no builder', (tester) async { expect( () => Consumer6(builder: null), throwsAssertionError, ); }); }); }