| 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 |