| Flutter iOS Embedder |

FlutterEngineGroupTest.mm
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import <OCMock/OCMock.h>
6 #import <XCTest/XCTest.h>
7
8 #import "flutter/shell/platform/darwin/ios/framework/Headers/FlutterEngineGroup.h"
9 #import "flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine_Test.h"
10
11 FLUTTER_ASSERT_ARC
12
13 @interface FlutterEngineGroup ()
14 - (FlutterEngine*)makeEngine;
15 @end
16
17 @interface FlutterEngineGroupTest : XCTestCase
18 @end
19
20 @implementation FlutterEngineGroupTest
21
22 - (void)testMake {
23 FlutterEngineGroup* group = [[FlutterEngineGroup alloc] initWithName:@"foo" project:nil];
24 FlutterEngine* engine = [group makeEngineWithEntrypoint:nil libraryURI:nil];
25 XCTAssertNotNil(engine);
26 }
27
28 - (void)testSpawn {
29 FlutterEngineGroup* group = [[FlutterEngineGroup alloc] initWithName:@"foo" project:nil];
30 FlutterEngine* spawner = [group makeEngineWithEntrypoint:nil libraryURI:nil];
31 spawner.isGpuDisabled = YES;
32 FlutterEngine* spawnee = [group makeEngineWithEntrypoint:nil libraryURI:nil];
33 XCTAssertNotNil(spawner);
34 XCTAssertNotNil(spawnee);
35 XCTAssertEqual(&spawner.threadHost, &spawnee.threadHost);
36 XCTAssertEqual(spawner.isGpuDisabled, spawnee.isGpuDisabled);
37 }
38
39 - (void)testDeleteLastEngine {
40 FlutterEngineGroup* group = [[FlutterEngineGroup alloc] initWithName:@"foo" project:nil];
41 @autoreleasepool {
42 FlutterEngine* spawner = [group makeEngineWithEntrypoint:nil libraryURI:nil];
43 XCTAssertNotNil(spawner);
44 }
45 FlutterEngine* spawnee = [group makeEngineWithEntrypoint:nil libraryURI:nil];
46 XCTAssertNotNil(spawnee);
47 }
48
49 - (void)testCustomEntrypoint {
50 FlutterEngineGroup* group = OCMPartialMock([[FlutterEngineGroup alloc] initWithName:@"foo"
51 project:nil]);
52 FlutterEngine* mockEngine = OCMClassMock([FlutterEngine class]);
53 OCMStub([group makeEngine]).andReturn(mockEngine);
54 OCMStub([mockEngine spawnWithEntrypoint:[OCMArg any]
55 libraryURI:[OCMArg any]
56 initialRoute:[OCMArg any]
57 entrypointArgs:[OCMArg any]])
58 .andReturn(OCMClassMock([FlutterEngine class]));
59 FlutterEngine* spawner = [group makeEngineWithEntrypoint:@"firstEntrypoint"
60 libraryURI:@"firstLibraryURI"];
61 XCTAssertNotNil(spawner);
62 OCMVerify([spawner runWithEntrypoint:@"firstEntrypoint"
63 libraryURI:@"firstLibraryURI"
64 initialRoute:nil
65 entrypointArgs:nil]);
66
67 FlutterEngine* spawnee = [group makeEngineWithEntrypoint:@"secondEntrypoint"
68 libraryURI:@"secondLibraryURI"];
69 XCTAssertNotNil(spawnee);
70 OCMVerify([spawner spawnWithEntrypoint:@"secondEntrypoint"
71 libraryURI:@"secondLibraryURI"
72 initialRoute:nil
73 entrypointArgs:nil]);
74 }
75
76 - (void)testCustomInitialRoute {
77 FlutterEngineGroup* group = OCMPartialMock([[FlutterEngineGroup alloc] initWithName:@"foo"
78 project:nil]);
79 FlutterEngine* mockEngine = OCMClassMock([FlutterEngine class]);
80 OCMStub([group makeEngine]).andReturn(mockEngine);
81 OCMStub([mockEngine spawnWithEntrypoint:[OCMArg any]
82 libraryURI:[OCMArg any]
83 initialRoute:[OCMArg any]
84 entrypointArgs:[OCMArg any]])
85 .andReturn(OCMClassMock([FlutterEngine class]));
86 FlutterEngine* spawner = [group makeEngineWithEntrypoint:nil libraryURI:nil initialRoute:@"foo"];
87 XCTAssertNotNil(spawner);
88 OCMVerify([spawner runWithEntrypoint:nil libraryURI:nil initialRoute:@"foo" entrypointArgs:nil]);
89
90 FlutterEngine* spawnee = [group makeEngineWithEntrypoint:nil libraryURI:nil initialRoute:@"bar"];
91 XCTAssertNotNil(spawnee);
92 OCMVerify([spawner spawnWithEntrypoint:nil
93 libraryURI:nil
94 initialRoute:@"bar"
95 entrypointArgs:nil]);
96 }
97
98 - (void)testCustomEntrypointArgs {
99 FlutterEngineGroup* group = OCMPartialMock([[FlutterEngineGroup alloc] initWithName:@"foo"
100 project:nil]);
101 FlutterEngine* mockEngine = OCMClassMock([FlutterEngine class]);
102 OCMStub([group makeEngine]).andReturn(mockEngine);
103 OCMStub([mockEngine spawnWithEntrypoint:[OCMArg any]
104 libraryURI:[OCMArg any]
105 initialRoute:[OCMArg any]
106 entrypointArgs:[OCMArg any]])
107 .andReturn(OCMClassMock([FlutterEngine class]));
108 FlutterEngineGroupOptions* firstOptions = [[FlutterEngineGroupOptions alloc] init];
109 NSArray* firstEntrypointArgs = @[ @"foo", @"first" ];
110 firstOptions.entrypointArgs = firstEntrypointArgs;
111 FlutterEngine* spawner = [group makeEngineWithOptions:firstOptions];
112 XCTAssertNotNil(spawner);
113 OCMVerify([spawner runWithEntrypoint:nil
114 libraryURI:nil
115 initialRoute:nil
116 entrypointArgs:firstEntrypointArgs]);
117
118 NSArray* secondEntrypointArgs = @[ @"bar", @"second" ];
119 FlutterEngineGroupOptions* secondOptions = [[FlutterEngineGroupOptions alloc] init];
120 secondOptions.entrypointArgs = secondEntrypointArgs;
121 FlutterEngine* spawnee = [group makeEngineWithOptions:secondOptions];
122 XCTAssertNotNil(spawnee);
123 OCMVerify([spawner spawnWithEntrypoint:nil
124 libraryURI:nil
125 initialRoute:nil
126 entrypointArgs:secondEntrypointArgs]);
127 }
128
129 - (void)testReleasesProjectOnDealloc {
130 __weak FlutterDartProject* weakProject;
131 @autoreleasepool {
132 FlutterDartProject* mockProject = OCMClassMock([FlutterDartProject class]);
133 FlutterEngineGroup* group = [[FlutterEngineGroup alloc] initWithName:@"foo"
134 project:mockProject];
135 XCTAssertNotNil(group);
136 weakProject = mockProject;
137 XCTAssertNotNil(weakProject);
138 group = nil;
139 mockProject = nil;
140 }
141 XCTAssertNil(weakProject);
142 }
143
144 @end
FLUTTER_ASSERT_ARC
#define FLUTTER_ASSERT_ARC
Definition: FlutterMacros.h:44
FlutterEngine::isGpuDisabled
BOOL isGpuDisabled
Definition: FlutterEngine.h:454
FlutterEngine
Definition: FlutterEngine.h:59
FlutterEngineGroup.h
-[FlutterEngineGroup makeEngineWithEntrypoint:libraryURI:initialRoute:]
FlutterEngine * makeEngineWithEntrypoint:libraryURI:initialRoute:(nullable NSString *entrypoint,[libraryURI] nullable NSString *libraryURI,[initialRoute] nullable NSString *initialRoute)
Definition: FlutterEngineGroup.mm:54
FlutterEngine_Test.h
-[FlutterEngineGroup makeEngineWithEntrypoint:libraryURI:]
FlutterEngine * makeEngineWithEntrypoint:libraryURI:(nullable NSString *entrypoint,[libraryURI] nullable NSString *libraryURI)
Definition: FlutterEngineGroup.mm:49
FlutterEngineGroupOptions
Definition: FlutterEngineGroup.h:13
engine
id engine
Definition: FlutterTextInputPluginTest.mm:89
FlutterEngineGroupOptions::entrypointArgs
NSArray< NSString * > * entrypointArgs
Definition: FlutterEngineGroup.h:38
FlutterEngineGroupTest
Definition: FlutterEngineGroupTest.mm:17
FlutterDartProject
Definition: FlutterDartProject.mm:262
FlutterEngineGroup
Definition: FlutterEngineGroup.h:53
-[FlutterEngine threadHost]
const flutter::ThreadHost & threadHost()
-[FlutterEngineGroup makeEngineWithOptions:]
FlutterEngine * makeEngineWithOptions:(nullable FlutterEngineGroupOptions *options)
Definition: FlutterEngineGroup.mm:64