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 |
| 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 |
| OLD | NEW |