OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 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 "chrome/browser/bookmarks/bookmark_model.h" | 5 #include "chrome/browser/bookmarks/bookmark_model.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/base_paths.h" | 10 #include "base/base_paths.h" |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/compiler_specific.h" | 13 #include "base/compiler_specific.h" |
14 #include "base/containers/hash_tables.h" | 14 #include "base/containers/hash_tables.h" |
15 #include "base/path_service.h" | 15 #include "base/path_service.h" |
16 #include "base/strings/string16.h" | 16 #include "base/strings/string16.h" |
17 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
18 #include "base/strings/string_split.h" | 18 #include "base/strings/string_split.h" |
19 #include "base/strings/string_util.h" | 19 #include "base/strings/string_util.h" |
20 #include "base/strings/utf_string_conversions.h" | 20 #include "base/strings/utf_string_conversions.h" |
21 #include "base/time/time.h" | 21 #include "base/time/time.h" |
22 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 22 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
23 #include "chrome/browser/bookmarks/bookmark_model_observer.h" | 23 #include "chrome/browser/bookmarks/bookmark_model_observer.h" |
24 #include "chrome/browser/bookmarks/bookmark_test_helpers.h" | 24 #include "chrome/browser/bookmarks/bookmark_test_helpers.h" |
25 #include "chrome/browser/bookmarks/bookmark_utils.h" | 25 #include "chrome/browser/bookmarks/bookmark_utils.h" |
| 26 #include "chrome/browser/bookmarks/test_bookmark_client.h" |
26 #include "chrome/test/base/testing_profile.h" | 27 #include "chrome/test/base/testing_profile.h" |
27 #include "content/public/test/test_browser_thread_bundle.h" | 28 #include "content/public/test/test_browser_thread_bundle.h" |
28 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
29 #include "ui/base/models/tree_node_iterator.h" | 30 #include "ui/base/models/tree_node_iterator.h" |
30 #include "ui/base/models/tree_node_model.h" | 31 #include "ui/base/models/tree_node_model.h" |
31 #include "url/gurl.h" | 32 #include "url/gurl.h" |
32 | 33 |
33 using base::ASCIIToUTF16; | 34 using base::ASCIIToUTF16; |
34 using base::Time; | 35 using base::Time; |
35 using base::TimeDelta; | 36 using base::TimeDelta; |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 EXPECT_EQ(index2_, index2); | 134 EXPECT_EQ(index2_, index2); |
134 } | 135 } |
135 | 136 |
136 private: | 137 private: |
137 const BookmarkNode* node1_; | 138 const BookmarkNode* node1_; |
138 const BookmarkNode* node2_; | 139 const BookmarkNode* node2_; |
139 int index1_; | 140 int index1_; |
140 int index2_; | 141 int index2_; |
141 }; | 142 }; |
142 | 143 |
143 BookmarkModelTest() | 144 BookmarkModelTest() : model_(client_.CreateModel(false)) { |
144 : model_(NULL, false) { | 145 model_->AddObserver(this); |
145 model_.AddObserver(this); | |
146 ClearCounts(); | 146 ClearCounts(); |
147 } | 147 } |
148 | 148 |
149 virtual void BookmarkModelLoaded(BookmarkModel* model, | 149 virtual void BookmarkModelLoaded(BookmarkModel* model, |
150 bool ids_reassigned) OVERRIDE { | 150 bool ids_reassigned) OVERRIDE { |
151 // We never load from the db, so that this should never get invoked. | 151 // We never load from the db, so that this should never get invoked. |
152 NOTREACHED(); | 152 NOTREACHED(); |
153 } | 153 } |
154 | 154 |
155 virtual void BookmarkNodeMoved(BookmarkModel* model, | 155 virtual void BookmarkNodeMoved(BookmarkModel* model, |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 int extensive_changes_beginning_count, | 260 int extensive_changes_beginning_count, |
261 int extensive_changes_ended_count) { | 261 int extensive_changes_ended_count) { |
262 EXPECT_EQ(extensive_changes_beginning_count_, | 262 EXPECT_EQ(extensive_changes_beginning_count_, |
263 extensive_changes_beginning_count); | 263 extensive_changes_beginning_count); |
264 EXPECT_EQ(extensive_changes_ended_count_, extensive_changes_ended_count); | 264 EXPECT_EQ(extensive_changes_ended_count_, extensive_changes_ended_count); |
265 } | 265 } |
266 | 266 |
267 int AllNodesRemovedObserverCount() const { return all_bookmarks_removed_; } | 267 int AllNodesRemovedObserverCount() const { return all_bookmarks_removed_; } |
268 | 268 |
269 protected: | 269 protected: |
270 BookmarkModel model_; | 270 test::TestBookmarkClient client_; |
| 271 scoped_ptr<BookmarkModel> model_; |
271 ObserverDetails observer_details_; | 272 ObserverDetails observer_details_; |
272 | 273 |
273 private: | 274 private: |
274 int added_count_; | 275 int added_count_; |
275 int moved_count_; | 276 int moved_count_; |
276 int removed_count_; | 277 int removed_count_; |
277 int changed_count_; | 278 int changed_count_; |
278 int reordered_count_; | 279 int reordered_count_; |
279 int extensive_changes_beginning_count_; | 280 int extensive_changes_beginning_count_; |
280 int extensive_changes_ended_count_; | 281 int extensive_changes_ended_count_; |
281 int all_bookmarks_removed_; | 282 int all_bookmarks_removed_; |
282 int before_remove_count_; | 283 int before_remove_count_; |
283 int before_change_count_; | 284 int before_change_count_; |
284 int before_reorder_count_; | 285 int before_reorder_count_; |
285 int before_remove_all_count_; | 286 int before_remove_all_count_; |
286 | 287 |
287 DISALLOW_COPY_AND_ASSIGN(BookmarkModelTest); | 288 DISALLOW_COPY_AND_ASSIGN(BookmarkModelTest); |
288 }; | 289 }; |
289 | 290 |
290 TEST_F(BookmarkModelTest, InitialState) { | 291 TEST_F(BookmarkModelTest, InitialState) { |
291 const BookmarkNode* bb_node = model_.bookmark_bar_node(); | 292 const BookmarkNode* bb_node = model_->bookmark_bar_node(); |
292 ASSERT_TRUE(bb_node != NULL); | 293 ASSERT_TRUE(bb_node != NULL); |
293 EXPECT_EQ(0, bb_node->child_count()); | 294 EXPECT_EQ(0, bb_node->child_count()); |
294 EXPECT_EQ(BookmarkNode::BOOKMARK_BAR, bb_node->type()); | 295 EXPECT_EQ(BookmarkNode::BOOKMARK_BAR, bb_node->type()); |
295 | 296 |
296 const BookmarkNode* other_node = model_.other_node(); | 297 const BookmarkNode* other_node = model_->other_node(); |
297 ASSERT_TRUE(other_node != NULL); | 298 ASSERT_TRUE(other_node != NULL); |
298 EXPECT_EQ(0, other_node->child_count()); | 299 EXPECT_EQ(0, other_node->child_count()); |
299 EXPECT_EQ(BookmarkNode::OTHER_NODE, other_node->type()); | 300 EXPECT_EQ(BookmarkNode::OTHER_NODE, other_node->type()); |
300 | 301 |
301 const BookmarkNode* mobile_node = model_.mobile_node(); | 302 const BookmarkNode* mobile_node = model_->mobile_node(); |
302 ASSERT_TRUE(mobile_node != NULL); | 303 ASSERT_TRUE(mobile_node != NULL); |
303 EXPECT_EQ(0, mobile_node->child_count()); | 304 EXPECT_EQ(0, mobile_node->child_count()); |
304 EXPECT_EQ(BookmarkNode::MOBILE, mobile_node->type()); | 305 EXPECT_EQ(BookmarkNode::MOBILE, mobile_node->type()); |
305 | 306 |
306 EXPECT_TRUE(bb_node->id() != other_node->id()); | 307 EXPECT_TRUE(bb_node->id() != other_node->id()); |
307 EXPECT_TRUE(bb_node->id() != mobile_node->id()); | 308 EXPECT_TRUE(bb_node->id() != mobile_node->id()); |
308 EXPECT_TRUE(other_node->id() != mobile_node->id()); | 309 EXPECT_TRUE(other_node->id() != mobile_node->id()); |
309 } | 310 } |
310 | 311 |
311 TEST_F(BookmarkModelTest, AddURL) { | 312 TEST_F(BookmarkModelTest, AddURL) { |
312 const BookmarkNode* root = model_.bookmark_bar_node(); | 313 const BookmarkNode* root = model_->bookmark_bar_node(); |
313 const base::string16 title(ASCIIToUTF16("foo")); | 314 const base::string16 title(ASCIIToUTF16("foo")); |
314 const GURL url("http://foo.com"); | 315 const GURL url("http://foo.com"); |
315 | 316 |
316 const BookmarkNode* new_node = model_.AddURL(root, 0, title, url); | 317 const BookmarkNode* new_node = model_->AddURL(root, 0, title, url); |
317 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); | 318 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); |
318 observer_details_.ExpectEquals(root, NULL, 0, -1); | 319 observer_details_.ExpectEquals(root, NULL, 0, -1); |
319 | 320 |
320 ASSERT_EQ(1, root->child_count()); | 321 ASSERT_EQ(1, root->child_count()); |
321 ASSERT_EQ(title, new_node->GetTitle()); | 322 ASSERT_EQ(title, new_node->GetTitle()); |
322 ASSERT_TRUE(url == new_node->url()); | 323 ASSERT_TRUE(url == new_node->url()); |
323 ASSERT_EQ(BookmarkNode::URL, new_node->type()); | 324 ASSERT_EQ(BookmarkNode::URL, new_node->type()); |
324 ASSERT_TRUE(new_node == model_.GetMostRecentlyAddedNodeForURL(url)); | 325 ASSERT_TRUE(new_node == model_->GetMostRecentlyAddedNodeForURL(url)); |
325 | 326 |
326 EXPECT_TRUE(new_node->id() != root->id() && | 327 EXPECT_TRUE(new_node->id() != root->id() && |
327 new_node->id() != model_.other_node()->id() && | 328 new_node->id() != model_->other_node()->id() && |
328 new_node->id() != model_.mobile_node()->id()); | 329 new_node->id() != model_->mobile_node()->id()); |
329 } | 330 } |
330 | 331 |
331 TEST_F(BookmarkModelTest, AddURLWithUnicodeTitle) { | 332 TEST_F(BookmarkModelTest, AddURLWithUnicodeTitle) { |
332 const BookmarkNode* root = model_.bookmark_bar_node(); | 333 const BookmarkNode* root = model_->bookmark_bar_node(); |
333 const base::string16 title(base::WideToUTF16( | 334 const base::string16 title(base::WideToUTF16( |
334 L"\u767e\u5ea6\u4e00\u4e0b\uff0c\u4f60\u5c31\u77e5\u9053")); | 335 L"\u767e\u5ea6\u4e00\u4e0b\uff0c\u4f60\u5c31\u77e5\u9053")); |
335 const GURL url("https://www.baidu.com/"); | 336 const GURL url("https://www.baidu.com/"); |
336 | 337 |
337 const BookmarkNode* new_node = model_.AddURL(root, 0, title, url); | 338 const BookmarkNode* new_node = model_->AddURL(root, 0, title, url); |
338 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); | 339 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); |
339 observer_details_.ExpectEquals(root, NULL, 0, -1); | 340 observer_details_.ExpectEquals(root, NULL, 0, -1); |
340 | 341 |
341 ASSERT_EQ(1, root->child_count()); | 342 ASSERT_EQ(1, root->child_count()); |
342 ASSERT_EQ(title, new_node->GetTitle()); | 343 ASSERT_EQ(title, new_node->GetTitle()); |
343 ASSERT_TRUE(url == new_node->url()); | 344 ASSERT_TRUE(url == new_node->url()); |
344 ASSERT_EQ(BookmarkNode::URL, new_node->type()); | 345 ASSERT_EQ(BookmarkNode::URL, new_node->type()); |
345 ASSERT_TRUE(new_node == model_.GetMostRecentlyAddedNodeForURL(url)); | 346 ASSERT_TRUE(new_node == model_->GetMostRecentlyAddedNodeForURL(url)); |
346 | 347 |
347 EXPECT_TRUE(new_node->id() != root->id() && | 348 EXPECT_TRUE(new_node->id() != root->id() && |
348 new_node->id() != model_.other_node()->id() && | 349 new_node->id() != model_->other_node()->id() && |
349 new_node->id() != model_.mobile_node()->id()); | 350 new_node->id() != model_->mobile_node()->id()); |
350 } | 351 } |
351 | 352 |
352 TEST_F(BookmarkModelTest, AddURLWithWhitespaceTitle) { | 353 TEST_F(BookmarkModelTest, AddURLWithWhitespaceTitle) { |
353 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(url_whitespace_test_cases); ++i) { | 354 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(url_whitespace_test_cases); ++i) { |
354 const BookmarkNode* root = model_.bookmark_bar_node(); | 355 const BookmarkNode* root = model_->bookmark_bar_node(); |
355 const base::string16 title( | 356 const base::string16 title( |
356 ASCIIToUTF16(url_whitespace_test_cases[i].input_title)); | 357 ASCIIToUTF16(url_whitespace_test_cases[i].input_title)); |
357 const GURL url("http://foo.com"); | 358 const GURL url("http://foo.com"); |
358 | 359 |
359 const BookmarkNode* new_node = model_.AddURL(root, i, title, url); | 360 const BookmarkNode* new_node = model_->AddURL(root, i, title, url); |
360 | 361 |
361 int size = i + 1; | 362 int size = i + 1; |
362 EXPECT_EQ(size, root->child_count()); | 363 EXPECT_EQ(size, root->child_count()); |
363 EXPECT_EQ(ASCIIToUTF16(url_whitespace_test_cases[i].expected_title), | 364 EXPECT_EQ(ASCIIToUTF16(url_whitespace_test_cases[i].expected_title), |
364 new_node->GetTitle()); | 365 new_node->GetTitle()); |
365 EXPECT_EQ(BookmarkNode::URL, new_node->type()); | 366 EXPECT_EQ(BookmarkNode::URL, new_node->type()); |
366 } | 367 } |
367 } | 368 } |
368 | 369 |
369 TEST_F(BookmarkModelTest, AddURLWithCreationTimeAndMetaInfo) { | 370 TEST_F(BookmarkModelTest, AddURLWithCreationTimeAndMetaInfo) { |
370 const BookmarkNode* root = model_.bookmark_bar_node(); | 371 const BookmarkNode* root = model_->bookmark_bar_node(); |
371 const base::string16 title(ASCIIToUTF16("foo")); | 372 const base::string16 title(ASCIIToUTF16("foo")); |
372 const GURL url("http://foo.com"); | 373 const GURL url("http://foo.com"); |
373 const Time time = Time::Now() - TimeDelta::FromDays(1); | 374 const Time time = Time::Now() - TimeDelta::FromDays(1); |
374 BookmarkNode::MetaInfoMap meta_info; | 375 BookmarkNode::MetaInfoMap meta_info; |
375 meta_info["foo"] = "bar"; | 376 meta_info["foo"] = "bar"; |
376 | 377 |
377 const BookmarkNode* new_node = model_.AddURLWithCreationTimeAndMetaInfo( | 378 const BookmarkNode* new_node = model_->AddURLWithCreationTimeAndMetaInfo( |
378 root, 0, title, url, time, &meta_info); | 379 root, 0, title, url, time, &meta_info); |
379 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); | 380 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); |
380 observer_details_.ExpectEquals(root, NULL, 0, -1); | 381 observer_details_.ExpectEquals(root, NULL, 0, -1); |
381 | 382 |
382 ASSERT_EQ(1, root->child_count()); | 383 ASSERT_EQ(1, root->child_count()); |
383 ASSERT_EQ(title, new_node->GetTitle()); | 384 ASSERT_EQ(title, new_node->GetTitle()); |
384 ASSERT_TRUE(url == new_node->url()); | 385 ASSERT_TRUE(url == new_node->url()); |
385 ASSERT_EQ(BookmarkNode::URL, new_node->type()); | 386 ASSERT_EQ(BookmarkNode::URL, new_node->type()); |
386 ASSERT_EQ(time, new_node->date_added()); | 387 ASSERT_EQ(time, new_node->date_added()); |
387 ASSERT_TRUE(new_node->GetMetaInfoMap()); | 388 ASSERT_TRUE(new_node->GetMetaInfoMap()); |
388 ASSERT_EQ(meta_info, *new_node->GetMetaInfoMap()); | 389 ASSERT_EQ(meta_info, *new_node->GetMetaInfoMap()); |
389 ASSERT_TRUE(new_node == model_.GetMostRecentlyAddedNodeForURL(url)); | 390 ASSERT_TRUE(new_node == model_->GetMostRecentlyAddedNodeForURL(url)); |
390 | 391 |
391 EXPECT_TRUE(new_node->id() != root->id() && | 392 EXPECT_TRUE(new_node->id() != root->id() && |
392 new_node->id() != model_.other_node()->id() && | 393 new_node->id() != model_->other_node()->id() && |
393 new_node->id() != model_.mobile_node()->id()); | 394 new_node->id() != model_->mobile_node()->id()); |
394 } | 395 } |
395 | 396 |
396 TEST_F(BookmarkModelTest, AddURLToMobileBookmarks) { | 397 TEST_F(BookmarkModelTest, AddURLToMobileBookmarks) { |
397 const BookmarkNode* root = model_.mobile_node(); | 398 const BookmarkNode* root = model_->mobile_node(); |
398 const base::string16 title(ASCIIToUTF16("foo")); | 399 const base::string16 title(ASCIIToUTF16("foo")); |
399 const GURL url("http://foo.com"); | 400 const GURL url("http://foo.com"); |
400 | 401 |
401 const BookmarkNode* new_node = model_.AddURL(root, 0, title, url); | 402 const BookmarkNode* new_node = model_->AddURL(root, 0, title, url); |
402 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); | 403 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); |
403 observer_details_.ExpectEquals(root, NULL, 0, -1); | 404 observer_details_.ExpectEquals(root, NULL, 0, -1); |
404 | 405 |
405 ASSERT_EQ(1, root->child_count()); | 406 ASSERT_EQ(1, root->child_count()); |
406 ASSERT_EQ(title, new_node->GetTitle()); | 407 ASSERT_EQ(title, new_node->GetTitle()); |
407 ASSERT_TRUE(url == new_node->url()); | 408 ASSERT_TRUE(url == new_node->url()); |
408 ASSERT_EQ(BookmarkNode::URL, new_node->type()); | 409 ASSERT_EQ(BookmarkNode::URL, new_node->type()); |
409 ASSERT_TRUE(new_node == model_.GetMostRecentlyAddedNodeForURL(url)); | 410 ASSERT_TRUE(new_node == model_->GetMostRecentlyAddedNodeForURL(url)); |
410 | 411 |
411 EXPECT_TRUE(new_node->id() != root->id() && | 412 EXPECT_TRUE(new_node->id() != root->id() && |
412 new_node->id() != model_.other_node()->id() && | 413 new_node->id() != model_->other_node()->id() && |
413 new_node->id() != model_.mobile_node()->id()); | 414 new_node->id() != model_->mobile_node()->id()); |
414 } | 415 } |
415 | 416 |
416 TEST_F(BookmarkModelTest, AddFolder) { | 417 TEST_F(BookmarkModelTest, AddFolder) { |
417 const BookmarkNode* root = model_.bookmark_bar_node(); | 418 const BookmarkNode* root = model_->bookmark_bar_node(); |
418 const base::string16 title(ASCIIToUTF16("foo")); | 419 const base::string16 title(ASCIIToUTF16("foo")); |
419 | 420 |
420 const BookmarkNode* new_node = model_.AddFolder(root, 0, title); | 421 const BookmarkNode* new_node = model_->AddFolder(root, 0, title); |
421 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); | 422 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); |
422 observer_details_.ExpectEquals(root, NULL, 0, -1); | 423 observer_details_.ExpectEquals(root, NULL, 0, -1); |
423 | 424 |
424 ASSERT_EQ(1, root->child_count()); | 425 ASSERT_EQ(1, root->child_count()); |
425 ASSERT_EQ(title, new_node->GetTitle()); | 426 ASSERT_EQ(title, new_node->GetTitle()); |
426 ASSERT_EQ(BookmarkNode::FOLDER, new_node->type()); | 427 ASSERT_EQ(BookmarkNode::FOLDER, new_node->type()); |
427 | 428 |
428 EXPECT_TRUE(new_node->id() != root->id() && | 429 EXPECT_TRUE(new_node->id() != root->id() && |
429 new_node->id() != model_.other_node()->id() && | 430 new_node->id() != model_->other_node()->id() && |
430 new_node->id() != model_.mobile_node()->id()); | 431 new_node->id() != model_->mobile_node()->id()); |
431 | 432 |
432 // Add another folder, just to make sure folder_ids are incremented correctly. | 433 // Add another folder, just to make sure folder_ids are incremented correctly. |
433 ClearCounts(); | 434 ClearCounts(); |
434 model_.AddFolder(root, 0, title); | 435 model_->AddFolder(root, 0, title); |
435 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); | 436 AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0); |
436 observer_details_.ExpectEquals(root, NULL, 0, -1); | 437 observer_details_.ExpectEquals(root, NULL, 0, -1); |
437 } | 438 } |
438 | 439 |
439 TEST_F(BookmarkModelTest, AddFolderWithWhitespaceTitle) { | 440 TEST_F(BookmarkModelTest, AddFolderWithWhitespaceTitle) { |
440 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(title_whitespace_test_cases); ++i) { | 441 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(title_whitespace_test_cases); ++i) { |
441 const BookmarkNode* root = model_.bookmark_bar_node(); | 442 const BookmarkNode* root = model_->bookmark_bar_node(); |
442 const base::string16 title( | 443 const base::string16 title( |
443 ASCIIToUTF16(title_whitespace_test_cases[i].input_title)); | 444 ASCIIToUTF16(title_whitespace_test_cases[i].input_title)); |
444 | 445 |
445 const BookmarkNode* new_node = model_.AddFolder(root, i, title); | 446 const BookmarkNode* new_node = model_->AddFolder(root, i, title); |
446 | 447 |
447 int size = i + 1; | 448 int size = i + 1; |
448 EXPECT_EQ(size, root->child_count()); | 449 EXPECT_EQ(size, root->child_count()); |
449 EXPECT_EQ(ASCIIToUTF16(title_whitespace_test_cases[i].expected_title), | 450 EXPECT_EQ(ASCIIToUTF16(title_whitespace_test_cases[i].expected_title), |
450 new_node->GetTitle()); | 451 new_node->GetTitle()); |
451 EXPECT_EQ(BookmarkNode::FOLDER, new_node->type()); | 452 EXPECT_EQ(BookmarkNode::FOLDER, new_node->type()); |
452 } | 453 } |
453 } | 454 } |
454 | 455 |
455 TEST_F(BookmarkModelTest, RemoveURL) { | 456 TEST_F(BookmarkModelTest, RemoveURL) { |
456 const BookmarkNode* root = model_.bookmark_bar_node(); | 457 const BookmarkNode* root = model_->bookmark_bar_node(); |
457 const base::string16 title(ASCIIToUTF16("foo")); | 458 const base::string16 title(ASCIIToUTF16("foo")); |
458 const GURL url("http://foo.com"); | 459 const GURL url("http://foo.com"); |
459 model_.AddURL(root, 0, title, url); | 460 model_->AddURL(root, 0, title, url); |
460 ClearCounts(); | 461 ClearCounts(); |
461 | 462 |
462 model_.Remove(root, 0); | 463 model_->Remove(root, 0); |
463 ASSERT_EQ(0, root->child_count()); | 464 ASSERT_EQ(0, root->child_count()); |
464 AssertObserverCount(0, 0, 1, 0, 0, 1, 0, 0, 0); | 465 AssertObserverCount(0, 0, 1, 0, 0, 1, 0, 0, 0); |
465 observer_details_.ExpectEquals(root, NULL, 0, -1); | 466 observer_details_.ExpectEquals(root, NULL, 0, -1); |
466 | 467 |
467 // Make sure there is no mapping for the URL. | 468 // Make sure there is no mapping for the URL. |
468 ASSERT_TRUE(model_.GetMostRecentlyAddedNodeForURL(url) == NULL); | 469 ASSERT_TRUE(model_->GetMostRecentlyAddedNodeForURL(url) == NULL); |
469 } | 470 } |
470 | 471 |
471 TEST_F(BookmarkModelTest, RemoveFolder) { | 472 TEST_F(BookmarkModelTest, RemoveFolder) { |
472 const BookmarkNode* root = model_.bookmark_bar_node(); | 473 const BookmarkNode* root = model_->bookmark_bar_node(); |
473 const BookmarkNode* folder = model_.AddFolder(root, 0, ASCIIToUTF16("foo")); | 474 const BookmarkNode* folder = model_->AddFolder(root, 0, ASCIIToUTF16("foo")); |
474 | 475 |
475 ClearCounts(); | 476 ClearCounts(); |
476 | 477 |
477 // Add a URL as a child. | 478 // Add a URL as a child. |
478 const base::string16 title(ASCIIToUTF16("foo")); | 479 const base::string16 title(ASCIIToUTF16("foo")); |
479 const GURL url("http://foo.com"); | 480 const GURL url("http://foo.com"); |
480 model_.AddURL(folder, 0, title, url); | 481 model_->AddURL(folder, 0, title, url); |
481 | 482 |
482 ClearCounts(); | 483 ClearCounts(); |
483 | 484 |
484 // Now remove the folder. | 485 // Now remove the folder. |
485 model_.Remove(root, 0); | 486 model_->Remove(root, 0); |
486 ASSERT_EQ(0, root->child_count()); | 487 ASSERT_EQ(0, root->child_count()); |
487 AssertObserverCount(0, 0, 1, 0, 0, 1, 0, 0, 0); | 488 AssertObserverCount(0, 0, 1, 0, 0, 1, 0, 0, 0); |
488 observer_details_.ExpectEquals(root, NULL, 0, -1); | 489 observer_details_.ExpectEquals(root, NULL, 0, -1); |
489 | 490 |
490 // Make sure there is no mapping for the URL. | 491 // Make sure there is no mapping for the URL. |
491 ASSERT_TRUE(model_.GetMostRecentlyAddedNodeForURL(url) == NULL); | 492 ASSERT_TRUE(model_->GetMostRecentlyAddedNodeForURL(url) == NULL); |
492 } | 493 } |
493 | 494 |
494 TEST_F(BookmarkModelTest, RemoveAll) { | 495 TEST_F(BookmarkModelTest, RemoveAll) { |
495 const BookmarkNode* bookmark_bar_node = model_.bookmark_bar_node(); | 496 const BookmarkNode* bookmark_bar_node = model_->bookmark_bar_node(); |
496 | 497 |
497 ClearCounts(); | 498 ClearCounts(); |
498 | 499 |
499 // Add a url to bookmark bar. | 500 // Add a url to bookmark bar. |
500 base::string16 title(ASCIIToUTF16("foo")); | 501 base::string16 title(ASCIIToUTF16("foo")); |
501 GURL url("http://foo.com"); | 502 GURL url("http://foo.com"); |
502 model_.AddURL(bookmark_bar_node, 0, title, url); | 503 model_->AddURL(bookmark_bar_node, 0, title, url); |
503 | 504 |
504 // Add a folder with child URL. | 505 // Add a folder with child URL. |
505 const BookmarkNode* folder = model_.AddFolder(bookmark_bar_node, 0, title); | 506 const BookmarkNode* folder = model_->AddFolder(bookmark_bar_node, 0, title); |
506 model_.AddURL(folder, 0, title, url); | 507 model_->AddURL(folder, 0, title, url); |
507 | 508 |
508 AssertObserverCount(3, 0, 0, 0, 0, 0, 0, 0, 0); | 509 AssertObserverCount(3, 0, 0, 0, 0, 0, 0, 0, 0); |
509 ClearCounts(); | 510 ClearCounts(); |
510 | 511 |
511 model_.RemoveAll(); | 512 model_->RemoveAll(); |
512 | 513 |
513 EXPECT_EQ(0, bookmark_bar_node->child_count()); | 514 EXPECT_EQ(0, bookmark_bar_node->child_count()); |
514 // No individual BookmarkNodeRemoved events are fired, so removed count | 515 // No individual BookmarkNodeRemoved events are fired, so removed count |
515 // should be 0. | 516 // should be 0. |
516 AssertObserverCount(0, 0, 0, 0, 0, 0, 0, 0, 1); | 517 AssertObserverCount(0, 0, 0, 0, 0, 0, 0, 0, 1); |
517 AssertExtensiveChangesObserverCount(1, 1); | 518 AssertExtensiveChangesObserverCount(1, 1); |
518 EXPECT_EQ(1, AllNodesRemovedObserverCount()); | 519 EXPECT_EQ(1, AllNodesRemovedObserverCount()); |
519 } | 520 } |
520 | 521 |
521 TEST_F(BookmarkModelTest, SetTitle) { | 522 TEST_F(BookmarkModelTest, SetTitle) { |
522 const BookmarkNode* root = model_.bookmark_bar_node(); | 523 const BookmarkNode* root = model_->bookmark_bar_node(); |
523 base::string16 title(ASCIIToUTF16("foo")); | 524 base::string16 title(ASCIIToUTF16("foo")); |
524 const GURL url("http://foo.com"); | 525 const GURL url("http://foo.com"); |
525 const BookmarkNode* node = model_.AddURL(root, 0, title, url); | 526 const BookmarkNode* node = model_->AddURL(root, 0, title, url); |
526 | 527 |
527 ClearCounts(); | 528 ClearCounts(); |
528 | 529 |
529 title = ASCIIToUTF16("foo2"); | 530 title = ASCIIToUTF16("foo2"); |
530 model_.SetTitle(node, title); | 531 model_->SetTitle(node, title); |
531 AssertObserverCount(0, 0, 0, 1, 0, 0, 1, 0, 0); | 532 AssertObserverCount(0, 0, 0, 1, 0, 0, 1, 0, 0); |
532 observer_details_.ExpectEquals(node, NULL, -1, -1); | 533 observer_details_.ExpectEquals(node, NULL, -1, -1); |
533 EXPECT_EQ(title, node->GetTitle()); | 534 EXPECT_EQ(title, node->GetTitle()); |
534 } | 535 } |
535 | 536 |
536 TEST_F(BookmarkModelTest, SetTitleWithWhitespace) { | 537 TEST_F(BookmarkModelTest, SetTitleWithWhitespace) { |
537 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(title_whitespace_test_cases); ++i) { | 538 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(title_whitespace_test_cases); ++i) { |
538 const BookmarkNode* root = model_.bookmark_bar_node(); | 539 const BookmarkNode* root = model_->bookmark_bar_node(); |
539 base::string16 title(ASCIIToUTF16("dummy")); | 540 base::string16 title(ASCIIToUTF16("dummy")); |
540 const GURL url("http://foo.com"); | 541 const GURL url("http://foo.com"); |
541 const BookmarkNode* node = model_.AddURL(root, 0, title, url); | 542 const BookmarkNode* node = model_->AddURL(root, 0, title, url); |
542 | 543 |
543 title = ASCIIToUTF16(title_whitespace_test_cases[i].input_title); | 544 title = ASCIIToUTF16(title_whitespace_test_cases[i].input_title); |
544 model_.SetTitle(node, title); | 545 model_->SetTitle(node, title); |
545 EXPECT_EQ(ASCIIToUTF16(title_whitespace_test_cases[i].expected_title), | 546 EXPECT_EQ(ASCIIToUTF16(title_whitespace_test_cases[i].expected_title), |
546 node->GetTitle()); | 547 node->GetTitle()); |
547 } | 548 } |
548 } | 549 } |
549 | 550 |
550 TEST_F(BookmarkModelTest, SetURL) { | 551 TEST_F(BookmarkModelTest, SetURL) { |
551 const BookmarkNode* root = model_.bookmark_bar_node(); | 552 const BookmarkNode* root = model_->bookmark_bar_node(); |
552 const base::string16 title(ASCIIToUTF16("foo")); | 553 const base::string16 title(ASCIIToUTF16("foo")); |
553 GURL url("http://foo.com"); | 554 GURL url("http://foo.com"); |
554 const BookmarkNode* node = model_.AddURL(root, 0, title, url); | 555 const BookmarkNode* node = model_->AddURL(root, 0, title, url); |
555 | 556 |
556 ClearCounts(); | 557 ClearCounts(); |
557 | 558 |
558 url = GURL("http://foo2.com"); | 559 url = GURL("http://foo2.com"); |
559 model_.SetURL(node, url); | 560 model_->SetURL(node, url); |
560 AssertObserverCount(0, 0, 0, 1, 0, 0, 1, 0, 0); | 561 AssertObserverCount(0, 0, 0, 1, 0, 0, 1, 0, 0); |
561 observer_details_.ExpectEquals(node, NULL, -1, -1); | 562 observer_details_.ExpectEquals(node, NULL, -1, -1); |
562 EXPECT_EQ(url, node->url()); | 563 EXPECT_EQ(url, node->url()); |
563 } | 564 } |
564 | 565 |
565 TEST_F(BookmarkModelTest, SetDateAdded) { | 566 TEST_F(BookmarkModelTest, SetDateAdded) { |
566 const BookmarkNode* root = model_.bookmark_bar_node(); | 567 const BookmarkNode* root = model_->bookmark_bar_node(); |
567 const base::string16 title(ASCIIToUTF16("foo")); | 568 const base::string16 title(ASCIIToUTF16("foo")); |
568 GURL url("http://foo.com"); | 569 GURL url("http://foo.com"); |
569 const BookmarkNode* node = model_.AddURL(root, 0, title, url); | 570 const BookmarkNode* node = model_->AddURL(root, 0, title, url); |
570 | 571 |
571 ClearCounts(); | 572 ClearCounts(); |
572 | 573 |
573 base::Time new_time = base::Time::Now() + base::TimeDelta::FromMinutes(20); | 574 base::Time new_time = base::Time::Now() + base::TimeDelta::FromMinutes(20); |
574 model_.SetDateAdded(node, new_time); | 575 model_->SetDateAdded(node, new_time); |
575 AssertObserverCount(0, 0, 0, 0, 0, 0, 0, 0, 0); | 576 AssertObserverCount(0, 0, 0, 0, 0, 0, 0, 0, 0); |
576 EXPECT_EQ(new_time, node->date_added()); | 577 EXPECT_EQ(new_time, node->date_added()); |
577 EXPECT_EQ(new_time, model_.bookmark_bar_node()->date_folder_modified()); | 578 EXPECT_EQ(new_time, model_->bookmark_bar_node()->date_folder_modified()); |
578 } | 579 } |
579 | 580 |
580 TEST_F(BookmarkModelTest, Move) { | 581 TEST_F(BookmarkModelTest, Move) { |
581 const BookmarkNode* root = model_.bookmark_bar_node(); | 582 const BookmarkNode* root = model_->bookmark_bar_node(); |
582 const base::string16 title(ASCIIToUTF16("foo")); | 583 const base::string16 title(ASCIIToUTF16("foo")); |
583 const GURL url("http://foo.com"); | 584 const GURL url("http://foo.com"); |
584 const BookmarkNode* node = model_.AddURL(root, 0, title, url); | 585 const BookmarkNode* node = model_->AddURL(root, 0, title, url); |
585 const BookmarkNode* folder1 = model_.AddFolder(root, 0, ASCIIToUTF16("foo")); | 586 const BookmarkNode* folder1 = model_->AddFolder(root, 0, ASCIIToUTF16("foo")); |
586 ClearCounts(); | 587 ClearCounts(); |
587 | 588 |
588 model_.Move(node, folder1, 0); | 589 model_->Move(node, folder1, 0); |
589 | 590 |
590 AssertObserverCount(0, 1, 0, 0, 0, 0, 0, 0, 0); | 591 AssertObserverCount(0, 1, 0, 0, 0, 0, 0, 0, 0); |
591 observer_details_.ExpectEquals(root, folder1, 1, 0); | 592 observer_details_.ExpectEquals(root, folder1, 1, 0); |
592 EXPECT_TRUE(folder1 == node->parent()); | 593 EXPECT_TRUE(folder1 == node->parent()); |
593 EXPECT_EQ(1, root->child_count()); | 594 EXPECT_EQ(1, root->child_count()); |
594 EXPECT_EQ(folder1, root->GetChild(0)); | 595 EXPECT_EQ(folder1, root->GetChild(0)); |
595 EXPECT_EQ(1, folder1->child_count()); | 596 EXPECT_EQ(1, folder1->child_count()); |
596 EXPECT_EQ(node, folder1->GetChild(0)); | 597 EXPECT_EQ(node, folder1->GetChild(0)); |
597 | 598 |
598 // And remove the folder. | 599 // And remove the folder. |
599 ClearCounts(); | 600 ClearCounts(); |
600 model_.Remove(root, 0); | 601 model_->Remove(root, 0); |
601 AssertObserverCount(0, 0, 1, 0, 0, 1, 0, 0, 0); | 602 AssertObserverCount(0, 0, 1, 0, 0, 1, 0, 0, 0); |
602 observer_details_.ExpectEquals(root, NULL, 0, -1); | 603 observer_details_.ExpectEquals(root, NULL, 0, -1); |
603 EXPECT_TRUE(model_.GetMostRecentlyAddedNodeForURL(url) == NULL); | 604 EXPECT_TRUE(model_->GetMostRecentlyAddedNodeForURL(url) == NULL); |
604 EXPECT_EQ(0, root->child_count()); | 605 EXPECT_EQ(0, root->child_count()); |
605 } | 606 } |
606 | 607 |
607 TEST_F(BookmarkModelTest, NonMovingMoveCall) { | 608 TEST_F(BookmarkModelTest, NonMovingMoveCall) { |
608 const BookmarkNode* root = model_.bookmark_bar_node(); | 609 const BookmarkNode* root = model_->bookmark_bar_node(); |
609 const base::string16 title(ASCIIToUTF16("foo")); | 610 const base::string16 title(ASCIIToUTF16("foo")); |
610 const GURL url("http://foo.com"); | 611 const GURL url("http://foo.com"); |
611 const base::Time old_date(base::Time::Now() - base::TimeDelta::FromDays(1)); | 612 const base::Time old_date(base::Time::Now() - base::TimeDelta::FromDays(1)); |
612 | 613 |
613 const BookmarkNode* node = model_.AddURL(root, 0, title, url); | 614 const BookmarkNode* node = model_->AddURL(root, 0, title, url); |
614 model_.SetDateFolderModified(root, old_date); | 615 model_->SetDateFolderModified(root, old_date); |
615 | 616 |
616 // Since |node| is already at the index 0 of |root|, this is no-op. | 617 // Since |node| is already at the index 0 of |root|, this is no-op. |
617 model_.Move(node, root, 0); | 618 model_->Move(node, root, 0); |
618 | 619 |
619 // Check that the modification date is kept untouched. | 620 // Check that the modification date is kept untouched. |
620 EXPECT_EQ(old_date, root->date_folder_modified()); | 621 EXPECT_EQ(old_date, root->date_folder_modified()); |
621 } | 622 } |
622 | 623 |
623 TEST_F(BookmarkModelTest, Copy) { | 624 TEST_F(BookmarkModelTest, Copy) { |
624 const BookmarkNode* root = model_.bookmark_bar_node(); | 625 const BookmarkNode* root = model_->bookmark_bar_node(); |
625 static const std::string model_string("a 1:[ b c ] d 2:[ e f g ] h "); | 626 static const std::string model_string("a 1:[ b c ] d 2:[ e f g ] h "); |
626 test::AddNodesFromModelString(&model_, root, model_string); | 627 test::AddNodesFromModelString(model_.get(), root, model_string); |
627 | 628 |
628 // Validate initial model. | 629 // Validate initial model. |
629 std::string actual_model_string = test::ModelStringFromNode(root); | 630 std::string actual_model_string = test::ModelStringFromNode(root); |
630 EXPECT_EQ(model_string, actual_model_string); | 631 EXPECT_EQ(model_string, actual_model_string); |
631 | 632 |
632 // Copy 'd' to be after '1:b': URL item from bar to folder. | 633 // Copy 'd' to be after '1:b': URL item from bar to folder. |
633 const BookmarkNode* node_to_copy = root->GetChild(2); | 634 const BookmarkNode* node_to_copy = root->GetChild(2); |
634 const BookmarkNode* destination = root->GetChild(1); | 635 const BookmarkNode* destination = root->GetChild(1); |
635 model_.Copy(node_to_copy, destination, 1); | 636 model_->Copy(node_to_copy, destination, 1); |
636 actual_model_string = test::ModelStringFromNode(root); | 637 actual_model_string = test::ModelStringFromNode(root); |
637 EXPECT_EQ("a 1:[ b d c ] d 2:[ e f g ] h ", actual_model_string); | 638 EXPECT_EQ("a 1:[ b d c ] d 2:[ e f g ] h ", actual_model_string); |
638 | 639 |
639 // Copy '1:d' to be after 'a': URL item from folder to bar. | 640 // Copy '1:d' to be after 'a': URL item from folder to bar. |
640 const BookmarkNode* folder = root->GetChild(1); | 641 const BookmarkNode* folder = root->GetChild(1); |
641 node_to_copy = folder->GetChild(1); | 642 node_to_copy = folder->GetChild(1); |
642 model_.Copy(node_to_copy, root, 1); | 643 model_->Copy(node_to_copy, root, 1); |
643 actual_model_string = test::ModelStringFromNode(root); | 644 actual_model_string = test::ModelStringFromNode(root); |
644 EXPECT_EQ("a d 1:[ b d c ] d 2:[ e f g ] h ", actual_model_string); | 645 EXPECT_EQ("a d 1:[ b d c ] d 2:[ e f g ] h ", actual_model_string); |
645 | 646 |
646 // Copy '1' to be after '2:e': Folder from bar to folder. | 647 // Copy '1' to be after '2:e': Folder from bar to folder. |
647 node_to_copy = root->GetChild(2); | 648 node_to_copy = root->GetChild(2); |
648 destination = root->GetChild(4); | 649 destination = root->GetChild(4); |
649 model_.Copy(node_to_copy, destination, 1); | 650 model_->Copy(node_to_copy, destination, 1); |
650 actual_model_string = test::ModelStringFromNode(root); | 651 actual_model_string = test::ModelStringFromNode(root); |
651 EXPECT_EQ("a d 1:[ b d c ] d 2:[ e 1:[ b d c ] f g ] h ", | 652 EXPECT_EQ("a d 1:[ b d c ] d 2:[ e 1:[ b d c ] f g ] h ", |
652 actual_model_string); | 653 actual_model_string); |
653 | 654 |
654 // Copy '2:1' to be after '2:f': Folder within same folder. | 655 // Copy '2:1' to be after '2:f': Folder within same folder. |
655 folder = root->GetChild(4); | 656 folder = root->GetChild(4); |
656 node_to_copy = folder->GetChild(1); | 657 node_to_copy = folder->GetChild(1); |
657 model_.Copy(node_to_copy, folder, 3); | 658 model_->Copy(node_to_copy, folder, 3); |
658 actual_model_string = test::ModelStringFromNode(root); | 659 actual_model_string = test::ModelStringFromNode(root); |
659 EXPECT_EQ("a d 1:[ b d c ] d 2:[ e 1:[ b d c ] f 1:[ b d c ] g ] h ", | 660 EXPECT_EQ("a d 1:[ b d c ] d 2:[ e 1:[ b d c ] f 1:[ b d c ] g ] h ", |
660 actual_model_string); | 661 actual_model_string); |
661 | 662 |
662 // Copy first 'd' to be after 'h': URL item within the bar. | 663 // Copy first 'd' to be after 'h': URL item within the bar. |
663 node_to_copy = root->GetChild(1); | 664 node_to_copy = root->GetChild(1); |
664 model_.Copy(node_to_copy, root, 6); | 665 model_->Copy(node_to_copy, root, 6); |
665 actual_model_string = test::ModelStringFromNode(root); | 666 actual_model_string = test::ModelStringFromNode(root); |
666 EXPECT_EQ("a d 1:[ b d c ] d 2:[ e 1:[ b d c ] f 1:[ b d c ] g ] h d ", | 667 EXPECT_EQ("a d 1:[ b d c ] d 2:[ e 1:[ b d c ] f 1:[ b d c ] g ] h d ", |
667 actual_model_string); | 668 actual_model_string); |
668 | 669 |
669 // Copy '2' to be after 'a': Folder within the bar. | 670 // Copy '2' to be after 'a': Folder within the bar. |
670 node_to_copy = root->GetChild(4); | 671 node_to_copy = root->GetChild(4); |
671 model_.Copy(node_to_copy, root, 1); | 672 model_->Copy(node_to_copy, root, 1); |
672 actual_model_string = test::ModelStringFromNode(root); | 673 actual_model_string = test::ModelStringFromNode(root); |
673 EXPECT_EQ("a 2:[ e 1:[ b d c ] f 1:[ b d c ] g ] d 1:[ b d c ] " | 674 EXPECT_EQ("a 2:[ e 1:[ b d c ] f 1:[ b d c ] g ] d 1:[ b d c ] " |
674 "d 2:[ e 1:[ b d c ] f 1:[ b d c ] g ] h d ", | 675 "d 2:[ e 1:[ b d c ] f 1:[ b d c ] g ] h d ", |
675 actual_model_string); | 676 actual_model_string); |
676 } | 677 } |
677 | 678 |
678 // Tests that adding a URL to a folder updates the last modified time. | 679 // Tests that adding a URL to a folder updates the last modified time. |
679 TEST_F(BookmarkModelTest, ParentForNewNodes) { | 680 TEST_F(BookmarkModelTest, ParentForNewNodes) { |
680 ASSERT_EQ(model_.bookmark_bar_node(), model_.GetParentForNewNodes()); | 681 ASSERT_EQ(model_->bookmark_bar_node(), model_->GetParentForNewNodes()); |
681 | 682 |
682 const base::string16 title(ASCIIToUTF16("foo")); | 683 const base::string16 title(ASCIIToUTF16("foo")); |
683 const GURL url("http://foo.com"); | 684 const GURL url("http://foo.com"); |
684 | 685 |
685 model_.AddURL(model_.other_node(), 0, title, url); | 686 model_->AddURL(model_->other_node(), 0, title, url); |
686 ASSERT_EQ(model_.other_node(), model_.GetParentForNewNodes()); | 687 ASSERT_EQ(model_->other_node(), model_->GetParentForNewNodes()); |
687 } | 688 } |
688 | 689 |
689 // Tests that adding a URL to a folder updates the last modified time. | 690 // Tests that adding a URL to a folder updates the last modified time. |
690 TEST_F(BookmarkModelTest, ParentForNewMobileNodes) { | 691 TEST_F(BookmarkModelTest, ParentForNewMobileNodes) { |
691 ASSERT_EQ(model_.bookmark_bar_node(), model_.GetParentForNewNodes()); | 692 ASSERT_EQ(model_->bookmark_bar_node(), model_->GetParentForNewNodes()); |
692 | 693 |
693 const base::string16 title(ASCIIToUTF16("foo")); | 694 const base::string16 title(ASCIIToUTF16("foo")); |
694 const GURL url("http://foo.com"); | 695 const GURL url("http://foo.com"); |
695 | 696 |
696 model_.AddURL(model_.mobile_node(), 0, title, url); | 697 model_->AddURL(model_->mobile_node(), 0, title, url); |
697 ASSERT_EQ(model_.mobile_node(), model_.GetParentForNewNodes()); | 698 ASSERT_EQ(model_->mobile_node(), model_->GetParentForNewNodes()); |
698 } | 699 } |
699 | 700 |
700 // Make sure recently modified stays in sync when adding a URL. | 701 // Make sure recently modified stays in sync when adding a URL. |
701 TEST_F(BookmarkModelTest, MostRecentlyModifiedFolders) { | 702 TEST_F(BookmarkModelTest, MostRecentlyModifiedFolders) { |
702 // Add a folder. | 703 // Add a folder. |
703 const BookmarkNode* folder = model_.AddFolder(model_.other_node(), 0, | 704 const BookmarkNode* folder = |
704 ASCIIToUTF16("foo")); | 705 model_->AddFolder(model_->other_node(), 0, ASCIIToUTF16("foo")); |
705 // Add a URL to it. | 706 // Add a URL to it. |
706 model_.AddURL(folder, 0, ASCIIToUTF16("blah"), GURL("http://foo.com")); | 707 model_->AddURL(folder, 0, ASCIIToUTF16("blah"), GURL("http://foo.com")); |
707 | 708 |
708 // Make sure folder is in the most recently modified. | 709 // Make sure folder is in the most recently modified. |
709 std::vector<const BookmarkNode*> most_recent_folders = | 710 std::vector<const BookmarkNode*> most_recent_folders = |
710 bookmark_utils::GetMostRecentlyModifiedFolders(&model_, 1); | 711 bookmark_utils::GetMostRecentlyModifiedFolders(model_.get(), 1); |
711 ASSERT_EQ(1U, most_recent_folders.size()); | 712 ASSERT_EQ(1U, most_recent_folders.size()); |
712 ASSERT_EQ(folder, most_recent_folders[0]); | 713 ASSERT_EQ(folder, most_recent_folders[0]); |
713 | 714 |
714 // Nuke the folder and do another fetch, making sure folder isn't in the | 715 // Nuke the folder and do another fetch, making sure folder isn't in the |
715 // returned list. | 716 // returned list. |
716 model_.Remove(folder->parent(), 0); | 717 model_->Remove(folder->parent(), 0); |
717 most_recent_folders = | 718 most_recent_folders = |
718 bookmark_utils::GetMostRecentlyModifiedFolders(&model_, 1); | 719 bookmark_utils::GetMostRecentlyModifiedFolders(model_.get(), 1); |
719 ASSERT_EQ(1U, most_recent_folders.size()); | 720 ASSERT_EQ(1U, most_recent_folders.size()); |
720 ASSERT_TRUE(most_recent_folders[0] != folder); | 721 ASSERT_TRUE(most_recent_folders[0] != folder); |
721 } | 722 } |
722 | 723 |
723 // Make sure MostRecentlyAddedEntries stays in sync. | 724 // Make sure MostRecentlyAddedEntries stays in sync. |
724 TEST_F(BookmarkModelTest, MostRecentlyAddedEntries) { | 725 TEST_F(BookmarkModelTest, MostRecentlyAddedEntries) { |
725 // Add a couple of nodes such that the following holds for the time of the | 726 // Add a couple of nodes such that the following holds for the time of the |
726 // nodes: n1 > n2 > n3 > n4. | 727 // nodes: n1 > n2 > n3 > n4. |
727 Time base_time = Time::Now(); | 728 Time base_time = Time::Now(); |
728 BookmarkNode* n1 = AsMutable(model_.AddURL(model_.bookmark_bar_node(), | 729 BookmarkNode* n1 = AsMutable(model_->AddURL(model_->bookmark_bar_node(), |
729 0, | 730 0, |
730 ASCIIToUTF16("blah"), | 731 ASCIIToUTF16("blah"), |
731 GURL("http://foo.com/0"))); | 732 GURL("http://foo.com/0"))); |
732 BookmarkNode* n2 = AsMutable(model_.AddURL(model_.bookmark_bar_node(), | 733 BookmarkNode* n2 = AsMutable(model_->AddURL(model_->bookmark_bar_node(), |
733 1, | 734 1, |
734 ASCIIToUTF16("blah"), | 735 ASCIIToUTF16("blah"), |
735 GURL("http://foo.com/1"))); | 736 GURL("http://foo.com/1"))); |
736 BookmarkNode* n3 = AsMutable(model_.AddURL(model_.bookmark_bar_node(), | 737 BookmarkNode* n3 = AsMutable(model_->AddURL(model_->bookmark_bar_node(), |
737 2, | 738 2, |
738 ASCIIToUTF16("blah"), | 739 ASCIIToUTF16("blah"), |
739 GURL("http://foo.com/2"))); | 740 GURL("http://foo.com/2"))); |
740 BookmarkNode* n4 = AsMutable(model_.AddURL(model_.bookmark_bar_node(), | 741 BookmarkNode* n4 = AsMutable(model_->AddURL(model_->bookmark_bar_node(), |
741 3, | 742 3, |
742 ASCIIToUTF16("blah"), | 743 ASCIIToUTF16("blah"), |
743 GURL("http://foo.com/3"))); | 744 GURL("http://foo.com/3"))); |
744 n1->set_date_added(base_time + TimeDelta::FromDays(4)); | 745 n1->set_date_added(base_time + TimeDelta::FromDays(4)); |
745 n2->set_date_added(base_time + TimeDelta::FromDays(3)); | 746 n2->set_date_added(base_time + TimeDelta::FromDays(3)); |
746 n3->set_date_added(base_time + TimeDelta::FromDays(2)); | 747 n3->set_date_added(base_time + TimeDelta::FromDays(2)); |
747 n4->set_date_added(base_time + TimeDelta::FromDays(1)); | 748 n4->set_date_added(base_time + TimeDelta::FromDays(1)); |
748 | 749 |
749 // Make sure order is honored. | 750 // Make sure order is honored. |
750 std::vector<const BookmarkNode*> recently_added; | 751 std::vector<const BookmarkNode*> recently_added; |
751 bookmark_utils::GetMostRecentlyAddedEntries(&model_, 2, &recently_added); | 752 bookmark_utils::GetMostRecentlyAddedEntries(model_.get(), 2, &recently_added); |
752 ASSERT_EQ(2U, recently_added.size()); | 753 ASSERT_EQ(2U, recently_added.size()); |
753 ASSERT_TRUE(n1 == recently_added[0]); | 754 ASSERT_TRUE(n1 == recently_added[0]); |
754 ASSERT_TRUE(n2 == recently_added[1]); | 755 ASSERT_TRUE(n2 == recently_added[1]); |
755 | 756 |
756 // swap 1 and 2, then check again. | 757 // swap 1 and 2, then check again. |
757 recently_added.clear(); | 758 recently_added.clear(); |
758 SwapDateAdded(n1, n2); | 759 SwapDateAdded(n1, n2); |
759 bookmark_utils::GetMostRecentlyAddedEntries(&model_, 4, &recently_added); | 760 bookmark_utils::GetMostRecentlyAddedEntries(model_.get(), 4, &recently_added); |
760 ASSERT_EQ(4U, recently_added.size()); | 761 ASSERT_EQ(4U, recently_added.size()); |
761 ASSERT_TRUE(n2 == recently_added[0]); | 762 ASSERT_TRUE(n2 == recently_added[0]); |
762 ASSERT_TRUE(n1 == recently_added[1]); | 763 ASSERT_TRUE(n1 == recently_added[1]); |
763 ASSERT_TRUE(n3 == recently_added[2]); | 764 ASSERT_TRUE(n3 == recently_added[2]); |
764 ASSERT_TRUE(n4 == recently_added[3]); | 765 ASSERT_TRUE(n4 == recently_added[3]); |
765 } | 766 } |
766 | 767 |
767 // Makes sure GetMostRecentlyAddedNodeForURL stays in sync. | 768 // Makes sure GetMostRecentlyAddedNodeForURL stays in sync. |
768 TEST_F(BookmarkModelTest, GetMostRecentlyAddedNodeForURL) { | 769 TEST_F(BookmarkModelTest, GetMostRecentlyAddedNodeForURL) { |
769 // Add a couple of nodes such that the following holds for the time of the | 770 // Add a couple of nodes such that the following holds for the time of the |
770 // nodes: n1 > n2 | 771 // nodes: n1 > n2 |
771 Time base_time = Time::Now(); | 772 Time base_time = Time::Now(); |
772 const GURL url("http://foo.com/0"); | 773 const GURL url("http://foo.com/0"); |
773 BookmarkNode* n1 = AsMutable(model_.AddURL( | 774 BookmarkNode* n1 = AsMutable(model_->AddURL( |
774 model_.bookmark_bar_node(), 0, ASCIIToUTF16("blah"), url)); | 775 model_->bookmark_bar_node(), 0, ASCIIToUTF16("blah"), url)); |
775 BookmarkNode* n2 = AsMutable(model_.AddURL( | 776 BookmarkNode* n2 = AsMutable(model_->AddURL( |
776 model_.bookmark_bar_node(), 1, ASCIIToUTF16("blah"), url)); | 777 model_->bookmark_bar_node(), 1, ASCIIToUTF16("blah"), url)); |
777 n1->set_date_added(base_time + TimeDelta::FromDays(4)); | 778 n1->set_date_added(base_time + TimeDelta::FromDays(4)); |
778 n2->set_date_added(base_time + TimeDelta::FromDays(3)); | 779 n2->set_date_added(base_time + TimeDelta::FromDays(3)); |
779 | 780 |
780 // Make sure order is honored. | 781 // Make sure order is honored. |
781 ASSERT_EQ(n1, model_.GetMostRecentlyAddedNodeForURL(url)); | 782 ASSERT_EQ(n1, model_->GetMostRecentlyAddedNodeForURL(url)); |
782 | 783 |
783 // swap 1 and 2, then check again. | 784 // swap 1 and 2, then check again. |
784 SwapDateAdded(n1, n2); | 785 SwapDateAdded(n1, n2); |
785 ASSERT_EQ(n2, model_.GetMostRecentlyAddedNodeForURL(url)); | 786 ASSERT_EQ(n2, model_->GetMostRecentlyAddedNodeForURL(url)); |
786 } | 787 } |
787 | 788 |
788 // Makes sure GetBookmarks removes duplicates. | 789 // Makes sure GetBookmarks removes duplicates. |
789 TEST_F(BookmarkModelTest, GetBookmarksWithDups) { | 790 TEST_F(BookmarkModelTest, GetBookmarksWithDups) { |
790 const GURL url("http://foo.com/0"); | 791 const GURL url("http://foo.com/0"); |
791 const base::string16 title(ASCIIToUTF16("blah")); | 792 const base::string16 title(ASCIIToUTF16("blah")); |
792 model_.AddURL(model_.bookmark_bar_node(), 0, title, url); | 793 model_->AddURL(model_->bookmark_bar_node(), 0, title, url); |
793 model_.AddURL(model_.bookmark_bar_node(), 1, title, url); | 794 model_->AddURL(model_->bookmark_bar_node(), 1, title, url); |
794 | 795 |
795 std::vector<BookmarkService::URLAndTitle> bookmarks; | 796 std::vector<BookmarkService::URLAndTitle> bookmarks; |
796 model_.GetBookmarks(&bookmarks); | 797 model_->GetBookmarks(&bookmarks); |
797 ASSERT_EQ(1U, bookmarks.size()); | 798 ASSERT_EQ(1U, bookmarks.size()); |
798 EXPECT_EQ(url, bookmarks[0].url); | 799 EXPECT_EQ(url, bookmarks[0].url); |
799 EXPECT_EQ(title, bookmarks[0].title); | 800 EXPECT_EQ(title, bookmarks[0].title); |
800 | 801 |
801 model_.AddURL(model_.bookmark_bar_node(), 2, ASCIIToUTF16("Title2"), url); | 802 model_->AddURL(model_->bookmark_bar_node(), 2, ASCIIToUTF16("Title2"), url); |
802 // Only one returned, even titles are different. | 803 // Only one returned, even titles are different. |
803 bookmarks.clear(); | 804 bookmarks.clear(); |
804 model_.GetBookmarks(&bookmarks); | 805 model_->GetBookmarks(&bookmarks); |
805 EXPECT_EQ(1U, bookmarks.size()); | 806 EXPECT_EQ(1U, bookmarks.size()); |
806 } | 807 } |
807 | 808 |
808 TEST_F(BookmarkModelTest, HasBookmarks) { | 809 TEST_F(BookmarkModelTest, HasBookmarks) { |
809 const GURL url("http://foo.com/"); | 810 const GURL url("http://foo.com/"); |
810 model_.AddURL(model_.bookmark_bar_node(), 0, ASCIIToUTF16("bar"), url); | 811 model_->AddURL(model_->bookmark_bar_node(), 0, ASCIIToUTF16("bar"), url); |
811 | 812 |
812 EXPECT_TRUE(model_.HasBookmarks()); | 813 EXPECT_TRUE(model_->HasBookmarks()); |
813 } | 814 } |
814 | 815 |
815 // See comment in PopulateNodeFromString. | 816 // See comment in PopulateNodeFromString. |
816 typedef ui::TreeNodeWithValue<BookmarkNode::Type> TestNode; | 817 typedef ui::TreeNodeWithValue<BookmarkNode::Type> TestNode; |
817 | 818 |
818 // Does the work of PopulateNodeFromString. index gives the index of the current | 819 // Does the work of PopulateNodeFromString. index gives the index of the current |
819 // element in description to process. | 820 // element in description to process. |
820 void PopulateNodeImpl(const std::vector<std::string>& description, | 821 void PopulateNodeImpl(const std::vector<std::string>& description, |
821 size_t* index, | 822 size_t* index, |
822 TestNode* parent) { | 823 TestNode* parent) { |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
994 VerifyModelMatchesNode(&mobile, bb_model_->mobile_node()); | 995 VerifyModelMatchesNode(&mobile, bb_model_->mobile_node()); |
995 VerifyNoDuplicateIDs(bb_model_); | 996 VerifyNoDuplicateIDs(bb_model_); |
996 } | 997 } |
997 } | 998 } |
998 | 999 |
999 TEST_F(BookmarkModelTest, Sort) { | 1000 TEST_F(BookmarkModelTest, Sort) { |
1000 // Populate the bookmark bar node with nodes for 'B', 'a', 'd' and 'C'. | 1001 // Populate the bookmark bar node with nodes for 'B', 'a', 'd' and 'C'. |
1001 // 'C' and 'a' are folders. | 1002 // 'C' and 'a' are folders. |
1002 TestNode bbn; | 1003 TestNode bbn; |
1003 PopulateNodeFromString("B [ a ] d [ a ]", &bbn); | 1004 PopulateNodeFromString("B [ a ] d [ a ]", &bbn); |
1004 const BookmarkNode* parent = model_.bookmark_bar_node(); | 1005 const BookmarkNode* parent = model_->bookmark_bar_node(); |
1005 PopulateBookmarkNode(&bbn, &model_, parent); | 1006 PopulateBookmarkNode(&bbn, model_.get(), parent); |
1006 | 1007 |
1007 BookmarkNode* child1 = AsMutable(parent->GetChild(1)); | 1008 BookmarkNode* child1 = AsMutable(parent->GetChild(1)); |
1008 child1->SetTitle(ASCIIToUTF16("a")); | 1009 child1->SetTitle(ASCIIToUTF16("a")); |
1009 delete child1->Remove(child1->GetChild(0)); | 1010 delete child1->Remove(child1->GetChild(0)); |
1010 BookmarkNode* child3 = AsMutable(parent->GetChild(3)); | 1011 BookmarkNode* child3 = AsMutable(parent->GetChild(3)); |
1011 child3->SetTitle(ASCIIToUTF16("C")); | 1012 child3->SetTitle(ASCIIToUTF16("C")); |
1012 delete child3->Remove(child3->GetChild(0)); | 1013 delete child3->Remove(child3->GetChild(0)); |
1013 | 1014 |
1014 ClearCounts(); | 1015 ClearCounts(); |
1015 | 1016 |
1016 // Sort the children of the bookmark bar node. | 1017 // Sort the children of the bookmark bar node. |
1017 model_.SortChildren(parent); | 1018 model_->SortChildren(parent); |
1018 | 1019 |
1019 // Make sure we were notified. | 1020 // Make sure we were notified. |
1020 AssertObserverCount(0, 0, 0, 0, 1, 0, 0, 1, 0); | 1021 AssertObserverCount(0, 0, 0, 0, 1, 0, 0, 1, 0); |
1021 | 1022 |
1022 // Make sure the order matches (remember, 'a' and 'C' are folders and | 1023 // Make sure the order matches (remember, 'a' and 'C' are folders and |
1023 // come first). | 1024 // come first). |
1024 EXPECT_EQ(parent->GetChild(0)->GetTitle(), ASCIIToUTF16("a")); | 1025 EXPECT_EQ(parent->GetChild(0)->GetTitle(), ASCIIToUTF16("a")); |
1025 EXPECT_EQ(parent->GetChild(1)->GetTitle(), ASCIIToUTF16("C")); | 1026 EXPECT_EQ(parent->GetChild(1)->GetTitle(), ASCIIToUTF16("C")); |
1026 EXPECT_EQ(parent->GetChild(2)->GetTitle(), ASCIIToUTF16("B")); | 1027 EXPECT_EQ(parent->GetChild(2)->GetTitle(), ASCIIToUTF16("B")); |
1027 EXPECT_EQ(parent->GetChild(3)->GetTitle(), ASCIIToUTF16("d")); | 1028 EXPECT_EQ(parent->GetChild(3)->GetTitle(), ASCIIToUTF16("d")); |
1028 } | 1029 } |
1029 | 1030 |
1030 TEST_F(BookmarkModelTest, Reorder) { | 1031 TEST_F(BookmarkModelTest, Reorder) { |
1031 // Populate the bookmark bar node with nodes 'A', 'B', 'C' and 'D'. | 1032 // Populate the bookmark bar node with nodes 'A', 'B', 'C' and 'D'. |
1032 TestNode bbn; | 1033 TestNode bbn; |
1033 PopulateNodeFromString("A B C D", &bbn); | 1034 PopulateNodeFromString("A B C D", &bbn); |
1034 BookmarkNode* parent = AsMutable(model_.bookmark_bar_node()); | 1035 BookmarkNode* parent = AsMutable(model_->bookmark_bar_node()); |
1035 PopulateBookmarkNode(&bbn, &model_, parent); | 1036 PopulateBookmarkNode(&bbn, model_.get(), parent); |
1036 | 1037 |
1037 ClearCounts(); | 1038 ClearCounts(); |
1038 | 1039 |
1039 // Reorder bar node's bookmarks in reverse order. | 1040 // Reorder bar node's bookmarks in reverse order. |
1040 std::vector<const BookmarkNode*> new_order; | 1041 std::vector<const BookmarkNode*> new_order; |
1041 new_order.push_back(parent->GetChild(3)); | 1042 new_order.push_back(parent->GetChild(3)); |
1042 new_order.push_back(parent->GetChild(2)); | 1043 new_order.push_back(parent->GetChild(2)); |
1043 new_order.push_back(parent->GetChild(1)); | 1044 new_order.push_back(parent->GetChild(1)); |
1044 new_order.push_back(parent->GetChild(0)); | 1045 new_order.push_back(parent->GetChild(0)); |
1045 model_.ReorderChildren(parent, new_order); | 1046 model_->ReorderChildren(parent, new_order); |
1046 | 1047 |
1047 // Make sure we were notified. | 1048 // Make sure we were notified. |
1048 AssertObserverCount(0, 0, 0, 0, 1, 0, 0, 1, 0); | 1049 AssertObserverCount(0, 0, 0, 0, 1, 0, 0, 1, 0); |
1049 | 1050 |
1050 // Make sure the order matches is correct (it should be reversed). | 1051 // Make sure the order matches is correct (it should be reversed). |
1051 ASSERT_EQ(4, parent->child_count()); | 1052 ASSERT_EQ(4, parent->child_count()); |
1052 EXPECT_EQ("D", base::UTF16ToASCII(parent->GetChild(0)->GetTitle())); | 1053 EXPECT_EQ("D", base::UTF16ToASCII(parent->GetChild(0)->GetTitle())); |
1053 EXPECT_EQ("C", base::UTF16ToASCII(parent->GetChild(1)->GetTitle())); | 1054 EXPECT_EQ("C", base::UTF16ToASCII(parent->GetChild(1)->GetTitle())); |
1054 EXPECT_EQ("B", base::UTF16ToASCII(parent->GetChild(2)->GetTitle())); | 1055 EXPECT_EQ("B", base::UTF16ToASCII(parent->GetChild(2)->GetTitle())); |
1055 EXPECT_EQ("A", base::UTF16ToASCII(parent->GetChild(3)->GetTitle())); | 1056 EXPECT_EQ("A", base::UTF16ToASCII(parent->GetChild(3)->GetTitle())); |
1056 } | 1057 } |
1057 | 1058 |
1058 TEST_F(BookmarkModelTest, NodeVisibility) { | 1059 TEST_F(BookmarkModelTest, NodeVisibility) { |
1059 EXPECT_TRUE(model_.bookmark_bar_node()->IsVisible()); | 1060 EXPECT_TRUE(model_->bookmark_bar_node()->IsVisible()); |
1060 EXPECT_TRUE(model_.other_node()->IsVisible()); | 1061 EXPECT_TRUE(model_->other_node()->IsVisible()); |
1061 // Mobile node invisible by default | 1062 // Mobile node invisible by default |
1062 EXPECT_FALSE(model_.mobile_node()->IsVisible()); | 1063 EXPECT_FALSE(model_->mobile_node()->IsVisible()); |
1063 | 1064 |
1064 // Change visibility of permanent nodes. | 1065 // Change visibility of permanent nodes. |
1065 model_.SetPermanentNodeVisible(BookmarkNode::BOOKMARK_BAR, false); | 1066 model_->SetPermanentNodeVisible(BookmarkNode::BOOKMARK_BAR, false); |
1066 EXPECT_FALSE(model_.bookmark_bar_node()->IsVisible()); | 1067 EXPECT_FALSE(model_->bookmark_bar_node()->IsVisible()); |
1067 model_.SetPermanentNodeVisible(BookmarkNode::OTHER_NODE, false); | 1068 model_->SetPermanentNodeVisible(BookmarkNode::OTHER_NODE, false); |
1068 EXPECT_FALSE(model_.other_node()->IsVisible()); | 1069 EXPECT_FALSE(model_->other_node()->IsVisible()); |
1069 model_.SetPermanentNodeVisible(BookmarkNode::MOBILE, true); | 1070 model_->SetPermanentNodeVisible(BookmarkNode::MOBILE, true); |
1070 EXPECT_TRUE(model_.mobile_node()->IsVisible()); | 1071 EXPECT_TRUE(model_->mobile_node()->IsVisible()); |
1071 | 1072 |
1072 // Arbitrary node should be visible | 1073 // Arbitrary node should be visible |
1073 TestNode bbn; | 1074 TestNode bbn; |
1074 PopulateNodeFromString("B", &bbn); | 1075 PopulateNodeFromString("B", &bbn); |
1075 const BookmarkNode* parent = model_.bookmark_bar_node(); | 1076 const BookmarkNode* parent = model_->bookmark_bar_node(); |
1076 PopulateBookmarkNode(&bbn, &model_, parent); | 1077 PopulateBookmarkNode(&bbn, model_.get(), parent); |
1077 EXPECT_TRUE(parent->GetChild(0)->IsVisible()); | 1078 EXPECT_TRUE(parent->GetChild(0)->IsVisible()); |
1078 | 1079 |
1079 // Bookmark bar should be visible now that it has a child. | 1080 // Bookmark bar should be visible now that it has a child. |
1080 EXPECT_TRUE(model_.bookmark_bar_node()->IsVisible()); | 1081 EXPECT_TRUE(model_->bookmark_bar_node()->IsVisible()); |
1081 } | 1082 } |
1082 | 1083 |
1083 TEST_F(BookmarkModelTest, MobileNodeVisibileWithChildren) { | 1084 TEST_F(BookmarkModelTest, MobileNodeVisibileWithChildren) { |
1084 const BookmarkNode* root = model_.mobile_node(); | 1085 const BookmarkNode* root = model_->mobile_node(); |
1085 const base::string16 title(ASCIIToUTF16("foo")); | 1086 const base::string16 title(ASCIIToUTF16("foo")); |
1086 const GURL url("http://foo.com"); | 1087 const GURL url("http://foo.com"); |
1087 | 1088 |
1088 model_.AddURL(root, 0, title, url); | 1089 model_->AddURL(root, 0, title, url); |
1089 EXPECT_TRUE(model_.mobile_node()->IsVisible()); | 1090 EXPECT_TRUE(model_->mobile_node()->IsVisible()); |
1090 } | 1091 } |
1091 | 1092 |
1092 TEST_F(BookmarkModelTest, ExtensiveChangesObserver) { | 1093 TEST_F(BookmarkModelTest, ExtensiveChangesObserver) { |
1093 AssertExtensiveChangesObserverCount(0, 0); | 1094 AssertExtensiveChangesObserverCount(0, 0); |
1094 EXPECT_FALSE(model_.IsDoingExtensiveChanges()); | 1095 EXPECT_FALSE(model_->IsDoingExtensiveChanges()); |
1095 model_.BeginExtensiveChanges(); | 1096 model_->BeginExtensiveChanges(); |
1096 EXPECT_TRUE(model_.IsDoingExtensiveChanges()); | 1097 EXPECT_TRUE(model_->IsDoingExtensiveChanges()); |
1097 AssertExtensiveChangesObserverCount(1, 0); | 1098 AssertExtensiveChangesObserverCount(1, 0); |
1098 model_.EndExtensiveChanges(); | 1099 model_->EndExtensiveChanges(); |
1099 EXPECT_FALSE(model_.IsDoingExtensiveChanges()); | 1100 EXPECT_FALSE(model_->IsDoingExtensiveChanges()); |
1100 AssertExtensiveChangesObserverCount(1, 1); | 1101 AssertExtensiveChangesObserverCount(1, 1); |
1101 } | 1102 } |
1102 | 1103 |
1103 TEST_F(BookmarkModelTest, MultipleExtensiveChangesObserver) { | 1104 TEST_F(BookmarkModelTest, MultipleExtensiveChangesObserver) { |
1104 AssertExtensiveChangesObserverCount(0, 0); | 1105 AssertExtensiveChangesObserverCount(0, 0); |
1105 EXPECT_FALSE(model_.IsDoingExtensiveChanges()); | 1106 EXPECT_FALSE(model_->IsDoingExtensiveChanges()); |
1106 model_.BeginExtensiveChanges(); | 1107 model_->BeginExtensiveChanges(); |
1107 EXPECT_TRUE(model_.IsDoingExtensiveChanges()); | 1108 EXPECT_TRUE(model_->IsDoingExtensiveChanges()); |
1108 AssertExtensiveChangesObserverCount(1, 0); | 1109 AssertExtensiveChangesObserverCount(1, 0); |
1109 model_.BeginExtensiveChanges(); | 1110 model_->BeginExtensiveChanges(); |
1110 EXPECT_TRUE(model_.IsDoingExtensiveChanges()); | 1111 EXPECT_TRUE(model_->IsDoingExtensiveChanges()); |
1111 AssertExtensiveChangesObserverCount(1, 0); | 1112 AssertExtensiveChangesObserverCount(1, 0); |
1112 model_.EndExtensiveChanges(); | 1113 model_->EndExtensiveChanges(); |
1113 EXPECT_TRUE(model_.IsDoingExtensiveChanges()); | 1114 EXPECT_TRUE(model_->IsDoingExtensiveChanges()); |
1114 AssertExtensiveChangesObserverCount(1, 0); | 1115 AssertExtensiveChangesObserverCount(1, 0); |
1115 model_.EndExtensiveChanges(); | 1116 model_->EndExtensiveChanges(); |
1116 EXPECT_FALSE(model_.IsDoingExtensiveChanges()); | 1117 EXPECT_FALSE(model_->IsDoingExtensiveChanges()); |
1117 AssertExtensiveChangesObserverCount(1, 1); | 1118 AssertExtensiveChangesObserverCount(1, 1); |
1118 } | 1119 } |
1119 | 1120 |
1120 TEST(BookmarkNodeTest, NodeMetaInfo) { | 1121 TEST(BookmarkNodeTest, NodeMetaInfo) { |
1121 GURL url; | 1122 GURL url; |
1122 BookmarkNode node(url); | 1123 BookmarkNode node(url); |
1123 EXPECT_FALSE(node.GetMetaInfoMap()); | 1124 EXPECT_FALSE(node.GetMetaInfoMap()); |
1124 | 1125 |
1125 EXPECT_TRUE(node.SetMetaInfo("key1", "value1")); | 1126 EXPECT_TRUE(node.SetMetaInfo("key1", "value1")); |
1126 std::string out_value; | 1127 std::string out_value; |
(...skipping 16 matching lines...) Expand all Loading... |
1143 EXPECT_TRUE(node.DeleteMetaInfo("key2.subkey2.leaf")); | 1144 EXPECT_TRUE(node.DeleteMetaInfo("key2.subkey2.leaf")); |
1144 EXPECT_FALSE(node.DeleteMetaInfo("key3")); | 1145 EXPECT_FALSE(node.DeleteMetaInfo("key3")); |
1145 EXPECT_FALSE(node.GetMetaInfo("key1", &out_value)); | 1146 EXPECT_FALSE(node.GetMetaInfo("key1", &out_value)); |
1146 EXPECT_FALSE(node.GetMetaInfo("key2.subkey1", &out_value)); | 1147 EXPECT_FALSE(node.GetMetaInfo("key2.subkey1", &out_value)); |
1147 EXPECT_FALSE(node.GetMetaInfo("key2.subkey2", &out_value)); | 1148 EXPECT_FALSE(node.GetMetaInfo("key2.subkey2", &out_value)); |
1148 EXPECT_FALSE(node.GetMetaInfo("key2.subkey2.leaf", &out_value)); | 1149 EXPECT_FALSE(node.GetMetaInfo("key2.subkey2.leaf", &out_value)); |
1149 EXPECT_FALSE(node.GetMetaInfoMap()); | 1150 EXPECT_FALSE(node.GetMetaInfoMap()); |
1150 } | 1151 } |
1151 | 1152 |
1152 } // namespace | 1153 } // namespace |
OLD | NEW |