blob: 0973bfe778db2ca0ca86c5faf43ac74ae313a149 [file] [log] [blame]
// 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 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'message.dart';
import 'test.dart';
class Mock implements TestHostApi {
List<String> log = <String>[];
@override
void initialize() {
log.add('initialize');
}
@override
MessageSearchReply search(MessageSearchRequest arg) {
log.add('search');
return MessageSearchReply()..result = arg.query;
}
}
class MockNested implements TestNestedApi {
bool didCall = false;
@override
MessageSearchReply search(MessageNested arg) {
didCall = true;
if (arg.request == null) {
return MessageSearchReply();
} else {
return MessageSearchReply()..result = arg.request?.query;
}
}
}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
test('simple', () async {
final MessageNestedApi api = MessageNestedApi();
final MockNested mock = MockNested();
TestNestedApi.setup(mock);
final MessageSearchReply reply =
await api.search(MessageNested()..request = null);
expect(mock.didCall, true);
expect(reply.result, null);
});
test('nested', () async {
final MessageApi api = MessageApi();
final Mock mock = Mock();
TestHostApi.setup(mock);
final MessageSearchReply reply =
await api.search(MessageSearchRequest()..query = 'foo');
expect(mock.log, <String>['search']);
expect(reply.result, 'foo');
});
test('no-arg calls', () async {
final MessageApi api = MessageApi();
final Mock mock = Mock();
TestHostApi.setup(mock);
await api.initialize();
expect(mock.log, <String>['initialize']);
});
test(
'calling methods with null',
() async {
final Mock mock = Mock();
TestHostApi.setup(mock);
expect(
await const BasicMessageChannel<Object?>(
'dev.flutter.pigeon.MessageApi.initialize',
StandardMessageCodec(),
).send(<Object?>[null]),
isEmpty,
);
try {
await const BasicMessageChannel<Object?>(
'dev.flutter.pigeon.MessageApi.search',
StandardMessageCodec(),
).send(<Object?>[null]) as List<Object?>?;
expect(true, isFalse); // should not reach here
} catch (error) {
expect(error, isAssertionError);
expect(
error.toString(),
contains(
'Argument for dev.flutter.pigeon.MessageApi.search was null, expected non-null MessageSearchRequest.',
),
);
}
expect(mock.log, <String>['initialize']);
},
);
}