Move Webstore URL concepts to //extensions and out
[chromium-blink-merge.git] / chrome / browser / android / bookmarks / partner_bookmarks_shim_unittest.cc
blob304bccdcd3bb6aba8057575fa9a2fa854dd52636
1 // Copyright 2013 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.
5 #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h"
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_factory.h"
11 #include "chrome/test/base/testing_profile.h"
12 #include "components/bookmarks/browser/bookmark_model.h"
13 #include "components/bookmarks/test/bookmark_test_helpers.h"
14 #include "content/public/browser/browser_thread.h"
15 #include "content/public/test/test_browser_thread.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "url/gurl.h"
20 using testing::_;
22 class MockObserver : public PartnerBookmarksShim::Observer {
23 public:
24 MockObserver() {}
25 MOCK_METHOD1(PartnerShimChanged, void(PartnerBookmarksShim*));
26 MOCK_METHOD1(PartnerShimLoaded, void(PartnerBookmarksShim*));
28 private:
29 DISALLOW_COPY_AND_ASSIGN(MockObserver);
32 class PartnerBookmarksShimTest : public testing::Test {
33 public:
34 PartnerBookmarksShimTest()
35 : ui_thread_(content::BrowserThread::UI, &message_loop_),
36 file_thread_(content::BrowserThread::FILE, &message_loop_),
37 model_(NULL) {
40 TestingProfile* profile() const { return profile_.get(); }
41 PartnerBookmarksShim* partner_bookmarks_shim() const {
42 return PartnerBookmarksShim::BuildForBrowserContext(profile_.get());
45 const BookmarkNode* AddBookmark(const BookmarkNode* parent,
46 const GURL& url,
47 const base::string16& title) {
48 if (!parent)
49 parent = model_->bookmark_bar_node();
50 return model_->AddURL(parent, parent->child_count(), title, url);
53 const BookmarkNode* AddFolder(const BookmarkNode* parent,
54 const base::string16& title) {
55 if (!parent)
56 parent = model_->bookmark_bar_node();
57 return model_->AddFolder(parent, parent->child_count(), title);
60 protected:
61 // testing::Test
62 virtual void SetUp() OVERRIDE {
63 profile_.reset(new TestingProfile());
64 profile_->CreateBookmarkModel(true);
66 model_ = BookmarkModelFactory::GetForProfile(profile_.get());
67 test::WaitForBookmarkModelToLoad(model_);
70 virtual void TearDown() OVERRIDE {
71 PartnerBookmarksShim::ClearInBrowserContextForTesting(profile_.get());
72 PartnerBookmarksShim::ClearPartnerModelForTesting();
73 PartnerBookmarksShim::EnablePartnerBookmarksEditing();
74 profile_.reset(NULL);
77 scoped_ptr<TestingProfile> profile_;
79 base::MessageLoopForUI message_loop_;
80 content::TestBrowserThread ui_thread_;
81 content::TestBrowserThread file_thread_;
83 BookmarkModel* model_;
84 MockObserver observer_;
86 DISALLOW_COPY_AND_ASSIGN(PartnerBookmarksShimTest);
89 TEST_F(PartnerBookmarksShimTest, GetNodeByID) {
90 BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
91 BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL());
92 partner_folder1->set_type(BookmarkNode::FOLDER);
93 root_partner_node->Add(partner_folder1, root_partner_node->child_count());
95 BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL());
96 partner_folder2->set_type(BookmarkNode::FOLDER);
97 partner_folder1->Add(partner_folder2, partner_folder1->child_count());
99 BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
100 GURL("http://www.a.com"));
101 partner_bookmark1->set_type(BookmarkNode::URL);
102 partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
104 BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
105 GURL("http://www.b.com"));
106 partner_bookmark2->set_type(BookmarkNode::URL);
107 partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
109 PartnerBookmarksShim* shim = partner_bookmarks_shim();
110 ASSERT_FALSE(shim->IsLoaded());
111 shim->SetPartnerBookmarksRoot(root_partner_node);
112 ASSERT_TRUE(shim->IsLoaded());
114 ASSERT_TRUE(shim->IsPartnerBookmark(root_partner_node));
115 ASSERT_EQ(shim->GetNodeByID(0), root_partner_node);
116 ASSERT_EQ(shim->GetNodeByID(1), partner_folder1);
117 ASSERT_EQ(shim->GetNodeByID(4), partner_bookmark2);
120 TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadNoPartnerBookmarks) {
121 EXPECT_CALL(observer_, PartnerShimLoaded(_)).Times(0);
122 PartnerBookmarksShim* shim = partner_bookmarks_shim();
123 shim->AddObserver(&observer_);
125 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
126 shim->SetPartnerBookmarksRoot(NULL);
129 TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadWithPartnerBookmarks) {
130 EXPECT_CALL(observer_, PartnerShimLoaded(_)).Times(0);
131 int64 id = 5;
132 BookmarkNode* root_partner_node = new BookmarkPermanentNode(id++);
133 BookmarkNode* partner_bookmark1 = new BookmarkNode(id++,
134 GURL("http://www.a.com"));
135 partner_bookmark1->set_type(BookmarkNode::URL);
136 root_partner_node->Add(partner_bookmark1, root_partner_node->child_count());
138 PartnerBookmarksShim* shim = partner_bookmarks_shim();
139 shim->AddObserver(&observer_);
141 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
142 shim->SetPartnerBookmarksRoot(root_partner_node);
145 TEST_F(PartnerBookmarksShimTest, RemoveBookmarks) {
146 PartnerBookmarksShim* shim = partner_bookmarks_shim();
147 shim->AddObserver(&observer_);
149 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
150 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
152 BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
153 root_partner_node->SetTitle(base::ASCIIToUTF16("Partner bookmarks"));
155 BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://www.a.net"));
156 partner_folder1->set_type(BookmarkNode::FOLDER);
157 root_partner_node->Add(partner_folder1, root_partner_node->child_count());
159 BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL("http://www.b.net"));
160 partner_folder2->set_type(BookmarkNode::FOLDER);
161 root_partner_node->Add(partner_folder2, root_partner_node->child_count());
163 BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
164 GURL("http://www.a.com"));
165 partner_bookmark1->set_type(BookmarkNode::URL);
166 partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
168 BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
169 GURL("http://www.b.com"));
170 partner_bookmark2->set_type(BookmarkNode::URL);
171 partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
173 BookmarkNode* partner_folder3 = new BookmarkNode(5, GURL("http://www.c.net"));
174 partner_folder3->set_type(BookmarkNode::FOLDER);
175 partner_folder2->Add(partner_folder3, partner_folder2->child_count());
177 BookmarkNode* partner_bookmark3 = new BookmarkNode(6,
178 GURL("http://www.c.com"));
179 partner_bookmark3->set_type(BookmarkNode::URL);
180 partner_folder3->Add(partner_bookmark3, partner_folder3->child_count());
182 ASSERT_FALSE(shim->IsLoaded());
183 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
184 shim->SetPartnerBookmarksRoot(root_partner_node);
185 ASSERT_TRUE(shim->IsLoaded());
187 EXPECT_EQ(root_partner_node, shim->GetNodeByID(0));
188 EXPECT_EQ(partner_folder1, shim->GetNodeByID(1));
189 EXPECT_EQ(partner_folder2, shim->GetNodeByID(2));
190 EXPECT_EQ(partner_bookmark1, shim->GetNodeByID(3));
191 EXPECT_EQ(partner_bookmark2, shim->GetNodeByID(4));
192 EXPECT_EQ(partner_folder3, shim->GetNodeByID(5));
193 EXPECT_EQ(partner_bookmark3, shim->GetNodeByID(6));
195 EXPECT_TRUE(shim->IsReachable(root_partner_node));
196 EXPECT_TRUE(shim->IsReachable(partner_folder1));
197 EXPECT_TRUE(shim->IsReachable(partner_folder2));
198 EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
199 EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
200 EXPECT_TRUE(shim->IsReachable(partner_folder3));
201 EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
203 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
204 shim->RemoveBookmark(partner_bookmark2);
205 EXPECT_TRUE(shim->IsReachable(root_partner_node));
206 EXPECT_TRUE(shim->IsReachable(partner_folder1));
207 EXPECT_TRUE(shim->IsReachable(partner_folder2));
208 EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
209 EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
210 EXPECT_TRUE(shim->IsReachable(partner_folder3));
211 EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
213 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
214 shim->RemoveBookmark(partner_folder1);
215 EXPECT_TRUE(shim->IsReachable(root_partner_node));
216 EXPECT_FALSE(shim->IsReachable(partner_folder1));
217 EXPECT_TRUE(shim->IsReachable(partner_folder2));
218 EXPECT_FALSE(shim->IsReachable(partner_bookmark1));
219 EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
220 EXPECT_TRUE(shim->IsReachable(partner_folder3));
221 EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
223 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
224 shim->RemoveBookmark(root_partner_node);
225 EXPECT_FALSE(shim->IsReachable(root_partner_node));
226 EXPECT_FALSE(shim->IsReachable(partner_folder1));
227 EXPECT_FALSE(shim->IsReachable(partner_folder2));
228 EXPECT_FALSE(shim->IsReachable(partner_bookmark1));
229 EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
230 EXPECT_FALSE(shim->IsReachable(partner_folder3));
231 EXPECT_FALSE(shim->IsReachable(partner_bookmark3));
234 TEST_F(PartnerBookmarksShimTest, RenameBookmarks) {
235 PartnerBookmarksShim* shim = partner_bookmarks_shim();
236 shim->AddObserver(&observer_);
238 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
239 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
241 BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
242 root_partner_node->SetTitle(base::ASCIIToUTF16("Partner bookmarks"));
244 BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://www.a.net"));
245 partner_folder1->set_type(BookmarkNode::FOLDER);
246 partner_folder1->SetTitle(base::ASCIIToUTF16("a.net"));
247 root_partner_node->Add(partner_folder1, root_partner_node->child_count());
249 BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL("http://www.b.net"));
250 partner_folder2->set_type(BookmarkNode::FOLDER);
251 partner_folder2->SetTitle(base::ASCIIToUTF16("b.net"));
252 root_partner_node->Add(partner_folder2, root_partner_node->child_count());
254 BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
255 GURL("http://www.a.com"));
256 partner_bookmark1->set_type(BookmarkNode::URL);
257 partner_bookmark1->SetTitle(base::ASCIIToUTF16("a.com"));
258 partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
260 BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
261 GURL("http://www.b.com"));
262 partner_bookmark2->set_type(BookmarkNode::URL);
263 partner_bookmark2->SetTitle(base::ASCIIToUTF16("b.com"));
264 partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
266 ASSERT_FALSE(shim->IsLoaded());
267 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
268 shim->SetPartnerBookmarksRoot(root_partner_node);
269 ASSERT_TRUE(shim->IsLoaded());
271 EXPECT_EQ(root_partner_node, shim->GetNodeByID(0));
272 EXPECT_EQ(partner_folder1, shim->GetNodeByID(1));
273 EXPECT_EQ(partner_folder2, shim->GetNodeByID(2));
274 EXPECT_EQ(partner_bookmark1, shim->GetNodeByID(3));
275 EXPECT_EQ(partner_bookmark2, shim->GetNodeByID(4));
277 EXPECT_TRUE(shim->IsReachable(root_partner_node));
278 EXPECT_TRUE(shim->IsReachable(partner_folder1));
279 EXPECT_TRUE(shim->IsReachable(partner_folder2));
280 EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
281 EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
283 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
284 EXPECT_EQ(base::ASCIIToUTF16("b.com"), shim->GetTitle(partner_bookmark2));
285 shim->RenameBookmark(partner_bookmark2, base::ASCIIToUTF16("b2.com"));
286 EXPECT_EQ(base::ASCIIToUTF16("b2.com"), shim->GetTitle(partner_bookmark2));
288 EXPECT_TRUE(shim->IsReachable(root_partner_node));
289 EXPECT_TRUE(shim->IsReachable(partner_folder1));
290 EXPECT_TRUE(shim->IsReachable(partner_folder2));
291 EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
292 EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
294 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
295 EXPECT_EQ(base::ASCIIToUTF16("a.net"), shim->GetTitle(partner_folder1));
296 shim->RenameBookmark(partner_folder1, base::ASCIIToUTF16("a2.net"));
297 EXPECT_EQ(base::ASCIIToUTF16("a2.net"), shim->GetTitle(partner_folder1));
299 EXPECT_TRUE(shim->IsReachable(root_partner_node));
300 EXPECT_TRUE(shim->IsReachable(partner_folder1));
301 EXPECT_TRUE(shim->IsReachable(partner_folder2));
302 EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
303 EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
305 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
306 EXPECT_EQ(base::ASCIIToUTF16("Partner bookmarks"),
307 shim->GetTitle(root_partner_node));
308 shim->RenameBookmark(root_partner_node, base::ASCIIToUTF16("Partner"));
309 EXPECT_EQ(base::ASCIIToUTF16("Partner"), shim->GetTitle(root_partner_node));
311 EXPECT_TRUE(shim->IsReachable(root_partner_node));
312 EXPECT_TRUE(shim->IsReachable(partner_folder1));
313 EXPECT_TRUE(shim->IsReachable(partner_folder2));
314 EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
315 EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
318 TEST_F(PartnerBookmarksShimTest, SaveLoadProfile) {
320 PartnerBookmarksShim* shim = partner_bookmarks_shim();
321 shim->AddObserver(&observer_);
323 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
324 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
326 BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
327 root_partner_node->SetTitle(base::ASCIIToUTF16("Partner bookmarks"));
329 BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://a.net"));
330 partner_folder1->set_type(BookmarkNode::FOLDER);
331 partner_folder1->SetTitle(base::ASCIIToUTF16("a.net"));
332 root_partner_node->Add(partner_folder1, root_partner_node->child_count());
334 BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
335 GURL("http://a.com"));
336 partner_bookmark1->set_type(BookmarkNode::URL);
337 partner_bookmark1->SetTitle(base::ASCIIToUTF16("a.com"));
338 partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
340 BookmarkNode* partner_bookmark2 = new BookmarkNode(5,
341 GURL("http://b.com"));
342 partner_bookmark2->set_type(BookmarkNode::URL);
343 partner_bookmark2->SetTitle(base::ASCIIToUTF16("b.com"));
344 partner_folder1->Add(partner_bookmark2, partner_folder1->child_count());
346 ASSERT_FALSE(shim->IsLoaded());
347 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
348 shim->SetPartnerBookmarksRoot(root_partner_node);
349 ASSERT_TRUE(shim->IsLoaded());
351 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(2);
352 shim->RenameBookmark(partner_bookmark1, base::ASCIIToUTF16("a2.com"));
353 shim->RemoveBookmark(partner_bookmark2);
354 EXPECT_EQ(base::ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
355 EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
358 PartnerBookmarksShim::ClearInBrowserContextForTesting(profile_.get());
361 PartnerBookmarksShim* shim = partner_bookmarks_shim();
362 shim->AddObserver(&observer_);
364 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
365 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
366 ASSERT_TRUE(shim->IsLoaded());
368 const BookmarkNode* partner_bookmark1 = shim->GetNodeByID(3);
369 const BookmarkNode* partner_bookmark2 = shim->GetNodeByID(5);
371 EXPECT_EQ(base::ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
372 EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
376 TEST_F(PartnerBookmarksShimTest, DisableEditing) {
377 PartnerBookmarksShim* shim = partner_bookmarks_shim();
378 shim->AddObserver(&observer_);
380 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
381 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
383 BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
384 root_partner_node->SetTitle(base::ASCIIToUTF16("Partner bookmarks"));
386 BookmarkNode* partner_bookmark1 = new BookmarkNode(3, GURL("http://a"));
387 partner_bookmark1->set_type(BookmarkNode::URL);
388 partner_bookmark1->SetTitle(base::ASCIIToUTF16("a"));
389 root_partner_node->Add(partner_bookmark1, root_partner_node->child_count());
391 BookmarkNode* partner_bookmark2 = new BookmarkNode(3, GURL("http://b"));
392 partner_bookmark2->set_type(BookmarkNode::URL);
393 partner_bookmark2->SetTitle(base::ASCIIToUTF16("b"));
394 root_partner_node->Add(partner_bookmark2, root_partner_node->child_count());
396 ASSERT_FALSE(shim->IsLoaded());
397 EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
398 shim->SetPartnerBookmarksRoot(root_partner_node);
399 ASSERT_TRUE(shim->IsLoaded());
401 // Check that edits work by default.
402 EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(2);
403 shim->RenameBookmark(partner_bookmark1, base::ASCIIToUTF16("a2.com"));
404 shim->RemoveBookmark(partner_bookmark2);
405 EXPECT_EQ(base::ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
406 EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
408 // Disable edits and check that edits are not applied anymore.
409 PartnerBookmarksShim::DisablePartnerBookmarksEditing();
410 EXPECT_EQ(base::ASCIIToUTF16("a"), shim->GetTitle(partner_bookmark1));
411 EXPECT_TRUE(shim->IsReachable(partner_bookmark2));