[pigeon] Fixes double prefixes added to enum names for Objc HostApis and FlutterApis (#6263)

In some areas of the Objc generator, the the name created from [_objcTypeForDartType](https://github.com/flutter/packages/blob/main/packages/pigeon/lib/objc_generator.dart#L1353) is being passed to [_enumName](https://github.com/flutter/packages/blob/main/packages/pigeon/lib/objc_generator.dart#L1196) and both of these methods add a prefix to enums. The locations are when they are used in `HostApi` or `FlutterApi` methods, but the name of the generated enum would be correct. e.g. `FLTEnumName` vs `FLTFLTEnumName`.

This fixes the locations where this is happening by passing the AST name to `_enumName` instead.
This commit is contained in:
Maurice Parrish
2024-03-14 15:35:23 -04:00
committed by GitHub
parent 92a8b7a0b9
commit 0895119f1d
13 changed files with 769 additions and 576 deletions

View File

@ -1,3 +1,7 @@
## 17.1.3
* [objc] Fixes double prefixes added to enum names.
## 17.1.2
* [swift] Separates message call code generation into separate methods.

View File

@ -13,7 +13,7 @@ import 'ast.dart';
/// The current version of pigeon.
///
/// This must match the version in pubspec.yaml.
const String pigeonVersion = '17.1.2';
const String pigeonVersion = '17.1.3';
/// Read all the content from [stdin] to a String.
String readStdin() {

View File

@ -359,7 +359,7 @@ class ObjcHeaderGenerator extends StructuredGenerator<ObjcOptions> {
String? lastArgType;
String? returnType;
final String enumReturnType = _enumName(
returnTypeName.baseName,
func.returnType.baseName,
suffix: ' *_Nullable',
prefix: generatorOptions.prefix,
box: true,
@ -765,7 +765,7 @@ static FlutterError *createConnectionError(NSString *channelName) {
} else if (arg.type.isEnum) {
indent.writeln('NSNumber *${argName}AsNumber = $valueGetter;');
indent.writeln(
'${_enumName(arg.type.baseName, suffix: ' *', prefix: '', box: true)}$argName = ${argName}AsNumber == nil ? nil : [[${_enumName(arg.type.baseName, prefix: generatorOptions.prefix, box: true)} alloc] initWithValue:[${argName}AsNumber integerValue]];');
'${_enumName(arg.type.baseName, suffix: ' *', prefix: generatorOptions.prefix, box: true)}$argName = ${argName}AsNumber == nil ? nil : [[${_enumName(arg.type.baseName, prefix: generatorOptions.prefix, box: true)} alloc] initWithValue:[${argName}AsNumber integerValue]];');
} else {
indent.writeln('${objcArgType.beforeString}$argName = $valueGetter;');
}
@ -799,7 +799,7 @@ static FlutterError *createConnectionError(NSString *channelName) {
if (func.returnType.isEnum) {
returnTypeString =
'${_enumName(returnType.baseName, suffix: ' *_Nullable', prefix: generatorOptions.prefix, box: true)} enumValue';
'${_enumName(func.returnType.baseName, suffix: ' *_Nullable', prefix: generatorOptions.prefix, box: true)} enumValue';
}
if (func.parameters.isEmpty) {
indent.writeScoped(
@ -1132,7 +1132,7 @@ static FlutterError *createConnectionError(NSString *channelName) {
indent.writeln('completion(nil);');
} else {
if (func.returnType.isEnum) {
final String enumName = _enumName(returnType.baseName,
final String enumName = _enumName(func.returnType.baseName,
prefix: languageOptions.prefix, box: true);
indent.writeln('NSNumber *outputAsNumber = $nullCheck;');
indent.writeln(
@ -1212,7 +1212,7 @@ String _callbackForType(
if (type.isVoid) {
return 'void (^)(FlutterError *_Nullable)';
} else if (type.isEnum) {
return 'void (^)(${_enumName(objcType.baseName, suffix: ' *_Nullable', prefix: options.prefix, box: true)}, FlutterError *_Nullable)';
return 'void (^)(${_enumName(type.baseName, suffix: ' *_Nullable', prefix: options.prefix, box: true)}, FlutterError *_Nullable)';
} else {
return 'void (^)(${objcType.beforeString}_Nullable, FlutterError *_Nullable)';
}

View File

@ -17,14 +17,14 @@
@implementation AllDatatypesTest
- (void)testAllNull {
AllNullableTypes *everything = [[AllNullableTypes alloc] init];
FLTAllNullableTypes *everything = [[FLTAllNullableTypes alloc] init];
EchoBinaryMessenger *binaryMessenger =
[[EchoBinaryMessenger alloc] initWithCodec:FlutterIntegrationCoreApiGetCodec()];
FlutterIntegrationCoreApi *api =
[[FlutterIntegrationCoreApi alloc] initWithBinaryMessenger:binaryMessenger];
[[EchoBinaryMessenger alloc] initWithCodec:FLTFlutterIntegrationCoreApiGetCodec()];
FLTFlutterIntegrationCoreApi *api =
[[FLTFlutterIntegrationCoreApi alloc] initWithBinaryMessenger:binaryMessenger];
XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
[api echoAllNullableTypes:everything
completion:^(AllNullableTypes *_Nonnull result, FlutterError *_Nullable error) {
completion:^(FLTAllNullableTypes *_Nonnull result, FlutterError *_Nullable error) {
XCTAssertNil(result.aNullableBool);
XCTAssertNil(result.aNullableInt);
XCTAssertNil(result.aNullableDouble);
@ -41,7 +41,7 @@
}
- (void)testAllEquals {
AllNullableTypes *everything = [[AllNullableTypes alloc] init];
FLTAllNullableTypes *everything = [[FLTAllNullableTypes alloc] init];
everything.aNullableBool = @NO;
everything.aNullableInt = @(1);
everything.aNullableDouble = @(2.0);
@ -58,12 +58,12 @@
everything.aNullableMap = @{@"hello" : @(1234)};
everything.nullableMapWithObject = @{@"hello" : @(1234), @"goodbye" : @"world"};
EchoBinaryMessenger *binaryMessenger =
[[EchoBinaryMessenger alloc] initWithCodec:FlutterIntegrationCoreApiGetCodec()];
FlutterIntegrationCoreApi *api =
[[FlutterIntegrationCoreApi alloc] initWithBinaryMessenger:binaryMessenger];
[[EchoBinaryMessenger alloc] initWithCodec:FLTFlutterIntegrationCoreApiGetCodec()];
FLTFlutterIntegrationCoreApi *api =
[[FLTFlutterIntegrationCoreApi alloc] initWithBinaryMessenger:binaryMessenger];
XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
[api echoAllNullableTypes:everything
completion:^(AllNullableTypes *_Nonnull result, FlutterError *_Nullable error) {
completion:^(FLTAllNullableTypes *_Nonnull result, FlutterError *_Nullable error) {
XCTAssertEqual(result.aNullableBool, everything.aNullableBool);
XCTAssertEqual(result.aNullableInt, everything.aNullableInt);
XCTAssertEqual(result.aNullableDouble, everything.aNullableDouble);

View File

@ -10,7 +10,7 @@
#import "MockBinaryMessenger.h"
///////////////////////////////////////////////////////////////////////////////////////////
@interface MockHostSmallApi : NSObject <HostSmallApi>
@interface MockHostSmallApi : NSObject <FLTHostSmallApi>
@property(nonatomic, copy) NSString *output;
@property(nonatomic, retain) FlutterError *voidVoidError;
@end
@ -42,11 +42,11 @@
- (void)testAsyncHost2Flutter {
MockBinaryMessenger *binaryMessenger =
[[MockBinaryMessenger alloc] initWithCodec:FlutterIntegrationCoreApiGetCodec()];
[[MockBinaryMessenger alloc] initWithCodec:FLTFlutterIntegrationCoreApiGetCodec()];
NSString *value = @"Test";
binaryMessenger.result = value;
FlutterIntegrationCoreApi *flutterApi =
[[FlutterIntegrationCoreApi alloc] initWithBinaryMessenger:binaryMessenger];
FLTFlutterIntegrationCoreApi *flutterApi =
[[FLTFlutterIntegrationCoreApi alloc] initWithBinaryMessenger:binaryMessenger];
XCTestExpectation *expectation = [self expectationWithDescription:@"echo callback"];
[flutterApi echoAsyncString:value
completion:^(NSString *_Nonnull output, FlutterError *_Nullable error) {
@ -58,9 +58,9 @@
- (void)testAsyncFlutter2HostVoidVoid {
MockBinaryMessenger *binaryMessenger =
[[MockBinaryMessenger alloc] initWithCodec:HostSmallApiGetCodec()];
[[MockBinaryMessenger alloc] initWithCodec:FLTHostSmallApiGetCodec()];
MockHostSmallApi *mockHostSmallApi = [[MockHostSmallApi alloc] init];
SetUpHostSmallApi(binaryMessenger, mockHostSmallApi);
SetUpFLTHostSmallApi(binaryMessenger, mockHostSmallApi);
NSString *channelName = @"dev.flutter.pigeon.pigeon_integration_tests.HostSmallApi.voidVoid";
XCTAssertNotNil(binaryMessenger.handlers[channelName]);
@ -75,12 +75,12 @@
- (void)testAsyncFlutter2HostVoidVoidError {
MockBinaryMessenger *binaryMessenger =
[[MockBinaryMessenger alloc] initWithCodec:HostSmallApiGetCodec()];
[[MockBinaryMessenger alloc] initWithCodec:FLTHostSmallApiGetCodec()];
MockHostSmallApi *mockHostSmallApi = [[MockHostSmallApi alloc] init];
mockHostSmallApi.voidVoidError = [FlutterError errorWithCode:@"code"
message:@"message"
details:nil];
SetUpHostSmallApi(binaryMessenger, mockHostSmallApi);
SetUpFLTHostSmallApi(binaryMessenger, mockHostSmallApi);
NSString *channelName = @"dev.flutter.pigeon.pigeon_integration_tests.HostSmallApi.voidVoid";
XCTAssertNotNil(binaryMessenger.handlers[channelName]);
@ -96,11 +96,11 @@
- (void)testAsyncFlutter2Host {
MockBinaryMessenger *binaryMessenger =
[[MockBinaryMessenger alloc] initWithCodec:HostSmallApiGetCodec()];
[[MockBinaryMessenger alloc] initWithCodec:FLTHostSmallApiGetCodec()];
MockHostSmallApi *mockHostSmallApi = [[MockHostSmallApi alloc] init];
NSString *value = @"Test";
mockHostSmallApi.output = value;
SetUpHostSmallApi(binaryMessenger, mockHostSmallApi);
SetUpFLTHostSmallApi(binaryMessenger, mockHostSmallApi);
NSString *channelName = @"dev.flutter.pigeon.pigeon_integration_tests.HostSmallApi.echo";
XCTAssertNotNil(binaryMessenger.handlers[channelName]);
@ -117,9 +117,9 @@
- (void)testAsyncFlutter2HostError {
MockBinaryMessenger *binaryMessenger =
[[MockBinaryMessenger alloc] initWithCodec:HostSmallApiGetCodec()];
[[MockBinaryMessenger alloc] initWithCodec:FLTHostSmallApiGetCodec()];
MockHostSmallApi *mockHostSmallApi = [[MockHostSmallApi alloc] init];
SetUpHostSmallApi(binaryMessenger, mockHostSmallApi);
SetUpFLTHostSmallApi(binaryMessenger, mockHostSmallApi);
NSString *channelName = @"dev.flutter.pigeon.pigeon_integration_tests.HostSmallApi.echo";
XCTAssertNotNil(binaryMessenger.handlers[channelName]);

View File

@ -17,18 +17,18 @@
@implementation ListTest
- (void)testListInList {
TestMessage *top = [[TestMessage alloc] init];
TestMessage *inside = [[TestMessage alloc] init];
FLTTestMessage *top = [[FLTTestMessage alloc] init];
FLTTestMessage *inside = [[FLTTestMessage alloc] init];
inside.testList = @[ @1, @2, @3 ];
top.testList = @[ inside ];
EchoBinaryMessenger *binaryMessenger =
[[EchoBinaryMessenger alloc] initWithCodec:FlutterSmallApiGetCodec()];
FlutterSmallApi *api = [[FlutterSmallApi alloc] initWithBinaryMessenger:binaryMessenger];
[[EchoBinaryMessenger alloc] initWithCodec:FLTFlutterSmallApiGetCodec()];
FLTFlutterSmallApi *api = [[FLTFlutterSmallApi alloc] initWithBinaryMessenger:binaryMessenger];
XCTestExpectation *expectation = [self expectationWithDescription:@"callback"];
[api echoWrappedList:top
completion:^(TestMessage *_Nonnull result, FlutterError *_Nullable err) {
completion:^(FLTTestMessage *_Nonnull result, FlutterError *_Nullable err) {
XCTAssertEqual(1u, result.testList.count);
XCTAssertTrue([result.testList[0] isKindOfClass:[TestMessage class]]);
XCTAssertTrue([result.testList[0] isKindOfClass:[FLTTestMessage class]]);
XCTAssertEqualObjects(inside.testList, [result.testList[0] testList]);
[expectation fulfill];
}];

View File

@ -6,5 +6,5 @@
#import "CoreTests.gen.h"
@interface AlternateLanguageTestPlugin : NSObject <FlutterPlugin, HostIntegrationCoreApi>
@interface AlternateLanguageTestPlugin : NSObject <FlutterPlugin, FLTHostIntegrationCoreApi>
@end

View File

@ -7,16 +7,16 @@
#import "CoreTests.gen.h"
@interface AlternateLanguageTestPlugin ()
@property(nonatomic) FlutterIntegrationCoreApi *flutterAPI;
@property(nonatomic) FLTFlutterIntegrationCoreApi *flutterAPI;
@end
/// This plugin handles the native side of the integration tests in example/integration_test/.
@implementation AlternateLanguageTestPlugin
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
AlternateLanguageTestPlugin *plugin = [[AlternateLanguageTestPlugin alloc] init];
SetUpHostIntegrationCoreApi([registrar messenger], plugin);
SetUpFLTHostIntegrationCoreApi([registrar messenger], plugin);
plugin.flutterAPI =
[[FlutterIntegrationCoreApi alloc] initWithBinaryMessenger:[registrar messenger]];
[[FLTFlutterIntegrationCoreApi alloc] initWithBinaryMessenger:[registrar messenger]];
}
#pragma mark HostIntegrationCoreApi implementation
@ -24,12 +24,12 @@
- (void)noopWithError:(FlutterError *_Nullable *_Nonnull)error {
}
- (nullable AllTypes *)echoAllTypes:(AllTypes *)everything
- (nullable FLTAllTypes *)echoAllTypes:(FLTAllTypes *)everything
error:(FlutterError *_Nullable *_Nonnull)error {
return everything;
}
- (nullable AllNullableTypes *)echoAllNullableTypes:(nullable AllNullableTypes *)everything
- (nullable FLTAllNullableTypes *)echoAllNullableTypes:(nullable FLTAllNullableTypes *)everything
error:(FlutterError *_Nullable *_Nonnull)error {
return everything;
}
@ -84,13 +84,14 @@
return aMap;
}
- (nullable AllClassesWrapper *)echoClassWrapper:(AllClassesWrapper *)wrapper
- (nullable FLTAllClassesWrapper *)echoClassWrapper:(FLTAllClassesWrapper *)wrapper
error:(FlutterError *_Nullable *_Nonnull)error {
return wrapper;
}
- (AnEnumBox *_Nullable)echoEnum:(AnEnum)anEnum error:(FlutterError *_Nullable *_Nonnull)error {
return [[AnEnumBox alloc] initWithValue:anEnum];
- (FLTAnEnumBox *_Nullable)echoEnum:(FLTAnEnum)anEnum
error:(FlutterError *_Nullable *_Nonnull)error {
return [[FLTAnEnumBox alloc] initWithValue:anEnum];
}
- (nullable NSString *)echoNamedDefaultString:(NSString *)aString
@ -108,25 +109,25 @@
return @(anInt);
}
- (nullable NSString *)extractNestedNullableStringFrom:(AllClassesWrapper *)wrapper
- (nullable NSString *)extractNestedNullableStringFrom:(FLTAllClassesWrapper *)wrapper
error:(FlutterError *_Nullable *_Nonnull)error {
return wrapper.allNullableTypes.aNullableString;
}
- (nullable AllClassesWrapper *)
- (nullable FLTAllClassesWrapper *)
createNestedObjectWithNullableString:(nullable NSString *)nullableString
error:(FlutterError *_Nullable *_Nonnull)error {
AllNullableTypes *innerObject = [[AllNullableTypes alloc] init];
FLTAllNullableTypes *innerObject = [[FLTAllNullableTypes alloc] init];
innerObject.aNullableString = nullableString;
return [AllClassesWrapper makeWithAllNullableTypes:innerObject allTypes:nil];
return [FLTAllClassesWrapper makeWithAllNullableTypes:innerObject allTypes:nil];
}
- (nullable AllNullableTypes *)sendMultipleNullableTypesABool:(nullable NSNumber *)aNullableBool
- (nullable FLTAllNullableTypes *)
sendMultipleNullableTypesABool:(nullable NSNumber *)aNullableBool
anInt:(nullable NSNumber *)aNullableInt
aString:(nullable NSString *)aNullableString
error:(FlutterError *_Nullable *_Nonnull)
error {
AllNullableTypes *someTypes = [[AllNullableTypes alloc] init];
error:(FlutterError *_Nullable *_Nonnull)error {
FLTAllNullableTypes *someTypes = [[FLTAllNullableTypes alloc] init];
someTypes.aNullableBool = aNullableBool;
someTypes.aNullableInt = aNullableInt;
someTypes.aNullableString = aNullableString;
@ -175,7 +176,7 @@
return aNullableMap;
}
- (AnEnumBox *_Nullable)echoNullableEnum:(nullable AnEnumBox *)AnEnumBoxed
- (FLTAnEnumBox *_Nullable)echoNullableEnum:(nullable FLTAnEnumBox *)AnEnumBoxed
error:(FlutterError *_Nullable *_Nonnull)error {
return AnEnumBoxed;
}
@ -207,13 +208,13 @@
completion(nil, [FlutterError errorWithCode:@"code" message:@"message" details:@"details"]);
}
- (void)echoAsyncAllTypes:(AllTypes *)everything
completion:(void (^)(AllTypes *_Nullable, FlutterError *_Nullable))completion {
- (void)echoAsyncAllTypes:(FLTAllTypes *)everything
completion:(void (^)(FLTAllTypes *_Nullable, FlutterError *_Nullable))completion {
completion(everything, nil);
}
- (void)echoAsyncNullableAllNullableTypes:(nullable AllNullableTypes *)everything
completion:(void (^)(AllNullableTypes *_Nullable,
- (void)echoAsyncNullableAllNullableTypes:(nullable FLTAllNullableTypes *)everything
completion:(void (^)(FLTAllNullableTypes *_Nullable,
FlutterError *_Nullable))completion {
completion(everything, nil);
}
@ -260,9 +261,9 @@
completion(aMap, nil);
}
- (void)echoAsyncEnum:(AnEnum)anEnum
completion:(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion {
completion([[AnEnumBox alloc] initWithValue:anEnum], nil);
- (void)echoAsyncEnum:(FLTAnEnum)anEnum
completion:(void (^)(FLTAnEnumBox *_Nullable, FlutterError *_Nullable))completion {
completion([[FLTAnEnumBox alloc] initWithValue:anEnum], nil);
}
- (void)echoAsyncNullableInt:(nullable NSNumber *)anInt
@ -308,8 +309,9 @@
completion(aMap, nil);
}
- (void)echoAsyncNullableEnum:(nullable AnEnumBox *)AnEnumBoxed
completion:(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion {
- (void)echoAsyncNullableEnum:(nullable FLTAnEnumBox *)AnEnumBoxed
completion:
(void (^)(FLTAnEnumBox *_Nullable, FlutterError *_Nullable))completion {
completion(AnEnumBoxed, nil);
}
@ -332,10 +334,11 @@
}];
}
- (void)callFlutterEchoAllTypes:(AllTypes *)everything
completion:(void (^)(AllTypes *_Nullable, FlutterError *_Nullable))completion {
- (void)callFlutterEchoAllTypes:(FLTAllTypes *)everything
completion:
(void (^)(FLTAllTypes *_Nullable, FlutterError *_Nullable))completion {
[self.flutterAPI echoAllTypes:everything
completion:^(AllTypes *value, FlutterError *error) {
completion:^(FLTAllTypes *value, FlutterError *error) {
completion(value, error);
}];
}
@ -343,12 +346,13 @@
- (void)callFlutterSendMultipleNullableTypesABool:(nullable NSNumber *)aNullableBool
anInt:(nullable NSNumber *)aNullableInt
aString:(nullable NSString *)aNullableString
completion:(void (^)(AllNullableTypes *_Nullable,
completion:(void (^)(FLTAllNullableTypes *_Nullable,
FlutterError *_Nullable))completion {
[self.flutterAPI sendMultipleNullableTypesABool:aNullableBool
[self.flutterAPI
sendMultipleNullableTypesABool:aNullableBool
anInt:aNullableInt
aString:aNullableString
completion:^(AllNullableTypes *value, FlutterError *error) {
completion:^(FLTAllNullableTypes *value, FlutterError *error) {
completion(value, error);
}];
}
@ -411,19 +415,19 @@
}];
}
- (void)callFlutterEchoEnum:(AnEnum)anEnum
completion:(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion {
- (void)callFlutterEchoEnum:(FLTAnEnum)anEnum
completion:(void (^)(FLTAnEnumBox *_Nullable, FlutterError *_Nullable))completion {
[self.flutterAPI echoEnum:anEnum
completion:^(AnEnumBox *value, FlutterError *error) {
completion:^(FLTAnEnumBox *value, FlutterError *error) {
completion(value, error);
}];
}
- (void)callFlutterEchoAllNullableTypes:(nullable AllNullableTypes *)everything
completion:(void (^)(AllNullableTypes *_Nullable,
- (void)callFlutterEchoAllNullableTypes:(nullable FLTAllNullableTypes *)everything
completion:(void (^)(FLTAllNullableTypes *_Nullable,
FlutterError *_Nullable))completion {
[self.flutterAPI echoAllNullableTypes:everything
completion:^(AllNullableTypes *value, FlutterError *error) {
completion:^(FLTAllNullableTypes *value, FlutterError *error) {
completion(value, error);
}];
}
@ -491,11 +495,11 @@
}];
}
- (void)callFlutterEchoNullableEnum:(nullable AnEnumBox *)AnEnumBoxed
completion:
(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion {
- (void)callFlutterEchoNullableEnum:(nullable FLTAnEnumBox *)AnEnumBoxed
completion:(void (^)(FLTAnEnumBox *_Nullable,
FlutterError *_Nullable))completion {
[self.flutterAPI echoNullableEnum:AnEnumBoxed
completion:^(AnEnumBox *value, FlutterError *error) {
completion:^(FLTAnEnumBox *value, FlutterError *error) {
completion(value, error);
}];
}

View File

@ -14,27 +14,27 @@
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, AnEnum) {
AnEnumOne = 0,
AnEnumTwo = 1,
AnEnumThree = 2,
AnEnumFortyTwo = 3,
AnEnumFourHundredTwentyTwo = 4,
typedef NS_ENUM(NSUInteger, FLTAnEnum) {
FLTAnEnumOne = 0,
FLTAnEnumTwo = 1,
FLTAnEnumThree = 2,
FLTAnEnumFortyTwo = 3,
FLTAnEnumFourHundredTwentyTwo = 4,
};
/// Wrapper for AnEnum to allow for nullability.
@interface AnEnumBox : NSObject
@property(nonatomic, assign) AnEnum value;
- (instancetype)initWithValue:(AnEnum)value;
/// Wrapper for FLTAnEnum to allow for nullability.
@interface FLTAnEnumBox : NSObject
@property(nonatomic, assign) FLTAnEnum value;
- (instancetype)initWithValue:(FLTAnEnum)value;
@end
@class AllTypes;
@class AllNullableTypes;
@class AllClassesWrapper;
@class TestMessage;
@class FLTAllTypes;
@class FLTAllNullableTypes;
@class FLTAllClassesWrapper;
@class FLTTestMessage;
/// A class containing all supported types.
@interface AllTypes : NSObject
@interface FLTAllTypes : NSObject
/// `init` unavailable to enforce nonnull fields, see the `make` class method.
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)makeWithABool:(BOOL)aBool
@ -47,7 +47,7 @@ typedef NS_ENUM(NSUInteger, AnEnum) {
aFloatArray:(FlutterStandardTypedData *)aFloatArray
aList:(NSArray *)aList
aMap:(NSDictionary *)aMap
anEnum:(AnEnum)anEnum
anEnum:(FLTAnEnum)anEnum
aString:(NSString *)aString
anObject:(id)anObject;
@property(nonatomic, assign) BOOL aBool;
@ -60,13 +60,13 @@ typedef NS_ENUM(NSUInteger, AnEnum) {
@property(nonatomic, strong) FlutterStandardTypedData *aFloatArray;
@property(nonatomic, copy) NSArray *aList;
@property(nonatomic, copy) NSDictionary *aMap;
@property(nonatomic, assign) AnEnum anEnum;
@property(nonatomic, assign) FLTAnEnum anEnum;
@property(nonatomic, copy) NSString *aString;
@property(nonatomic, strong) id anObject;
@end
/// A class containing all supported nullable types.
@interface AllNullableTypes : NSObject
@interface FLTAllNullableTypes : NSObject
+ (instancetype)makeWithANullableBool:(nullable NSNumber *)aNullableBool
aNullableInt:(nullable NSNumber *)aNullableInt
aNullableInt64:(nullable NSNumber *)aNullableInt64
@ -81,7 +81,7 @@ typedef NS_ENUM(NSUInteger, AnEnum) {
nullableMapWithAnnotations:
(nullable NSDictionary<NSString *, NSString *> *)nullableMapWithAnnotations
nullableMapWithObject:(nullable NSDictionary<NSString *, id> *)nullableMapWithObject
aNullableEnum:(nullable AnEnumBox *)aNullableEnum
aNullableEnum:(nullable FLTAnEnumBox *)aNullableEnum
aNullableString:(nullable NSString *)aNullableString
aNullableObject:(nullable id)aNullableObject;
@property(nonatomic, strong, nullable) NSNumber *aNullableBool;
@ -98,7 +98,7 @@ typedef NS_ENUM(NSUInteger, AnEnum) {
@property(nonatomic, copy, nullable)
NSDictionary<NSString *, NSString *> *nullableMapWithAnnotations;
@property(nonatomic, copy, nullable) NSDictionary<NSString *, id> *nullableMapWithObject;
@property(nonatomic, strong, nullable) AnEnumBox *aNullableEnum;
@property(nonatomic, strong, nullable) FLTAnEnumBox *aNullableEnum;
@property(nonatomic, copy, nullable) NSString *aNullableString;
@property(nonatomic, strong, nullable) id aNullableObject;
@end
@ -108,34 +108,34 @@ typedef NS_ENUM(NSUInteger, AnEnum) {
/// 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).
@interface AllClassesWrapper : NSObject
@interface FLTAllClassesWrapper : NSObject
/// `init` unavailable to enforce nonnull fields, see the `make` class method.
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)makeWithAllNullableTypes:(AllNullableTypes *)allNullableTypes
allTypes:(nullable AllTypes *)allTypes;
@property(nonatomic, strong) AllNullableTypes *allNullableTypes;
@property(nonatomic, strong, nullable) AllTypes *allTypes;
+ (instancetype)makeWithAllNullableTypes:(FLTAllNullableTypes *)allNullableTypes
allTypes:(nullable FLTAllTypes *)allTypes;
@property(nonatomic, strong) FLTAllNullableTypes *allNullableTypes;
@property(nonatomic, strong, nullable) FLTAllTypes *allTypes;
@end
/// A data class containing a List, used in unit tests.
@interface TestMessage : NSObject
@interface FLTTestMessage : NSObject
+ (instancetype)makeWithTestList:(nullable NSArray *)testList;
@property(nonatomic, copy, nullable) NSArray *testList;
@end
/// The codec used by HostIntegrationCoreApi.
NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
/// The codec used by FLTHostIntegrationCoreApi.
NSObject<FlutterMessageCodec> *FLTHostIntegrationCoreApiGetCodec(void);
/// The core interface that each host language plugin must implement in
/// platform_test integration tests.
@protocol HostIntegrationCoreApi
@protocol FLTHostIntegrationCoreApi
/// A no-op function taking no arguments and returning no value, to sanity
/// test basic calling.
- (void)noopWithError:(FlutterError *_Nullable *_Nonnull)error;
/// Returns the passed object, to test serialization and deserialization.
///
/// @return `nil` only when `error != nil`.
- (nullable AllTypes *)echoAllTypes:(AllTypes *)everything
- (nullable FLTAllTypes *)echoAllTypes:(FLTAllTypes *)everything
error:(FlutterError *_Nullable *_Nonnull)error;
/// Returns an error, to test error handling.
- (nullable id)throwErrorWithError:(FlutterError *_Nullable *_Nonnull)error;
@ -182,12 +182,13 @@ NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
/// Returns the passed map to test nested class serialization and deserialization.
///
/// @return `nil` only when `error != nil`.
- (nullable AllClassesWrapper *)echoClassWrapper:(AllClassesWrapper *)wrapper
- (nullable FLTAllClassesWrapper *)echoClassWrapper:(FLTAllClassesWrapper *)wrapper
error:(FlutterError *_Nullable *_Nonnull)error;
/// Returns the passed enum to test serialization and deserialization.
///
/// @return `nil` only when `error != nil`.
- (AnEnumBox *_Nullable)echoEnum:(AnEnum)anEnum error:(FlutterError *_Nullable *_Nonnull)error;
- (FLTAnEnumBox *_Nullable)echoEnum:(FLTAnEnum)anEnum
error:(FlutterError *_Nullable *_Nonnull)error;
/// Returns the default string.
///
/// @return `nil` only when `error != nil`.
@ -204,27 +205,27 @@ NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
- (nullable NSNumber *)echoRequiredInt:(NSInteger)anInt
error:(FlutterError *_Nullable *_Nonnull)error;
/// Returns the passed object, to test serialization and deserialization.
- (nullable AllNullableTypes *)echoAllNullableTypes:(nullable AllNullableTypes *)everything
- (nullable FLTAllNullableTypes *)echoAllNullableTypes:(nullable FLTAllNullableTypes *)everything
error:(FlutterError *_Nullable *_Nonnull)error;
/// Returns the inner `aString` value from the wrapped object, to test
/// sending of nested objects.
- (nullable NSString *)extractNestedNullableStringFrom:(AllClassesWrapper *)wrapper
- (nullable NSString *)extractNestedNullableStringFrom:(FLTAllClassesWrapper *)wrapper
error:(FlutterError *_Nullable *_Nonnull)error;
/// Returns the inner `aString` value from the wrapped object, to test
/// sending of nested objects.
///
/// @return `nil` only when `error != nil`.
- (nullable AllClassesWrapper *)
- (nullable FLTAllClassesWrapper *)
createNestedObjectWithNullableString:(nullable NSString *)nullableString
error:(FlutterError *_Nullable *_Nonnull)error;
/// Returns passed in arguments of multiple types.
///
/// @return `nil` only when `error != nil`.
- (nullable AllNullableTypes *)sendMultipleNullableTypesABool:(nullable NSNumber *)aNullableBool
- (nullable FLTAllNullableTypes *)
sendMultipleNullableTypesABool:(nullable NSNumber *)aNullableBool
anInt:(nullable NSNumber *)aNullableInt
aString:(nullable NSString *)aNullableString
error:(FlutterError *_Nullable *_Nonnull)
error;
error:(FlutterError *_Nullable *_Nonnull)error;
/// Returns passed in int.
- (nullable NSNumber *)echoNullableInt:(nullable NSNumber *)aNullableInt
error:(FlutterError *_Nullable *_Nonnull)error;
@ -251,7 +252,7 @@ NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
- (nullable NSDictionary<NSString *, id> *)echoNullableMap:
(nullable NSDictionary<NSString *, id> *)aNullableMap
error:(FlutterError *_Nullable *_Nonnull)error;
- (AnEnumBox *_Nullable)echoNullableEnum:(nullable AnEnumBox *)anEnumBoxed
- (FLTAnEnumBox *_Nullable)echoNullableEnum:(nullable FLTAnEnumBox *)anEnumBoxed
error:(FlutterError *_Nullable *_Nonnull)error;
/// Returns passed in int.
- (nullable NSNumber *)echoOptionalNullableInt:(nullable NSNumber *)aNullableInt
@ -289,8 +290,8 @@ NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
completion:(void (^)(NSDictionary<NSString *, id> *_Nullable,
FlutterError *_Nullable))completion;
/// Returns the passed enum, to test asynchronous serialization and deserialization.
- (void)echoAsyncEnum:(AnEnum)anEnum
completion:(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion;
- (void)echoAsyncEnum:(FLTAnEnum)anEnum
completion:(void (^)(FLTAnEnumBox *_Nullable, FlutterError *_Nullable))completion;
/// Responds with an error from an async function returning a value.
- (void)throwAsyncErrorWithCompletion:(void (^)(id _Nullable, FlutterError *_Nullable))completion;
/// Responds with an error from an async void function.
@ -299,11 +300,11 @@ NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
- (void)throwAsyncFlutterErrorWithCompletion:(void (^)(id _Nullable,
FlutterError *_Nullable))completion;
/// Returns the passed object, to test async serialization and deserialization.
- (void)echoAsyncAllTypes:(AllTypes *)everything
completion:(void (^)(AllTypes *_Nullable, FlutterError *_Nullable))completion;
- (void)echoAsyncAllTypes:(FLTAllTypes *)everything
completion:(void (^)(FLTAllTypes *_Nullable, FlutterError *_Nullable))completion;
/// Returns the passed object, to test serialization and deserialization.
- (void)echoAsyncNullableAllNullableTypes:(nullable AllNullableTypes *)everything
completion:(void (^)(AllNullableTypes *_Nullable,
- (void)echoAsyncNullableAllNullableTypes:(nullable FLTAllNullableTypes *)everything
completion:(void (^)(FLTAllNullableTypes *_Nullable,
FlutterError *_Nullable))completion;
/// Returns passed in int asynchronously.
- (void)echoAsyncNullableInt:(nullable NSNumber *)anInt
@ -332,21 +333,23 @@ NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
completion:(void (^)(NSDictionary<NSString *, id> *_Nullable,
FlutterError *_Nullable))completion;
/// Returns the passed enum, to test asynchronous serialization and deserialization.
- (void)echoAsyncNullableEnum:(nullable AnEnumBox *)anEnumBoxed
completion:(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion;
- (void)echoAsyncNullableEnum:(nullable FLTAnEnumBox *)anEnumBoxed
completion:
(void (^)(FLTAnEnumBox *_Nullable, FlutterError *_Nullable))completion;
- (void)callFlutterNoopWithCompletion:(void (^)(FlutterError *_Nullable))completion;
- (void)callFlutterThrowErrorWithCompletion:(void (^)(id _Nullable,
FlutterError *_Nullable))completion;
- (void)callFlutterThrowErrorFromVoidWithCompletion:(void (^)(FlutterError *_Nullable))completion;
- (void)callFlutterEchoAllTypes:(AllTypes *)everything
completion:(void (^)(AllTypes *_Nullable, FlutterError *_Nullable))completion;
- (void)callFlutterEchoAllNullableTypes:(nullable AllNullableTypes *)everything
completion:(void (^)(AllNullableTypes *_Nullable,
- (void)callFlutterEchoAllTypes:(FLTAllTypes *)everything
completion:
(void (^)(FLTAllTypes *_Nullable, FlutterError *_Nullable))completion;
- (void)callFlutterEchoAllNullableTypes:(nullable FLTAllNullableTypes *)everything
completion:(void (^)(FLTAllNullableTypes *_Nullable,
FlutterError *_Nullable))completion;
- (void)callFlutterSendMultipleNullableTypesABool:(nullable NSNumber *)aNullableBool
anInt:(nullable NSNumber *)aNullableInt
aString:(nullable NSString *)aNullableString
completion:(void (^)(AllNullableTypes *_Nullable,
completion:(void (^)(FLTAllNullableTypes *_Nullable,
FlutterError *_Nullable))completion;
- (void)callFlutterEchoBool:(BOOL)aBool
completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;
@ -364,8 +367,8 @@ NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
- (void)callFlutterEchoMap:(NSDictionary<NSString *, id> *)aMap
completion:(void (^)(NSDictionary<NSString *, id> *_Nullable,
FlutterError *_Nullable))completion;
- (void)callFlutterEchoEnum:(AnEnum)anEnum
completion:(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion;
- (void)callFlutterEchoEnum:(FLTAnEnum)anEnum
completion:(void (^)(FLTAnEnumBox *_Nullable, FlutterError *_Nullable))completion;
- (void)callFlutterEchoNullableBool:(nullable NSNumber *)aBool
completion:
(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;
@ -387,20 +390,20 @@ NSObject<FlutterMessageCodec> *HostIntegrationCoreApiGetCodec(void);
- (void)callFlutterEchoNullableMap:(nullable NSDictionary<NSString *, id> *)aMap
completion:(void (^)(NSDictionary<NSString *, id> *_Nullable,
FlutterError *_Nullable))completion;
- (void)callFlutterEchoNullableEnum:(nullable AnEnumBox *)anEnumBoxed
- (void)callFlutterEchoNullableEnum:(nullable FLTAnEnumBox *)anEnumBoxed
completion:
(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion;
(void (^)(FLTAnEnumBox *_Nullable, FlutterError *_Nullable))completion;
@end
extern void SetUpHostIntegrationCoreApi(id<FlutterBinaryMessenger> binaryMessenger,
NSObject<HostIntegrationCoreApi> *_Nullable api);
extern void SetUpFLTHostIntegrationCoreApi(id<FlutterBinaryMessenger> binaryMessenger,
NSObject<FLTHostIntegrationCoreApi> *_Nullable api);
/// The codec used by FlutterIntegrationCoreApi.
NSObject<FlutterMessageCodec> *FlutterIntegrationCoreApiGetCodec(void);
/// The codec used by FLTFlutterIntegrationCoreApi.
NSObject<FlutterMessageCodec> *FLTFlutterIntegrationCoreApiGetCodec(void);
/// The core interface that the Dart platform_test code implements for host
/// integration tests to call into.
@interface FlutterIntegrationCoreApi : NSObject
@interface FLTFlutterIntegrationCoreApi : NSObject
- (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger;
/// A no-op function taking no arguments and returning no value, to sanity
/// test basic calling.
@ -410,19 +413,19 @@ NSObject<FlutterMessageCodec> *FlutterIntegrationCoreApiGetCodec(void);
/// Responds with an error from an async void function.
- (void)throwErrorFromVoidWithCompletion:(void (^)(FlutterError *_Nullable))completion;
/// Returns the passed object, to test serialization and deserialization.
- (void)echoAllTypes:(AllTypes *)everything
completion:(void (^)(AllTypes *_Nullable, FlutterError *_Nullable))completion;
- (void)echoAllTypes:(FLTAllTypes *)everything
completion:(void (^)(FLTAllTypes *_Nullable, FlutterError *_Nullable))completion;
/// Returns the passed object, to test serialization and deserialization.
- (void)echoAllNullableTypes:(nullable AllNullableTypes *)everything
- (void)echoAllNullableTypes:(nullable FLTAllNullableTypes *)everything
completion:
(void (^)(AllNullableTypes *_Nullable, FlutterError *_Nullable))completion;
(void (^)(FLTAllNullableTypes *_Nullable, FlutterError *_Nullable))completion;
/// Returns passed in arguments of multiple types.
///
/// Tests multiple-arity FlutterApi handling.
- (void)sendMultipleNullableTypesABool:(nullable NSNumber *)aNullableBool
anInt:(nullable NSNumber *)aNullableInt
aString:(nullable NSString *)aNullableString
completion:(void (^)(AllNullableTypes *_Nullable,
completion:(void (^)(FLTAllNullableTypes *_Nullable,
FlutterError *_Nullable))completion;
/// Returns the passed boolean, to test serialization and deserialization.
- (void)echoBool:(BOOL)aBool
@ -448,8 +451,8 @@ NSObject<FlutterMessageCodec> *FlutterIntegrationCoreApiGetCodec(void);
completion:
(void (^)(NSDictionary<NSString *, id> *_Nullable, FlutterError *_Nullable))completion;
/// Returns the passed enum to test serialization and deserialization.
- (void)echoEnum:(AnEnum)anEnum
completion:(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion;
- (void)echoEnum:(FLTAnEnum)anEnum
completion:(void (^)(FLTAnEnumBox *_Nullable, FlutterError *_Nullable))completion;
/// Returns the passed boolean, to test serialization and deserialization.
- (void)echoNullableBool:(nullable NSNumber *)aBool
completion:(void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion;
@ -474,8 +477,8 @@ NSObject<FlutterMessageCodec> *FlutterIntegrationCoreApiGetCodec(void);
completion:(void (^)(NSDictionary<NSString *, id> *_Nullable,
FlutterError *_Nullable))completion;
/// Returns the passed enum to test serialization and deserialization.
- (void)echoNullableEnum:(nullable AnEnumBox *)anEnumBoxed
completion:(void (^)(AnEnumBox *_Nullable, FlutterError *_Nullable))completion;
- (void)echoNullableEnum:(nullable FLTAnEnumBox *)anEnumBoxed
completion:(void (^)(FLTAnEnumBox *_Nullable, FlutterError *_Nullable))completion;
/// A no-op function taking no arguments and returning no value, to sanity
/// test basic asynchronous calling.
- (void)noopAsyncWithCompletion:(void (^)(FlutterError *_Nullable))completion;
@ -484,38 +487,38 @@ NSObject<FlutterMessageCodec> *FlutterIntegrationCoreApiGetCodec(void);
completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion;
@end
/// The codec used by HostTrivialApi.
NSObject<FlutterMessageCodec> *HostTrivialApiGetCodec(void);
/// The codec used by FLTHostTrivialApi.
NSObject<FlutterMessageCodec> *FLTHostTrivialApiGetCodec(void);
/// An API that can be implemented for minimal, compile-only tests.
@protocol HostTrivialApi
@protocol FLTHostTrivialApi
- (void)noopWithError:(FlutterError *_Nullable *_Nonnull)error;
@end
extern void SetUpHostTrivialApi(id<FlutterBinaryMessenger> binaryMessenger,
NSObject<HostTrivialApi> *_Nullable api);
extern void SetUpFLTHostTrivialApi(id<FlutterBinaryMessenger> binaryMessenger,
NSObject<FLTHostTrivialApi> *_Nullable api);
/// The codec used by HostSmallApi.
NSObject<FlutterMessageCodec> *HostSmallApiGetCodec(void);
/// The codec used by FLTHostSmallApi.
NSObject<FlutterMessageCodec> *FLTHostSmallApiGetCodec(void);
/// A simple API implemented in some unit tests.
@protocol HostSmallApi
@protocol FLTHostSmallApi
- (void)echoString:(NSString *)aString
completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion;
- (void)voidVoidWithCompletion:(void (^)(FlutterError *_Nullable))completion;
@end
extern void SetUpHostSmallApi(id<FlutterBinaryMessenger> binaryMessenger,
NSObject<HostSmallApi> *_Nullable api);
extern void SetUpFLTHostSmallApi(id<FlutterBinaryMessenger> binaryMessenger,
NSObject<FLTHostSmallApi> *_Nullable api);
/// The codec used by FlutterSmallApi.
NSObject<FlutterMessageCodec> *FlutterSmallApiGetCodec(void);
/// The codec used by FLTFlutterSmallApi.
NSObject<FlutterMessageCodec> *FLTFlutterSmallApiGetCodec(void);
/// A simple API called in some unit tests.
@interface FlutterSmallApi : NSObject
@interface FLTFlutterSmallApi : NSObject
- (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger;
- (void)echoWrappedList:(TestMessage *)msg
completion:(void (^)(TestMessage *_Nullable, FlutterError *_Nullable))completion;
- (void)echoWrappedList:(FLTTestMessage *)msg
completion:(void (^)(FLTTestMessage *_Nullable, FlutterError *_Nullable))completion;
- (void)echoString:(NSString *)aString
completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion;
@end

View File

@ -2,7 +2,7 @@ name: pigeon
description: Code generator tool to make communication between Flutter and the host platform type-safe and easier.
repository: https://github.com/flutter/packages/tree/main/packages/pigeon
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+pigeon%22
version: 17.1.2 # This must match the version in lib/generator_tools.dart
version: 17.1.3 # This must match the version in lib/generator_tools.dart
environment:
sdk: ^3.1.0

View File

@ -2931,4 +2931,178 @@ void main() {
'return [FlutterError errorWithCode:@"channel-error" message:[NSString stringWithFormat:@"%@/%@/%@", @"Unable to establish connection on channel: \'", channelName, @"\'."] details:@""]'));
expect(code, contains('completion(createConnectionError(channelName))'));
});
test('header of FlutterApi uses correct enum name with prefix', () {
final Enum enum1 = Enum(
name: 'Enum1',
members: <EnumMember>[
EnumMember(name: 'one'),
EnumMember(name: 'two'),
],
);
final Root root = Root(apis: <Api>[
AstFlutterApi(name: 'Api', methods: <Method>[
Method(
name: 'doSomething',
location: ApiLocation.flutter,
isAsynchronous: true,
parameters: <Parameter>[],
returnType: TypeDeclaration(
baseName: 'Enum1',
isNullable: false,
associatedEnum: enum1,
),
)
]),
], classes: <Class>[], enums: <Enum>[
enum1,
]);
final StringBuffer sink = StringBuffer();
const ObjcGenerator generator = ObjcGenerator();
final OutputFileOptions<ObjcOptions> generatorOptions =
OutputFileOptions<ObjcOptions>(
fileType: FileType.header,
languageOptions: const ObjcOptions(prefix: 'FLT'),
);
generator.generate(
generatorOptions,
root,
sink,
dartPackageName: DEFAULT_PACKAGE_NAME,
);
final String code = sink.toString();
expect(code, isNot(contains('FLTFLT')));
expect(code, contains('FLTEnum1Box'));
});
test('source of FlutterApi uses correct enum name with prefix', () {
final Enum enum1 = Enum(
name: 'Enum1',
members: <EnumMember>[
EnumMember(name: 'one'),
EnumMember(name: 'two'),
],
);
final Root root = Root(apis: <Api>[
AstFlutterApi(name: 'Api', methods: <Method>[
Method(
name: 'doSomething',
location: ApiLocation.flutter,
isAsynchronous: true,
parameters: <Parameter>[],
returnType: TypeDeclaration(
baseName: 'Enum1',
isNullable: false,
associatedEnum: enum1,
),
)
]),
], classes: <Class>[], enums: <Enum>[
enum1,
]);
final StringBuffer sink = StringBuffer();
const ObjcGenerator generator = ObjcGenerator();
final OutputFileOptions<ObjcOptions> generatorOptions =
OutputFileOptions<ObjcOptions>(
fileType: FileType.source,
languageOptions: const ObjcOptions(prefix: 'FLT'),
);
generator.generate(
generatorOptions,
root,
sink,
dartPackageName: DEFAULT_PACKAGE_NAME,
);
final String code = sink.toString();
expect(code, isNot(contains('FLTFLT')));
expect(code, contains('FLTEnum1Box'));
});
test('header of HostApi uses correct enum name with prefix', () {
final Enum enum1 = Enum(
name: 'Enum1',
members: <EnumMember>[
EnumMember(name: 'one'),
EnumMember(name: 'two'),
],
);
final TypeDeclaration enumType = TypeDeclaration(
baseName: 'Enum1',
isNullable: false,
associatedEnum: enum1,
);
final Root root = Root(apis: <Api>[
AstHostApi(name: 'Api', methods: <Method>[
Method(
name: 'doSomething',
location: ApiLocation.host,
isAsynchronous: true,
parameters: <Parameter>[Parameter(name: 'value', type: enumType)],
returnType: enumType,
)
]),
], classes: <Class>[], enums: <Enum>[
enum1,
]);
final StringBuffer sink = StringBuffer();
const ObjcGenerator generator = ObjcGenerator();
final OutputFileOptions<ObjcOptions> generatorOptions =
OutputFileOptions<ObjcOptions>(
fileType: FileType.header,
languageOptions: const ObjcOptions(prefix: 'FLT'),
);
generator.generate(
generatorOptions,
root,
sink,
dartPackageName: DEFAULT_PACKAGE_NAME,
);
final String code = sink.toString();
expect(code, isNot(contains('FLTFLT')));
expect(code, contains('FLTEnum1Box'));
});
test('source of HostApi uses correct enum name with prefix', () {
final Enum enum1 = Enum(
name: 'Enum1',
members: <EnumMember>[
EnumMember(name: 'one'),
EnumMember(name: 'two'),
],
);
final TypeDeclaration enumType = TypeDeclaration(
baseName: 'Enum1',
isNullable: false,
associatedEnum: enum1,
);
final Root root = Root(apis: <Api>[
AstHostApi(name: 'Api', methods: <Method>[
Method(
name: 'doSomething',
location: ApiLocation.host,
isAsynchronous: true,
parameters: <Parameter>[Parameter(name: 'value', type: enumType)],
returnType: enumType,
)
]),
], classes: <Class>[], enums: <Enum>[
enum1,
]);
final StringBuffer sink = StringBuffer();
const ObjcGenerator generator = ObjcGenerator();
final OutputFileOptions<ObjcOptions> generatorOptions =
OutputFileOptions<ObjcOptions>(
fileType: FileType.source,
languageOptions: const ObjcOptions(prefix: 'FLT'),
);
generator.generate(
generatorOptions,
root,
sink,
dartPackageName: DEFAULT_PACKAGE_NAME,
);
final String code = sink.toString();
expect(code, isNot(contains('FLTFLT')));
expect(code, contains('FLTEnum1Box'));
});
}

View File

@ -151,6 +151,7 @@ Future<int> generateTestPigeons({required String baseDir}) async {
objcSourceOut: skipLanguages.contains(GeneratorLanguage.objc)
? null
: '$alternateOutputBase/ios/Classes/$pascalCaseName.gen.m',
objcPrefix: input == 'core_tests' ? 'FLT' : '',
suppressVersion: true,
dartPackageName: 'pigeon_integration_tests',
);