Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 5e3dae8

Browse files
committed
mocking screen instead of using UIScreen main
1 parent 07713a9 commit 5e3dae8

File tree

1 file changed

+52
-27
lines changed

1 file changed

+52
-27
lines changed

shell/platform/darwin/ios/framework/Source/FlutterViewControllerTest.mm

Lines changed: 52 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,22 @@ - (void)tearDown {
174174
self.messageSent = nil;
175175
}
176176

177-
- (id)testScreen {
178-
return UIScreen.mainScreen;
177+
- (id)setupMockScreen {
178+
UIScreen* mockScreen = OCMClassMock([UIScreen class]);
179+
// iPhone 14 pixels
180+
CGRect screenBounds = CGRectMake(0, 0, 1170, 2532);
181+
OCMStub([mockScreen bounds]).andReturn(screenBounds);
182+
CGFloat screenScale = 1;
183+
OCMStub([mockScreen scale]).andReturn(screenScale);
184+
185+
return mockScreen;
179186
}
180187

181-
- (id)setupMockMainScreenAndView:(FlutterViewController*)viewControllerMock
182-
viewFrame:(CGRect)viewFrame
183-
convertedFrame:(CGRect)convertedFrame {
184-
OCMStub([viewControllerMock screenIfViewLoaded]).andReturn([self testScreen]);
188+
- (id)setupMockView:(FlutterViewController*)viewControllerMock
189+
screen:(UIScreen*)screen
190+
viewFrame:(CGRect)viewFrame
191+
convertedFrame:(CGRect)convertedFrame {
192+
OCMStub([viewControllerMock screenIfViewLoaded]).andReturn(screen);
185193
id mockView = OCMClassMock([UIView class]);
186194
OCMStub([mockView frame]).andReturn(viewFrame);
187195
OCMStub([mockView convertRect:viewFrame toCoordinateSpace:[OCMArg any]])
@@ -226,9 +234,12 @@ - (void)testSetupKeyboardSpringAnimationIfNeeded {
226234
nibName:nil
227235
bundle:nil];
228236
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
229-
UIScreen* screen = [self testScreen];
237+
UIScreen* screen = [self setupMockScreen];
230238
CGRect viewFrame = screen.bounds;
231-
[self setupMockMainScreenAndView:viewControllerMock viewFrame:viewFrame convertedFrame:viewFrame];
239+
[self setupMockView:viewControllerMock
240+
screen:screen
241+
viewFrame:viewFrame
242+
convertedFrame:viewFrame];
232243

233244
// Null check.
234245
[viewControllerMock setupKeyboardSpringAnimationIfNeeded:nil];
@@ -266,9 +277,12 @@ - (void)testKeyboardAnimationIsShowingAndCompounding {
266277
nibName:nil
267278
bundle:nil];
268279
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
269-
UIScreen* screen = [self testScreen];
280+
UIScreen* screen = [self setupMockScreen];
270281
CGRect viewFrame = screen.bounds;
271-
[self setupMockMainScreenAndView:viewControllerMock viewFrame:viewFrame convertedFrame:viewFrame];
282+
[self setupMockView:viewControllerMock
283+
screen:screen
284+
viewFrame:viewFrame
285+
convertedFrame:viewFrame];
272286

273287
BOOL isLocal = YES;
274288
CGFloat screenHeight = screen.bounds.size.height;
@@ -353,9 +367,12 @@ - (void)testShouldIgnoreKeyboardNotification {
353367
nibName:nil
354368
bundle:nil];
355369
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
356-
UIScreen* screen = [self testScreen];
370+
UIScreen* screen = [self setupMockScreen];
357371
CGRect viewFrame = screen.bounds;
358-
[self setupMockMainScreenAndView:viewControllerMock viewFrame:viewFrame convertedFrame:viewFrame];
372+
[self setupMockView:viewControllerMock
373+
screen:screen
374+
viewFrame:viewFrame
375+
convertedFrame:viewFrame];
359376

360377
CGFloat screenWidth = screen.bounds.size.width;
361378
CGFloat screenHeight = screen.bounds.size.height;
@@ -494,9 +511,12 @@ - (void)testCalculateKeyboardAttachMode {
494511
bundle:nil];
495512

496513
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
497-
UIScreen* screen = [self testScreen];
514+
UIScreen* screen = [self setupMockScreen];
498515
CGRect viewFrame = screen.bounds;
499-
[self setupMockMainScreenAndView:viewControllerMock viewFrame:viewFrame convertedFrame:viewFrame];
516+
[self setupMockView:viewControllerMock
517+
screen:screen
518+
viewFrame:viewFrame
519+
convertedFrame:viewFrame];
500520

501521
CGFloat screenWidth = screen.bounds.size.width;
502522
CGFloat screenHeight = screen.bounds.size.height;
@@ -620,16 +640,17 @@ - (void)testCalculateMultitaskingAdjustment {
620640
bundle:nil];
621641
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
622642

623-
UIScreen* screen = [self testScreen];
643+
UIScreen* screen = [self setupMockScreen];
624644
CGFloat screenWidth = screen.bounds.size.width;
625645
CGFloat screenHeight = screen.bounds.size.height;
626646
CGRect screenRect = screen.bounds;
627647
CGRect viewOrigFrame = CGRectMake(0, 0, 320, screenHeight - 40);
628648
CGRect convertedViewFrame = CGRectMake(20, 20, 320, screenHeight - 40);
629649
CGRect keyboardFrame = CGRectMake(20, screenHeight - 320, screenWidth, 300);
630-
id mockView = [self setupMockMainScreenAndView:viewControllerMock
631-
viewFrame:viewOrigFrame
632-
convertedFrame:convertedViewFrame];
650+
id mockView = [self setupMockView:viewControllerMock
651+
screen:screen
652+
viewFrame:viewOrigFrame
653+
convertedFrame:convertedViewFrame];
633654
id mockTraitCollection = OCMClassMock([UITraitCollection class]);
634655
OCMStub([mockTraitCollection userInterfaceIdiom]).andReturn(UIUserInterfaceIdiomPad);
635656
OCMStub([mockTraitCollection horizontalSizeClass]).andReturn(UIUserInterfaceSizeClassCompact);
@@ -648,7 +669,7 @@ - (void)testCalculateKeyboardInset {
648669
nibName:nil
649670
bundle:nil];
650671
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
651-
UIScreen* screen = [self testScreen];
672+
UIScreen* screen = [self setupMockScreen];
652673
OCMStub([viewControllerMock screenIfViewLoaded]).andReturn(screen);
653674

654675
CGFloat screenWidth = screen.bounds.size.width;
@@ -657,9 +678,10 @@ - (void)testCalculateKeyboardInset {
657678
CGRect convertedViewFrame = CGRectMake(20, 20, 320, screenHeight - 40);
658679
CGRect keyboardFrame = CGRectMake(20, screenHeight - 320, screenWidth, 300);
659680

660-
[self setupMockMainScreenAndView:viewControllerMock
661-
viewFrame:viewOrigFrame
662-
convertedFrame:convertedViewFrame];
681+
[self setupMockView:viewControllerMock
682+
screen:screen
683+
viewFrame:viewOrigFrame
684+
convertedFrame:convertedViewFrame];
663685

664686
CGFloat inset = [viewControllerMock calculateKeyboardInset:keyboardFrame
665687
keyboardMode:FlutterKeyboardModeDocked];
@@ -673,7 +695,7 @@ - (void)testHandleKeyboardNotification {
673695
nibName:nil
674696
bundle:nil];
675697
// keyboard is empty
676-
UIScreen* screen = [self testScreen];
698+
UIScreen* screen = [self setupMockScreen];
677699
CGFloat screenWidth = screen.bounds.size.width;
678700
CGFloat screenHeight = screen.bounds.size.height;
679701
CGRect keyboardFrame = CGRectMake(0, screenHeight - 320, screenWidth, 320);
@@ -688,7 +710,10 @@ - (void)testHandleKeyboardNotification {
688710
@"UIKeyboardIsLocalUserInfoKey" : @(isLocal)
689711
}];
690712
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
691-
[self setupMockMainScreenAndView:viewControllerMock viewFrame:viewFrame convertedFrame:viewFrame];
713+
[self setupMockView:viewControllerMock
714+
screen:screen
715+
viewFrame:viewFrame
716+
convertedFrame:viewFrame];
692717
viewControllerMock.targetViewInsetBottom = 0;
693718
XCTestExpectation* expectation = [self expectationWithDescription:@"update viewport"];
694719
OCMStub([viewControllerMock updateViewportMetricsIfNeeded]).andDo(^(NSInvocation* invocation) {
@@ -907,7 +932,7 @@ - (void)testUpdateViewportMetricsIfNeeded_DoesNotInvokeEngineWhenShouldBeIgnored
907932
nibName:nil
908933
bundle:nil];
909934
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
910-
UIScreen* screen = [self testScreen];
935+
UIScreen* screen = [self setupMockScreen];
911936
OCMStub([viewControllerMock screenIfViewLoaded]).andReturn(screen);
912937
mockEngine.viewController = viewController;
913938

@@ -929,7 +954,7 @@ - (void)testViewWillTransitionToSize_DoesDelayEngineCallIfNonZeroDuration {
929954
nibName:nil
930955
bundle:nil];
931956
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
932-
UIScreen* screen = [self testScreen];
957+
UIScreen* screen = [self setupMockScreen];
933958
OCMStub([viewControllerMock screenIfViewLoaded]).andReturn(screen);
934959
mockEngine.viewController = viewController;
935960

@@ -963,7 +988,7 @@ - (void)testViewWillTransitionToSize_DoesNotDelayEngineCallIfZeroDuration {
963988
nibName:nil
964989
bundle:nil];
965990
FlutterViewController* viewControllerMock = OCMPartialMock(viewController);
966-
UIScreen* screen = [self testScreen];
991+
UIScreen* screen = [self setupMockScreen];
967992
OCMStub([viewControllerMock screenIfViewLoaded]).andReturn(screen);
968993
mockEngine.viewController = viewController;
969994

0 commit comments

Comments
 (0)