mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

This CP lands PR https://github.com/flutter/flutter/pull/129856 into `stable`. The PR above was part of a engine+framework change that got split in half during the stable cut, so now users are seeing some warnings that they can't act on. (Those warnings were only intended for people who were using our methods manually, rather than using normal flutter tooling). ## Issues Fixes https://github.com/flutter/flutter/issues/133069
77 lines
2.4 KiB
Dart
77 lines
2.4 KiB
Dart
// 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
|
|
library;
|
|
|
|
import 'dart:ui_web' as ui_web;
|
|
|
|
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_web.debugEmulateFlutterTesterEnvironment = false;
|
|
|
|
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);
|
|
});
|
|
});
|
|
}
|