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