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

Side by Side Diff: ios/clean/chrome/browser/browser_coordinator_unittest.mm

Issue 2626033002: [Clean] Add unittest target and BrowserCoordinator tests. (Closed)
Patch Set: Cleanup Created 3 years, 11 months 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 2017 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 #import "ios/clean/chrome/browser/browser_coordinator.h"
6 #import "ios/clean/chrome/browser/browser_coordinator+internal.h"
7
8 #include "base/logging.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "testing/gtest_mac.h"
11 #include "testing/platform_test.h"
12
13 #if !defined(__has_feature) || !__has_feature(objc_arc)
14 #error "This file requires ARC support."
15 #endif
16
17 @interface TestCoordinator : BrowserCoordinator
18 @property(nonatomic) UIViewController* viewController;
19 @property(nonatomic, copy) void (^stopHandler)();
20 @end
21
22 @implementation TestCoordinator
23 @synthesize viewController = _viewController;
24 @synthesize stopHandler = _stopHandler;
25
26 - (instancetype)init {
27 if (!(self = [super init]))
28 return nil;
29
30 _viewController = [[UIViewController alloc] init];
31 return self;
32 }
33
34 - (void)stop {
35 if (self.stopHandler)
36 self.stopHandler();
37 }
38
39 @end
40
41 @interface NonOverlayableCoordinator : TestCoordinator
42 @end
43
44 @implementation NonOverlayableCoordinator
45
46 - (BOOL)canAddOverlayCoordinator:(BrowserCoordinator*)overlayCoordinator {
47 return NO;
48 }
49
50 @end
51
52 TEST(BrowserCoordinatorTest, TestStopOnDealloc) {
53 __block BOOL called = NO;
54
55 @autoreleasepool {
lpromero 2017/01/11 13:29:25 Why autoreleasepool and not just braces?
marq (ping after 24h) 2017/01/11 14:06:25 Done.
56 TestCoordinator* coordinator = [[TestCoordinator alloc] init];
57 coordinator.stopHandler = ^{
58 called = YES;
59 };
60 }
61
62 EXPECT_TRUE(called);
63 }
64
65 TEST(BrowserCoordinatorTest, TestChildren) {
66 TestCoordinator* parent = [[TestCoordinator alloc] init];
67 TestCoordinator* child = [[TestCoordinator alloc] init];
68
69 [parent addChildCoordinator:child];
70 EXPECT_TRUE([parent.children containsObject:child]);
71 EXPECT_EQ(parent, child.parentCoordinator);
72 EXPECT_EQ(parent.viewController, child.rootViewController);
73
74 [parent removeChildCoordinator:child];
75 EXPECT_FALSE([parent.children containsObject:child]);
76 EXPECT_EQ(nil, child.parentCoordinator);
77 // Unparenting shouldn't change a child's rootViewController.
78 EXPECT_EQ(parent.viewController, child.rootViewController);
79
80 TestCoordinator* otherParent = [[TestCoordinator alloc] init];
81 TestCoordinator* otherChild = [[TestCoordinator alloc] init];
82 [otherParent addChildCoordinator:otherChild];
83
84 // -removeChildCoordinator of a non-child should have no affect.
85 [parent removeChildCoordinator:otherChild];
86 EXPECT_TRUE([otherParent.children containsObject:otherChild]);
87 EXPECT_EQ(otherParent, otherChild.parentCoordinator);
88 }
89
90 TEST(BrowserCoordinatorTest, TestOverlay) {
91 TestCoordinator* parent = [[TestCoordinator alloc] init];
92 TestCoordinator* child = [[TestCoordinator alloc] init];
93 TestCoordinator* grandchild = [[TestCoordinator alloc] init];
94 TestCoordinator* overlay = [[TestCoordinator alloc] init];
95 TestCoordinator* secondOverlay = [[TestCoordinator alloc] init];
96
97 EXPECT_TRUE([parent canAddOverlayCoordinator:overlay]);
98 [parent addChildCoordinator:child];
99 [child addChildCoordinator:grandchild];
100 EXPECT_FALSE([parent canAddOverlayCoordinator:overlay]);
101 EXPECT_FALSE([child canAddOverlayCoordinator:overlay]);
102 EXPECT_TRUE([grandchild canAddOverlayCoordinator:overlay]);
103 EXPECT_FALSE([grandchild canAddOverlayCoordinator:child]);
104
105 EXPECT_FALSE(overlay.overlaying);
106 [parent addOverlayCoordinator:overlay];
107 EXPECT_TRUE(overlay.overlaying);
108 EXPECT_EQ(overlay, parent.overlayCoordinator);
109 EXPECT_EQ(overlay, child.overlayCoordinator);
110 EXPECT_EQ(overlay, grandchild.overlayCoordinator);
111 EXPECT_TRUE([grandchild.children containsObject:overlay]);
112 EXPECT_EQ(grandchild, overlay.parentCoordinator);
113
114 // Shouldn't be able to add a second overlaying coordinator.
115 EXPECT_FALSE([grandchild canAddOverlayCoordinator:secondOverlay]);
116 EXPECT_FALSE(secondOverlay.overlaying);
117 [parent addOverlayCoordinator:secondOverlay];
118 EXPECT_FALSE(secondOverlay.overlaying);
119
120 [child removeOverlayCoordinator];
121 EXPECT_FALSE(overlay.overlaying);
122 EXPECT_EQ(nil, parent.overlayCoordinator);
123 EXPECT_EQ(nil, child.overlayCoordinator);
124 EXPECT_EQ(nil, grandchild.overlayCoordinator);
125 EXPECT_FALSE([grandchild.children containsObject:overlay]);
126 EXPECT_EQ(nil, overlay.parentCoordinator);
127
128 // An implementation that doesn't allow any overlays shouldn't get one.
129 NonOverlayableCoordinator* noOverlays =
130 [[NonOverlayableCoordinator alloc] init];
131 TestCoordinator* thirdOverlay = [[TestCoordinator alloc] init];
132
133 EXPECT_FALSE([noOverlays canAddOverlayCoordinator:thirdOverlay]);
134 EXPECT_FALSE(thirdOverlay.overlaying);
135 [noOverlays addOverlayCoordinator:thirdOverlay];
136 EXPECT_FALSE(thirdOverlay.overlaying);
137 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698