Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 01c3845

Browse files
committed
Added test for AndroidWebViewWidget
2 parents 8d5d4e5 + d47aef0 commit 01c3845

File tree

5 files changed

+1093
-294
lines changed

5 files changed

+1093
-294
lines changed

packages/webview_flutter/webview_flutter_android/lib/src/v4/src/android_webview_controller.dart

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ class AndroidWebViewWidgetCreationParams
336336
super.layoutDirection,
337337
super.gestureRecognizers,
338338
@visibleForTesting InstanceManager? instanceManager,
339-
}) : _instanceManager = instanceManager ?? JavaObject.globalInstanceManager;
339+
}) : instanceManager = instanceManager ?? JavaObject.globalInstanceManager;
340340

341341
/// Constructs a [WebKitWebViewWidgetCreationParams] using a
342342
/// [PlatformWebViewWidgetCreationParams].
@@ -351,9 +351,13 @@ class AndroidWebViewWidgetCreationParams
351351
instanceManager: instanceManager,
352352
);
353353

354-
// Maintains instances used to communicate with the native objects they
355-
// represent.
356-
final InstanceManager _instanceManager;
354+
/// Maintains instances used to communicate with the native objects they
355+
/// represent.
356+
///
357+
/// This field is exposed for testing purposes only and should not be used
358+
/// outside of tests.
359+
@visibleForTesting
360+
final InstanceManager instanceManager;
357361
}
358362

359363
/// An implementation of [PlatformWebViewWidget] with the Android WebView API.
@@ -377,7 +381,7 @@ class AndroidWebViewWidget extends PlatformWebViewWidget {
377381
onPlatformViewCreated: (_) {},
378382
gestureRecognizers: _androidParams.gestureRecognizers,
379383
layoutDirection: _androidParams.layoutDirection,
380-
creationParams: _androidParams._instanceManager.getIdentifier(
384+
creationParams: _androidParams.instanceManager.getIdentifier(
381385
(_androidParams.controller as AndroidWebViewController)._webView),
382386
creationParamsCodec: const StandardMessageCodec(),
383387
);

packages/webview_flutter/webview_flutter_android/test/v4/android_webview_controller_test.dart

Lines changed: 94 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ import 'dart:math';
66

77
import 'package:flutter/foundation.dart';
88
import 'package:flutter/material.dart';
9+
import 'package:flutter/services.dart';
910
import 'package:flutter_test/flutter_test.dart';
1011
import 'package:mockito/annotations.dart';
1112
import 'package:mockito/mockito.dart';
1213
import 'package:webview_flutter_android/src/android_webview.dart'
1314
as android_webview;
15+
import 'package:webview_flutter_android/src/instance_manager.dart';
1416
import 'package:webview_flutter_android/src/v4/src/android_navigation_delegate.dart';
1517
import 'package:webview_flutter_android/src/v4/src/android_proxy.dart';
1618
import '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
])
3238
void 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

Comments
 (0)