OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/bookmarks/browser/bookmark_utils.h" | 5 #include "components/bookmarks/browser/bookmark_utils.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 int grouped_changes_beginning_count_; | 67 int grouped_changes_beginning_count_; |
68 int grouped_changes_ended_count_; | 68 int grouped_changes_ended_count_; |
69 | 69 |
70 // Clipboard requires a message loop. | 70 // Clipboard requires a message loop. |
71 base::MessageLoopForUI loop_; | 71 base::MessageLoopForUI loop_; |
72 | 72 |
73 DISALLOW_COPY_AND_ASSIGN(BookmarkUtilsTest); | 73 DISALLOW_COPY_AND_ASSIGN(BookmarkUtilsTest); |
74 }; | 74 }; |
75 | 75 |
76 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesWordPhraseQuery) { | 76 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesWordPhraseQuery) { |
77 TestBookmarkClient client; | 77 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
78 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
79 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 78 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
80 0, | 79 0, |
81 ASCIIToUTF16("foo bar"), | 80 ASCIIToUTF16("foo bar"), |
82 GURL("http://www.google.com")); | 81 GURL("http://www.google.com")); |
83 const BookmarkNode* node2 = model->AddURL(model->other_node(), | 82 const BookmarkNode* node2 = model->AddURL(model->other_node(), |
84 0, | 83 0, |
85 ASCIIToUTF16("baz buz"), | 84 ASCIIToUTF16("baz buz"), |
86 GURL("http://www.cnn.com")); | 85 GURL("http://www.cnn.com")); |
87 const BookmarkNode* folder1 = | 86 const BookmarkNode* folder1 = |
88 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("foo")); | 87 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("foo")); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 | 124 |
126 // Bookmark Bar and Other Bookmarks are not returned in search results. | 125 // Bookmark Bar and Other Bookmarks are not returned in search results. |
127 *query.word_phrase_query = ASCIIToUTF16("Bookmark"); | 126 *query.word_phrase_query = ASCIIToUTF16("Bookmark"); |
128 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 127 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
129 ASSERT_EQ(0U, nodes.size()); | 128 ASSERT_EQ(0U, nodes.size()); |
130 nodes.clear(); | 129 nodes.clear(); |
131 } | 130 } |
132 | 131 |
133 // Check exact matching against a URL query. | 132 // Check exact matching against a URL query. |
134 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesUrl) { | 133 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesUrl) { |
135 TestBookmarkClient client; | 134 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
136 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
137 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 135 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
138 0, | 136 0, |
139 ASCIIToUTF16("Google"), | 137 ASCIIToUTF16("Google"), |
140 GURL("https://www.google.com/")); | 138 GURL("https://www.google.com/")); |
141 model->AddURL(model->other_node(), | 139 model->AddURL(model->other_node(), |
142 0, | 140 0, |
143 ASCIIToUTF16("Google Calendar"), | 141 ASCIIToUTF16("Google Calendar"), |
144 GURL("https://www.google.com/calendar")); | 142 GURL("https://www.google.com/calendar")); |
145 | 143 |
146 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); | 144 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
(...skipping 14 matching lines...) Expand all Loading... |
161 | 159 |
162 // Empty URL should not match folders. | 160 // Empty URL should not match folders. |
163 *query.url = ASCIIToUTF16(""); | 161 *query.url = ASCIIToUTF16(""); |
164 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 162 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
165 ASSERT_EQ(0U, nodes.size()); | 163 ASSERT_EQ(0U, nodes.size()); |
166 nodes.clear(); | 164 nodes.clear(); |
167 } | 165 } |
168 | 166 |
169 // Check exact matching against a title query. | 167 // Check exact matching against a title query. |
170 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesTitle) { | 168 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesTitle) { |
171 TestBookmarkClient client; | 169 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
172 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
173 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 170 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
174 0, | 171 0, |
175 ASCIIToUTF16("Google"), | 172 ASCIIToUTF16("Google"), |
176 GURL("https://www.google.com/")); | 173 GURL("https://www.google.com/")); |
177 model->AddURL(model->other_node(), | 174 model->AddURL(model->other_node(), |
178 0, | 175 0, |
179 ASCIIToUTF16("Google Calendar"), | 176 ASCIIToUTF16("Google Calendar"), |
180 GURL("https://www.google.com/calendar")); | 177 GURL("https://www.google.com/calendar")); |
181 | 178 |
182 const BookmarkNode* folder1 = | 179 const BookmarkNode* folder1 = |
(...skipping 16 matching lines...) Expand all Loading... |
199 // Title should match folders. | 196 // Title should match folders. |
200 *query.title = ASCIIToUTF16("Folder"); | 197 *query.title = ASCIIToUTF16("Folder"); |
201 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 198 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
202 ASSERT_EQ(1U, nodes.size()); | 199 ASSERT_EQ(1U, nodes.size()); |
203 EXPECT_TRUE(nodes[0] == folder1); | 200 EXPECT_TRUE(nodes[0] == folder1); |
204 nodes.clear(); | 201 nodes.clear(); |
205 } | 202 } |
206 | 203 |
207 // Check matching against a query with multiple predicates. | 204 // Check matching against a query with multiple predicates. |
208 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) { | 205 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) { |
209 TestBookmarkClient client; | 206 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
210 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
211 const BookmarkNode* node1 = model->AddURL(model->other_node(), | 207 const BookmarkNode* node1 = model->AddURL(model->other_node(), |
212 0, | 208 0, |
213 ASCIIToUTF16("Google"), | 209 ASCIIToUTF16("Google"), |
214 GURL("https://www.google.com/")); | 210 GURL("https://www.google.com/")); |
215 model->AddURL(model->other_node(), | 211 model->AddURL(model->other_node(), |
216 0, | 212 0, |
217 ASCIIToUTF16("Google Calendar"), | 213 ASCIIToUTF16("Google Calendar"), |
218 GURL("https://www.google.com/calendar")); | 214 GURL("https://www.google.com/calendar")); |
219 | 215 |
220 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); | 216 model->AddFolder(model->other_node(), 0, ASCIIToUTF16("Folder")); |
(...skipping 30 matching lines...) Expand all Loading... |
251 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); | 247 GetBookmarksMatchingProperties(model.get(), query, 100, string(), &nodes); |
252 ASSERT_EQ(0U, nodes.size()); | 248 ASSERT_EQ(0U, nodes.size()); |
253 nodes.clear(); | 249 nodes.clear(); |
254 fields[i]->reset(original_value.release()); | 250 fields[i]->reset(original_value.release()); |
255 } | 251 } |
256 } | 252 } |
257 | 253 |
258 // Copy and paste is not yet supported on iOS. http://crbug.com/228147 | 254 // Copy and paste is not yet supported on iOS. http://crbug.com/228147 |
259 #if !defined(OS_IOS) | 255 #if !defined(OS_IOS) |
260 TEST_F(BookmarkUtilsTest, PasteBookmarkFromURL) { | 256 TEST_F(BookmarkUtilsTest, PasteBookmarkFromURL) { |
261 TestBookmarkClient client; | 257 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
262 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
263 const base::string16 url_text = ASCIIToUTF16("http://www.google.com/"); | 258 const base::string16 url_text = ASCIIToUTF16("http://www.google.com/"); |
264 const BookmarkNode* new_folder = model->AddFolder( | 259 const BookmarkNode* new_folder = model->AddFolder( |
265 model->bookmark_bar_node(), 0, ASCIIToUTF16("New_Folder")); | 260 model->bookmark_bar_node(), 0, ASCIIToUTF16("New_Folder")); |
266 | 261 |
267 // Write blank text to clipboard. | 262 // Write blank text to clipboard. |
268 { | 263 { |
269 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE); | 264 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE); |
270 clipboard_writer.WriteText(base::string16()); | 265 clipboard_writer.WriteText(base::string16()); |
271 } | 266 } |
272 // Now we shouldn't be able to paste from the clipboard. | 267 // Now we shouldn't be able to paste from the clipboard. |
273 EXPECT_FALSE(CanPasteFromClipboard(model.get(), new_folder)); | 268 EXPECT_FALSE(CanPasteFromClipboard(model.get(), new_folder)); |
274 | 269 |
275 // Write some valid url to the clipboard. | 270 // Write some valid url to the clipboard. |
276 { | 271 { |
277 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE); | 272 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE); |
278 clipboard_writer.WriteText(url_text); | 273 clipboard_writer.WriteText(url_text); |
279 } | 274 } |
280 // Now we should be able to paste from the clipboard. | 275 // Now we should be able to paste from the clipboard. |
281 EXPECT_TRUE(CanPasteFromClipboard(model.get(), new_folder)); | 276 EXPECT_TRUE(CanPasteFromClipboard(model.get(), new_folder)); |
282 | 277 |
283 PasteFromClipboard(model.get(), new_folder, 0); | 278 PasteFromClipboard(model.get(), new_folder, 0); |
284 ASSERT_EQ(1, new_folder->child_count()); | 279 ASSERT_EQ(1, new_folder->child_count()); |
285 | 280 |
286 // Url for added node should be same as url_text. | 281 // Url for added node should be same as url_text. |
287 EXPECT_EQ(url_text, ASCIIToUTF16(new_folder->GetChild(0)->url().spec())); | 282 EXPECT_EQ(url_text, ASCIIToUTF16(new_folder->GetChild(0)->url().spec())); |
288 } | 283 } |
289 | 284 |
290 TEST_F(BookmarkUtilsTest, CopyPaste) { | 285 TEST_F(BookmarkUtilsTest, CopyPaste) { |
291 TestBookmarkClient client; | 286 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
292 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
293 const BookmarkNode* node = model->AddURL(model->other_node(), | 287 const BookmarkNode* node = model->AddURL(model->other_node(), |
294 0, | 288 0, |
295 ASCIIToUTF16("foo bar"), | 289 ASCIIToUTF16("foo bar"), |
296 GURL("http://www.google.com")); | 290 GURL("http://www.google.com")); |
297 | 291 |
298 // Copy a node to the clipboard. | 292 // Copy a node to the clipboard. |
299 std::vector<const BookmarkNode*> nodes; | 293 std::vector<const BookmarkNode*> nodes; |
300 nodes.push_back(node); | 294 nodes.push_back(node); |
301 CopyToClipboard(model.get(), nodes, false); | 295 CopyToClipboard(model.get(), nodes, false); |
302 | 296 |
303 // And make sure we can paste a bookmark from the clipboard. | 297 // And make sure we can paste a bookmark from the clipboard. |
304 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); | 298 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); |
305 | 299 |
306 // Write some text to the clipboard. | 300 // Write some text to the clipboard. |
307 { | 301 { |
308 ui::ScopedClipboardWriter clipboard_writer( | 302 ui::ScopedClipboardWriter clipboard_writer( |
309 ui::CLIPBOARD_TYPE_COPY_PASTE); | 303 ui::CLIPBOARD_TYPE_COPY_PASTE); |
310 clipboard_writer.WriteText(ASCIIToUTF16("foo")); | 304 clipboard_writer.WriteText(ASCIIToUTF16("foo")); |
311 } | 305 } |
312 | 306 |
313 // Now we shouldn't be able to paste from the clipboard. | 307 // Now we shouldn't be able to paste from the clipboard. |
314 EXPECT_FALSE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); | 308 EXPECT_FALSE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); |
315 } | 309 } |
316 | 310 |
317 // Test for updating title such that url and title pair are unique among the | 311 // Test for updating title such that url and title pair are unique among the |
318 // children of parent. | 312 // children of parent. |
319 TEST_F(BookmarkUtilsTest, MakeTitleUnique) { | 313 TEST_F(BookmarkUtilsTest, MakeTitleUnique) { |
320 TestBookmarkClient client; | 314 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
321 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
322 const base::string16 url_text = ASCIIToUTF16("http://www.google.com/"); | 315 const base::string16 url_text = ASCIIToUTF16("http://www.google.com/"); |
323 const base::string16 title_text = ASCIIToUTF16("foobar"); | 316 const base::string16 title_text = ASCIIToUTF16("foobar"); |
324 const BookmarkNode* bookmark_bar_node = model->bookmark_bar_node(); | 317 const BookmarkNode* bookmark_bar_node = model->bookmark_bar_node(); |
325 | 318 |
326 const BookmarkNode* node = | 319 const BookmarkNode* node = |
327 model->AddURL(bookmark_bar_node, 0, title_text, GURL(url_text)); | 320 model->AddURL(bookmark_bar_node, 0, title_text, GURL(url_text)); |
328 | 321 |
329 EXPECT_EQ(url_text, | 322 EXPECT_EQ(url_text, |
330 ASCIIToUTF16(bookmark_bar_node->GetChild(0)->url().spec())); | 323 ASCIIToUTF16(bookmark_bar_node->GetChild(0)->url().spec())); |
331 EXPECT_EQ(title_text, bookmark_bar_node->GetChild(0)->GetTitle()); | 324 EXPECT_EQ(title_text, bookmark_bar_node->GetChild(0)->GetTitle()); |
(...skipping 12 matching lines...) Expand all Loading... |
344 // Url for added node should be same as url_text. | 337 // Url for added node should be same as url_text. |
345 EXPECT_EQ(url_text, | 338 EXPECT_EQ(url_text, |
346 ASCIIToUTF16(bookmark_bar_node->GetChild(1)->url().spec())); | 339 ASCIIToUTF16(bookmark_bar_node->GetChild(1)->url().spec())); |
347 // Title for added node should be numeric subscript suffix with copied node | 340 // Title for added node should be numeric subscript suffix with copied node |
348 // title. | 341 // title. |
349 EXPECT_EQ(ASCIIToUTF16("foobar (1)"), | 342 EXPECT_EQ(ASCIIToUTF16("foobar (1)"), |
350 bookmark_bar_node->GetChild(1)->GetTitle()); | 343 bookmark_bar_node->GetChild(1)->GetTitle()); |
351 } | 344 } |
352 | 345 |
353 TEST_F(BookmarkUtilsTest, CopyPasteMetaInfo) { | 346 TEST_F(BookmarkUtilsTest, CopyPasteMetaInfo) { |
354 TestBookmarkClient client; | 347 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
355 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
356 const BookmarkNode* node = model->AddURL(model->other_node(), | 348 const BookmarkNode* node = model->AddURL(model->other_node(), |
357 0, | 349 0, |
358 ASCIIToUTF16("foo bar"), | 350 ASCIIToUTF16("foo bar"), |
359 GURL("http://www.google.com")); | 351 GURL("http://www.google.com")); |
360 model->SetNodeMetaInfo(node, "somekey", "somevalue"); | 352 model->SetNodeMetaInfo(node, "somekey", "somevalue"); |
361 model->SetNodeMetaInfo(node, "someotherkey", "someothervalue"); | 353 model->SetNodeMetaInfo(node, "someotherkey", "someothervalue"); |
362 | 354 |
363 // Copy a node to the clipboard. | 355 // Copy a node to the clipboard. |
364 std::vector<const BookmarkNode*> nodes; | 356 std::vector<const BookmarkNode*> nodes; |
365 nodes.push_back(node); | 357 nodes.push_back(node); |
(...skipping 21 matching lines...) Expand all Loading... |
387 EXPECT_EQ("someothervalue", value); | 379 EXPECT_EQ("someothervalue", value); |
388 } | 380 } |
389 | 381 |
390 #if defined(OS_LINUX) || defined(OS_MACOSX) | 382 #if defined(OS_LINUX) || defined(OS_MACOSX) |
391 // http://crbug.com/396472 | 383 // http://crbug.com/396472 |
392 #define MAYBE_CutToClipboard DISABLED_CutToClipboard | 384 #define MAYBE_CutToClipboard DISABLED_CutToClipboard |
393 #else | 385 #else |
394 #define MAYBE_CutToClipboard CutToClipboard | 386 #define MAYBE_CutToClipboard CutToClipboard |
395 #endif | 387 #endif |
396 TEST_F(BookmarkUtilsTest, MAYBE_CutToClipboard) { | 388 TEST_F(BookmarkUtilsTest, MAYBE_CutToClipboard) { |
397 TestBookmarkClient client; | 389 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
398 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
399 model->AddObserver(this); | 390 model->AddObserver(this); |
400 | 391 |
401 base::string16 title(ASCIIToUTF16("foo")); | 392 base::string16 title(ASCIIToUTF16("foo")); |
402 GURL url("http://foo.com"); | 393 GURL url("http://foo.com"); |
403 const BookmarkNode* n1 = model->AddURL(model->other_node(), 0, title, url); | 394 const BookmarkNode* n1 = model->AddURL(model->other_node(), 0, title, url); |
404 const BookmarkNode* n2 = model->AddURL(model->other_node(), 1, title, url); | 395 const BookmarkNode* n2 = model->AddURL(model->other_node(), 1, title, url); |
405 | 396 |
406 // Cut the nodes to the clipboard. | 397 // Cut the nodes to the clipboard. |
407 std::vector<const BookmarkNode*> nodes; | 398 std::vector<const BookmarkNode*> nodes; |
408 nodes.push_back(n1); | 399 nodes.push_back(n1); |
409 nodes.push_back(n2); | 400 nodes.push_back(n2); |
410 CopyToClipboard(model.get(), nodes, true); | 401 CopyToClipboard(model.get(), nodes, true); |
411 | 402 |
412 // Make sure the nodes were removed. | 403 // Make sure the nodes were removed. |
413 EXPECT_EQ(0, model->other_node()->child_count()); | 404 EXPECT_EQ(0, model->other_node()->child_count()); |
414 | 405 |
415 // Make sure observers were notified the set of changes should be grouped. | 406 // Make sure observers were notified the set of changes should be grouped. |
416 ExpectGroupedChangeCount(1, 1); | 407 ExpectGroupedChangeCount(1, 1); |
417 | 408 |
418 // And make sure we can paste from the clipboard. | 409 // And make sure we can paste from the clipboard. |
419 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->other_node())); | 410 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->other_node())); |
420 } | 411 } |
421 | 412 |
422 TEST_F(BookmarkUtilsTest, PasteNonEditableNodes) { | 413 TEST_F(BookmarkUtilsTest, PasteNonEditableNodes) { |
423 TestBookmarkClient client; | |
424 // Load a model with an extra node that is not editable. | 414 // Load a model with an extra node that is not editable. |
425 BookmarkPermanentNode* extra_node = new BookmarkPermanentNode(100); | 415 BookmarkPermanentNode* extra_node = new BookmarkPermanentNode(100); |
426 BookmarkPermanentNodeList extra_nodes; | 416 BookmarkPermanentNodeList extra_nodes; |
427 extra_nodes.push_back(extra_node); | 417 extra_nodes.push_back(extra_node); |
428 client.SetExtraNodesToLoad(extra_nodes.Pass()); | 418 scoped_ptr<BookmarkModel> model( |
429 | 419 TestBookmarkClient::CreateModel(extra_nodes.Pass(), nullptr, false)); |
430 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
431 const BookmarkNode* node = model->AddURL(model->other_node(), | 420 const BookmarkNode* node = model->AddURL(model->other_node(), |
432 0, | 421 0, |
433 ASCIIToUTF16("foo bar"), | 422 ASCIIToUTF16("foo bar"), |
434 GURL("http://www.google.com")); | 423 GURL("http://www.google.com")); |
435 | 424 |
436 // Copy a node to the clipboard. | 425 // Copy a node to the clipboard. |
437 std::vector<const BookmarkNode*> nodes; | 426 std::vector<const BookmarkNode*> nodes; |
438 nodes.push_back(node); | 427 nodes.push_back(node); |
439 CopyToClipboard(model.get(), nodes, false); | 428 CopyToClipboard(model.get(), nodes, false); |
440 | 429 |
441 // And make sure we can paste a bookmark from the clipboard. | 430 // And make sure we can paste a bookmark from the clipboard. |
442 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); | 431 EXPECT_TRUE(CanPasteFromClipboard(model.get(), model->bookmark_bar_node())); |
443 | 432 |
444 // But it can't be pasted into a non-editable folder. | 433 // But it can't be pasted into a non-editable folder. |
445 EXPECT_FALSE(model->CanBeEditedByUser(extra_node)); | 434 EXPECT_FALSE(model->CanBeEditedByUser(extra_node)); |
446 EXPECT_FALSE(CanPasteFromClipboard(model.get(), extra_node)); | 435 EXPECT_FALSE(CanPasteFromClipboard(model.get(), extra_node)); |
447 } | 436 } |
448 #endif // !defined(OS_IOS) | 437 #endif // !defined(OS_IOS) |
449 | 438 |
450 TEST_F(BookmarkUtilsTest, GetParentForNewNodes) { | 439 TEST_F(BookmarkUtilsTest, GetParentForNewNodes) { |
451 TestBookmarkClient client; | 440 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
452 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
453 // This tests the case where selection contains one item and that item is a | 441 // This tests the case where selection contains one item and that item is a |
454 // folder. | 442 // folder. |
455 std::vector<const BookmarkNode*> nodes; | 443 std::vector<const BookmarkNode*> nodes; |
456 nodes.push_back(model->bookmark_bar_node()); | 444 nodes.push_back(model->bookmark_bar_node()); |
457 int index = -1; | 445 int index = -1; |
458 const BookmarkNode* real_parent = | 446 const BookmarkNode* real_parent = |
459 GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); | 447 GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); |
460 EXPECT_EQ(real_parent, model->bookmark_bar_node()); | 448 EXPECT_EQ(real_parent, model->bookmark_bar_node()); |
461 EXPECT_EQ(0, index); | 449 EXPECT_EQ(0, index); |
462 | 450 |
(...skipping 20 matching lines...) Expand all Loading... |
483 | 471 |
484 // This tests the case where selection doesn't contain any items. | 472 // This tests the case where selection doesn't contain any items. |
485 nodes.clear(); | 473 nodes.clear(); |
486 real_parent = GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); | 474 real_parent = GetParentForNewNodes(model->bookmark_bar_node(), nodes, &index); |
487 EXPECT_EQ(real_parent, model->bookmark_bar_node()); | 475 EXPECT_EQ(real_parent, model->bookmark_bar_node()); |
488 EXPECT_EQ(2, index); | 476 EXPECT_EQ(2, index); |
489 } | 477 } |
490 | 478 |
491 // Verifies that meta info is copied when nodes are cloned. | 479 // Verifies that meta info is copied when nodes are cloned. |
492 TEST_F(BookmarkUtilsTest, CloneMetaInfo) { | 480 TEST_F(BookmarkUtilsTest, CloneMetaInfo) { |
493 TestBookmarkClient client; | 481 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
494 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
495 // Add a node containing meta info. | 482 // Add a node containing meta info. |
496 const BookmarkNode* node = model->AddURL(model->other_node(), | 483 const BookmarkNode* node = model->AddURL(model->other_node(), |
497 0, | 484 0, |
498 ASCIIToUTF16("foo bar"), | 485 ASCIIToUTF16("foo bar"), |
499 GURL("http://www.google.com")); | 486 GURL("http://www.google.com")); |
500 model->SetNodeMetaInfo(node, "somekey", "somevalue"); | 487 model->SetNodeMetaInfo(node, "somekey", "somevalue"); |
501 model->SetNodeMetaInfo(node, "someotherkey", "someothervalue"); | 488 model->SetNodeMetaInfo(node, "someotherkey", "someothervalue"); |
502 | 489 |
503 // Clone node to a different folder. | 490 // Clone node to a different folder. |
504 const BookmarkNode* folder = | 491 const BookmarkNode* folder = |
(...skipping 12 matching lines...) Expand all Loading... |
517 std::string value; | 504 std::string value; |
518 EXPECT_TRUE(clone->GetMetaInfo("somekey", &value)); | 505 EXPECT_TRUE(clone->GetMetaInfo("somekey", &value)); |
519 EXPECT_EQ("somevalue", value); | 506 EXPECT_EQ("somevalue", value); |
520 EXPECT_TRUE(clone->GetMetaInfo("someotherkey", &value)); | 507 EXPECT_TRUE(clone->GetMetaInfo("someotherkey", &value)); |
521 EXPECT_EQ("someothervalue", value); | 508 EXPECT_EQ("someothervalue", value); |
522 } | 509 } |
523 | 510 |
524 // Verifies that meta info fields in the non cloned set are not copied when | 511 // Verifies that meta info fields in the non cloned set are not copied when |
525 // cloning a bookmark. | 512 // cloning a bookmark. |
526 TEST_F(BookmarkUtilsTest, CloneBookmarkResetsNonClonedKey) { | 513 TEST_F(BookmarkUtilsTest, CloneBookmarkResetsNonClonedKey) { |
527 TestBookmarkClient client; | 514 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
528 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
529 model->AddNonClonedKey("foo"); | 515 model->AddNonClonedKey("foo"); |
530 const BookmarkNode* parent = model->other_node(); | 516 const BookmarkNode* parent = model->other_node(); |
531 const BookmarkNode* node = model->AddURL( | 517 const BookmarkNode* node = model->AddURL( |
532 parent, 0, ASCIIToUTF16("title"), GURL("http://www.google.com")); | 518 parent, 0, ASCIIToUTF16("title"), GURL("http://www.google.com")); |
533 model->SetNodeMetaInfo(node, "foo", "ignored value"); | 519 model->SetNodeMetaInfo(node, "foo", "ignored value"); |
534 model->SetNodeMetaInfo(node, "bar", "kept value"); | 520 model->SetNodeMetaInfo(node, "bar", "kept value"); |
535 std::vector<BookmarkNodeData::Element> elements; | 521 std::vector<BookmarkNodeData::Element> elements; |
536 BookmarkNodeData::Element node_data(node); | 522 BookmarkNodeData::Element node_data(node); |
537 elements.push_back(node_data); | 523 elements.push_back(node_data); |
538 | 524 |
539 // Cloning a bookmark should clear the non cloned key. | 525 // Cloning a bookmark should clear the non cloned key. |
540 CloneBookmarkNode(model.get(), elements, parent, 0, true); | 526 CloneBookmarkNode(model.get(), elements, parent, 0, true); |
541 ASSERT_EQ(2, parent->child_count()); | 527 ASSERT_EQ(2, parent->child_count()); |
542 std::string value; | 528 std::string value; |
543 EXPECT_FALSE(parent->GetChild(0)->GetMetaInfo("foo", &value)); | 529 EXPECT_FALSE(parent->GetChild(0)->GetMetaInfo("foo", &value)); |
544 | 530 |
545 // Other keys should still be cloned. | 531 // Other keys should still be cloned. |
546 EXPECT_TRUE(parent->GetChild(0)->GetMetaInfo("bar", &value)); | 532 EXPECT_TRUE(parent->GetChild(0)->GetMetaInfo("bar", &value)); |
547 EXPECT_EQ("kept value", value); | 533 EXPECT_EQ("kept value", value); |
548 } | 534 } |
549 | 535 |
550 // Verifies that meta info fields in the non cloned set are not copied when | 536 // Verifies that meta info fields in the non cloned set are not copied when |
551 // cloning a folder. | 537 // cloning a folder. |
552 TEST_F(BookmarkUtilsTest, CloneFolderResetsNonClonedKey) { | 538 TEST_F(BookmarkUtilsTest, CloneFolderResetsNonClonedKey) { |
553 TestBookmarkClient client; | 539 scoped_ptr<BookmarkModel> model(TestBookmarkClient::CreateModel()); |
554 scoped_ptr<BookmarkModel> model(client.CreateModel()); | |
555 model->AddNonClonedKey("foo"); | 540 model->AddNonClonedKey("foo"); |
556 const BookmarkNode* parent = model->other_node(); | 541 const BookmarkNode* parent = model->other_node(); |
557 const BookmarkNode* node = model->AddFolder(parent, 0, ASCIIToUTF16("title")); | 542 const BookmarkNode* node = model->AddFolder(parent, 0, ASCIIToUTF16("title")); |
558 model->SetNodeMetaInfo(node, "foo", "ignored value"); | 543 model->SetNodeMetaInfo(node, "foo", "ignored value"); |
559 model->SetNodeMetaInfo(node, "bar", "kept value"); | 544 model->SetNodeMetaInfo(node, "bar", "kept value"); |
560 std::vector<BookmarkNodeData::Element> elements; | 545 std::vector<BookmarkNodeData::Element> elements; |
561 BookmarkNodeData::Element node_data(node); | 546 BookmarkNodeData::Element node_data(node); |
562 elements.push_back(node_data); | 547 elements.push_back(node_data); |
563 | 548 |
564 // Cloning a folder should clear the non cloned key. | 549 // Cloning a folder should clear the non cloned key. |
565 CloneBookmarkNode(model.get(), elements, parent, 0, true); | 550 CloneBookmarkNode(model.get(), elements, parent, 0, true); |
566 ASSERT_EQ(2, parent->child_count()); | 551 ASSERT_EQ(2, parent->child_count()); |
567 std::string value; | 552 std::string value; |
568 EXPECT_FALSE(parent->GetChild(0)->GetMetaInfo("foo", &value)); | 553 EXPECT_FALSE(parent->GetChild(0)->GetMetaInfo("foo", &value)); |
569 | 554 |
570 // Other keys should still be cloned. | 555 // Other keys should still be cloned. |
571 EXPECT_TRUE(parent->GetChild(0)->GetMetaInfo("bar", &value)); | 556 EXPECT_TRUE(parent->GetChild(0)->GetMetaInfo("bar", &value)); |
572 EXPECT_EQ("kept value", value); | 557 EXPECT_EQ("kept value", value); |
573 } | 558 } |
574 | 559 |
575 TEST_F(BookmarkUtilsTest, RemoveAllBookmarks) { | 560 TEST_F(BookmarkUtilsTest, RemoveAllBookmarks) { |
576 TestBookmarkClient client; | |
577 // Load a model with an extra node that is not editable. | 561 // Load a model with an extra node that is not editable. |
578 BookmarkPermanentNode* extra_node = new BookmarkPermanentNode(100); | 562 BookmarkPermanentNode* extra_node = new BookmarkPermanentNode(100); |
579 BookmarkPermanentNodeList extra_nodes; | 563 BookmarkPermanentNodeList extra_nodes; |
580 extra_nodes.push_back(extra_node); | 564 extra_nodes.push_back(extra_node); |
581 client.SetExtraNodesToLoad(extra_nodes.Pass()); | |
582 | 565 |
583 scoped_ptr<BookmarkModel> model(client.CreateModel()); | 566 scoped_ptr<BookmarkModel> model( |
| 567 TestBookmarkClient::CreateModel(extra_nodes.Pass(), nullptr, false)); |
584 EXPECT_TRUE(model->bookmark_bar_node()->empty()); | 568 EXPECT_TRUE(model->bookmark_bar_node()->empty()); |
585 EXPECT_TRUE(model->other_node()->empty()); | 569 EXPECT_TRUE(model->other_node()->empty()); |
586 EXPECT_TRUE(model->mobile_node()->empty()); | 570 EXPECT_TRUE(model->mobile_node()->empty()); |
587 EXPECT_TRUE(extra_node->empty()); | 571 EXPECT_TRUE(extra_node->empty()); |
588 | 572 |
589 const base::string16 title = base::ASCIIToUTF16("Title"); | 573 const base::string16 title = base::ASCIIToUTF16("Title"); |
590 const GURL url("http://google.com"); | 574 const GURL url("http://google.com"); |
591 model->AddURL(model->bookmark_bar_node(), 0, title, url); | 575 model->AddURL(model->bookmark_bar_node(), 0, title, url); |
592 model->AddURL(model->other_node(), 0, title, url); | 576 model->AddURL(model->other_node(), 0, title, url); |
593 model->AddURL(model->mobile_node(), 0, title, url); | 577 model->AddURL(model->mobile_node(), 0, title, url); |
594 model->AddURL(extra_node, 0, title, url); | 578 model->AddURL(extra_node, 0, title, url); |
595 | 579 |
596 std::vector<const BookmarkNode*> nodes; | 580 std::vector<const BookmarkNode*> nodes; |
597 model->GetNodesByURL(url, &nodes); | 581 model->GetNodesByURL(url, &nodes); |
598 ASSERT_EQ(4u, nodes.size()); | 582 ASSERT_EQ(4u, nodes.size()); |
599 | 583 |
600 RemoveAllBookmarks(model.get(), url); | 584 RemoveAllBookmarks(model.get(), url); |
601 | 585 |
602 nodes.clear(); | 586 nodes.clear(); |
603 model->GetNodesByURL(url, &nodes); | 587 model->GetNodesByURL(url, &nodes); |
604 ASSERT_EQ(1u, nodes.size()); | 588 ASSERT_EQ(1u, nodes.size()); |
605 EXPECT_TRUE(model->bookmark_bar_node()->empty()); | 589 EXPECT_TRUE(model->bookmark_bar_node()->empty()); |
606 EXPECT_TRUE(model->other_node()->empty()); | 590 EXPECT_TRUE(model->other_node()->empty()); |
607 EXPECT_TRUE(model->mobile_node()->empty()); | 591 EXPECT_TRUE(model->mobile_node()->empty()); |
608 EXPECT_EQ(1, extra_node->child_count()); | 592 EXPECT_EQ(1, extra_node->child_count()); |
609 } | 593 } |
610 | 594 |
611 } // namespace | 595 } // namespace |
612 } // namespace bookmarks | 596 } // namespace bookmarks |
OLD | NEW |