[Pigeon] enum ios unittest (#376)

This commit is contained in:
gaaclarke
2021-06-14 13:03:58 -07:00
committed by GitHub
parent 6833bcc29c
commit 5bd986b616
6 changed files with 198 additions and 0 deletions

View File

@ -0,0 +1,25 @@
// 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 State {
Pending,
Success,
Error,
}
class Data {
State? state;
}
@HostApi()
abstract class EnumApi2Host {
Data echo(Data data);
}
@FlutterApi()
abstract class EnumApi2Flutter {
Data echo(Data data);
}

View File

@ -11,9 +11,11 @@
0D50127523FF75B100CD5B95 /* RunnerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D50127423FF75B100CD5B95 /* RunnerTests.m */; };
0D8C35E825D45A3000B76435 /* async_handlers.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8C35E725D45A3000B76435 /* async_handlers.m */; };
0D8C35EB25D45A7900B76435 /* AsyncHandlersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8C35EA25D45A7900B76435 /* AsyncHandlersTest.m */; };
0DD2E690266FDB7000A7D764 /* enum.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DD2E68F266FDB7000A7D764 /* enum.m */; };
0DF4E5C3266ECF0400AEA855 /* all_datatypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DF4E5C2266ECF0400AEA855 /* all_datatypes.m */; };
0DF4E5C5266ECF4A00AEA855 /* AllDatatypesTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DF4E5C4266ECF4A00AEA855 /* AllDatatypesTest.m */; };
0DF4E5C8266ED80900AEA855 /* EchoMessenger.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DF4E5C7266ED80900AEA855 /* EchoMessenger.m */; };
0DF4E5CB266FDAE300AEA855 /* EnumTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DF4E5CA266FDAE300AEA855 /* EnumTest.m */; };
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
@ -55,11 +57,14 @@
0D8C35E625D45A3000B76435 /* async_handlers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = async_handlers.h; sourceTree = "<group>"; };
0D8C35E725D45A3000B76435 /* async_handlers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = async_handlers.m; sourceTree = "<group>"; };
0D8C35EA25D45A7900B76435 /* AsyncHandlersTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AsyncHandlersTest.m; sourceTree = "<group>"; };
0DD2E68E266FDB7000A7D764 /* enum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum.h; sourceTree = "<group>"; };
0DD2E68F266FDB7000A7D764 /* enum.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = enum.m; sourceTree = "<group>"; };
0DF4E5C1266ECF0400AEA855 /* all_datatypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = all_datatypes.h; sourceTree = "<group>"; };
0DF4E5C2266ECF0400AEA855 /* all_datatypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = all_datatypes.m; sourceTree = "<group>"; };
0DF4E5C4266ECF4A00AEA855 /* AllDatatypesTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AllDatatypesTest.m; sourceTree = "<group>"; };
0DF4E5C6266ED80900AEA855 /* EchoMessenger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EchoMessenger.h; sourceTree = "<group>"; };
0DF4E5C7266ED80900AEA855 /* EchoMessenger.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EchoMessenger.m; sourceTree = "<group>"; };
0DF4E5CA266FDAE300AEA855 /* EnumTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EnumTest.m; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
@ -103,6 +108,7 @@
0DF4E5C4266ECF4A00AEA855 /* AllDatatypesTest.m */,
0DF4E5C6266ED80900AEA855 /* EchoMessenger.h */,
0DF4E5C7266ED80900AEA855 /* EchoMessenger.m */,
0DF4E5CA266FDAE300AEA855 /* EnumTest.m */,
);
path = RunnerTests;
sourceTree = "<group>";
@ -140,6 +146,8 @@
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
0DD2E68E266FDB7000A7D764 /* enum.h */,
0DD2E68F266FDB7000A7D764 /* enum.m */,
0DF4E5C1266ECF0400AEA855 /* all_datatypes.h */,
0DF4E5C2266ECF0400AEA855 /* all_datatypes.m */,
0D8C35E625D45A3000B76435 /* async_handlers.h */,
@ -306,6 +314,7 @@
0D50127523FF75B100CD5B95 /* RunnerTests.m in Sources */,
0DF4E5C5266ECF4A00AEA855 /* AllDatatypesTest.m in Sources */,
0DF4E5C8266ED80900AEA855 /* EchoMessenger.m in Sources */,
0DF4E5CB266FDAE300AEA855 /* EnumTest.m in Sources */,
0D8C35EB25D45A7900B76435 /* AsyncHandlersTest.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -319,6 +328,7 @@
97C146F31CF9000F007C117D /* main.m in Sources */,
0DF4E5C3266ECF0400AEA855 /* all_datatypes.m in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
0DD2E690266FDB7000A7D764 /* enum.m in Sources */,
0D8C35E825D45A3000B76435 /* async_handlers.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;

View File

@ -0,0 +1,37 @@
// 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.
// Autogenerated from Pigeon (v0.2.1), do not edit directly.
// See also: https://pub.dev/packages/pigeon
#import <Foundation/Foundation.h>
@protocol FlutterBinaryMessenger;
@class FlutterError;
@class FlutterStandardTypedData;
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, ACState) {
ACStatePending = 0,
ACStateSuccess = 1,
ACStateError = 2,
};
@class ACData;
@interface ACData : NSObject
@property(nonatomic, assign) ACState state;
@end
@protocol ACEnumApi2Host
- (nullable ACData *)echo:(ACData *)input error:(FlutterError *_Nullable *_Nonnull)error;
@end
extern void ACEnumApi2HostSetup(id<FlutterBinaryMessenger> binaryMessenger,
id<ACEnumApi2Host> _Nullable api);
@interface ACEnumApi2Flutter : NSObject
- (instancetype)initWithBinaryMessenger:(id<FlutterBinaryMessenger>)binaryMessenger;
- (void)echo:(ACData *)input completion:(void (^)(ACData *, NSError *_Nullable))completion;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,87 @@
// 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.
// Autogenerated from Pigeon (v0.2.1), do not edit directly.
// See also: https://pub.dev/packages/pigeon
#import "enum.h"
#import <Flutter/Flutter.h>
#if !__has_feature(objc_arc)
#error File requires ARC to be enabled.
#endif
static NSDictionary<NSString *, id> *wrapResult(NSDictionary *result, FlutterError *error) {
NSDictionary *errorDict = (NSDictionary *)[NSNull null];
if (error) {
errorDict = @{
@"code" : (error.code ? error.code : [NSNull null]),
@"message" : (error.message ? error.message : [NSNull null]),
@"details" : (error.details ? error.details : [NSNull null]),
};
}
return @{
@"result" : (result ? result : [NSNull null]),
@"error" : errorDict,
};
}
@interface ACData ()
+ (ACData *)fromMap:(NSDictionary *)dict;
- (NSDictionary *)toMap;
@end
@implementation ACData
+ (ACData *)fromMap:(NSDictionary *)dict {
ACData *result = [[ACData alloc] init];
result.state = [dict[@"state"] integerValue];
return result;
}
- (NSDictionary *)toMap {
return [NSDictionary dictionaryWithObjectsAndKeys:@(self.state), @"state", nil];
}
@end
void ACEnumApi2HostSetup(id<FlutterBinaryMessenger> binaryMessenger, id<ACEnumApi2Host> api) {
{
FlutterBasicMessageChannel *channel =
[FlutterBasicMessageChannel messageChannelWithName:@"dev.flutter.pigeon.EnumApi2Host.echo"
binaryMessenger:binaryMessenger];
if (api) {
[channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
ACData *input = [ACData fromMap:message];
FlutterError *error;
ACData *output = [api echo:input error:&error];
callback(wrapResult([output toMap], error));
}];
} else {
[channel setMessageHandler:nil];
}
}
}
@interface ACEnumApi2Flutter ()
@property(nonatomic, strong) NSObject<FlutterBinaryMessenger> *binaryMessenger;
@end
@implementation ACEnumApi2Flutter
- (instancetype)initWithBinaryMessenger:(NSObject<FlutterBinaryMessenger> *)binaryMessenger {
self = [super init];
if (self) {
_binaryMessenger = binaryMessenger;
}
return self;
}
- (void)echo:(ACData *)input completion:(void (^)(ACData *, NSError *_Nullable))completion {
FlutterBasicMessageChannel *channel =
[FlutterBasicMessageChannel messageChannelWithName:@"dev.flutter.pigeon.EnumApi2Flutter.echo"
binaryMessenger:self.binaryMessenger];
NSDictionary *inputMap = [input toMap];
[channel sendMessage:inputMap
reply:^(id reply) {
NSDictionary *outputMap = reply;
ACData *output = [ACData fromMap:outputMap];
completion(output, nil);
}];
}
@end

View File

@ -0,0 +1,31 @@
// 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 <Flutter/Flutter.h>
#import <XCTest/XCTest.h>
#import "EchoMessenger.h"
#import "enum.h"
///////////////////////////////////////////////////////////////////////////////////////////
@interface EnumTest : XCTestCase
@end
///////////////////////////////////////////////////////////////////////////////////////////
@implementation EnumTest
- (void)testEcho {
ACData* data = [[ACData alloc] init];
data.state = ACStateError;
EchoBinaryMessenger* binaryMessenger = [[EchoBinaryMessenger alloc] init];
ACEnumApi2Flutter* api = [[ACEnumApi2Flutter alloc] initWithBinaryMessenger:binaryMessenger];
XCTestExpectation* expectation = [self expectationWithDescription:@"callback"];
[api echo:data
completion:^(ACData* _Nonnull result, NSError* _Nullable error) {
XCTAssertEqual(data.state, result.state);
[expectation fulfill];
}];
[self waitForExpectations:@[ expectation ] timeout:1.0];
}
@end

View File

@ -302,6 +302,14 @@ run_ios_unittests() {
--objc_source_out platform_tests/ios_unit_tests/ios/Runner/all_datatypes.m
clang-format -i platform_tests/ios_unit_tests/ios/Runner/all_datatypes.h
clang-format -i platform_tests/ios_unit_tests/ios/Runner/all_datatypes.m
$run_pigeon \
--input pigeons/enum.dart \
--objc_prefix AC \
--dart_out /dev/null \
--objc_header_out platform_tests/ios_unit_tests/ios/Runner/enum.h \
--objc_source_out platform_tests/ios_unit_tests/ios/Runner/enum.m
clang-format -i platform_tests/ios_unit_tests/ios/Runner/enum.h
clang-format -i platform_tests/ios_unit_tests/ios/Runner/enum.m
pushd $PWD
cd platform_tests/ios_unit_tests
flutter build ios --simulator