blob: c68e22da6bcac8c985a7efb684754f7b55cc26ff [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 <XCTest/XCTest.h>
#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterMacros.h"
#import "flutter/shell/platform/darwin/ios/framework/Source/UIViewController+FlutterScreenAndSceneIfLoaded.h"
FLUTTER_ASSERT_ARC
@interface UIViewController_FlutterViewAndSceneIfLoadedTest : XCTestCase
@end
@implementation UIViewController_FlutterViewAndSceneIfLoadedTest
- (void)testWindowSceneIfViewLoadedReturnsWindowSceneIfViewLoaded {
if (@available(iOS 13.0, *)) {
UIViewController* viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
NSSet<UIScene*>* scenes = UIApplication.sharedApplication.connectedScenes;
XCTAssertEqual(scenes.count, 1UL, @"There must only be 1 scene for test");
UIScene* scene = scenes.anyObject;
XCTAssert([scene isKindOfClass:[UIWindowScene class]], @"Must be a window scene for test");
UIWindowScene* windowScene = (UIWindowScene*)scene;
XCTAssert(windowScene.windows.count > 0, @"There must be at least 1 window for test");
UIWindow* window = windowScene.windows[0];
[window addSubview:viewController.view];
[viewController loadView];
XCTAssertEqual(viewController.flutterWindowSceneIfViewLoaded, windowScene,
@"Must return the correct window scene when view loaded");
}
}
- (void)testWindowSceneIfViewLoadedReturnsNilIfViewNotLoaded {
if (@available(iOS 13.0, *)) {
UIViewController* viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
XCTAssertNil(viewController.flutterWindowSceneIfViewLoaded,
@"Must return nil window scene when view not loaded");
}
}
- (void)testScreenIfViewLoadedReturnsMainScreenBeforeIOS13 {
if (@available(iOS 13.0, *)) {
return;
}
UIViewController* viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
XCTAssertEqual(viewController.flutterScreenIfViewLoaded, UIScreen.mainScreen,
@"Must return UIScreen.mainScreen before iOS 13");
}
- (void)testScreenIfViewLoadedReturnsScreenIfViewLoadedAfterIOS13 {
if (@available(iOS 13.0, *)) {
UIViewController* viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
NSSet<UIScene*>* scenes = UIApplication.sharedApplication.connectedScenes;
XCTAssertEqual(scenes.count, 1UL, @"There must only be 1 scene for test");
UIScene* scene = scenes.anyObject;
XCTAssert([scene isKindOfClass:[UIWindowScene class]], @"Must be a window scene for test");
UIWindowScene* windowScene = (UIWindowScene*)scene;
XCTAssert(windowScene.windows.count > 0, @"There must be at least 1 window for test");
UIWindow* window = windowScene.windows[0];
[window addSubview:viewController.view];
[viewController loadView];
XCTAssertEqual(viewController.flutterScreenIfViewLoaded, windowScene.screen,
@"Must return the correct screen when view loaded");
}
}
- (void)testScreenIfViewLoadedReturnsNilIfViewNotLoadedAfterIOS13 {
if (@available(iOS 13.0, *)) {
UIViewController* viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
XCTAssertNil(viewController.flutterScreenIfViewLoaded,
@"Must return nil screen when view not loaded");
}
}
@end