mirror of
https://github.com/flutter/flutter
synced 2024-10-12 11:12:54 +00:00
Enable TestDefaultBinaryMessenger to intercept all platform channels. (#100049)
This commit is contained in:
parent
46cb9ede2f
commit
7b580fd5df
|
@ -8,6 +8,11 @@ import 'dart:ui' as ui;
|
|||
import 'package:fake_async/fake_async.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
/// A function which takes the name of the method channel, it's handler,
|
||||
/// platform message and asynchronously returns an encoded response.
|
||||
typedef AllMessagesHandler = Future<ByteData?>? Function(
|
||||
String channel, MessageHandler? handler, ByteData? message);
|
||||
|
||||
/// A [BinaryMessenger] subclass that is used as the default binary messenger
|
||||
/// under testing environment.
|
||||
///
|
||||
|
@ -116,11 +121,17 @@ class TestDefaultBinaryMessenger extends BinaryMessenger {
|
|||
// can implement the [checkMockMessageHandler] method.
|
||||
final Map<String, Object> _outboundHandlerIdentities = <String, Object>{};
|
||||
|
||||
/// Handler that intercepts and responds to outgoing messages, pretending
|
||||
/// to be the platform, for all channels.
|
||||
AllMessagesHandler? allMessagesHandler;
|
||||
|
||||
@override
|
||||
Future<ByteData?>? send(String channel, ByteData? message) {
|
||||
final Future<ByteData?>? resultFuture;
|
||||
final MessageHandler? handler = _outboundHandlers[channel];
|
||||
if (handler != null) {
|
||||
if (allMessagesHandler != null) {
|
||||
resultFuture = allMessagesHandler!(channel, handler, message);
|
||||
} else if (handler != null) {
|
||||
resultFuture = handler(message);
|
||||
} else {
|
||||
resultFuture = delegate.send(channel, message);
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'dart:typed_data';
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
|
@ -26,6 +27,19 @@ class TestDelegate extends BinaryMessenger {
|
|||
void setMessageHandler(String channel, MessageHandler? handler) => throw UnimplementedError();
|
||||
}
|
||||
|
||||
class WorkingTestDelegate extends BinaryMessenger {
|
||||
@override
|
||||
Future<ByteData?>? send(String channel, ByteData? message) async {
|
||||
return ByteData.sublistView(Uint8List.fromList(<int>[1, 2, 3]));
|
||||
}
|
||||
|
||||
// Rest of the API isn't needed for this test.
|
||||
@override
|
||||
Future<void> handlePlatformMessage(String channel, ByteData? data, ui.PlatformMessageResponseCallback? callback) => throw UnimplementedError();
|
||||
@override
|
||||
void setMessageHandler(String channel, MessageHandler? handler) => throw UnimplementedError();
|
||||
}
|
||||
|
||||
void main() {
|
||||
testWidgets('Caught exceptions are caught by the test framework', (WidgetTester tester) async {
|
||||
final BinaryMessenger delegate = TestDelegate();
|
||||
|
@ -39,4 +53,29 @@ void main() {
|
|||
expect(error, const RecognizableTestException());
|
||||
}
|
||||
});
|
||||
|
||||
testWidgets('Mock MessageHandler is set correctly',
|
||||
(WidgetTester tester) async {
|
||||
final TestDefaultBinaryMessenger binaryMessenger =
|
||||
TestDefaultBinaryMessenger(WorkingTestDelegate());
|
||||
binaryMessenger.setMockMessageHandler(
|
||||
'',
|
||||
(ByteData? message) async =>
|
||||
ByteData.sublistView(Uint8List.fromList(<int>[2, 3, 4])));
|
||||
|
||||
final ByteData? result = await binaryMessenger.send('', null);
|
||||
expect(result?.buffer.asUint8List(), Uint8List.fromList(<int>[2, 3, 4]));
|
||||
});
|
||||
|
||||
testWidgets('Mock AllMessagesHandler is set correctly',
|
||||
(WidgetTester tester) async {
|
||||
final TestDefaultBinaryMessenger binaryMessenger =
|
||||
TestDefaultBinaryMessenger(WorkingTestDelegate());
|
||||
binaryMessenger.allMessagesHandler =
|
||||
(String channel, MessageHandler? handler, ByteData? message) async =>
|
||||
ByteData.sublistView(Uint8List.fromList(<int>[2, 3, 4]));
|
||||
|
||||
final ByteData? result = await binaryMessenger.send('', null);
|
||||
expect(result?.buffer.asUint8List(), Uint8List.fromList(<int>[2, 3, 4]));
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue