@@ -6,11 +6,13 @@ import 'dart:math';
66
77import 'package:flutter/foundation.dart' ;
88import 'package:flutter/material.dart' ;
9+ import 'package:flutter/services.dart' ;
910import 'package:flutter_test/flutter_test.dart' ;
1011import 'package:mockito/annotations.dart' ;
1112import 'package:mockito/mockito.dart' ;
1213import 'package:webview_flutter_android/src/android_webview.dart'
1314 as android_webview;
15+ import 'package:webview_flutter_android/src/instance_manager.dart' ;
1416import 'package:webview_flutter_android/src/v4/src/android_navigation_delegate.dart' ;
1517import 'package:webview_flutter_android/src/v4/src/android_proxy.dart' ;
1618import 'package:webview_flutter_android/src/v4/src/android_webview_controller.dart' ;
@@ -20,80 +22,84 @@ import 'android_webview_controller_test.mocks.dart';
2022
2123@GenerateNiceMocks (< MockSpec <Object >> [
2224 MockSpec <AndroidNavigationDelegate >(),
25+ MockSpec <AndroidWebViewController >(),
2326 MockSpec <AndroidWebViewProxy >(),
27+ MockSpec <AndroidWebViewWidgetCreationParams >(),
2428 MockSpec <android_webview.FlutterAssetManager >(),
2529 MockSpec <android_webview.JavaScriptChannel >(),
2630 MockSpec <android_webview.WebChromeClient >(),
2731 MockSpec <android_webview.WebSettings >(),
2832 MockSpec <android_webview.WebView >(),
2933 MockSpec <android_webview.WebViewClient >(),
3034 MockSpec <android_webview.WebStorage >(),
35+ MockSpec <BuildContext >(),
36+ MockSpec <InstanceManager >(),
3137])
3238void main () {
3339 TestWidgetsFlutterBinding .ensureInitialized ();
3440
35- group ('AndroidWebViewController' , () {
36- AndroidWebViewController createControllerWithMocks ({
37- android_webview.FlutterAssetManager ? mockFlutterAssetManager,
38- android_webview.JavaScriptChannel ? mockJavaScriptChannel,
39- android_webview.WebChromeClient ? mockWebChromeClient,
40- android_webview.WebView ? mockWebView,
41- android_webview.WebViewClient ? mockWebViewClient,
42- android_webview.WebStorage ? mockWebStorage,
43- }) {
44- final android_webview.WebView nonNullMockWebView =
45- mockWebView ?? MockWebView ();
46-
47- final AndroidWebViewControllerCreationParams creationParams =
48- AndroidWebViewControllerCreationParams (
49- androidWebStorage: mockWebStorage ?? MockWebStorage (),
50- androidWebViewProxy: AndroidWebViewProxy (
51- createAndroidWebChromeClient: (
52- {void Function (android_webview.WebView , int )?
53- onProgressChanged}) =>
54- mockWebChromeClient ?? MockWebChromeClient (),
55- createAndroidWebView: ({required bool useHybridComposition}) =>
56- nonNullMockWebView,
57- createAndroidWebViewClient: ({
58- void Function (android_webview.WebView webView, String url)?
59- onPageFinished,
60- void Function (android_webview.WebView webView, String url)?
61- onPageStarted,
62- @Deprecated ('Only called on Android version < 23.' )
63- void Function (
64- android_webview.WebView webView,
65- int errorCode,
66- String description,
67- String failingUrl,
68- )?
69- onReceivedError,
70- void Function (
71- android_webview.WebView webView,
72- android_webview.WebResourceRequest request,
73- android_webview.WebResourceError error,
74- )?
75- onReceivedRequestError,
76- void Function (
77- android_webview.WebView webView,
78- android_webview.WebResourceRequest request,
79- )?
80- requestLoading,
81- void Function (android_webview.WebView webView, String url)?
82- urlLoading,
83- }) =>
84- mockWebViewClient ?? MockWebViewClient (),
85- createFlutterAssetManager: () =>
86- mockFlutterAssetManager ?? MockFlutterAssetManager (),
87- createJavaScriptChannel: (
88- String channelName, {
89- required void Function (String ) postMessage,
90- }) =>
91- mockJavaScriptChannel ?? MockJavaScriptChannel (),
92- ));
93-
94- return AndroidWebViewController (creationParams);
95- }
41+ AndroidWebViewController createControllerWithMocks ({
42+ android_webview.FlutterAssetManager ? mockFlutterAssetManager,
43+ android_webview.JavaScriptChannel ? mockJavaScriptChannel,
44+ android_webview.WebChromeClient ? mockWebChromeClient,
45+ android_webview.WebView ? mockWebView,
46+ android_webview.WebViewClient ? mockWebViewClient,
47+ android_webview.WebStorage ? mockWebStorage,
48+ }) {
49+ final android_webview.WebView nonNullMockWebView =
50+ mockWebView ?? MockWebView ();
51+
52+ final AndroidWebViewControllerCreationParams creationParams =
53+ AndroidWebViewControllerCreationParams (
54+ androidWebStorage: mockWebStorage ?? MockWebStorage (),
55+ androidWebViewProxy: AndroidWebViewProxy (
56+ createAndroidWebChromeClient: (
57+ {void Function (android_webview.WebView , int )?
58+ onProgressChanged}) =>
59+ mockWebChromeClient ?? MockWebChromeClient (),
60+ createAndroidWebView: ({required bool useHybridComposition}) =>
61+ nonNullMockWebView,
62+ createAndroidWebViewClient: ({
63+ void Function (android_webview.WebView webView, String url)?
64+ onPageFinished,
65+ void Function (android_webview.WebView webView, String url)?
66+ onPageStarted,
67+ @Deprecated ('Only called on Android version < 23.' )
68+ void Function (
69+ android_webview.WebView webView,
70+ int errorCode,
71+ String description,
72+ String failingUrl,
73+ )?
74+ onReceivedError,
75+ void Function (
76+ android_webview.WebView webView,
77+ android_webview.WebResourceRequest request,
78+ android_webview.WebResourceError error,
79+ )?
80+ onReceivedRequestError,
81+ void Function (
82+ android_webview.WebView webView,
83+ android_webview.WebResourceRequest request,
84+ )?
85+ requestLoading,
86+ void Function (android_webview.WebView webView, String url)?
87+ urlLoading,
88+ }) =>
89+ mockWebViewClient ?? MockWebViewClient (),
90+ createFlutterAssetManager: () =>
91+ mockFlutterAssetManager ?? MockFlutterAssetManager (),
92+ createJavaScriptChannel: (
93+ String channelName, {
94+ required void Function (String ) postMessage,
95+ }) =>
96+ mockJavaScriptChannel ?? MockJavaScriptChannel (),
97+ ));
98+
99+ return AndroidWebViewController (creationParams);
100+ }
96101
102+ group ('AndroidWebViewController' , () {
97103 AndroidJavaScriptChannelParams
98104 createAndroidJavaScriptChannelParamsWithMocks ({
99105 String ? name,
@@ -693,4 +699,31 @@ void main() {
693699 verify (mockSettings.setUserAgentString ('Test Framework' )).called (1 );
694700 });
695701 });
702+
703+ group ('AndroidWebViewWidget' , () {
704+ test ('Builds AndroidView using supplied parameters' , () async {
705+ final MockBuildContext mockContext = MockBuildContext ();
706+ final MockAndroidWebViewWidgetCreationParams mockParams =
707+ MockAndroidWebViewWidgetCreationParams ();
708+ final MockInstanceManager mockInstanceManager = MockInstanceManager ();
709+ final MockWebView mockWebView = MockWebView ();
710+ final AndroidWebViewController controller = createControllerWithMocks (mockWebView: mockWebView);
711+ final AndroidWebViewWidget webViewWidget =
712+ AndroidWebViewWidget (mockParams);
713+
714+ when (mockParams.instanceManager).thenReturn (mockInstanceManager);
715+ when (mockParams.controller).thenReturn (controller);
716+ when (mockInstanceManager.getIdentifier (mockWebView)).thenReturn (42 );
717+
718+ final AndroidView androidView =
719+ webViewWidget.build (mockContext) as AndroidView ;
720+
721+ expect (androidView.viewType, 'plugins.flutter.io/webview' );
722+ expect (androidView.creationParamsCodec, const StandardMessageCodec ());
723+ expect (androidView.creationParams, 42 );
724+ verify (mockParams.gestureRecognizers).called (1 );
725+ verify (mockParams.layoutDirection).called (1 );
726+ verify (mockParams.instanceManager).called (1 );
727+ });
728+ });
696729}
0 commit comments