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