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

Side by Side Diff: ios/clean/chrome/browser/ui/tools/tools_mediator_unittest.mm

Issue 2906313003: [ios clean] ToolsMenu Mediator observes Webstate. (Closed)
Patch Set: Created 3 years, 6 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
1 // Copyright 2017 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/clean/chrome/browser/ui/tools/tools_mediator.h" 5 #import "ios/clean/chrome/browser/ui/tools/tools_mediator.h"
6 6
7 #include "base/memory/ptr_util.h"
7 #import "ios/clean/chrome/browser/ui/tools/tools_consumer.h" 8 #import "ios/clean/chrome/browser/ui/tools/tools_consumer.h"
8 #import "ios/clean/chrome/browser/ui/tools/tools_mediator_private.h" 9 #import "ios/clean/chrome/browser/ui/tools/tools_mediator_private.h"
9 #import "ios/clean/chrome/browser/ui/tools/tools_menu_item.h" 10 #import "ios/clean/chrome/browser/ui/tools/tools_menu_item.h"
11 #import "ios/shared/chrome/browser/ui/toolbar/toolbar_test_util.h"
10 #import "ios/shared/chrome/browser/ui/tools_menu/tools_menu_configuration.h" 12 #import "ios/shared/chrome/browser/ui/tools_menu/tools_menu_configuration.h"
13 #import "ios/web/public/test/fakes/test_web_state.h"
14 #import "ios/web/public/web_state/web_state_observer_bridge.h"
11 #include "testing/gtest_mac.h" 15 #include "testing/gtest_mac.h"
12 #include "testing/platform_test.h" 16 #include "testing/platform_test.h"
13 #import "third_party/ocmock/OCMock/OCMock.h" 17 #import "third_party/ocmock/OCMock/OCMock.h"
14 #include "third_party/ocmock/gtest_support.h" 18 #include "third_party/ocmock/gtest_support.h"
15 19
16 #if !defined(__has_feature) || !__has_feature(objc_arc) 20 #if !defined(__has_feature) || !__has_feature(objc_arc)
17 #error "This file requires ARC support." 21 #error "This file requires ARC support."
18 #endif 22 #endif
19 23
24 @interface TestToolsMediator : ToolsMediator<CRWWebStateObserver>
marq (ping after 24h) 2017/05/30 09:24:54 This doesn't seem to be necessary.
sczs 2017/05/31 03:05:49 You're right. Done.
25 @end
26
27 @implementation TestToolsMediator
28 @end
29
20 namespace { 30 namespace {
21 31
22 class ToolsMediatorTest : public PlatformTest { 32 class ToolsMediatorTest : public PlatformTest {
33 public:
34 ToolsMediatorTest() {
35 std::unique_ptr<ToolbarTestNavigationManager> navigation_manager =
marq (ping after 24h) 2017/05/30 09:24:55 Use a C++ initializer list here?
sczs 2017/05/31 03:05:50 Done, though I'm not sure if this is what you mean
marq (ping after 24h) 2017/05/31 10:40:32 It is, but I meant for all of the member variables
sczs 2017/05/31 23:19:26 Done.
sdefresne 2017/07/02 19:01:54 This was incorrect, those were not member variable
36 base::MakeUnique<ToolbarTestNavigationManager>();
37 navigation_manager_ = navigation_manager.get();
38 test_web_state_.SetNavigationManager(std::move(navigation_manager));
39 configuration_ = OCMClassMock([ToolsMenuConfiguration class]);
marq (ping after 24h) 2017/05/30 09:24:55 I'd prefer not to use a mock for ToolsMenuConfigur
sczs 2017/05/31 03:05:49 Done.
40 consumer_ = OCMProtocolMock(@protocol(ToolsConsumer));
41 }
42
23 protected: 43 protected:
24 ToolsMediator* mediator_; 44 TestToolsMediator* mediator_;
45 id consumer_;
46 id configuration_;
47 ToolbarTestWebState test_web_state_;
48 ToolbarTestNavigationManager* navigation_manager_;
25 }; 49 };
26 50
27 TEST_F(ToolsMediatorTest, TestShowOverFlowControls) { 51 TEST_F(ToolsMediatorTest, TestShowOverFlowControls) {
28 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); 52 OCMStub([configuration_ isInTabSwitcher]).andReturn(YES);
29 id configuration = OCMClassMock([ToolsMenuConfiguration class]); 53 mediator_ = [[TestToolsMediator alloc] initWithConsumer:consumer_
30 OCMStub([configuration isInTabSwitcher]).andReturn(YES); 54 andConfiguration:configuration_];
31 55
32 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer 56 [[consumer_ verify] setToolsMenuItems:[OCMArg any]];
33 andConfiguration:configuration]; 57 [[consumer_ verify] setDisplayOverflowControls:NO];
34
35 [[consumer verify] setToolsMenuItems:[OCMArg any]];
36 [[consumer verify] setDisplayOverflowControls:NO];
37 } 58 }
38 59
39 TEST_F(ToolsMediatorTest, TestHideOverFlowControls) { 60 TEST_F(ToolsMediatorTest, TestHideOverFlowControls) {
40 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); 61 OCMStub([configuration_ isInTabSwitcher]).andReturn(NO);
41 id configuration = OCMClassMock([ToolsMenuConfiguration class]);
42 OCMStub([configuration isInTabSwitcher]).andReturn(NO);
43 62
44 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer 63 mediator_ = [[TestToolsMediator alloc] initWithConsumer:consumer_
marq (ping after 24h) 2017/05/30 09:24:55 Any reason to not initialize mediator_ in the test
sczs 2017/05/31 03:05:51 Since the configuration is not exposed as a proper
marq (ping after 24h) 2017/05/31 10:40:32 And calling the initializer triggers updates to th
sczs 2017/05/31 23:19:26 Acknowledged.
45 andConfiguration:configuration]; 64 andConfiguration:configuration_];
46 65
47 [[consumer verify] setToolsMenuItems:[OCMArg any]]; 66 [[consumer_ verify] setToolsMenuItems:[OCMArg any]];
48 [[consumer verify] setDisplayOverflowControls:YES]; 67 [[consumer_ verify] setDisplayOverflowControls:YES];
49 } 68 }
50 69
51 TEST_F(ToolsMediatorTest, TestMenuItemsForNonTabSwitcherNonIncognito) { 70 TEST_F(ToolsMediatorTest, TestMenuItemsForNonTabSwitcherNonIncognito) {
52 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); 71 OCMStub([configuration_ isInTabSwitcher]).andReturn(NO);
53 id configuration = OCMClassMock([ToolsMenuConfiguration class]); 72 OCMStub([configuration_ isInIncognito]).andReturn(NO);
54 OCMStub([configuration isInTabSwitcher]).andReturn(NO);
55 OCMStub([configuration isInIncognito]).andReturn(NO);
56 73
57 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer 74 mediator_ = [[TestToolsMediator alloc] initWithConsumer:consumer_
58 andConfiguration:configuration]; 75 andConfiguration:configuration_];
59 76
60 EXPECT_EQ(7ul, [mediator_.menuItemsArray count]); 77 EXPECT_EQ(7ul, [mediator_.menuItemsArray count]);
61 } 78 }
62 79
63 TEST_F(ToolsMediatorTest, TestMenuItemsForNonTabSwitcherIncognito) { 80 TEST_F(ToolsMediatorTest, TestMenuItemsForNonTabSwitcherIncognito) {
64 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); 81 OCMStub([configuration_ isInTabSwitcher]).andReturn(NO);
65 id configuration = OCMClassMock([ToolsMenuConfiguration class]); 82 OCMStub([configuration_ isInIncognito]).andReturn(YES);
66 OCMStub([configuration isInTabSwitcher]).andReturn(NO);
67 OCMStub([configuration isInIncognito]).andReturn(YES);
68 83
69 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer 84 mediator_ = [[TestToolsMediator alloc] initWithConsumer:consumer_
70 andConfiguration:configuration]; 85 andConfiguration:configuration_];
71 86
72 EXPECT_EQ(7ul, [mediator_.menuItemsArray count]); 87 EXPECT_EQ(7ul, [mediator_.menuItemsArray count]);
73 } 88 }
74 89
75 TEST_F(ToolsMediatorTest, TestMenuItemsForTabSwitcherNonIncognito) { 90 TEST_F(ToolsMediatorTest, TestMenuItemsForTabSwitcherIncognito) {
76 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); 91 OCMStub([configuration_ isInTabSwitcher]).andReturn(YES);
77 id configuration = OCMClassMock([ToolsMenuConfiguration class]); 92 OCMStub([configuration_ isInIncognito]).andReturn(YES);
78 OCMStub([configuration isInTabSwitcher]).andReturn(YES);
79 OCMStub([configuration isInIncognito]).andReturn(YES);
80 93
81 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer 94 mediator_ = [[TestToolsMediator alloc] initWithConsumer:consumer_
82 andConfiguration:configuration]; 95 andConfiguration:configuration_];
83 96
84 ToolsMenuItem* closeAllTabsItem = mediator_.menuItemsArray[2]; 97 ToolsMenuItem* closeAllTabsItem = mediator_.menuItemsArray[2];
85 EXPECT_NSEQ(@"Close All Incognito Tabs", closeAllTabsItem.title); 98 EXPECT_NSEQ(@"Close All Incognito Tabs", closeAllTabsItem.title);
86 EXPECT_EQ(5ul, [mediator_.menuItemsArray count]); 99 EXPECT_EQ(5ul, [mediator_.menuItemsArray count]);
87 } 100 }
88 101
89 TEST_F(ToolsMediatorTest, TestMenuItemsForTabSwitcherIncognito) { 102 TEST_F(ToolsMediatorTest, TestMenuItemsForTabSwitcherNonIncognito) {
90 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); 103 OCMStub([configuration_ isInTabSwitcher]).andReturn(YES);
91 id configuration = OCMClassMock([ToolsMenuConfiguration class]); 104 OCMStub([configuration_ isInIncognito]).andReturn(NO);
92 OCMStub([configuration isInTabSwitcher]).andReturn(YES);
93 OCMStub([configuration isInIncognito]).andReturn(NO);
94 105
95 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer 106 mediator_ = [[TestToolsMediator alloc] initWithConsumer:consumer_
96 andConfiguration:configuration]; 107 andConfiguration:configuration_];
97 108
98 ToolsMenuItem* closeAllTabsItem = mediator_.menuItemsArray[2]; 109 ToolsMenuItem* closeAllTabsItem = mediator_.menuItemsArray[2];
99 EXPECT_NSEQ(@"Close All Tabs", closeAllTabsItem.title); 110 EXPECT_NSEQ(@"Close All Tabs", closeAllTabsItem.title);
100 EXPECT_EQ(5ul, [mediator_.menuItemsArray count]); 111 EXPECT_EQ(5ul, [mediator_.menuItemsArray count]);
101 } 112 }
102 113
114 TEST_F(ToolsMediatorTest, TestDontUpdateConsumerLoadingState) {
115 OCMStub([configuration_ isInTabSwitcher]).andReturn(NO);
marq (ping after 24h) 2017/05/30 09:24:55 Should you also test these cases when -isInTabSwit
sczs 2017/05/31 03:05:53 You're right, it should always reject! Since no We
116 mediator_ = [[TestToolsMediator alloc] initWithConsumer:consumer_
117 andConfiguration:configuration_];
118
119 [[consumer_ reject] setIsLoading:YES];
120 [[consumer_ reject] setIsLoading:NO];
121 }
122
123 TEST_F(ToolsMediatorTest, TestUpdateConsumerLoadingState) {
124 OCMStub([configuration_ isInTabSwitcher]).andReturn(NO);
125 mediator_ = [[TestToolsMediator alloc] initWithConsumer:consumer_
126 andConfiguration:configuration_];
127 mediator_.webState = &test_web_state_;
128 test_web_state_.SetLoading(false);
129 [[consumer_ verify] setIsLoading:NO];
130 test_web_state_.SetLoading(true);
131 [[consumer_ verify] setIsLoading:YES];
132 }
133
134 TEST_F(ToolsMediatorTest, TestUpdateConsumerLoadingStateInverse) {
135 OCMStub([configuration_ isInTabSwitcher]).andReturn(NO);
136 mediator_ = [[TestToolsMediator alloc] initWithConsumer:consumer_
137 andConfiguration:configuration_];
138 mediator_.webState = &test_web_state_;
139 test_web_state_.SetLoading(true);
140 [[consumer_ verify] setIsLoading:YES];
141 test_web_state_.SetLoading(false);
142 [[consumer_ verify] setIsLoading:NO];
143 }
144
103 } // namespace 145 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698