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