diff --git a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm index b2374fa0d147c..f0b908c34d668 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterEngine.mm @@ -533,7 +533,9 @@ - (void)sendOnChannel:(NSString*)channel message:(NSData*)message { - (void)sendOnChannel:(NSString*)channel message:(NSData*)message binaryReply:(FlutterBinaryReply)callback { - NSAssert(channel, @"The channel must not be null"); + NSParameterAssert(channel); + NSAssert(_shell && _shell->IsSetup(), + @"Sending a message before the FlutterEngine has been run."); fml::RefPtr response = (callback == nil) ? nullptr : fml::MakeRefCounted( @@ -551,8 +553,9 @@ - (void)sendOnChannel:(NSString*)channel - (void)setMessageHandlerOnChannel:(NSString*)channel binaryMessageHandler:(FlutterBinaryMessageHandler)handler { - NSAssert(channel, @"The channel must not be null"); - FML_DCHECK(_shell && _shell->IsSetup()); + NSParameterAssert(channel); + NSAssert(_shell && _shell->IsSetup(), + @"Setting a message handler before the FlutterEngine has been run."); self.iosPlatformView->GetPlatformMessageRouter().SetMessageHandler(channel.UTF8String, handler); } diff --git a/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm index 47f718ae81c2c..cf96c2e716d4c 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterEngineTest.mm @@ -6,6 +6,14 @@ #import #import "flutter/shell/platform/darwin/ios/framework/Headers/FlutterEngine.h" +#ifndef __has_feature +#define __has_feature(x) 0 /* for non-clang compilers */ +#endif + +#if !__has_feature(objc_arc) +#error ARC must be enabled! +#endif + @interface FlutteEngineTest : XCTestCase @end @@ -19,9 +27,29 @@ - (void)tearDown { - (void)testCreate { id project = OCMClassMock([FlutterDartProject class]); - FlutterEngine* engine = [[[FlutterEngine alloc] initWithName:@"foobar" - project:project] autorelease]; + FlutterEngine* engine = [[FlutterEngine alloc] initWithName:@"foobar" project:project]; + XCTAssertNotNil(engine); +} + +- (void)testSendMessageBeforeRun { + id project = OCMClassMock([FlutterDartProject class]); + FlutterEngine* engine = [[FlutterEngine alloc] initWithName:@"foobar" project:project]; XCTAssertNotNil(engine); + XCTAssertThrows([engine.binaryMessenger + sendOnChannel:@"foo" + message:[@"bar" dataUsingEncoding:NSUTF8StringEncoding] + binaryReply:nil]); +} + +- (void)testSetMessageHandlerBeforeRun { + id project = OCMClassMock([FlutterDartProject class]); + FlutterEngine* engine = [[FlutterEngine alloc] initWithName:@"foobar" project:project]; + XCTAssertNotNil(engine); + XCTAssertThrows([engine.binaryMessenger + setMessageHandlerOnChannel:@"foo" + binaryMessageHandler:^(NSData* _Nullable message, FlutterBinaryReply _Nonnull reply){ + + }]); } @end diff --git a/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj b/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj index c323e77a6a032..82f36199ac95a 100644 --- a/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj +++ b/testing/ios/IosUnitTests/IosUnitTests.xcodeproj/project.pbxproj @@ -17,7 +17,7 @@ 0D6AB6BE22BB05E200EEE540 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0D6AB6BD22BB05E200EEE540 /* Assets.xcassets */; }; 0D6AB6C122BB05E200EEE540 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0D6AB6BF22BB05E200EEE540 /* LaunchScreen.storyboard */; }; 0D6AB6C422BB05E200EEE540 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D6AB6C322BB05E200EEE540 /* main.m */; }; - 0D6AB6EB22BB40E700EEE540 /* FlutterEngineTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0D6AB6E722BB40CF00EEE540 /* FlutterEngineTest.mm */; }; + 0D6AB6EB22BB40E700EEE540 /* FlutterEngineTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0D6AB6E722BB40CF00EEE540 /* FlutterEngineTest.mm */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; 0D6AB72C22BC339F00EEE540 /* libOCMock.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D6AB72522BC336100EEE540 /* libOCMock.a */; }; 0D6AB73F22BD8F0200EEE540 /* FlutterEngineConfig.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 0D6AB73E22BD8F0200EEE540 /* FlutterEngineConfig.xcconfig */; }; /* End PBXBuildFile section */