Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: ios/chrome/browser/ui/main/main_view_controller_unittest.mm

Issue 2590473002: Upstream Chrome on iOS source code [5/11]. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ios/chrome/browser/ui/main/main_view_controller.h"
6
7 #include <UIKit/UIKit.h>
8
9 #include "base/mac/scoped_nsobject.h"
10 #include "testing/gtest_mac.h"
11
12 @interface HiddenStatusBarViewController : UIViewController
13 @end
14
15 @implementation HiddenStatusBarViewController
16 - (BOOL)prefersStatusBarHidden {
17 return YES;
18 }
19 @end
20
21 @interface MockViewController : UIViewController
22 @property(nonatomic, readonly) NSInteger didMoveToParentViewControllerCount;
23 @property(nonatomic, readonly) id didMoveToParentViewControllerArgument;
24 @property(nonatomic, readonly) NSInteger willMoveToParentViewControllerCount;
25 @property(nonatomic, readonly) id willMoveToParentViewControllerArgument;
26 @end
27
28 @implementation MockViewController
29 @synthesize didMoveToParentViewControllerCount =
30 _didMoveToParentViewControllerCount;
31 @synthesize didMoveToParentViewControllerArgument =
32 _didMoveToParentViewControllerArgument;
33 @synthesize willMoveToParentViewControllerCount =
34 _willMoveToParentViewControllerCount;
35 @synthesize willMoveToParentViewControllerArgument =
36 _willMoveToParentViewControllerArgument;
37
38 - (void)didMoveToParentViewController:(UIViewController*)parent {
39 _didMoveToParentViewControllerCount++;
40 _didMoveToParentViewControllerArgument = parent;
41 }
42
43 - (void)willMoveToParentViewController:(UIViewController*)parent {
44 _willMoveToParentViewControllerCount++;
45 _willMoveToParentViewControllerArgument = parent;
46 }
47
48 @end
49
50 namespace {
51
52 TEST(MainViewControllerTest, ActiveVC) {
53 base::scoped_nsobject<MainViewController> main_view_controller(
54 [[MainViewController alloc] init]);
55 base::scoped_nsobject<UIViewController> child_view_controller_1(
56 [[UIViewController alloc] init]);
57 base::scoped_nsobject<UIViewController> child_view_controller_2(
58 [[UIViewController alloc] init]);
59
60 // Test that the active view controller is always the first child view
61 // controller.
62 EXPECT_EQ(nil, [main_view_controller activeViewController]);
63 [main_view_controller addChildViewController:child_view_controller_1];
64 EXPECT_EQ(child_view_controller_1.get(),
65 [main_view_controller activeViewController]);
66 [main_view_controller addChildViewController:child_view_controller_2];
67 EXPECT_EQ(child_view_controller_1.get(),
68 [main_view_controller activeViewController]);
69 [child_view_controller_1 removeFromParentViewController];
70 EXPECT_EQ(child_view_controller_2.get(),
71 [main_view_controller activeViewController]);
72 }
73
74 TEST(MainViewControllerTest, SetActiveVC) {
75 base::scoped_nsobject<MainViewController> main_view_controller(
76 [[MainViewController alloc] init]);
77 CGRect windowRect = CGRectMake(0, 0, 200, 200);
78 [main_view_controller view].frame = windowRect;
79
80 base::scoped_nsobject<MockViewController> child_view_controller_1(
81 [[MockViewController alloc] init]);
82 [child_view_controller_1 view].frame = CGRectMake(0, 0, 10, 10);
83
84 [main_view_controller setActiveViewController:child_view_controller_1];
85 EXPECT_EQ(child_view_controller_1.get(),
86 [[main_view_controller childViewControllers] firstObject]);
87 EXPECT_EQ([child_view_controller_1 view],
88 [[main_view_controller view].subviews firstObject]);
89 EXPECT_NSEQ(NSStringFromCGRect(windowRect),
90 NSStringFromCGRect([child_view_controller_1 view].frame));
91 EXPECT_EQ(1, [child_view_controller_1 didMoveToParentViewControllerCount]);
92 EXPECT_EQ(main_view_controller.get(),
93 [child_view_controller_1 didMoveToParentViewControllerArgument]);
94 // Expect there to have also been an automatic call to
95 // -willMoveToParentViewController.
96 EXPECT_EQ(1, [child_view_controller_1 willMoveToParentViewControllerCount]);
97 EXPECT_EQ(main_view_controller.get(),
98 [child_view_controller_1 willMoveToParentViewControllerArgument]);
99
100 base::scoped_nsobject<UIViewController> child_view_controller_2(
101 [[UIViewController alloc] init]);
102 [main_view_controller setActiveViewController:child_view_controller_2];
103 EXPECT_EQ(child_view_controller_2.get(),
104 [[main_view_controller childViewControllers] firstObject]);
105 EXPECT_EQ(1U, [[main_view_controller childViewControllers] count]);
106 EXPECT_EQ(nil, [[child_view_controller_1 view] superview]);
107 EXPECT_EQ(2, [child_view_controller_1 willMoveToParentViewControllerCount]);
108 EXPECT_EQ(nil,
109 [child_view_controller_1 willMoveToParentViewControllerArgument]);
110 // Expect there to have also been an automatic call to
111 // -didMoveToParentViewController.
112 EXPECT_EQ(2, [child_view_controller_1 willMoveToParentViewControllerCount]);
113 EXPECT_EQ(nil,
114 [child_view_controller_1 didMoveToParentViewControllerArgument]);
115 }
116
117 TEST(MainViewControllerTest, StatusBar) {
118 base::scoped_nsobject<MainViewController> main_view_controller(
119 [[MainViewController alloc] init]);
120 // MVC needs to be the root view controller for this to work, so save the
121 // current one and restore it at the end of the test.
122 UIViewController* root_view_controller =
123 [[[UIApplication sharedApplication] keyWindow] rootViewController];
124 [[UIApplication sharedApplication] keyWindow].rootViewController =
125 main_view_controller;
126 base::scoped_nsobject<UIViewController> status_bar_visible_view_controller(
127 [[UIViewController alloc] init]);
128 [main_view_controller
129 setActiveViewController:status_bar_visible_view_controller];
130 // Check if the status bar is hidden by testing if the status bar rect is
131 // CGRectZero.
132 EXPECT_FALSE(CGRectEqualToRect(
133 [UIApplication sharedApplication].statusBarFrame, CGRectZero));
134 base::scoped_nsobject<HiddenStatusBarViewController>
135 status_bar_hidden_view_controller(
136 [[HiddenStatusBarViewController alloc] init]);
137 [main_view_controller
138 setActiveViewController:status_bar_hidden_view_controller];
139 EXPECT_EQ([main_view_controller childViewControllerForStatusBarHidden],
140 status_bar_hidden_view_controller.get());
141 EXPECT_TRUE(CGRectEqualToRect(
142 [UIApplication sharedApplication].statusBarFrame, CGRectZero));
143 [[UIApplication sharedApplication] keyWindow].rootViewController =
144 root_view_controller;
145 }
146
147 } // namespace
OLDNEW
« no previous file with comments | « ios/chrome/browser/ui/main/main_view_controller.mm ('k') | ios/chrome/browser/ui/material_components/activity_indicator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698