blob: a0e5737b07977d67f2a0fc52f61a71d30a22f49e [file] [log] [blame]
// Copyright (c) 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.
#include "chrome/browser/ui/webui/ntp/android/partner_bookmarks_shim.h"
#include "base/message_loop/message_loop.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
#include "chrome/browser/bookmarks/bookmark_model_factory.h"
#include "chrome/browser/bookmarks/bookmark_test_helpers.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/test/test_browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
class PartnerBookmarksShimTest : public testing::Test {
public:
PartnerBookmarksShimTest()
: ui_thread_(content::BrowserThread::UI, &message_loop_),
file_thread_(content::BrowserThread::FILE, &message_loop_),
model_(NULL) {
}
TestingProfile* profile() const { return profile_.get(); }
const BookmarkNode* AddBookmark(const BookmarkNode* parent,
const GURL& url,
const string16& title) {
if (!parent)
parent = model_->bookmark_bar_node();
return model_->AddURL(parent, parent->child_count(), title, url);
}
const BookmarkNode* AddFolder(const BookmarkNode* parent,
const string16& title) {
if (!parent)
parent = model_->bookmark_bar_node();
return model_->AddFolder(parent, parent->child_count(), title);
}
protected:
// testing::Test
virtual void SetUp() OVERRIDE {
profile_.reset(new TestingProfile());
profile_->CreateBookmarkModel(true);
model_ = BookmarkModelFactory::GetForProfile(profile_.get());
test::WaitForBookmarkModelToLoad(model_);
}
virtual void TearDown() OVERRIDE {
profile_.reset(NULL);
PartnerBookmarksShim::GetInstance()->Reset();
}
scoped_ptr<TestingProfile> profile_;
base::MessageLoopForUI message_loop_;
content::TestBrowserThread ui_thread_;
content::TestBrowserThread file_thread_;
BookmarkModel* model_;
DISALLOW_COPY_AND_ASSIGN(PartnerBookmarksShimTest);
};
class TestObserver : public PartnerBookmarksShim::Observer {
public:
TestObserver()
: notified_of_load_(false) {
}
// Called when everything is loaded and attached
virtual void PartnerShimLoaded(PartnerBookmarksShim*) OVERRIDE {
notified_of_load_ = true;
}
bool IsNotifiedOfLoad() { return notified_of_load_; }
private:
bool notified_of_load_;
DISALLOW_COPY_AND_ASSIGN(TestObserver);
};
TEST_F(PartnerBookmarksShimTest, GetNodeByID) {
// Add a bookmark.
GURL bookmark_url("http://www.google.com/");
AddBookmark(
NULL,
bookmark_url,
ASCIIToUTF16("bar"));
const BookmarkNode* test_folder1 = AddFolder(NULL,
ASCIIToUTF16("test_folder1"));
const BookmarkNode* test_folder2 = AddFolder(test_folder1,
ASCIIToUTF16("test_folder2"));
const BookmarkNode* model_bookmark1 = AddBookmark(test_folder2,
GURL("http://www.test.com"),
ASCIIToUTF16("bar"));
const BookmarkNode* model_bookmark2 = AddBookmark(test_folder2,
GURL("http://www.foo.com"),
ASCIIToUTF16("baz"));
BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL());
partner_folder1->set_type(BookmarkNode::FOLDER);
root_partner_node->Add(partner_folder1, root_partner_node->child_count());
BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL());
partner_folder2->set_type(BookmarkNode::FOLDER);
partner_folder1->Add(partner_folder2, partner_folder1->child_count());
BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
GURL("http://www.a.com"));
partner_bookmark1->set_type(BookmarkNode::URL);
partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
GURL("http://www.b.com"));
partner_bookmark2->set_type(BookmarkNode::URL);
partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
PartnerBookmarksShim* shim = PartnerBookmarksShim::GetInstance();
ASSERT_FALSE(shim->IsLoaded());
shim->AttachTo(model_, model_->mobile_node());
shim->SetPartnerBookmarksRoot(root_partner_node);
ASSERT_TRUE(shim->IsLoaded());
ASSERT_EQ(shim->GetNodeByID(model_bookmark1->id(), false), model_bookmark1);
ASSERT_EQ(shim->GetNodeByID(model_bookmark2->id(), false), model_bookmark2);
ASSERT_EQ(shim->GetNodeByID(test_folder2->id(), false), test_folder2);
ASSERT_EQ(shim->GetNodeByID(0, true), root_partner_node);
ASSERT_EQ(shim->GetNodeByID(1, true), partner_folder1);
ASSERT_EQ(shim->GetNodeByID(4, true), partner_bookmark2);
}
TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadNoPartnerBookmarks) {
TestObserver* observer = new TestObserver();
PartnerBookmarksShim* shim = PartnerBookmarksShim::GetInstance();
shim->AddObserver(observer);
ASSERT_FALSE(observer->IsNotifiedOfLoad());
shim->SetPartnerBookmarksRoot(NULL);
ASSERT_TRUE(observer->IsNotifiedOfLoad());
}
TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadWithPartnerBookmarks) {
int64 id = 5;
BookmarkNode* root_partner_node = new BookmarkPermanentNode(id++);
BookmarkNode* partner_bookmark1 = new BookmarkNode(id++,
GURL("http://www.a.com"));
partner_bookmark1->set_type(BookmarkNode::URL);
root_partner_node->Add(partner_bookmark1, root_partner_node->child_count());
TestObserver* observer = new TestObserver();
PartnerBookmarksShim* shim = PartnerBookmarksShim::GetInstance();
shim->AddObserver(observer);
shim->AttachTo(model_, model_->bookmark_bar_node());
ASSERT_FALSE(observer->IsNotifiedOfLoad());
shim->SetPartnerBookmarksRoot(root_partner_node);
ASSERT_TRUE(observer->IsNotifiedOfLoad());
}