Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 |
| 20 namespace { | 24 namespace { |
| 21 | 25 |
| 22 class ToolsMediatorTest : public PlatformTest { | 26 class ToolsMediatorTest : public PlatformTest { |
| 27 public: | |
| 28 ToolsMediatorTest() | |
| 29 : consumer_(OCMProtocolMock(@protocol(ToolsConsumer))), | |
| 30 configuration_( | |
| 31 [[ToolsMenuConfiguration alloc] initWithDisplayView:nil]), | |
| 32 navigation_manager(base::MakeUnique<ToolbarTestNavigationManager>()) { | |
|
sdefresne
2017/07/02 19:01:54
This should not be a member variable if you move i
| |
| 33 navigation_manager_ = navigation_manager.get(); | |
| 34 test_web_state_.SetNavigationManager(std::move(navigation_manager)); | |
| 35 } | |
| 36 | |
| 23 protected: | 37 protected: |
| 24 ToolsMediator* mediator_; | 38 ToolsMediator* mediator_; |
| 39 id consumer_; | |
| 40 ToolsMenuConfiguration* configuration_; | |
| 41 ToolbarTestWebState test_web_state_; | |
| 42 ToolbarTestNavigationManager* navigation_manager_; | |
| 43 | |
| 44 private: | |
| 45 std::unique_ptr<ToolbarTestNavigationManager> navigation_manager; | |
| 25 }; | 46 }; |
| 26 | 47 |
| 27 TEST_F(ToolsMediatorTest, TestShowOverFlowControls) { | 48 TEST_F(ToolsMediatorTest, TestShowOverFlowControls) { |
| 28 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); | 49 configuration_.inTabSwitcher = YES; |
| 29 id configuration = OCMClassMock([ToolsMenuConfiguration class]); | 50 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ |
| 30 OCMStub([configuration isInTabSwitcher]).andReturn(YES); | 51 configuration:configuration_]; |
| 31 | 52 |
| 32 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer | 53 [[consumer_ verify] setToolsMenuItems:[OCMArg any]]; |
| 33 andConfiguration:configuration]; | 54 [[consumer_ verify] setDisplayOverflowControls:NO]; |
| 34 | |
| 35 [[consumer verify] setToolsMenuItems:[OCMArg any]]; | |
| 36 [[consumer verify] setDisplayOverflowControls:NO]; | |
| 37 } | 55 } |
| 38 | 56 |
| 39 TEST_F(ToolsMediatorTest, TestHideOverFlowControls) { | 57 TEST_F(ToolsMediatorTest, TestHideOverFlowControls) { |
| 40 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); | 58 configuration_.inTabSwitcher = NO; |
| 41 id configuration = OCMClassMock([ToolsMenuConfiguration class]); | |
| 42 OCMStub([configuration isInTabSwitcher]).andReturn(NO); | |
| 43 | 59 |
| 44 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer | 60 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ |
| 45 andConfiguration:configuration]; | 61 configuration:configuration_]; |
| 46 | 62 |
| 47 [[consumer verify] setToolsMenuItems:[OCMArg any]]; | 63 [[consumer_ verify] setToolsMenuItems:[OCMArg any]]; |
| 48 [[consumer verify] setDisplayOverflowControls:YES]; | 64 [[consumer_ verify] setDisplayOverflowControls:YES]; |
| 49 } | 65 } |
| 50 | 66 |
| 51 TEST_F(ToolsMediatorTest, TestMenuItemsForNonTabSwitcherNonIncognito) { | 67 TEST_F(ToolsMediatorTest, TestMenuItemsForNonTabSwitcherNonIncognito) { |
| 52 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); | 68 configuration_.inTabSwitcher = NO; |
| 53 id configuration = OCMClassMock([ToolsMenuConfiguration class]); | 69 configuration_.inIncognito = NO; |
| 54 OCMStub([configuration isInTabSwitcher]).andReturn(NO); | |
| 55 OCMStub([configuration isInIncognito]).andReturn(NO); | |
| 56 | 70 |
| 57 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer | 71 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ |
| 58 andConfiguration:configuration]; | 72 configuration:configuration_]; |
| 59 | 73 |
| 60 EXPECT_EQ(7ul, [mediator_.menuItemsArray count]); | 74 EXPECT_EQ(7ul, [mediator_.menuItemsArray count]); |
| 61 } | 75 } |
| 62 | 76 |
| 63 TEST_F(ToolsMediatorTest, TestMenuItemsForNonTabSwitcherIncognito) { | 77 TEST_F(ToolsMediatorTest, TestMenuItemsForNonTabSwitcherIncognito) { |
| 64 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); | 78 configuration_.inTabSwitcher = NO; |
| 65 id configuration = OCMClassMock([ToolsMenuConfiguration class]); | 79 configuration_.inIncognito = YES; |
| 66 OCMStub([configuration isInTabSwitcher]).andReturn(NO); | |
| 67 OCMStub([configuration isInIncognito]).andReturn(YES); | |
| 68 | 80 |
| 69 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer | 81 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ |
| 70 andConfiguration:configuration]; | 82 configuration:configuration_]; |
| 71 | 83 |
| 72 EXPECT_EQ(7ul, [mediator_.menuItemsArray count]); | 84 EXPECT_EQ(7ul, [mediator_.menuItemsArray count]); |
| 73 } | 85 } |
| 74 | 86 |
| 75 TEST_F(ToolsMediatorTest, TestMenuItemsForTabSwitcherNonIncognito) { | 87 TEST_F(ToolsMediatorTest, TestMenuItemsForTabSwitcherIncognito) { |
| 76 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); | 88 configuration_.inTabSwitcher = YES; |
| 77 id configuration = OCMClassMock([ToolsMenuConfiguration class]); | 89 configuration_.inIncognito = YES; |
| 78 OCMStub([configuration isInTabSwitcher]).andReturn(YES); | |
| 79 OCMStub([configuration isInIncognito]).andReturn(YES); | |
| 80 | 90 |
| 81 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer | 91 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ |
| 82 andConfiguration:configuration]; | 92 configuration:configuration_]; |
| 83 | 93 |
| 84 ToolsMenuItem* closeAllTabsItem = mediator_.menuItemsArray[2]; | 94 ToolsMenuItem* closeAllTabsItem = mediator_.menuItemsArray[2]; |
| 85 EXPECT_NSEQ(@"Close All Incognito Tabs", closeAllTabsItem.title); | 95 EXPECT_NSEQ(@"Close All Incognito Tabs", closeAllTabsItem.title); |
| 86 EXPECT_EQ(5ul, [mediator_.menuItemsArray count]); | 96 EXPECT_EQ(5ul, [mediator_.menuItemsArray count]); |
| 87 } | 97 } |
| 88 | 98 |
| 89 TEST_F(ToolsMediatorTest, TestMenuItemsForTabSwitcherIncognito) { | 99 TEST_F(ToolsMediatorTest, TestMenuItemsForTabSwitcherNonIncognito) { |
| 90 id consumer = OCMProtocolMock(@protocol(ToolsConsumer)); | 100 configuration_.inTabSwitcher = YES; |
| 91 id configuration = OCMClassMock([ToolsMenuConfiguration class]); | 101 configuration_.inIncognito = NO; |
| 92 OCMStub([configuration isInTabSwitcher]).andReturn(YES); | |
| 93 OCMStub([configuration isInIncognito]).andReturn(NO); | |
| 94 | 102 |
| 95 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer | 103 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ |
| 96 andConfiguration:configuration]; | 104 configuration:configuration_]; |
| 97 | 105 |
| 98 ToolsMenuItem* closeAllTabsItem = mediator_.menuItemsArray[2]; | 106 ToolsMenuItem* closeAllTabsItem = mediator_.menuItemsArray[2]; |
| 99 EXPECT_NSEQ(@"Close All Tabs", closeAllTabsItem.title); | 107 EXPECT_NSEQ(@"Close All Tabs", closeAllTabsItem.title); |
| 100 EXPECT_EQ(5ul, [mediator_.menuItemsArray count]); | 108 EXPECT_EQ(5ul, [mediator_.menuItemsArray count]); |
| 101 } | 109 } |
| 102 | 110 |
| 111 TEST_F(ToolsMediatorTest, TestDontUpdateConsumerLoadingState) { | |
| 112 configuration_.inTabSwitcher = NO; | |
| 113 [[consumer_ reject] setIsLoading:YES]; | |
| 114 [[consumer_ reject] setIsLoading:NO]; | |
| 115 | |
| 116 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ | |
| 117 configuration:configuration_]; | |
| 118 } | |
| 119 | |
| 120 TEST_F(ToolsMediatorTest, TestDontUpdateConsumerLoadingStateInTabSwitcher) { | |
| 121 configuration_.inTabSwitcher = YES; | |
| 122 [[consumer_ reject] setIsLoading:YES]; | |
| 123 [[consumer_ reject] setIsLoading:NO]; | |
| 124 | |
| 125 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ | |
| 126 configuration:configuration_]; | |
| 127 } | |
| 128 | |
| 129 TEST_F(ToolsMediatorTest, TestUpdateConsumerLoadingState) { | |
| 130 configuration_.inTabSwitcher = NO; | |
| 131 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ | |
| 132 configuration:configuration_]; | |
| 133 test_web_state_.SetLoading(false); | |
| 134 mediator_.webState = &test_web_state_; | |
| 135 [[consumer_ verify] setIsLoading:NO]; | |
| 136 test_web_state_.SetLoading(true); | |
| 137 [[consumer_ verify] setIsLoading:YES]; | |
| 138 } | |
| 139 | |
| 140 TEST_F(ToolsMediatorTest, TestUpdateConsumerLoadingStateInverse) { | |
| 141 configuration_.inTabSwitcher = NO; | |
| 142 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ | |
| 143 configuration:configuration_]; | |
| 144 test_web_state_.SetLoading(true); | |
| 145 mediator_.webState = &test_web_state_; | |
| 146 [[consumer_ verify] setIsLoading:YES]; | |
| 147 test_web_state_.SetLoading(false); | |
| 148 [[consumer_ verify] setIsLoading:NO]; | |
| 149 } | |
| 150 | |
| 151 TEST_F(ToolsMediatorTest, TestUpdateConsumerLoadingStateInTabSwitcher) { | |
| 152 configuration_.inTabSwitcher = YES; | |
| 153 [[consumer_ reject] setIsLoading:NO]; | |
| 154 [[consumer_ reject] setIsLoading:YES]; | |
| 155 | |
| 156 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ | |
| 157 configuration:configuration_]; | |
| 158 test_web_state_.SetLoading(false); | |
| 159 mediator_.webState = &test_web_state_; | |
| 160 test_web_state_.SetLoading(true); | |
| 161 } | |
| 162 | |
| 163 TEST_F(ToolsMediatorTest, TestUpdateConsumerLoadingStateInverseInTabSwitcher) { | |
| 164 configuration_.inTabSwitcher = YES; | |
| 165 [[consumer_ reject] setIsLoading:NO]; | |
| 166 [[consumer_ reject] setIsLoading:YES]; | |
| 167 | |
| 168 mediator_ = [[ToolsMediator alloc] initWithConsumer:consumer_ | |
| 169 configuration:configuration_]; | |
| 170 test_web_state_.SetLoading(true); | |
| 171 mediator_.webState = &test_web_state_; | |
| 172 test_web_state_.SetLoading(false); | |
| 173 } | |
| 174 | |
| 103 } // namespace | 175 } // namespace |
| OLD | NEW |