blob: db43205c051f85f6c6293cb482b864f3c833d1a9 [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 <OCMock/OCMock.h>
#import <XCTest/XCTest.h>
#import "flutter/shell/platform/darwin/ios/framework/Headers/FlutterEngineGroup.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine_Test.h"
FLUTTER_ASSERT_ARC
@interface FlutterEngineGroup ()
- (FlutterEngine*)makeEngine;
@end
@interface FlutterEngineGroupTest : XCTestCase
@end
@implementation FlutterEngineGroupTest
- (void)testMake {
FlutterEngineGroup* group = [[FlutterEngineGroup alloc] initWithName:@"foo" project:nil];
FlutterEngine* engine = [group makeEngineWithEntrypoint:nil libraryURI:nil];
XCTAssertNotNil(engine);
}
- (void)testSpawn {
FlutterEngineGroup* group = [[FlutterEngineGroup alloc] initWithName:@"foo" project:nil];
FlutterEngine* spawner = [group makeEngineWithEntrypoint:nil libraryURI:nil];
spawner.isGpuDisabled = YES;
FlutterEngine* spawnee = [group makeEngineWithEntrypoint:nil libraryURI:nil];
XCTAssertNotNil(spawner);
XCTAssertNotNil(spawnee);
XCTAssertEqual(&spawner.threadHost, &spawnee.threadHost);
XCTAssertEqual(spawner.isGpuDisabled, spawnee.isGpuDisabled);
}
- (void)testDeleteLastEngine {
FlutterEngineGroup* group = [[FlutterEngineGroup alloc] initWithName:@"foo" project:nil];
@autoreleasepool {
FlutterEngine* spawner = [group makeEngineWithEntrypoint:nil libraryURI:nil];
XCTAssertNotNil(spawner);
}
FlutterEngine* spawnee = [group makeEngineWithEntrypoint:nil libraryURI:nil];
XCTAssertNotNil(spawnee);
}
- (void)testCustomEntrypoint {
FlutterEngineGroup* group = OCMPartialMock([[FlutterEngineGroup alloc] initWithName:@"foo"
project:nil]);
FlutterEngine* mockEngine = OCMClassMock([FlutterEngine class]);
OCMStub([group makeEngine]).andReturn(mockEngine);
OCMStub([mockEngine spawnWithEntrypoint:[OCMArg any]
libraryURI:[OCMArg any]
initialRoute:[OCMArg any]
entrypointArgs:[OCMArg any]])
.andReturn(OCMClassMock([FlutterEngine class]));
FlutterEngine* spawner = [group makeEngineWithEntrypoint:@"firstEntrypoint"
libraryURI:@"firstLibraryURI"];
XCTAssertNotNil(spawner);
OCMVerify([spawner runWithEntrypoint:@"firstEntrypoint"
libraryURI:@"firstLibraryURI"
initialRoute:nil
entrypointArgs:nil]);
FlutterEngine* spawnee = [group makeEngineWithEntrypoint:@"secondEntrypoint"
libraryURI:@"secondLibraryURI"];
XCTAssertNotNil(spawnee);
OCMVerify([spawner spawnWithEntrypoint:@"secondEntrypoint"
libraryURI:@"secondLibraryURI"
initialRoute:nil
entrypointArgs:nil]);
}
- (void)testCustomInitialRoute {
FlutterEngineGroup* group = OCMPartialMock([[FlutterEngineGroup alloc] initWithName:@"foo"
project:nil]);
FlutterEngine* mockEngine = OCMClassMock([FlutterEngine class]);
OCMStub([group makeEngine]).andReturn(mockEngine);
OCMStub([mockEngine spawnWithEntrypoint:[OCMArg any]
libraryURI:[OCMArg any]
initialRoute:[OCMArg any]
entrypointArgs:[OCMArg any]])
.andReturn(OCMClassMock([FlutterEngine class]));
FlutterEngine* spawner = [group makeEngineWithEntrypoint:nil libraryURI:nil initialRoute:@"foo"];
XCTAssertNotNil(spawner);
OCMVerify([spawner runWithEntrypoint:nil libraryURI:nil initialRoute:@"foo" entrypointArgs:nil]);
FlutterEngine* spawnee = [group makeEngineWithEntrypoint:nil libraryURI:nil initialRoute:@"bar"];
XCTAssertNotNil(spawnee);
OCMVerify([spawner spawnWithEntrypoint:nil
libraryURI:nil
initialRoute:@"bar"
entrypointArgs:nil]);
}
- (void)testCustomEntrypointArgs {
FlutterEngineGroup* group = OCMPartialMock([[FlutterEngineGroup alloc] initWithName:@"foo"
project:nil]);
FlutterEngine* mockEngine = OCMClassMock([FlutterEngine class]);
OCMStub([group makeEngine]).andReturn(mockEngine);
OCMStub([mockEngine spawnWithEntrypoint:[OCMArg any]
libraryURI:[OCMArg any]
initialRoute:[OCMArg any]
entrypointArgs:[OCMArg any]])
.andReturn(OCMClassMock([FlutterEngine class]));
FlutterEngineGroupOptions* firstOptions = [[FlutterEngineGroupOptions alloc] init];
NSArray* firstEntrypointArgs = @[ @"foo", @"first" ];
firstOptions.entrypointArgs = firstEntrypointArgs;
FlutterEngine* spawner = [group makeEngineWithOptions:firstOptions];
XCTAssertNotNil(spawner);
OCMVerify([spawner runWithEntrypoint:nil
libraryURI:nil
initialRoute:nil
entrypointArgs:firstEntrypointArgs]);
NSArray* secondEntrypointArgs = @[ @"bar", @"second" ];
FlutterEngineGroupOptions* secondOptions = [[FlutterEngineGroupOptions alloc] init];
secondOptions.entrypointArgs = secondEntrypointArgs;
FlutterEngine* spawnee = [group makeEngineWithOptions:secondOptions];
XCTAssertNotNil(spawnee);
OCMVerify([spawner spawnWithEntrypoint:nil
libraryURI:nil
initialRoute:nil
entrypointArgs:secondEntrypointArgs]);
}
- (void)testReleasesProjectOnDealloc {
__weak FlutterDartProject* weakProject;
@autoreleasepool {
FlutterDartProject* mockProject = OCMClassMock([FlutterDartProject class]);
FlutterEngineGroup* group = [[FlutterEngineGroup alloc] initWithName:@"foo"
project:mockProject];
weakProject = mockProject;
XCTAssertNotNil(weakProject);
group = nil;
mockProject = nil;
}
XCTAssertNil(weakProject);
}
@end