| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import 'package:flutter/material.dart'; |
| import 'package:flutter/services.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| import 'package:webview_flutter_android/src/legacy/webview_surface_android.dart'; |
| import 'package:webview_flutter_platform_interface/src/webview_flutter_platform_interface_legacy.dart'; |
| |
| void main() { |
| TestWidgetsFlutterBinding.ensureInitialized(); |
| |
| group('SurfaceAndroidWebView', () { |
| late List<MethodCall> log; |
| |
| setUpAll(() { |
| SystemChannels.platform_views.setMockMethodCallHandler( |
| (MethodCall call) async { |
| log.add(call); |
| if (call.method == 'resize') { |
| final Map<String, Object?> arguments = |
| (call.arguments as Map<Object?, Object?>) |
| .cast<String, Object?>(); |
| return <String, Object?>{ |
| 'width': arguments['width'], |
| 'height': arguments['height'], |
| }; |
| } |
| }, |
| ); |
| }); |
| |
| tearDownAll(() { |
| SystemChannels.platform_views.setMockMethodCallHandler(null); |
| }); |
| |
| setUp(() { |
| log = <MethodCall>[]; |
| }); |
| |
| testWidgets( |
| 'uses hybrid composition when background color is not 100% opaque', |
| (WidgetTester tester) async { |
| await tester.pumpWidget(Builder(builder: (BuildContext context) { |
| return SurfaceAndroidWebView().build( |
| context: context, |
| creationParams: CreationParams( |
| backgroundColor: Colors.transparent, |
| webSettings: WebSettings( |
| userAgent: const WebSetting<String?>.absent(), |
| hasNavigationDelegate: false, |
| )), |
| javascriptChannelRegistry: JavascriptChannelRegistry(null), |
| webViewPlatformCallbacksHandler: |
| TestWebViewPlatformCallbacksHandler(), |
| ); |
| })); |
| await tester.pumpAndSettle(); |
| |
| final MethodCall createMethodCall = log[0]; |
| expect(createMethodCall.method, 'create'); |
| expect(createMethodCall.arguments, containsPair('hybrid', true)); |
| }); |
| |
| testWidgets('default text direction is ltr', (WidgetTester tester) async { |
| await tester.pumpWidget(Builder(builder: (BuildContext context) { |
| return SurfaceAndroidWebView().build( |
| context: context, |
| creationParams: CreationParams( |
| webSettings: WebSettings( |
| userAgent: const WebSetting<String?>.absent(), |
| hasNavigationDelegate: false, |
| )), |
| javascriptChannelRegistry: JavascriptChannelRegistry(null), |
| webViewPlatformCallbacksHandler: |
| TestWebViewPlatformCallbacksHandler(), |
| ); |
| })); |
| await tester.pumpAndSettle(); |
| |
| final MethodCall createMethodCall = log[0]; |
| expect(createMethodCall.method, 'create'); |
| expect( |
| createMethodCall.arguments, |
| containsPair( |
| 'direction', |
| AndroidViewController.kAndroidLayoutDirectionLtr, |
| ), |
| ); |
| }); |
| }); |
| } |
| |
| class TestWebViewPlatformCallbacksHandler |
| implements WebViewPlatformCallbacksHandler { |
| @override |
| FutureOr<bool> onNavigationRequest({ |
| required String url, |
| required bool isForMainFrame, |
| }) { |
| throw UnimplementedError(); |
| } |
| |
| @override |
| void onPageFinished(String url) {} |
| |
| @override |
| void onPageStarted(String url) {} |
| |
| @override |
| void onProgress(int progress) {} |
| |
| @override |
| void onWebResourceError(WebResourceError error) {} |
| } |