Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 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 "components/bookmarks/browser/bookmark_expanded_state_tracker.h"
      6 
      7 #include "base/files/file_path.h"
      8 #include "base/message_loop/message_loop.h"
      9 #include "base/prefs/pref_service.h"
     10 #include "base/prefs/pref_service_factory.h"
     11 #include "base/prefs/testing_pref_store.h"
     12 #include "base/run_loop.h"
     13 #include "base/strings/utf_string_conversions.h"
     14 #include "components/bookmarks/browser/bookmark_model.h"
     15 #include "components/bookmarks/common/bookmark_pref_names.h"
     16 #include "components/bookmarks/test/bookmark_test_helpers.h"
     17 #include "components/bookmarks/test/test_bookmark_client.h"
     18 #include "components/pref_registry/pref_registry_syncable.h"
     19 #include "testing/gtest/include/gtest/gtest.h"
     20 
     21 namespace bookmarks {
     22 
     23 scoped_ptr<PrefService> PrefServiceForTesting() {
     24   scoped_refptr<user_prefs::PrefRegistrySyncable> registry(
     25       new user_prefs::PrefRegistrySyncable());
     26   registry->RegisterListPref(prefs::kBookmarkEditorExpandedNodes,
     27                              new base::ListValue,
     28                              user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
     29   registry->RegisterListPref(prefs::kManagedBookmarks,
     30                              user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
     31   base::PrefServiceFactory factory;
     32   factory.set_user_prefs(make_scoped_refptr(new TestingPrefStore()));
     33   return factory.Create(registry.get());
     34 }
     35 
     36 class BookmarkExpandedStateTrackerTest : public testing::Test {
     37  public:
     38   BookmarkExpandedStateTrackerTest();
     39   virtual ~BookmarkExpandedStateTrackerTest();
     40 
     41  protected:
     42   // testing::Test:
     43   virtual void SetUp() OVERRIDE;
     44   virtual void TearDown() OVERRIDE;
     45 
     46   base::MessageLoop message_loop_;
     47   test::TestBookmarkClient client_;
     48   scoped_ptr<PrefService> prefs_;
     49   scoped_ptr<BookmarkModel> model_;
     50 
     51   DISALLOW_COPY_AND_ASSIGN(BookmarkExpandedStateTrackerTest);
     52 };
     53 
     54 BookmarkExpandedStateTrackerTest::BookmarkExpandedStateTrackerTest() {}
     55 
     56 BookmarkExpandedStateTrackerTest::~BookmarkExpandedStateTrackerTest() {}
     57 
     58 void BookmarkExpandedStateTrackerTest::SetUp() {
     59   prefs_ = PrefServiceForTesting();
     60   model_.reset(new BookmarkModel(&client_, false));
     61   model_->Load(prefs_.get(),
     62                std::string(),
     63                base::FilePath(),
     64                base::MessageLoopProxy::current(),
     65                base::MessageLoopProxy::current());
     66   test::WaitForBookmarkModelToLoad(model_.get());
     67 }
     68 
     69 void BookmarkExpandedStateTrackerTest::TearDown() {
     70   model_.reset();
     71 }
     72 
     73 // Various assertions for SetExpandedNodes.
     74 TEST_F(BookmarkExpandedStateTrackerTest, SetExpandedNodes) {
     75   BookmarkExpandedStateTracker* tracker = model_->expanded_state_tracker();
     76 
     77   // Should start out initially empty.
     78   EXPECT_TRUE(tracker->GetExpandedNodes().empty());
     79 
     80   BookmarkExpandedStateTracker::Nodes nodes;
     81   nodes.insert(model_->bookmark_bar_node());
     82   tracker->SetExpandedNodes(nodes);
     83   EXPECT_EQ(nodes, tracker->GetExpandedNodes());
     84 
     85   // Add a folder and mark it expanded.
     86   const BookmarkNode* n1 = model_->AddFolder(
     87       model_->bookmark_bar_node(), 0, base::ASCIIToUTF16("x"));
     88   nodes.insert(n1);
     89   tracker->SetExpandedNodes(nodes);
     90   EXPECT_EQ(nodes, tracker->GetExpandedNodes());
     91 
     92   // Remove the folder, which should remove it from the list of expanded nodes.
     93   model_->Remove(model_->bookmark_bar_node(), 0);
     94   nodes.erase(n1);
     95   n1 = NULL;
     96   EXPECT_EQ(nodes, tracker->GetExpandedNodes());
     97 }
     98 
     99 TEST_F(BookmarkExpandedStateTrackerTest, RemoveAllUserBookmarks) {
    100   BookmarkExpandedStateTracker* tracker = model_->expanded_state_tracker();
    101 
    102   // Add a folder and mark it expanded.
    103   const BookmarkNode* n1 = model_->AddFolder(
    104       model_->bookmark_bar_node(), 0, base::ASCIIToUTF16("x"));
    105   BookmarkExpandedStateTracker::Nodes nodes;
    106   nodes.insert(n1);
    107   tracker->SetExpandedNodes(nodes);
    108   // Verify that the node is present.
    109   EXPECT_EQ(nodes, tracker->GetExpandedNodes());
    110   // Call remove all.
    111   model_->RemoveAllUserBookmarks();
    112   // Verify node is not present.
    113   EXPECT_TRUE(tracker->GetExpandedNodes().empty());
    114 }
    115 
    116 }  // namespace bookmarks
    117