@@ -6,11 +6,13 @@ import 'dart:math';
6
6
7
7
import 'package:flutter/foundation.dart' ;
8
8
import 'package:flutter/material.dart' ;
9
+ import 'package:flutter/services.dart' ;
9
10
import 'package:flutter_test/flutter_test.dart' ;
10
11
import 'package:mockito/annotations.dart' ;
11
12
import 'package:mockito/mockito.dart' ;
12
13
import 'package:webview_flutter_android/src/android_webview.dart'
13
14
as android_webview;
15
+ import 'package:webview_flutter_android/src/instance_manager.dart' ;
14
16
import 'package:webview_flutter_android/src/v4/src/android_navigation_delegate.dart' ;
15
17
import 'package:webview_flutter_android/src/v4/src/android_proxy.dart' ;
16
18
import 'package:webview_flutter_android/src/v4/src/android_webview_controller.dart' ;
@@ -20,80 +22,84 @@ import 'android_webview_controller_test.mocks.dart';
20
22
21
23
@GenerateNiceMocks (< MockSpec <Object >> [
22
24
MockSpec <AndroidNavigationDelegate >(),
25
+ MockSpec <AndroidWebViewController >(),
23
26
MockSpec <AndroidWebViewProxy >(),
27
+ MockSpec <AndroidWebViewWidgetCreationParams >(),
24
28
MockSpec <android_webview.FlutterAssetManager >(),
25
29
MockSpec <android_webview.JavaScriptChannel >(),
26
30
MockSpec <android_webview.WebChromeClient >(),
27
31
MockSpec <android_webview.WebSettings >(),
28
32
MockSpec <android_webview.WebView >(),
29
33
MockSpec <android_webview.WebViewClient >(),
30
34
MockSpec <android_webview.WebStorage >(),
35
+ MockSpec <BuildContext >(),
36
+ MockSpec <InstanceManager >(),
31
37
])
32
38
void main () {
33
39
TestWidgetsFlutterBinding .ensureInitialized ();
34
40
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
+ }
96
101
102
+ group ('AndroidWebViewController' , () {
97
103
AndroidJavaScriptChannelParams
98
104
createAndroidJavaScriptChannelParamsWithMocks ({
99
105
String ? name,
@@ -693,4 +699,31 @@ void main() {
693
699
verify (mockSettings.setUserAgentString ('Test Framework' )).called (1 );
694
700
});
695
701
});
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
+ });
696
729
}
0 commit comments