blob: df344b8dd69e309ff043765a5858d14e2c35c7dc [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 <XCTest/XCTest.h>
#import "EchoMessenger.h"
#import "MockBinaryMessenger.h"
#import "nullable_returns.gen.h"
///////////////////////////////////////////////////////////////////////////////////////////
@interface MockNullableArgHostApi : NSObject <NRNullableArgHostApi>
@property(nonatomic, assign) BOOL didCall;
@property(nonatomic, copy) NSNumber* x;
@end
///////////////////////////////////////////////////////////////////////////////////////////
@implementation MockNullableArgHostApi
- (nullable NSNumber*)doitX:(NSNumber* _Nullable)x
error:(FlutterError* _Nullable __autoreleasing* _Nonnull)error {
_didCall = YES;
self.x = x;
return x;
}
@end
///////////////////////////////////////////////////////////////////////////////////////////
@interface NullableReturnsTest : XCTestCase
@end
///////////////////////////////////////////////////////////////////////////////////////////
@implementation NullableReturnsTest
- (void)testNullableParameterWithFlutterApi {
EchoBinaryMessenger* binaryMessenger =
[[EchoBinaryMessenger alloc] initWithCodec:NRNullableArgFlutterApiGetCodec()];
NRNullableArgFlutterApi* api =
[[NRNullableArgFlutterApi alloc] initWithBinaryMessenger:binaryMessenger];
XCTestExpectation* expectation = [self expectationWithDescription:@"callback"];
[api doitX:nil
completion:^(NSNumber* _Nonnull result, NSError* _Nullable error) {
XCTAssertNil(result);
[expectation fulfill];
}];
[self waitForExpectations:@[ expectation ] timeout:1.0];
}
- (void)testNullableParameterWithHostApi {
MockNullableArgHostApi* api = [[MockNullableArgHostApi alloc] init];
MockBinaryMessenger* binaryMessenger =
[[MockBinaryMessenger alloc] initWithCodec:NRNullableArgHostApiGetCodec()];
NSString* channel = @"dev.flutter.pigeon.NullableArgHostApi.doit";
NRNullableArgHostApiSetup(binaryMessenger, api);
XCTAssertNotNil(binaryMessenger.handlers[channel]);
XCTestExpectation* expectation = [self expectationWithDescription:@"callback"];
NSData* arguments = [NRNullableArgHostApiGetCodec() encode:@[ [NSNull null] ]];
binaryMessenger.handlers[channel](arguments, ^(NSData* data) {
[expectation fulfill];
});
XCTAssertTrue(api.didCall);
XCTAssertNil(api.x);
[self waitForExpectations:@[ expectation ] timeout:1.0];
}
@end