Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Side by Side Diff: chrome/browser/bookmarks/bookmark_model_unittest.cc

Issue 242693003: Introduce BookmarkClient interface to abstract embedder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Work around STL android bug Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/bookmarks/bookmark_model_factory.cc ('k') | chrome/browser/bookmarks/bookmark_storage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698