Skip to content

Commit c4b24b7

Browse files
committed
Added v4 wrapper for JavaScriptChannelParams.
This commit adds a Android specific wrapper for the JavaScriptChannelParams class from the webview_platform_interface. The wrapper should call the native Android JavaScript channel API. Unit tests are also included.
1 parent 0929348 commit c4b24b7

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:webview_flutter_platform_interface/v4/webview_flutter_platform_interface.dart';
6+
7+
import '../android_webview.dart';
8+
9+
/// Exposes a channel to receive calls from javaScript.
10+
///
11+
/// See [AndroidWebViewController.addJavaScriptChannel].
12+
class AndroidWebViewJavaScriptChannel extends JavaScriptChannel {
13+
/// Creates a new [AndroidWebViewJavaScriptChannel] based the supplied [JavaScriptChannelParams].
14+
AndroidWebViewJavaScriptChannel.fromJavaScriptChannelParams({
15+
required JavaScriptChannelParams params,
16+
}) : _javaScriptChannelParams = params,
17+
super(params.name);
18+
19+
final JavaScriptChannelParams _javaScriptChannelParams;
20+
21+
@override
22+
void postMessage(String message) {
23+
_javaScriptChannelParams.onMessageReceived(
24+
JavaScriptMessage(
25+
message: message,
26+
),
27+
);
28+
}
29+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:flutter_test/flutter_test.dart';
6+
import 'package:mockito/annotations.dart';
7+
import 'package:mockito/mockito.dart';
8+
import 'package:webview_flutter_android/src/v4/android_webview_javascript_channel.dart';
9+
import 'package:webview_flutter_platform_interface/v4/webview_flutter_platform_interface.dart';
10+
11+
import 'android_webview_javascript_channel_test.mocks.dart';
12+
13+
@GenerateMocks(<Type>[JavaScriptChannelParams])
14+
void main() {
15+
TestWidgetsFlutterBinding.ensureInitialized();
16+
17+
test('postMessage should call onMessageReceived', () {
18+
final JavaScriptChannelParams mockChannelParams =
19+
MockJavaScriptChannelParams();
20+
21+
const JavaScriptMessage message =
22+
JavaScriptMessage(message: 'test message');
23+
24+
when(mockChannelParams.name).thenReturn('test_name');
25+
when(mockChannelParams.onMessageReceived).thenReturn((_) => message);
26+
27+
AndroidWebViewJavaScriptChannel.fromJavaScriptChannelParams(
28+
params: mockChannelParams)
29+
.postMessage('test message');
30+
31+
verify(mockChannelParams.onMessageReceived(message)).called(1);
32+
});
33+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Mocks generated by Mockito 5.1.0 from annotations
2+
// in webview_flutter_android/test/v4/android_webview_javascript_channel_test.dart.
3+
// Do not manually edit this file.
4+
5+
import 'package:mockito/mockito.dart' as _i1;
6+
import 'package:webview_flutter_platform_interface/v4/src/platform_webview_controller.dart'
7+
as _i2;
8+
import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart'
9+
as _i3;
10+
11+
// ignore_for_file: type=lint
12+
// ignore_for_file: avoid_redundant_argument_values
13+
// ignore_for_file: avoid_setters_without_getters
14+
// ignore_for_file: comment_references
15+
// ignore_for_file: implementation_imports
16+
// ignore_for_file: invalid_use_of_visible_for_testing_member
17+
// ignore_for_file: prefer_const_constructors
18+
// ignore_for_file: unnecessary_parenthesis
19+
// ignore_for_file: camel_case_types
20+
21+
/// A class which mocks [JavaScriptChannelParams].
22+
///
23+
/// See the documentation for Mockito's code generation for more information.
24+
class MockJavaScriptChannelParams extends _i1.Mock
25+
implements _i2.JavaScriptChannelParams {
26+
MockJavaScriptChannelParams() {
27+
_i1.throwOnMissingStub(this);
28+
}
29+
30+
@override
31+
String get name =>
32+
(super.noSuchMethod(Invocation.getter(#name), returnValue: '') as String);
33+
@override
34+
void Function(_i3.JavaScriptMessage) get onMessageReceived =>
35+
(super.noSuchMethod(Invocation.getter(#onMessageReceived),
36+
returnValue: (_i3.JavaScriptMessage __p0) {})
37+
as void Function(_i3.JavaScriptMessage));
38+
}

0 commit comments

Comments
 (0)