- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / ntp / android / partner_bookmarks_shim_unittest.cc
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/browser/bookmarks/bookmark_test_helpers.h"
13 #include "chrome/test/base/testing_profile.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"
19
20 using testing::_;
21
22 class MockObserver : public PartnerBookmarksShim::Observer {
23  public:
24   MockObserver() {}
25   MOCK_METHOD1(PartnerShimChanged, void(PartnerBookmarksShim*));
26   MOCK_METHOD1(PartnerShimLoaded, void(PartnerBookmarksShim*));
27
28  private:
29   DISALLOW_COPY_AND_ASSIGN(MockObserver);
30 };
31
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) {
38   }
39
40   TestingProfile* profile() const { return profile_.get(); }
41   PartnerBookmarksShim* partner_bookmarks_shim() const {
42     return PartnerBookmarksShim::BuildForBrowserContext(profile_.get());
43   }
44
45   const BookmarkNode* AddBookmark(const BookmarkNode* parent,
46                                   const GURL& url,
47                                   const string16& title) {
48     if (!parent)
49       parent = model_->bookmark_bar_node();
50     return model_->AddURL(parent, parent->child_count(), title, url);
51   }
52
53   const BookmarkNode* AddFolder(const BookmarkNode* parent,
54                                 const string16& title) {
55     if (!parent)
56       parent = model_->bookmark_bar_node();
57     return model_->AddFolder(parent, parent->child_count(), title);
58   }
59
60  protected:
61   // testing::Test
62   virtual void SetUp() OVERRIDE {
63     profile_.reset(new TestingProfile());
64     profile_->CreateBookmarkModel(true);
65
66     model_ = BookmarkModelFactory::GetForProfile(profile_.get());
67     test::WaitForBookmarkModelToLoad(model_);
68   }
69
70   virtual void TearDown() OVERRIDE {
71     PartnerBookmarksShim::ClearInBrowserContextForTesting(profile_.get());
72     PartnerBookmarksShim::ClearPartnerModelForTesting();
73     profile_.reset(NULL);
74   }
75
76   scoped_ptr<TestingProfile> profile_;
77
78   base::MessageLoopForUI message_loop_;
79   content::TestBrowserThread ui_thread_;
80   content::TestBrowserThread file_thread_;
81
82   BookmarkModel* model_;
83   MockObserver observer_;
84
85   DISALLOW_COPY_AND_ASSIGN(PartnerBookmarksShimTest);
86 };
87
88 TEST_F(PartnerBookmarksShimTest, GetNodeByID) {
89   BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
90   BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL());
91   partner_folder1->set_type(BookmarkNode::FOLDER);
92   root_partner_node->Add(partner_folder1, root_partner_node->child_count());
93
94   BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL());
95   partner_folder2->set_type(BookmarkNode::FOLDER);
96   partner_folder1->Add(partner_folder2, partner_folder1->child_count());
97
98   BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
99                                                      GURL("http://www.a.com"));
100   partner_bookmark1->set_type(BookmarkNode::URL);
101   partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
102
103   BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
104                                                      GURL("http://www.b.com"));
105   partner_bookmark2->set_type(BookmarkNode::URL);
106   partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
107
108   PartnerBookmarksShim* shim = partner_bookmarks_shim();
109   ASSERT_FALSE(shim->IsLoaded());
110   shim->SetPartnerBookmarksRoot(root_partner_node);
111   ASSERT_TRUE(shim->IsLoaded());
112
113   ASSERT_TRUE(shim->IsPartnerBookmark(root_partner_node));
114   ASSERT_EQ(shim->GetNodeByID(0), root_partner_node);
115   ASSERT_EQ(shim->GetNodeByID(1), partner_folder1);
116   ASSERT_EQ(shim->GetNodeByID(4), partner_bookmark2);
117 }
118
119 TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadNoPartnerBookmarks) {
120   EXPECT_CALL(observer_, PartnerShimLoaded(_)).Times(0);
121   PartnerBookmarksShim* shim = partner_bookmarks_shim();
122   shim->AddObserver(&observer_);
123
124   EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
125   shim->SetPartnerBookmarksRoot(NULL);
126 }
127
128 TEST_F(PartnerBookmarksShimTest, ObserverNotifiedOfLoadWithPartnerBookmarks) {
129   EXPECT_CALL(observer_, PartnerShimLoaded(_)).Times(0);
130   int64 id = 5;
131   BookmarkNode* root_partner_node = new BookmarkPermanentNode(id++);
132   BookmarkNode* partner_bookmark1 = new BookmarkNode(id++,
133                                                      GURL("http://www.a.com"));
134   partner_bookmark1->set_type(BookmarkNode::URL);
135   root_partner_node->Add(partner_bookmark1, root_partner_node->child_count());
136
137   PartnerBookmarksShim* shim = partner_bookmarks_shim();
138   shim->AddObserver(&observer_);
139
140   EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
141   shim->SetPartnerBookmarksRoot(root_partner_node);
142 }
143
144 TEST_F(PartnerBookmarksShimTest, RemoveBookmarks) {
145   PartnerBookmarksShim* shim = partner_bookmarks_shim();
146   shim->AddObserver(&observer_);
147
148   EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
149   EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
150
151   BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
152   root_partner_node->SetTitle(ASCIIToUTF16("Partner bookmarks"));
153
154   BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://www.a.net"));
155   partner_folder1->set_type(BookmarkNode::FOLDER);
156   root_partner_node->Add(partner_folder1, root_partner_node->child_count());
157
158   BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL("http://www.b.net"));
159   partner_folder2->set_type(BookmarkNode::FOLDER);
160   root_partner_node->Add(partner_folder2, root_partner_node->child_count());
161
162   BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
163                                                      GURL("http://www.a.com"));
164   partner_bookmark1->set_type(BookmarkNode::URL);
165   partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
166
167   BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
168                                                      GURL("http://www.b.com"));
169   partner_bookmark2->set_type(BookmarkNode::URL);
170   partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
171
172   BookmarkNode* partner_folder3 = new BookmarkNode(5, GURL("http://www.c.net"));
173   partner_folder3->set_type(BookmarkNode::FOLDER);
174   partner_folder2->Add(partner_folder3, partner_folder2->child_count());
175
176   BookmarkNode* partner_bookmark3 = new BookmarkNode(6,
177                                                      GURL("http://www.c.com"));
178   partner_bookmark3->set_type(BookmarkNode::URL);
179   partner_folder3->Add(partner_bookmark3, partner_folder3->child_count());
180
181   ASSERT_FALSE(shim->IsLoaded());
182   EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
183   shim->SetPartnerBookmarksRoot(root_partner_node);
184   ASSERT_TRUE(shim->IsLoaded());
185
186   EXPECT_EQ(root_partner_node, shim->GetNodeByID(0));
187   EXPECT_EQ(partner_folder1, shim->GetNodeByID(1));
188   EXPECT_EQ(partner_folder2, shim->GetNodeByID(2));
189   EXPECT_EQ(partner_bookmark1, shim->GetNodeByID(3));
190   EXPECT_EQ(partner_bookmark2, shim->GetNodeByID(4));
191   EXPECT_EQ(partner_folder3, shim->GetNodeByID(5));
192   EXPECT_EQ(partner_bookmark3, shim->GetNodeByID(6));
193
194   EXPECT_TRUE(shim->IsReachable(root_partner_node));
195   EXPECT_TRUE(shim->IsReachable(partner_folder1));
196   EXPECT_TRUE(shim->IsReachable(partner_folder2));
197   EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
198   EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
199   EXPECT_TRUE(shim->IsReachable(partner_folder3));
200   EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
201
202   EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
203   shim->RemoveBookmark(partner_bookmark2);
204   EXPECT_TRUE(shim->IsReachable(root_partner_node));
205   EXPECT_TRUE(shim->IsReachable(partner_folder1));
206   EXPECT_TRUE(shim->IsReachable(partner_folder2));
207   EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
208   EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
209   EXPECT_TRUE(shim->IsReachable(partner_folder3));
210   EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
211
212   EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
213   shim->RemoveBookmark(partner_folder1);
214   EXPECT_TRUE(shim->IsReachable(root_partner_node));
215   EXPECT_FALSE(shim->IsReachable(partner_folder1));
216   EXPECT_TRUE(shim->IsReachable(partner_folder2));
217   EXPECT_FALSE(shim->IsReachable(partner_bookmark1));
218   EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
219   EXPECT_TRUE(shim->IsReachable(partner_folder3));
220   EXPECT_TRUE(shim->IsReachable(partner_bookmark3));
221
222   EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
223   shim->RemoveBookmark(root_partner_node);
224   EXPECT_FALSE(shim->IsReachable(root_partner_node));
225   EXPECT_FALSE(shim->IsReachable(partner_folder1));
226   EXPECT_FALSE(shim->IsReachable(partner_folder2));
227   EXPECT_FALSE(shim->IsReachable(partner_bookmark1));
228   EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
229   EXPECT_FALSE(shim->IsReachable(partner_folder3));
230   EXPECT_FALSE(shim->IsReachable(partner_bookmark3));
231 }
232
233 TEST_F(PartnerBookmarksShimTest, RenameBookmarks) {
234   PartnerBookmarksShim* shim = partner_bookmarks_shim();
235   shim->AddObserver(&observer_);
236
237   EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
238   EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
239
240   BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
241   root_partner_node->SetTitle(ASCIIToUTF16("Partner bookmarks"));
242
243   BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://www.a.net"));
244   partner_folder1->set_type(BookmarkNode::FOLDER);
245   partner_folder1->SetTitle(ASCIIToUTF16("a.net"));
246   root_partner_node->Add(partner_folder1, root_partner_node->child_count());
247
248   BookmarkNode* partner_folder2 = new BookmarkNode(2, GURL("http://www.b.net"));
249   partner_folder2->set_type(BookmarkNode::FOLDER);
250   partner_folder2->SetTitle(ASCIIToUTF16("b.net"));
251   root_partner_node->Add(partner_folder2, root_partner_node->child_count());
252
253   BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
254                                                      GURL("http://www.a.com"));
255   partner_bookmark1->set_type(BookmarkNode::URL);
256   partner_bookmark1->SetTitle(ASCIIToUTF16("a.com"));
257   partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
258
259   BookmarkNode* partner_bookmark2 = new BookmarkNode(4,
260                                                      GURL("http://www.b.com"));
261   partner_bookmark2->set_type(BookmarkNode::URL);
262   partner_bookmark2->SetTitle(ASCIIToUTF16("b.com"));
263   partner_folder2->Add(partner_bookmark2, partner_folder2->child_count());
264
265   ASSERT_FALSE(shim->IsLoaded());
266   EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
267   shim->SetPartnerBookmarksRoot(root_partner_node);
268   ASSERT_TRUE(shim->IsLoaded());
269
270   EXPECT_EQ(root_partner_node, shim->GetNodeByID(0));
271   EXPECT_EQ(partner_folder1, shim->GetNodeByID(1));
272   EXPECT_EQ(partner_folder2, shim->GetNodeByID(2));
273   EXPECT_EQ(partner_bookmark1, shim->GetNodeByID(3));
274   EXPECT_EQ(partner_bookmark2, shim->GetNodeByID(4));
275
276   EXPECT_TRUE(shim->IsReachable(root_partner_node));
277   EXPECT_TRUE(shim->IsReachable(partner_folder1));
278   EXPECT_TRUE(shim->IsReachable(partner_folder2));
279   EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
280   EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
281
282   EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
283   EXPECT_EQ(ASCIIToUTF16("b.com"), shim->GetTitle(partner_bookmark2));
284   shim->RenameBookmark(partner_bookmark2, ASCIIToUTF16("b2.com"));
285   EXPECT_EQ(ASCIIToUTF16("b2.com"), shim->GetTitle(partner_bookmark2));
286
287   EXPECT_TRUE(shim->IsReachable(root_partner_node));
288   EXPECT_TRUE(shim->IsReachable(partner_folder1));
289   EXPECT_TRUE(shim->IsReachable(partner_folder2));
290   EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
291   EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
292
293   EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
294   EXPECT_EQ(ASCIIToUTF16("a.net"), shim->GetTitle(partner_folder1));
295   shim->RenameBookmark(partner_folder1, ASCIIToUTF16("a2.net"));
296   EXPECT_EQ(ASCIIToUTF16("a2.net"), shim->GetTitle(partner_folder1));
297
298   EXPECT_TRUE(shim->IsReachable(root_partner_node));
299   EXPECT_TRUE(shim->IsReachable(partner_folder1));
300   EXPECT_TRUE(shim->IsReachable(partner_folder2));
301   EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
302   EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
303
304   EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(1);
305   EXPECT_EQ(ASCIIToUTF16("Partner bookmarks"),
306             shim->GetTitle(root_partner_node));
307   shim->RenameBookmark(root_partner_node, ASCIIToUTF16("Partner"));
308   EXPECT_EQ(ASCIIToUTF16("Partner"), shim->GetTitle(root_partner_node));
309
310   EXPECT_TRUE(shim->IsReachable(root_partner_node));
311   EXPECT_TRUE(shim->IsReachable(partner_folder1));
312   EXPECT_TRUE(shim->IsReachable(partner_folder2));
313   EXPECT_TRUE(shim->IsReachable(partner_bookmark1));
314   EXPECT_TRUE(shim->IsReachable(partner_bookmark2));
315 }
316
317 TEST_F(PartnerBookmarksShimTest, SaveLoadProfile) {
318   {
319     PartnerBookmarksShim* shim = partner_bookmarks_shim();
320     shim->AddObserver(&observer_);
321
322     EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
323     EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
324
325     BookmarkNode* root_partner_node = new BookmarkPermanentNode(0);
326     root_partner_node->SetTitle(ASCIIToUTF16("Partner bookmarks"));
327
328     BookmarkNode* partner_folder1 = new BookmarkNode(1, GURL("http://a.net"));
329     partner_folder1->set_type(BookmarkNode::FOLDER);
330     partner_folder1->SetTitle(ASCIIToUTF16("a.net"));
331     root_partner_node->Add(partner_folder1, root_partner_node->child_count());
332
333     BookmarkNode* partner_bookmark1 = new BookmarkNode(3,
334                                                        GURL("http://a.com"));
335     partner_bookmark1->set_type(BookmarkNode::URL);
336     partner_bookmark1->SetTitle(ASCIIToUTF16("a.com"));
337     partner_folder1->Add(partner_bookmark1, partner_folder1->child_count());
338
339     BookmarkNode* partner_bookmark2 = new BookmarkNode(5,
340                                                        GURL("http://b.com"));
341     partner_bookmark2->set_type(BookmarkNode::URL);
342     partner_bookmark2->SetTitle(ASCIIToUTF16("b.com"));
343     partner_folder1->Add(partner_bookmark2, partner_folder1->child_count());
344
345     ASSERT_FALSE(shim->IsLoaded());
346     EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(1);
347     shim->SetPartnerBookmarksRoot(root_partner_node);
348     ASSERT_TRUE(shim->IsLoaded());
349
350     EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(2);
351     shim->RenameBookmark(partner_bookmark1, ASCIIToUTF16("a2.com"));
352     shim->RemoveBookmark(partner_bookmark2);
353     EXPECT_EQ(ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
354     EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
355   }
356
357   PartnerBookmarksShim::ClearInBrowserContextForTesting(profile_.get());
358
359   {
360     PartnerBookmarksShim* shim = partner_bookmarks_shim();
361     shim->AddObserver(&observer_);
362
363     EXPECT_CALL(observer_, PartnerShimLoaded(shim)).Times(0);
364     EXPECT_CALL(observer_, PartnerShimChanged(shim)).Times(0);
365     ASSERT_TRUE(shim->IsLoaded());
366
367     const BookmarkNode* partner_bookmark1 = shim->GetNodeByID(3);
368     const BookmarkNode* partner_bookmark2 = shim->GetNodeByID(5);
369
370     EXPECT_EQ(ASCIIToUTF16("a2.com"), shim->GetTitle(partner_bookmark1));
371     EXPECT_FALSE(shim->IsReachable(partner_bookmark2));
372   }
373 }