| 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
|
|
|