Chromium Code Reviews| Index: ios/clean/chrome/browser/ui/toolbar/toolbar_mediator_unittest.mm |
| diff --git a/ios/clean/chrome/browser/ui/toolbar/toolbar_mediator_unittest.mm b/ios/clean/chrome/browser/ui/toolbar/toolbar_mediator_unittest.mm |
| index 0a0c698ddf2551994edab108a2fc19144050cb32..6132d0d25a0e52009ff8e933b4370b971f73269d 100644 |
| --- a/ios/clean/chrome/browser/ui/toolbar/toolbar_mediator_unittest.mm |
| +++ b/ios/clean/chrome/browser/ui/toolbar/toolbar_mediator_unittest.mm |
| @@ -5,6 +5,9 @@ |
| #import "ios/clean/chrome/browser/ui/toolbar/toolbar_mediator.h" |
| #include "base/memory/ptr_util.h" |
| +#include "ios/chrome/browser/web_state_list/fake_web_state_list_delegate.h" |
| +#include "ios/chrome/browser/web_state_list/web_state_list.h" |
| +#import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h" |
| #import "ios/clean/chrome/browser/ui/toolbar/toolbar_consumer.h" |
| #import "ios/shared/chrome/browser/ui/toolbar/toolbar_test_util.h" |
| #import "ios/web/public/test/fakes/test_navigation_manager.h" |
| @@ -18,7 +21,8 @@ |
| #error "This file requires ARC support." |
| #endif |
| -@interface TestToolbarMediator : ToolbarMediator<CRWWebStateObserver> |
| +@interface TestToolbarMediator |
| + : ToolbarMediator<CRWWebStateObserver, WebStateListObserving> |
| @end |
| @implementation TestToolbarMediator |
| @@ -26,6 +30,7 @@ |
| namespace { |
| +static const int kNumberOfWebStates = 3; |
| static const char kTestUrl[] = "http://www.chromium.org"; |
| class ToolbarMediatorTest : public PlatformTest { |
| @@ -39,11 +44,30 @@ class ToolbarMediatorTest : public PlatformTest { |
| mediator_ = [[TestToolbarMediator alloc] init]; |
| consumer_ = OCMProtocolMock(@protocol(ToolbarConsumer)); |
| } |
| + // Explicitly dissconnect the mediator so there won't be any WebStateList |
|
marq (ping after 24h)
2017/05/29 11:04:37
typo: disconnect
newline before this comment?
sczs
2017/05/30 00:18:21
Done.
|
| + // observers when web_state_list_ gets dealloc. |
| + ~ToolbarMediatorTest() override { [mediator_ disconnect]; } |
|
marq (ping after 24h)
2017/05/29 11:04:37
I think we only use one-liner method implementatio
sczs
2017/05/30 00:18:21
Done.
marq (ping after 24h)
2017/05/30 09:47:03
Not done?
sczs
2017/05/30 18:14:12
I was pretty sure I had made this change. Now I re
|
| protected: |
| + void SetUpWebStateList() { |
| + web_state_list_ = base::MakeUnique<WebStateList>(&web_state_list_delegate_); |
| + for (int i = 0; i < kNumberOfWebStates; i++) { |
| + InsertWebState(i); |
| + } |
| + } |
| + |
| + void InsertWebState(int index) { |
| + auto web_state = base::MakeUnique<web::TestWebState>(); |
| + GURL url("http://test/" + std::to_string(index)); |
| + web_state->SetCurrentURL(url); |
| + web_state_list_->InsertWebState(index, std::move(web_state)); |
| + } |
| + |
| TestToolbarMediator* mediator_; |
| ToolbarTestWebState test_web_state_; |
| ToolbarTestNavigationManager* navigation_manager_; |
| + std::unique_ptr<WebStateList> web_state_list_; |
| + FakeWebStateListDelegate web_state_list_delegate_; |
| id consumer_; |
| }; |
| @@ -65,6 +89,15 @@ TEST_F(ToolbarMediatorTest, TestToolbarSetupWithNoConsumer) { |
| [[consumer_ reject] setIsLoading:YES]; |
| } |
| +// Test no WebstateList related setup is being done on the Toolbar if there's no |
| +// WebstateList. |
| +TEST_F(ToolbarMediatorTest, TestToolbarSetupWithNoWebstateList) { |
| + mediator_.consumer = consumer_; |
| + mediator_.webState = &test_web_state_; |
| + |
| + [[[consumer_ reject] ignoringNonObjectArgs] setNumberOfTabs:0]; |
| +} |
| + |
| // Test the Toolbar Setup gets called when the mediator's WebState and Consumer |
| // have been set. |
| TEST_F(ToolbarMediatorTest, TestToolbarSetup) { |
| @@ -87,10 +120,30 @@ TEST_F(ToolbarMediatorTest, TestToolbarSetupReverse) { |
| [[consumer_ verify] setIsLoading:YES]; |
| } |
| +// Test the WebstateList related setup gets called when the mediator's WebState |
| +// and Consumer have been set. |
| +TEST_F(ToolbarMediatorTest, TestWebstateListRelatedSetup) { |
| + SetUpWebStateList(); |
| + mediator_.webStateList = web_state_list_.get(); |
| + mediator_.consumer = consumer_; |
| + |
| + [[consumer_ verify] setNumberOfTabs:3]; |
| +} |
| + |
| +// Test the WebstateList related setup gets called when the mediator's WebState |
| +// and Consumer have been set in reverse order. |
| +TEST_F(ToolbarMediatorTest, TestWebstateListRelatedSetupReverse) { |
| + mediator_.consumer = consumer_; |
| + SetUpWebStateList(); |
| + mediator_.webStateList = web_state_list_.get(); |
| + |
| + [[consumer_ verify] setNumberOfTabs:3]; |
| +} |
| + |
| // Test the Toolbar is updated when the Webstate observer method DidStartLoading |
| // is triggered by SetLoading. |
| TEST_F(ToolbarMediatorTest, TestDidStartLoading) { |
| - // Change the default loading state to false so we can verify the Webstate |
| + // Change the default loading state to false to verify the Webstate |
| // callback with true. |
| test_web_state_.SetLoading(false); |
| mediator_.webState = &test_web_state_; |
| @@ -136,4 +189,26 @@ TEST_F(ToolbarMediatorTest, TestLoadingProgress) { |
| [[consumer_ verify] setLoadingProgress:0.42]; |
| } |
| +// Test that increasing the number of Webstates will update the consumer with |
| +// the right value. |
| +TEST_F(ToolbarMediatorTest, TestIncreaseNumberOfWebstates) { |
| + SetUpWebStateList(); |
| + mediator_.webStateList = web_state_list_.get(); |
| + mediator_.consumer = consumer_; |
| + |
| + InsertWebState(3); |
|
marq (ping after 24h)
2017/05/29 11:04:37
Mild nit: if for some reason kNumberOfWebStates is
sczs
2017/05/30 00:18:21
Done.
|
| + [[consumer_ verify] setNumberOfTabs:kNumberOfWebStates + 1]; |
| +} |
| + |
| +// Test that decreasing the number of Webstates will update the consumer with |
| +// the right value. |
| +TEST_F(ToolbarMediatorTest, TestDecreaseNumberOfWebstates) { |
| + SetUpWebStateList(); |
| + mediator_.webStateList = web_state_list_.get(); |
| + mediator_.consumer = consumer_; |
| + |
| + web_state_list_->DetachWebStateAt(0); |
| + [[consumer_ verify] setNumberOfTabs:kNumberOfWebStates - 1]; |
| +} |
| + |
| } // namespace |