Index: ios/chrome/browser/ui/main/main_view_controller_unittest.mm |
diff --git a/ios/chrome/browser/ui/main/main_view_controller_unittest.mm b/ios/chrome/browser/ui/main/main_view_controller_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1cc7081e26d7fcdb0e6c88fafae68d3c507bd20a |
--- /dev/null |
+++ b/ios/chrome/browser/ui/main/main_view_controller_unittest.mm |
@@ -0,0 +1,147 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ios/chrome/browser/ui/main/main_view_controller.h" |
+ |
+#include <UIKit/UIKit.h> |
+ |
+#include "base/mac/scoped_nsobject.h" |
+#include "testing/gtest_mac.h" |
+ |
+@interface HiddenStatusBarViewController : UIViewController |
+@end |
+ |
+@implementation HiddenStatusBarViewController |
+- (BOOL)prefersStatusBarHidden { |
+ return YES; |
+} |
+@end |
+ |
+@interface MockViewController : UIViewController |
+@property(nonatomic, readonly) NSInteger didMoveToParentViewControllerCount; |
+@property(nonatomic, readonly) id didMoveToParentViewControllerArgument; |
+@property(nonatomic, readonly) NSInteger willMoveToParentViewControllerCount; |
+@property(nonatomic, readonly) id willMoveToParentViewControllerArgument; |
+@end |
+ |
+@implementation MockViewController |
+@synthesize didMoveToParentViewControllerCount = |
+ _didMoveToParentViewControllerCount; |
+@synthesize didMoveToParentViewControllerArgument = |
+ _didMoveToParentViewControllerArgument; |
+@synthesize willMoveToParentViewControllerCount = |
+ _willMoveToParentViewControllerCount; |
+@synthesize willMoveToParentViewControllerArgument = |
+ _willMoveToParentViewControllerArgument; |
+ |
+- (void)didMoveToParentViewController:(UIViewController*)parent { |
+ _didMoveToParentViewControllerCount++; |
+ _didMoveToParentViewControllerArgument = parent; |
+} |
+ |
+- (void)willMoveToParentViewController:(UIViewController*)parent { |
+ _willMoveToParentViewControllerCount++; |
+ _willMoveToParentViewControllerArgument = parent; |
+} |
+ |
+@end |
+ |
+namespace { |
+ |
+TEST(MainViewControllerTest, ActiveVC) { |
+ base::scoped_nsobject<MainViewController> main_view_controller( |
+ [[MainViewController alloc] init]); |
+ base::scoped_nsobject<UIViewController> child_view_controller_1( |
+ [[UIViewController alloc] init]); |
+ base::scoped_nsobject<UIViewController> child_view_controller_2( |
+ [[UIViewController alloc] init]); |
+ |
+ // Test that the active view controller is always the first child view |
+ // controller. |
+ EXPECT_EQ(nil, [main_view_controller activeViewController]); |
+ [main_view_controller addChildViewController:child_view_controller_1]; |
+ EXPECT_EQ(child_view_controller_1.get(), |
+ [main_view_controller activeViewController]); |
+ [main_view_controller addChildViewController:child_view_controller_2]; |
+ EXPECT_EQ(child_view_controller_1.get(), |
+ [main_view_controller activeViewController]); |
+ [child_view_controller_1 removeFromParentViewController]; |
+ EXPECT_EQ(child_view_controller_2.get(), |
+ [main_view_controller activeViewController]); |
+} |
+ |
+TEST(MainViewControllerTest, SetActiveVC) { |
+ base::scoped_nsobject<MainViewController> main_view_controller( |
+ [[MainViewController alloc] init]); |
+ CGRect windowRect = CGRectMake(0, 0, 200, 200); |
+ [main_view_controller view].frame = windowRect; |
+ |
+ base::scoped_nsobject<MockViewController> child_view_controller_1( |
+ [[MockViewController alloc] init]); |
+ [child_view_controller_1 view].frame = CGRectMake(0, 0, 10, 10); |
+ |
+ [main_view_controller setActiveViewController:child_view_controller_1]; |
+ EXPECT_EQ(child_view_controller_1.get(), |
+ [[main_view_controller childViewControllers] firstObject]); |
+ EXPECT_EQ([child_view_controller_1 view], |
+ [[main_view_controller view].subviews firstObject]); |
+ EXPECT_NSEQ(NSStringFromCGRect(windowRect), |
+ NSStringFromCGRect([child_view_controller_1 view].frame)); |
+ EXPECT_EQ(1, [child_view_controller_1 didMoveToParentViewControllerCount]); |
+ EXPECT_EQ(main_view_controller.get(), |
+ [child_view_controller_1 didMoveToParentViewControllerArgument]); |
+ // Expect there to have also been an automatic call to |
+ // -willMoveToParentViewController. |
+ EXPECT_EQ(1, [child_view_controller_1 willMoveToParentViewControllerCount]); |
+ EXPECT_EQ(main_view_controller.get(), |
+ [child_view_controller_1 willMoveToParentViewControllerArgument]); |
+ |
+ base::scoped_nsobject<UIViewController> child_view_controller_2( |
+ [[UIViewController alloc] init]); |
+ [main_view_controller setActiveViewController:child_view_controller_2]; |
+ EXPECT_EQ(child_view_controller_2.get(), |
+ [[main_view_controller childViewControllers] firstObject]); |
+ EXPECT_EQ(1U, [[main_view_controller childViewControllers] count]); |
+ EXPECT_EQ(nil, [[child_view_controller_1 view] superview]); |
+ EXPECT_EQ(2, [child_view_controller_1 willMoveToParentViewControllerCount]); |
+ EXPECT_EQ(nil, |
+ [child_view_controller_1 willMoveToParentViewControllerArgument]); |
+ // Expect there to have also been an automatic call to |
+ // -didMoveToParentViewController. |
+ EXPECT_EQ(2, [child_view_controller_1 willMoveToParentViewControllerCount]); |
+ EXPECT_EQ(nil, |
+ [child_view_controller_1 didMoveToParentViewControllerArgument]); |
+} |
+ |
+TEST(MainViewControllerTest, StatusBar) { |
+ base::scoped_nsobject<MainViewController> main_view_controller( |
+ [[MainViewController alloc] init]); |
+ // MVC needs to be the root view controller for this to work, so save the |
+ // current one and restore it at the end of the test. |
+ UIViewController* root_view_controller = |
+ [[[UIApplication sharedApplication] keyWindow] rootViewController]; |
+ [[UIApplication sharedApplication] keyWindow].rootViewController = |
+ main_view_controller; |
+ base::scoped_nsobject<UIViewController> status_bar_visible_view_controller( |
+ [[UIViewController alloc] init]); |
+ [main_view_controller |
+ setActiveViewController:status_bar_visible_view_controller]; |
+ // Check if the status bar is hidden by testing if the status bar rect is |
+ // CGRectZero. |
+ EXPECT_FALSE(CGRectEqualToRect( |
+ [UIApplication sharedApplication].statusBarFrame, CGRectZero)); |
+ base::scoped_nsobject<HiddenStatusBarViewController> |
+ status_bar_hidden_view_controller( |
+ [[HiddenStatusBarViewController alloc] init]); |
+ [main_view_controller |
+ setActiveViewController:status_bar_hidden_view_controller]; |
+ EXPECT_EQ([main_view_controller childViewControllerForStatusBarHidden], |
+ status_bar_hidden_view_controller.get()); |
+ EXPECT_TRUE(CGRectEqualToRect( |
+ [UIApplication sharedApplication].statusBarFrame, CGRectZero)); |
+ [[UIApplication sharedApplication] keyWindow].rootViewController = |
+ root_view_controller; |
+} |
+ |
+} // namespace |