Home | History | Annotate | Download | only in android
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/webui/ntp/android/partner_bookmarks_shim.h"
      6 
      7 #include "base/message_loop/message_loop.h"
      8 #include "base/strings/string16.h"
      9 #include "base/strings/utf_string_conversions.h"
     10 #include "chrome/browser/bookmarks/bookmark_model.h"
     11 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
     12 #include "chrome/test/base/testing_profile.h"
     13 #include "chrome/test/base/ui_test_utils.h"
     14 #include "content/public/browser/browser_thread.h"
     15 #include "content/public/test/test_browser_thread.h"
     16 #include "testing/gtest/include/gtest/gtest.h"
     17 #include "url/gurl.h"
     18 
     19 class PartnerBookmarksShimTest : public testing::Test {
     20  public:
     21   PartnerBookmarksShimTest()
     22       : ui_thread_(content::BrowserThread::UI, &message_loop_),
     23         file_thread_(content::BrowserThread::FILE, &message_loop_),
     24         model_(NULL) {
     25   }
     26 
     27   TestingProfile* profile() const { return profile_.get(); }
     28 
     29   const BookmarkNode*  AddBookmark(const BookmarkNode* parent,
     30                                    const GURL& url,
     31                                    const string16& title) {
     32     if (!parent)
     33       parent = model_->bookmark_bar_node();
     34     return model_->AddURL(parent, parent->child_count(), title, url);
     35   }
     36 
     37   const BookmarkNode*  AddFolder(const BookmarkNode* parent,
     38                                  const string16& title) {
     39     if (!parent)
     40       parent = model_->bookmark_bar_node();
     41     return model_->AddFolder(parent, parent->child_count(), title);
     42   }
     43 
     44  protected:
     45   // testing::Test
     46   virtual void SetUp() OVERRIDE {
     47     profile_.reset(new TestingProfile());
     48     profile_->CreateBookmarkModel(true);
     49 
     50     model_ = BookmarkModelFactory::GetForProfile(profile_.get());
     51     ui_test_utils::WaitForBookmarkModelToLoad(model_);
     52   }
     53 
     54   virtual void TearDown() OVERRIDE {
     55     profile_.reset(NULL);
     56     PartnerBookmarksShim::GetInstance()->Reset();
     57   }
     58 
     59   scoped_ptr<TestingProfile> profile_;
     60 
     61   base::MessageLoopForUI message_loop_;
     62   content::TestBrowserThread ui_thread_;
     63   content::TestBrowserThread file_thread_;
     64 
     65   BookmarkModel* model_;
     66 
     67   DISALLOW_COPY_AND_ASSIGN(PartnerBookmarksShimTest);
     68 };
     69 
     70 class TestObserver : public PartnerBookmarksShim::Observer {
     71  public:
     72   TestObserver()
     73       : notified_of_load_(false) {
     74   }
     75 
     76   // Called when everything is loaded and attached
     77   virtual void PartnerShimLoaded(PartnerBookmarksShim*) OVERRIDE {
     78     notified_of_load_ = true;
     79   }
     80 
     81   bool IsNotifiedOfLoad() { return notified_of_load_; }
     82 
     83  private:
     84   bool notified_of_load_;
     85 
     86   DISALLOW_COPY_AND_ASSIGN(TestObserver);
     87 };
     88 
     89 TEST_F(PartnerBookmarksShimTest, GetNodeByID) {
     90   // Add a bookmark.
     91   GURL bookmark_url("http://www.google.com/");
     92   AddBookmark(
     93         NULL,
     94         bookmark_url,
     95         ASCIIToUTF16("bar"));
     96   const BookmarkNode* test_folder1 = AddFolder(NULL,
     97                                                ASCIIToUTF16("test_folder1"));
     98   const BookmarkNode* test_folder2 = AddFolder(test_folder1,
     99                                                ASCIIToUTF16("test_folder2"));
    100   const BookmarkNode* model_bookmark1 = AddBookmark(test_folder2,
    101                                                     GURL("http://www.test.com"),
    102                                                     ASCIIToUTF16("bar"));
    103   const BookmarkNode* model_bookmark2 = AddBookmark(test_folder2,
    104                                                     GURL("http://www.foo.com"),
    105                                                     ASCIIToUTF16("baz"));
    106 
    107   BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
    108   BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL());
    109   partner_folder1->set_type(BookmarkNode::FOLDER);
    110   root_partner_node->Add(partner_folder1, root_partner_node->child_count());
    111 
    112   BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL());
    113   partner_folder2->set_type(BookmarkNode::FOLDER);
    114   partner_folder1->Add(partner_folder2, partner_folder1->child_count());
    115 
    116   BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
    117                                                      GURL("http://www.a.com"));
    118   partner_bookmark1->set_type(BookmarkNode::URL);
    119   partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
    120 
    121   BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
    122                                                      GURL("http://www.b.com"));
    123   partner_bookmark2->set_type(BookmarkNode::URL);
    124   partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
    125 
    126   PartnerBookmarksShim* shim = PartnerBookmarksShim::GetInstance();
    127   ASSERT_FALSE(shim->IsLoaded());
    128   shim->AttachTo(model_, model_->mobile_node());
    129   shim->SetPartnerBookmarksRoot(root_partner_node);
    130   ASSERT_TRUE(shim->IsLoaded());
    131 
    132   ASSERT_EQ(shim->GetNodeByID(model_bookmark1->id(), false), model_bookmark1);
    133   ASSERT_EQ(shim->GetNodeByID(model_bookmark2->id(), false), model_bookmark2);
    134   ASSERT_EQ(shim->GetNodeByID(test_folder2->id(), false), test_folder2);
    135   ASSERT_EQ(shim->GetNodeByID(0, true), root_partner_node);
    136   ASSERT_EQ(shim->GetNodeByID(1, true), partner_folder1);
    137   ASSERT_EQ(shim->GetNodeByID(4, true), partner_bookmark2);
    138 }
    139 
    140 TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadNoPartnerBookmarks) {
    141   TestObserver* observer = new TestObserver();
    142   PartnerBookmarksShim* shim = PartnerBookmarksShim::GetInstance();
    143   shim->AddObserver(observer);
    144   ASSERT_FALSE(observer->IsNotifiedOfLoad());
    145   shim->SetPartnerBookmarksRoot(NULL);
    146   ASSERT_TRUE(observer->IsNotifiedOfLoad());
    147 }
    148 
    149 TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadWithPartnerBookmarks) {
    150   int64 id = 5;
    151   BookmarkNode* root_partner_node = new BookmarkPermanentNode(id++);
    152   BookmarkNode* partner_bookmark1 = new BookmarkNode(id++,
    153                                                      GURL("http://www.a.com"));
    154   partner_bookmark1->set_type(BookmarkNode::URL);
    155   root_partner_node->Add(partner_bookmark1, root_partner_node->child_count());
    156 
    157   TestObserver* observer = new TestObserver();
    158   PartnerBookmarksShim* shim = PartnerBookmarksShim::GetInstance();
    159   shim->AddObserver(observer);
    160   shim->AttachTo(model_, model_->bookmark_bar_node());
    161   ASSERT_FALSE(observer->IsNotifiedOfLoad());
    162   shim->SetPartnerBookmarksRoot(root_partner_node);
    163   ASSERT_TRUE(observer->IsNotifiedOfLoad());
    164 }
    165