blob: f590f87c04610234b76da752709d52f70b8a0a07 [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:pigeon/pigeon.dart';
enum AnEnum {
one,
two,
three,
}
/// A class containing all supported types.
class AllTypes {
AllTypes({
this.aBool = false,
this.anInt = 0,
this.anInt64 = 0,
this.aDouble = 0,
required this.aByteArray,
required this.a4ByteArray,
required this.a8ByteArray,
required this.aFloatArray,
this.aList = const <Object?>[],
this.aMap = const <String?, Object?>{},
this.anEnum = AnEnum.one,
this.aString = '',
this.anObject = 0,
});
bool aBool;
int anInt;
int anInt64;
double aDouble;
Uint8List aByteArray;
Int32List a4ByteArray;
Int64List a8ByteArray;
Float64List aFloatArray;
// ignore: always_specify_types, strict_raw_type
List aList;
// ignore: always_specify_types, strict_raw_type
Map aMap;
AnEnum anEnum;
String aString;
Object anObject;
}
/// A class containing all supported nullable types.
class AllNullableTypes {
AllNullableTypes(
this.aNullableBool,
this.aNullableInt,
this.aNullableInt64,
this.aNullableDouble,
this.aNullableByteArray,
this.aNullable4ByteArray,
this.aNullable8ByteArray,
this.aNullableFloatArray,
this.aNullableList,
this.aNullableMap,
this.nullableNestedList,
this.nullableMapWithAnnotations,
this.nullableMapWithObject,
this.aNullableEnum,
this.aNullableString,
this.aNullableObject,
);
bool? aNullableBool;
int? aNullableInt;
int? aNullableInt64;
double? aNullableDouble;
Uint8List? aNullableByteArray;
Int32List? aNullable4ByteArray;
Int64List? aNullable8ByteArray;
Float64List? aNullableFloatArray;
// ignore: always_specify_types, strict_raw_type
List? aNullableList;
// ignore: always_specify_types, strict_raw_type
Map? aNullableMap;
List<List<bool?>?>? nullableNestedList;
Map<String?, String?>? nullableMapWithAnnotations;
Map<String?, Object?>? nullableMapWithObject;
AnEnum? aNullableEnum;
String? aNullableString;
Object? aNullableObject;
}
/// A class for testing nested class handling.
///
/// This is needed to test nested nullable and non-nullable classes,
/// `AllNullableTypes` is non-nullable here as it is easier to instantiate
/// than `AllTypes` when testing doesn't require both (ie. testing null classes).
class AllClassesWrapper {
AllClassesWrapper(this.allNullableTypes, this.allTypes);
AllNullableTypes allNullableTypes;
AllTypes? allTypes;
}
/// The core interface that each host language plugin must implement in
/// platform_test integration tests.
@HostApi()
abstract class HostIntegrationCoreApi {
// ========== Synchronous method tests ==========
/// A no-op function taking no arguments and returning no value, to sanity
/// test basic calling.
void noop();
/// Returns the passed object, to test serialization and deserialization.
@ObjCSelector('echoAllTypes:')
@SwiftFunction('echo(_:)')
AllTypes echoAllTypes(AllTypes everything);
/// Returns an error, to test error handling.
Object? throwError();
/// Returns an error from a void function, to test error handling.
void throwErrorFromVoid();
/// Returns a Flutter error, to test error handling.
Object? throwFlutterError();
/// Returns passed in int.
@ObjCSelector('echoInt:')
@SwiftFunction('echo(_:)')
int echoInt(int anInt);
/// Returns passed in double.
@ObjCSelector('echoDouble:')
@SwiftFunction('echo(_:)')
double echoDouble(double aDouble);
/// Returns the passed in boolean.
@ObjCSelector('echoBool:')
@SwiftFunction('echo(_:)')
bool echoBool(bool aBool);
/// Returns the passed in string.
@ObjCSelector('echoString:')
@SwiftFunction('echo(_:)')
String echoString(String aString);
/// Returns the passed in Uint8List.
@ObjCSelector('echoUint8List:')
@SwiftFunction('echo(_:)')
Uint8List echoUint8List(Uint8List aUint8List);
/// Returns the passed in generic Object.
@ObjCSelector('echoObject:')
@SwiftFunction('echo(_:)')
Object echoObject(Object anObject);
/// Returns the passed list, to test serialization and deserialization.
@ObjCSelector('echoList:')
@SwiftFunction('echo(_:)')
List<Object?> echoList(List<Object?> aList);
/// Returns the passed map, to test serialization and deserialization.
@ObjCSelector('echoMap:')
@SwiftFunction('echo(_:)')
Map<String?, Object?> echoMap(Map<String?, Object?> aMap);
/// Returns the passed map to test nested class serialization and deserialization.
@ObjCSelector('echoClassWrapper:')
@SwiftFunction('echo(_:)')
AllClassesWrapper echoClassWrapper(AllClassesWrapper wrapper);
// ========== Synchronous nullable method tests ==========
/// Returns the passed object, to test serialization and deserialization.
@ObjCSelector('echoAllNullableTypes:')
@SwiftFunction('echo(_:)')
AllNullableTypes? echoAllNullableTypes(AllNullableTypes? everything);
/// Returns the inner `aString` value from the wrapped object, to test
/// sending of nested objects.
@ObjCSelector('extractNestedNullableStringFrom:')
@SwiftFunction('extractNestedNullableString(from:)')
String? extractNestedNullableString(AllClassesWrapper wrapper);
/// Returns the inner `aString` value from the wrapped object, to test
/// sending of nested objects.
@ObjCSelector('createNestedObjectWithNullableString:')
@SwiftFunction('createNestedObject(with:)')
AllClassesWrapper createNestedNullableString(String? nullableString);
/// Returns passed in arguments of multiple types.
@ObjCSelector('sendMultipleNullableTypesABool:anInt:aString:')
@SwiftFunction('sendMultipleNullableTypes(aBool:anInt:aString:)')
AllNullableTypes sendMultipleNullableTypes(
bool? aNullableBool, int? aNullableInt, String? aNullableString);
/// Returns passed in int.
@ObjCSelector('echoNullableInt:')
@SwiftFunction('echo(_:)')
int? echoNullableInt(int? aNullableInt);
/// Returns passed in double.
@ObjCSelector('echoNullableDouble:')
@SwiftFunction('echo(_:)')
double? echoNullableDouble(double? aNullableDouble);
/// Returns the passed in boolean.
@ObjCSelector('echoNullableBool:')
@SwiftFunction('echo(_:)')
bool? echoNullableBool(bool? aNullableBool);
/// Returns the passed in string.
@ObjCSelector('echoNullableString:')
@SwiftFunction('echo(_:)')
String? echoNullableString(String? aNullableString);
/// Returns the passed in Uint8List.
@ObjCSelector('echoNullableUint8List:')
@SwiftFunction('echo(_:)')
Uint8List? echoNullableUint8List(Uint8List? aNullableUint8List);
/// Returns the passed in generic Object.
@ObjCSelector('echoNullableObject:')
@SwiftFunction('echo(_:)')
Object? echoNullableObject(Object? aNullableObject);
/// Returns the passed list, to test serialization and deserialization.
@ObjCSelector('echoNullableList:')
@SwiftFunction('echoNullable(_:)')
List<Object?>? echoNullableList(List<Object?>? aNullableList);
/// Returns the passed map, to test serialization and deserialization.
@ObjCSelector('echoNullableMap:')
@SwiftFunction('echoNullable(_:)')
Map<String?, Object?>? echoNullableMap(Map<String?, Object?>? aNullableMap);
// ========== Asynchronous method tests ==========
/// A no-op function taking no arguments and returning no value, to sanity
/// test basic asynchronous calling.
@async
void noopAsync();
/// Returns passed in int asynchronously.
@async
@ObjCSelector('echoAsyncInt:')
@SwiftFunction('echoAsync(_:)')
int echoAsyncInt(int anInt);
/// Returns passed in double asynchronously.
@async
@ObjCSelector('echoAsyncDouble:')
@SwiftFunction('echoAsync(_:)')
double echoAsyncDouble(double aDouble);
/// Returns the passed in boolean asynchronously.
@async
@ObjCSelector('echoAsyncBool:')
@SwiftFunction('echoAsync(_:)')
bool echoAsyncBool(bool aBool);
/// Returns the passed string asynchronously.
@async
@ObjCSelector('echoAsyncString:')
@SwiftFunction('echoAsync(_:)')
String echoAsyncString(String aString);
/// Returns the passed in Uint8List asynchronously.
@async
@ObjCSelector('echoAsyncUint8List:')
@SwiftFunction('echoAsync(_:)')
Uint8List echoAsyncUint8List(Uint8List aUint8List);
/// Returns the passed in generic Object asynchronously.
@async
@ObjCSelector('echoAsyncObject:')
@SwiftFunction('echoAsync(_:)')
Object echoAsyncObject(Object anObject);
/// Returns the passed list, to test serialization and deserialization asynchronously.
@async
@ObjCSelector('echoAsyncList:')
@SwiftFunction('echoAsync(_:)')
List<Object?> echoAsyncList(List<Object?> aList);
/// Returns the passed map, to test serialization and deserialization asynchronously.
@async
@ObjCSelector('echoAsyncMap:')
@SwiftFunction('echoAsync(_:)')
Map<String?, Object?> echoAsyncMap(Map<String?, Object?> aMap);
/// Responds with an error from an async function returning a value.
@async
Object? throwAsyncError();
/// Responds with an error from an async void function.
@async
void throwAsyncErrorFromVoid();
/// Responds with a Flutter error from an async function returning a value.
@async
Object? throwAsyncFlutterError();
/// Returns the passed object, to test async serialization and deserialization.
@async
@ObjCSelector('echoAsyncAllTypes:')
@SwiftFunction('echoAsync(_:)')
AllTypes echoAsyncAllTypes(AllTypes everything);
/// Returns the passed object, to test serialization and deserialization.
@async
@ObjCSelector('echoAsyncNullableAllNullableTypes:')
@SwiftFunction('echoAsync(_:)')
AllNullableTypes? echoAsyncNullableAllNullableTypes(
AllNullableTypes? everything);
/// Returns passed in int asynchronously.
@async
@ObjCSelector('echoAsyncNullableInt:')
@SwiftFunction('echoAsyncNullable(_:)')
int? echoAsyncNullableInt(int? anInt);
/// Returns passed in double asynchronously.
@async
@ObjCSelector('echoAsyncNullableDouble:')
@SwiftFunction('echoAsyncNullable(_:)')
double? echoAsyncNullableDouble(double? aDouble);
/// Returns the passed in boolean asynchronously.
@async
@ObjCSelector('echoAsyncNullableBool:')
@SwiftFunction('echoAsyncNullable(_:)')
bool? echoAsyncNullableBool(bool? aBool);
/// Returns the passed string asynchronously.
@async
@ObjCSelector('echoAsyncNullableString:')
@SwiftFunction('echoAsyncNullable(_:)')
String? echoAsyncNullableString(String? aString);
/// Returns the passed in Uint8List asynchronously.
@async
@ObjCSelector('echoAsyncNullableUint8List:')
@SwiftFunction('echoAsyncNullable(_:)')
Uint8List? echoAsyncNullableUint8List(Uint8List? aUint8List);
/// Returns the passed in generic Object asynchronously.
@async
@ObjCSelector('echoAsyncNullableObject:')
@SwiftFunction('echoAsyncNullable(_:)')
Object? echoAsyncNullableObject(Object? anObject);
/// Returns the passed list, to test serialization and deserialization asynchronously.
@async
@ObjCSelector('echoAsyncNullableList:')
@SwiftFunction('echoAsyncNullable(_:)')
List<Object?>? echoAsyncNullableList(List<Object?>? aList);
/// Returns the passed map, to test serialization and deserialization asynchronously.
@async
@ObjCSelector('echoAsyncNullableMap:')
@SwiftFunction('echoAsyncNullable(_:)')
Map<String?, Object?>? echoAsyncNullableMap(Map<String?, Object?>? aMap);
// ========== Flutter API test wrappers ==========
@async
void callFlutterNoop();
@async
Object? callFlutterThrowError();
@async
void callFlutterThrowErrorFromVoid();
@async
@ObjCSelector('callFlutterEchoAllTypes:')
@SwiftFunction('callFlutterEcho(_:)')
AllTypes callFlutterEchoAllTypes(AllTypes everything);
// TODO(stuartmorgan): Add callFlutterEchoAllNullableTypes and the associated
// test once either https://github.com/flutter/flutter/issues/116117 is fixed,
// or the problematic type is moved out of AllNullableTypes and into its own
// test, since the type mismatch breaks the second `encode` round.
@async
@ObjCSelector('callFlutterSendMultipleNullableTypesABool:anInt:aString:')
@SwiftFunction('callFlutterSendMultipleNullableTypes(aBool:anInt:aString:)')
AllNullableTypes callFlutterSendMultipleNullableTypes(
bool? aNullableBool, int? aNullableInt, String? aNullableString);
@async
@ObjCSelector('callFlutterEchoBool:')
@SwiftFunction('callFlutterEcho(_:)')
bool callFlutterEchoBool(bool aBool);
@async
@ObjCSelector('callFlutterEchoInt:')
@SwiftFunction('callFlutterEcho(_:)')
int callFlutterEchoInt(int anInt);
@async
@ObjCSelector('callFlutterEchoDouble:')
@SwiftFunction('callFlutterEcho(_:)')
double callFlutterEchoDouble(double aDouble);
@async
@ObjCSelector('callFlutterEchoString:')
@SwiftFunction('callFlutterEcho(_:)')
String callFlutterEchoString(String aString);
@async
@ObjCSelector('callFlutterEchoUint8List:')
@SwiftFunction('callFlutterEcho(_:)')
Uint8List callFlutterEchoUint8List(Uint8List aList);
@async
@ObjCSelector('callFlutterEchoList:')
@SwiftFunction('callFlutterEcho(_:)')
List<Object?> callFlutterEchoList(List<Object?> aList);
@async
@ObjCSelector('callFlutterEchoMap:')
@SwiftFunction('callFlutterEcho(_:)')
Map<String?, Object?> callFlutterEchoMap(Map<String?, Object?> aMap);
@async
@ObjCSelector('callFlutterEchoNullableBool:')
@SwiftFunction('callFlutterEchoNullable(_:)')
bool? callFlutterEchoNullableBool(bool? aBool);
@async
@ObjCSelector('callFlutterEchoNullableInt:')
@SwiftFunction('callFlutterEchoNullable(_:)')
int? callFlutterEchoNullableInt(int? anInt);
@async
@ObjCSelector('callFlutterEchoNullableDouble:')
@SwiftFunction('callFlutterEchoNullable(_:)')
double? callFlutterEchoNullableDouble(double? aDouble);
@async
@ObjCSelector('callFlutterEchoNullableString:')
@SwiftFunction('callFlutterEchoNullable(_:)')
String? callFlutterEchoNullableString(String? aString);
@async
@ObjCSelector('callFlutterEchoNullableUint8List:')
@SwiftFunction('callFlutterEchoNullable(_:)')
Uint8List? callFlutterEchoNullableUint8List(Uint8List? aList);
@async
@ObjCSelector('callFlutterEchoNullableList:')
@SwiftFunction('callFlutterEchoNullable(_:)')
List<Object?>? callFlutterEchoNullableList(List<Object?>? aList);
@async
@ObjCSelector('callFlutterEchoNullableMap:')
@SwiftFunction('callFlutterEchoNullable(_:)')
Map<String?, Object?>? callFlutterEchoNullableMap(
Map<String?, Object?>? aMap);
}
/// The core interface that the Dart platform_test code implements for host
/// integration tests to call into.
@FlutterApi()
abstract class FlutterIntegrationCoreApi {
/// A no-op function taking no arguments and returning no value, to sanity
/// test basic calling.
void noop();
/// Responds with an error from an async function returning a value.
Object? throwError();
/// Responds with an error from an async void function.
void throwErrorFromVoid();
/// Returns the passed object, to test serialization and deserialization.
@ObjCSelector('echoAllTypes:')
@SwiftFunction('echo(_:)')
AllTypes echoAllTypes(AllTypes everything);
/// Returns the passed object, to test serialization and deserialization.
@ObjCSelector('echoAllNullableTypes:')
@SwiftFunction('echoNullable(_:)')
AllNullableTypes echoAllNullableTypes(AllNullableTypes everything);
/// Returns passed in arguments of multiple types.
///
/// Tests multiple-arity FlutterApi handling.
@ObjCSelector('sendMultipleNullableTypesABool:anInt:aString:')
@SwiftFunction('sendMultipleNullableTypes(aBool:anInt:aString:)')
AllNullableTypes sendMultipleNullableTypes(
bool? aNullableBool, int? aNullableInt, String? aNullableString);
// ========== Non-nullable argument/return type tests ==========
/// Returns the passed boolean, to test serialization and deserialization.
@ObjCSelector('echoBool:')
@SwiftFunction('echo(_:)')
bool echoBool(bool aBool);
/// Returns the passed int, to test serialization and deserialization.
@ObjCSelector('echoInt:')
@SwiftFunction('echo(_:)')
int echoInt(int anInt);
/// Returns the passed double, to test serialization and deserialization.
@ObjCSelector('echoDouble:')
@SwiftFunction('echo(_:)')
double echoDouble(double aDouble);
/// Returns the passed string, to test serialization and deserialization.
@ObjCSelector('echoString:')
@SwiftFunction('echo(_:)')
String echoString(String aString);
/// Returns the passed byte list, to test serialization and deserialization.
@ObjCSelector('echoUint8List:')
@SwiftFunction('echo(_:)')
Uint8List echoUint8List(Uint8List aList);
/// Returns the passed list, to test serialization and deserialization.
@ObjCSelector('echoList:')
@SwiftFunction('echo(_:)')
List<Object?> echoList(List<Object?> aList);
/// Returns the passed map, to test serialization and deserialization.
@ObjCSelector('echoMap:')
@SwiftFunction('echo(_:)')
Map<String?, Object?> echoMap(Map<String?, Object?> aMap);
// ========== Nullable argument/return type tests ==========
/// Returns the passed boolean, to test serialization and deserialization.
@ObjCSelector('echoNullableBool:')
@SwiftFunction('echoNullable(_:)')
bool? echoNullableBool(bool? aBool);
/// Returns the passed int, to test serialization and deserialization.
@ObjCSelector('echoNullableInt:')
@SwiftFunction('echoNullable(_:)')
int? echoNullableInt(int? anInt);
/// Returns the passed double, to test serialization and deserialization.
@ObjCSelector('echoNullableDouble:')
@SwiftFunction('echoNullable(_:)')
double? echoNullableDouble(double? aDouble);
/// Returns the passed string, to test serialization and deserialization.
@ObjCSelector('echoNullableString:')
@SwiftFunction('echoNullable(_:)')
String? echoNullableString(String? aString);
/// Returns the passed byte list, to test serialization and deserialization.
@ObjCSelector('echoNullableUint8List:')
@SwiftFunction('echoNullable(_:)')
Uint8List? echoNullableUint8List(Uint8List? aList);
/// Returns the passed list, to test serialization and deserialization.
@ObjCSelector('echoNullableList:')
@SwiftFunction('echoNullable(_:)')
List<Object?>? echoNullableList(List<Object?>? aList);
/// Returns the passed map, to test serialization and deserialization.
@ObjCSelector('echoNullableMap:')
@SwiftFunction('echoNullable(_:)')
Map<String?, Object?>? echoNullableMap(Map<String?, Object?>? aMap);
// ========== Async tests ==========
// These are minimal since async FlutterApi only changes Dart generation.
// Currently they aren't integration tested, but having them here ensures
// analysis coverage.
/// A no-op function taking no arguments and returning no value, to sanity
/// test basic asynchronous calling.
@async
void noopAsync();
/// Returns the passed in generic Object asynchronously.
@async
@ObjCSelector('echoAsyncString:')
@SwiftFunction('echoAsync(_:)')
String echoAsyncString(String aString);
}
/// An API that can be implemented for minimal, compile-only tests.
//
// This is also here to test that multiple host APIs can be generated
// successfully in all languages (e.g., in Java where it requires having a
// wrapper class).
@HostApi()
abstract class HostTrivialApi {
void noop();
}
/// A simple API implemented in some unit tests.
//
// This is separate from HostIntegrationCoreApi to avoid having to update a
// lot of unit tests every time we add something to the integration test API.
// TODO(stuartmorgan): Restructure the unit tests to reduce the number of
// different APIs we define.
@HostApi()
abstract class HostSmallApi {
@async
@ObjCSelector('echoString:')
String echo(String aString);
@async
void voidVoid();
}
/// A simple API called in some unit tests.
//
// This is separate from FlutterIntegrationCoreApi to allow for incrementally
// moving from the previous fragmented unit test structure to something more
// unified.
// TODO(stuartmorgan): Restructure the unit tests to reduce the number of
// different APIs we define.
@FlutterApi()
abstract class FlutterSmallApi {
@ObjCSelector('echoWrappedList:')
@SwiftFunction('echo(_:)')
TestMessage echoWrappedList(TestMessage msg);
}
/// A data class containing a List, used in unit tests.
// TODO(stuartmorgan): Evaluate whether these unit tests are still useful; see
// TODOs above about restructuring.
class TestMessage {
// ignore: always_specify_types, strict_raw_type
List? testList;
}