| // Copyright 2014 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. |
| |
| @TestOn('chrome') // Uses web-only Flutter SDK |
| |
| import 'dart:ui' as ui; |
| |
| import 'package:flutter/services.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| import 'package:flutter_web_plugins/flutter_web_plugins.dart'; |
| |
| class TestPlugin { |
| static void registerWith(Registrar registrar) { |
| final MethodChannel channel = MethodChannel( |
| 'test_plugin', |
| const StandardMethodCodec(), |
| registrar.messenger, |
| ); |
| final TestPlugin testPlugin = TestPlugin(); |
| channel.setMethodCallHandler(testPlugin.handleMethodCall); |
| } |
| |
| static final List<String> calledMethods = <String>[]; |
| |
| Future<void> handleMethodCall(MethodCall call) async { |
| calledMethods.add(call.method); |
| } |
| } |
| |
| void main() { |
| // Disabling tester emulation because this test relies on real message channel communication. |
| ui.debugEmulateFlutterTesterEnvironment = false; // ignore: undefined_prefixed_name |
| |
| group('Plugin Registry', () { |
| setUp(() { |
| TestWidgetsFlutterBinding.ensureInitialized(); |
| webPluginRegistry.registerMessageHandler(); |
| final Registrar registrar = webPluginRegistry.registrarFor(TestPlugin); |
| TestPlugin.registerWith(registrar); |
| }); |
| |
| test('can register a plugin', () { |
| TestPlugin.calledMethods.clear(); |
| |
| const MethodChannel frameworkChannel = |
| MethodChannel('test_plugin'); |
| frameworkChannel.invokeMethod<void>('test1'); |
| |
| expect(TestPlugin.calledMethods, equals(<String>['test1'])); |
| }); |
| |
| test('can send a message from the plugin to the framework', () async { |
| const StandardMessageCodec codec = StandardMessageCodec(); |
| |
| final List<String> loggedMessages = <String>[]; |
| ServicesBinding.instance.defaultBinaryMessenger |
| .setMessageHandler('test_send', (ByteData? data) { |
| loggedMessages.add(codec.decodeMessage(data)! as String); |
| return Future<ByteData?>.value(); |
| }); |
| |
| await pluginBinaryMessenger.send( |
| 'test_send', codec.encodeMessage('hello')); |
| expect(loggedMessages, equals(<String>['hello'])); |
| |
| await pluginBinaryMessenger.send( |
| 'test_send', codec.encodeMessage('world')); |
| expect(loggedMessages, equals(<String>['hello', 'world'])); |
| |
| ServicesBinding.instance.defaultBinaryMessenger |
| .setMessageHandler('test_send', null); |
| }); |
| }); |
| } |