5#import <Foundation/Foundation.h>
6#import <OCMock/OCMock.h>
7#import <XCTest/XCTest.h>
30- (void)testMoveRootViewControllerWhenWindow {
31 id mockApplication = OCMClassMock([UIApplication
class]);
32 OCMStub([mockApplication sharedApplication]).andReturn(mockApplication);
35 OCMStub([mockApplication delegate]).andReturn(mockAppDelegate);
37 id mockWindow = OCMClassMock([UIWindow
class]);
38 OCMStub([mockAppDelegate
window]).andReturn(mockWindow);
40 id mockRootViewController = OCMClassMock([UIViewController
class]);
41 OCMStub([mockWindow rootViewController]).andReturn(mockRootViewController);
43 id scene = OCMClassMock([UIWindowScene
class]);
44 id session = OCMClassMock([UISceneSession
class]);
45 id connectionOptions = OCMClassMock([UISceneConnectionOptions
class]);
49 OCMStub([mockSceneDelegate moveRootViewControllerFrom:[OCMArg any] to:[OCMArg any]]);
51 [mockSceneDelegate scene:scene willConnectToSession:session options:connectionOptions];
53 OCMVerify(times(1), [mockSceneDelegate moveRootViewControllerFrom:mockAppDelegate to:scene]);
56- (void)testMoveRootViewControllerWhenNoWindow {
57 id mockApplication = OCMClassMock([UIApplication
class]);
58 OCMStub([mockApplication sharedApplication]).andReturn(mockApplication);
61 OCMStub([mockApplication delegate]).andReturn(testAppDelegate);
63 id scene = OCMClassMock([UIWindowScene
class]);
64 id session = OCMClassMock([UISceneSession
class]);
65 id connectionOptions = OCMClassMock([UISceneConnectionOptions
class]);
69 OCMStub([mockSceneDelegate moveRootViewControllerFrom:[OCMArg any] to:[OCMArg any]]);
71 [mockSceneDelegate scene:scene willConnectToSession:session options:connectionOptions];
73 OCMReject([mockSceneDelegate moveRootViewControllerFrom:[OCMArg any] to:[OCMArg any]]);
76- (void)testSceneWillConnectToSessionOptions {
77 [
self setupMockApplication];
80 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
83 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
85 id scene = OCMClassMock([UIWindowScene
class]);
86 id session = OCMClassMock([UISceneSession
class]);
87 id connectionOptions = OCMClassMock([UISceneConnectionOptions
class]);
90 willConnectToSession:session
91 options:connectionOptions];
94 willConnectToSession:session
95 options:connectionOptions]);
98- (void)testSceneDidDisconnect {
99 [
self setupMockApplication];
102 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
105 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
107 id scene = OCMClassMock([UIWindowScene
class]);
109 [mockSceneDelegate sceneDidDisconnect:scene];
111 OCMVerify(times(1), [mockLifecycleDelegate sceneDidDisconnect:scene]);
114- (void)testSceneWillEnterForeground {
115 [
self setupMockApplication];
118 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
121 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
123 id scene = OCMClassMock([UIWindowScene
class]);
125 [mockSceneDelegate sceneWillEnterForeground:scene];
127 OCMVerify(times(1), [mockLifecycleDelegate sceneWillEnterForeground:scene]);
130- (void)testSceneDidBecomeActive {
131 [
self setupMockApplication];
134 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
137 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
139 id scene = OCMClassMock([UIWindowScene
class]);
141 [mockSceneDelegate sceneDidBecomeActive:scene];
143 OCMVerify(times(1), [mockLifecycleDelegate sceneDidBecomeActive:scene]);
146- (void)testSceneWillResignActive {
147 [
self setupMockApplication];
150 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
153 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
155 id scene = OCMClassMock([UIWindowScene
class]);
157 [mockSceneDelegate sceneWillResignActive:scene];
159 OCMVerify(times(1), [mockLifecycleDelegate sceneWillResignActive:scene]);
162- (void)testSceneDidEnterBackground {
163 [
self setupMockApplication];
166 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
169 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
171 id scene = OCMClassMock([UIWindowScene
class]);
173 [mockSceneDelegate sceneDidEnterBackground:scene];
175 OCMVerify(times(1), [mockLifecycleDelegate sceneDidEnterBackground:scene]);
178- (void)testSceneOpenURLContexts {
179 [
self setupMockApplication];
182 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
186 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
188 id scene = OCMClassMock([UIWindowScene
class]);
189 id urlContext = OCMClassMock([UIOpenURLContext
class]);
190 NSSet<UIOpenURLContext*>* urlContexts = [NSSet setWithObjects:urlContext, nil];
194 OCMVerify(times(1), [mockLifecycleDelegate scene:scene openURLContexts:urlContexts]);
197- (void)testSceneContinueUserActivity {
198 [
self setupMockApplication];
201 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
205 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
207 id scene = OCMClassMock([UIWindowScene
class]);
208 id userActivity = OCMClassMock([NSUserActivity
class]);
212 OCMVerify(times(1), [mockLifecycleDelegate scene:scene continueUserActivity:userActivity]);
215- (void)testStateRestorationActivityForScene {
216 [
self setupMockApplication];
219 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
223 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
225 id scene = OCMClassMock([UIWindowScene
class]);
229 OCMVerify(times(1), [mockLifecycleDelegate stateRestorationActivityForScene:scene]);
232- (void)testSceneRestoreInteractionStateWithUserActivity {
233 [
self setupMockApplication];
236 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
240 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
242 id scene = OCMClassMock([UIWindowScene
class]);
243 id userActivity = OCMClassMock([NSUserActivity
class]);
246 restoreInteractionStateWithUserActivity:userActivity];
248 OCMVerify(times(1), [mockLifecycleDelegate scene:scene
249 restoreInteractionStateWithUserActivity:userActivity]);
252- (void)testWindowScenePerformActionForShortcutItem {
253 [
self setupMockApplication];
256 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
260 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
262 id scene = OCMClassMock([UIWindowScene
class]);
263 id shortcutItem = OCMClassMock([UIApplicationShortcutItem
class]);
266 performActionForShortcutItem:shortcutItem
267 completionHandler:^(BOOL succeeded){
270 OCMVerify(times(1), [mockLifecycleDelegate windowScene:scene
271 performActionForShortcutItem:shortcutItem
272 completionHandler:[OCMArg any]]);
275- (void)testRegisterSceneLifeCycleWithFlutterEngine {
276 [
self setupMockApplication];
280 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
283 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
285 [mockSceneDelegate registerSceneLifeCycleWithFlutterEngine:mockEngine];
287 OCMVerify(times(1), [mockLifecycleDelegate registerSceneLifeCycleWithFlutterEngine:mockEngine]);
290- (void)testUnregisterSceneLifeCycleWithFlutterEngine {
291 [
self setupMockApplication];
295 id mockSceneDelegate = OCMPartialMock(sceneDelegate);
298 OCMStub([mockSceneDelegate sceneLifeCycleDelegate]).andReturn(mockLifecycleDelegate);
300 [mockSceneDelegate unregisterSceneLifeCycleWithFlutterEngine:mockEngine];
302 OCMVerify(times(1), [mockLifecycleDelegate unregisterSceneLifeCycleWithFlutterEngine:mockEngine]);
305- (NSDictionary*)setupMockApplication {
306 id mockApplication = OCMClassMock([UIApplication
class]);
307 OCMStub([mockApplication sharedApplication]).andReturn(mockApplication);
310 OCMStub([mockApplication delegate]).andReturn(testAppDelegate);
313 @"mockApplication" : mockApplication,
314 @"testAppDelegate" : testAppDelegate,