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

Unified Diff: ios/chrome/browser/ui/toolbar/toolbar_model_impl_ios_unittest.mm

Issue 2588733002: Upstream Chrome on iOS source code [9/11]. (Closed)
Patch Set: Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/ui/toolbar/toolbar_model_impl_ios_unittest.mm
diff --git a/ios/chrome/browser/ui/toolbar/toolbar_model_impl_ios_unittest.mm b/ios/chrome/browser/ui/toolbar/toolbar_model_impl_ios_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..19136e1cc27635be29469d86a80b72ad4cc8b5ae
--- /dev/null
+++ b/ios/chrome/browser/ui/toolbar/toolbar_model_impl_ios_unittest.mm
@@ -0,0 +1,220 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <Foundation/Foundation.h>
+
+#include <memory>
+
+#include "base/mac/scoped_nsobject.h"
+#include "base/message_loop/message_loop.h"
+#include "base/strings/utf_string_conversions.h"
+#include "components/bookmarks/browser/bookmark_model.h"
+#include "components/bookmarks/test/bookmark_test_helpers.h"
+#include "components/toolbar/test_toolbar_model.h"
+#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
+#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#import "ios/chrome/browser/tabs/tab.h"
+#import "ios/chrome/browser/tabs/tab_model.h"
+#include "ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.h"
+#include "ios/chrome/browser/ui/toolbar/toolbar_model_impl_ios.h"
+#import "ios/chrome/browser/xcallback_parameters.h"
+#import "ios/testing/ocmock_complex_type_helper.h"
+#include "ios/web/public/test/test_web_state.h"
+#include "ios/web/public/test/test_web_thread.h"
+#include "ios/web/public/test/test_web_thread_bundle.h"
+#include "testing/gtest_mac.h"
+#include "testing/platform_test.h"
+#include "third_party/ocmock/gtest_support.h"
+#include "third_party/ocmock/ocmock_extensions.h"
+
+@interface TMITestTabMock : OCMockComplexTypeHelper {
+ GURL url_;
+ web::WebState* web_state_;
+}
+
+@property(nonatomic, assign) const GURL& url;
+@property(nonatomic, assign) web::WebState* webState;
+@end
+
+@implementation TMITestTabMock
+- (const GURL&)url {
+ return url_;
+}
+- (void)setUrl:(const GURL&)url {
+ url_ = url;
+}
+- (web::WebState*)webState {
+ return web_state_;
+}
+- (void)setWebState:(web::WebState*)web_state {
+ web_state_ = web_state;
+}
+@end
+
+namespace {
+
+static const char kWebUrl[] = "http://www.chromium.org";
+static const char kNativeUrl[] = "chrome://version";
+
+class ToolbarModelImplIOSTest : public PlatformTest {
+ protected:
+ void SetUp() override {
+ TestChromeBrowserState::Builder test_cbs_builder;
+ chrome_browser_state_ = test_cbs_builder.Build();
+ chrome_browser_state_->CreateBookmarkModel(true);
+ bookmarks::test::WaitForBookmarkModelToLoad(
+ ios::BookmarkModelFactory::GetForBrowserState(
+ chrome_browser_state_.get()));
+
+ tabModel_.reset([[OCMockObject niceMockForClass:[TabModel class]] retain]);
+
+ toolbarModelDelegate_.reset(new ToolbarModelDelegateIOS(tabModel_.get()));
+ toolbarModel_.reset(new ToolbarModelImplIOS(toolbarModelDelegate_.get()));
+ }
+
+ web::TestWebThreadBundle thread_bundle_;
+ std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
+ base::scoped_nsobject<TabModel> tabModel_;
+ std::unique_ptr<ToolbarModelDelegateIOS> toolbarModelDelegate_;
+ std::unique_ptr<ToolbarModelIOS> toolbarModel_;
+};
+
+class ToolbarModelImplIOSTestWebState : public web::TestWebState {
+ public:
+ explicit ToolbarModelImplIOSTestWebState(web::BrowserState* browser_state)
+ : browser_state_(browser_state) {}
+
+ web::BrowserState* GetBrowserState() const override { return browser_state_; }
+ double GetLoadingProgress() const override { return loading_progress_; }
+ void SetLoadingProgress(double loading_progress) {
+ loading_progress_ = loading_progress;
+ }
+
+ private:
+ web::BrowserState* browser_state_;
+ double loading_progress_;
+
+ DISALLOW_COPY_AND_ASSIGN(ToolbarModelImplIOSTestWebState);
+};
+
+TEST_F(ToolbarModelImplIOSTest, TestWhenCurrentTabIsNull) {
+ // Make a mock to always return NULL for the current tab.
+ OCMockObject* tabModelMock = static_cast<OCMockObject*>(tabModel_.get());
+ [[[tabModelMock stub] andReturn:NULL] currentTab];
+
+ EXPECT_FALSE(toolbarModel_->IsLoading());
+ EXPECT_EQ(0, toolbarModel_->GetLoadProgressFraction());
+ EXPECT_FALSE(toolbarModel_->CanGoBack());
+ EXPECT_FALSE(toolbarModel_->CanGoForward());
+ EXPECT_FALSE(toolbarModel_->IsCurrentTabNativePage());
+ EXPECT_FALSE(toolbarModel_->IsCurrentTabBookmarked());
+}
+
+TEST_F(ToolbarModelImplIOSTest, TestIsLoading) {
+ OCMockObject* tabModelMock = static_cast<OCMockObject*>(tabModel_.get());
+ id tabMock = [[TMITestTabMock alloc]
+ initWithRepresentedObject:[OCMockObject mockForClass:[Tab class]]];
+
+ // Make mocks return a current tab with a null web state.
+ [[[tabModelMock stub] andReturn:tabMock] currentTab];
+ [tabMock setWebState:nullptr];
+ [static_cast<TMITestTabMock*>(tabMock) setUrl:GURL(kWebUrl)];
+ EXPECT_FALSE(toolbarModel_->IsLoading());
+
+ // Make mocks return a current tab that is loading.
+ web::TestWebState webState;
+ [tabMock setWebState:&webState];
+ webState.SetLoading(true);
+ EXPECT_TRUE(toolbarModel_->IsLoading());
+
+ // Make mocks return a current tab that is not loading.
+ webState.SetLoading(false);
+ EXPECT_FALSE(toolbarModel_->IsLoading());
+
+ // Make mocks return a current tab that is pointing at a native URL.
+ webState.SetLoading(true);
+ [static_cast<TMITestTabMock*>(tabMock) setUrl:GURL(kNativeUrl)];
+ EXPECT_FALSE(toolbarModel_->IsLoading());
+}
+
+TEST_F(ToolbarModelImplIOSTest, TestGetLoadProgressFraction) {
+ ToolbarModelImplIOSTestWebState web_state(chrome_browser_state_.get());
+ OCMockObject* tabModelMock = static_cast<OCMockObject*>(tabModel_.get());
+ id tabMock = [[TMITestTabMock alloc]
+ initWithRepresentedObject:[OCMockObject mockForClass:[Tab class]]];
+ [static_cast<TMITestTabMock*>(tabMock) setWebState:&web_state];
+ [[[tabModelMock stub] andReturn:tabMock] currentTab];
+
+ const CGFloat kExpectedProgress = 0.42;
+ web_state.SetLoadingProgress(kExpectedProgress);
+ EXPECT_FLOAT_EQ(kExpectedProgress, toolbarModel_->GetLoadProgressFraction());
+}
+
+TEST_F(ToolbarModelImplIOSTest, TestCanGoBack) {
+ OCMockObject* tabModelMock = static_cast<OCMockObject*>(tabModel_.get());
+ id tabMock = [[TMITestTabMock alloc]
+ initWithRepresentedObject:[OCMockObject mockForClass:[Tab class]]];
+ [[[tabModelMock stub] andReturn:tabMock] currentTab];
+
+ [[[tabMock expect] andReturnBool:true] canGoBack];
+ EXPECT_TRUE(toolbarModel_->CanGoBack());
+
+ [[[tabMock expect] andReturnBool:false] canGoBack];
+ EXPECT_FALSE(toolbarModel_->CanGoBack());
+}
+
+TEST_F(ToolbarModelImplIOSTest, TestCanGoForward) {
+ OCMockObject* tabModelMock = static_cast<OCMockObject*>(tabModel_.get());
+ id tabMock = [[TMITestTabMock alloc]
+ initWithRepresentedObject:[OCMockObject mockForClass:[Tab class]]];
+ [[[tabModelMock stub] andReturn:tabMock] currentTab];
+
+ [[[tabMock expect] andReturnBool:true] canGoForward];
+ EXPECT_TRUE(toolbarModel_->CanGoForward());
+
+ [[[tabMock expect] andReturnBool:false] canGoForward];
+ EXPECT_FALSE(toolbarModel_->CanGoForward());
+}
+
+TEST_F(ToolbarModelImplIOSTest, TestIsCurrentTabNativePage) {
+ OCMockObject* tabModelMock = static_cast<OCMockObject*>(tabModel_.get());
+ id tabMock = [[TMITestTabMock alloc]
+ initWithRepresentedObject:[OCMockObject mockForClass:[Tab class]]];
+ [[[tabModelMock stub] andReturn:tabMock] currentTab];
+
+ [tabMock setUrl:GURL(kNativeUrl)];
+ EXPECT_TRUE(toolbarModel_->IsCurrentTabNativePage());
+
+ [tabMock setUrl:GURL(kWebUrl)];
+ EXPECT_FALSE(toolbarModel_->IsCurrentTabNativePage());
+}
+
+TEST_F(ToolbarModelImplIOSTest, TestIsCurrentTabBookmarked) {
+ ToolbarModelImplIOSTestWebState web_state(chrome_browser_state_.get());
+ OCMockObject* tabModelMock = static_cast<OCMockObject*>(tabModel_.get());
+ id tabMock = [[TMITestTabMock alloc]
+ initWithRepresentedObject:[OCMockObject mockForClass:[Tab class]]];
+ [[[tabModelMock stub] andReturn:tabMock] currentTab];
+
+ // Set the curent tab to |kWebUrl| and create a bookmark for |kWebUrl|, then
+ // verify that the toolbar model indicates that the URL is bookmarked.
+ [static_cast<TMITestTabMock*>(tabMock) setWebState:&web_state];
+ [static_cast<TMITestTabMock*>(tabMock) setUrl:GURL(kWebUrl)];
+ bookmarks::BookmarkModel* bookmark_model =
+ ios::BookmarkModelFactory::GetForBrowserState(
+ chrome_browser_state_.get());
+ const bookmarks::BookmarkNode* bookmarks =
+ bookmark_model->bookmark_bar_node();
+ const bookmarks::BookmarkNode* node =
+ bookmark_model->AddURL(bookmarks, bookmarks->child_count(),
+ base::UTF8ToUTF16(kWebUrl), GURL(kWebUrl));
+ EXPECT_TRUE(toolbarModel_->IsCurrentTabBookmarked());
+
+ // Remove the bookmark and verify the toolbar model indicates that the URL is
+ // not bookmarked.
+ bookmark_model->Remove(node);
+ EXPECT_FALSE(toolbarModel_->IsCurrentTabBookmarked());
+}
+
+} // namespace
« no previous file with comments | « ios/chrome/browser/ui/toolbar/toolbar_model_impl_ios.mm ('k') | ios/chrome/browser/ui/toolbar/toolbar_model_ios.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698