| Index: chrome/browser/chromeos/contacts/contact_database_unittest.cc
|
| diff --git a/chrome/browser/chromeos/contacts/contact_database_unittest.cc b/chrome/browser/chromeos/contacts/contact_database_unittest.cc
|
| index 31f8e4055fed7a77ebced524c20d8ffc0a8dcd39..751bd0210ec3dae35fd94c87c25556ad5d6e5c40 100644
|
| --- a/chrome/browser/chromeos/contacts/contact_database_unittest.cc
|
| +++ b/chrome/browser/chromeos/contacts/contact_database_unittest.cc
|
| @@ -77,11 +77,16 @@ class ContactDatabaseTest : public testing::Test {
|
|
|
| // Calls ContactDatabase::SaveContacts() and blocks until the operation is
|
| // complete.
|
| - void SaveContacts(scoped_ptr<ContactPointers> contacts,
|
| + void SaveContacts(scoped_ptr<ContactPointers> contacts_to_save,
|
| + scoped_ptr<ContactDatabaseInterface::ContactIds>
|
| + contact_ids_to_delete,
|
| scoped_ptr<UpdateMetadata> metadata,
|
| bool is_full_update) {
|
| CHECK(db_);
|
| - db_->SaveContacts(contacts.Pass(), metadata.Pass(), is_full_update,
|
| + db_->SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata.Pass(),
|
| + is_full_update,
|
| base::Bind(&ContactDatabaseTest::OnContactsSaved,
|
| base::Unretained(this)));
|
| message_loop_.Run();
|
| @@ -165,12 +170,17 @@ TEST_F(ContactDatabaseTest, SaveAndReload) {
|
| SetPhoto(gfx::Size(20, 20), contact.get());
|
| scoped_ptr<ContactPointers> contacts_to_save(new ContactPointers);
|
| contacts_to_save->push_back(contact.get());
|
| + scoped_ptr<ContactDatabaseInterface::ContactIds> contact_ids_to_delete(
|
| + new ContactDatabaseInterface::ContactIds);
|
|
|
| const int64 kLastUpdateTime = 1234;
|
| scoped_ptr<UpdateMetadata> metadata_to_save(new UpdateMetadata);
|
| metadata_to_save->set_last_update_start_time(kLastUpdateTime);
|
|
|
| - SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + true);
|
| scoped_ptr<ScopedVector<Contact> > loaded_contacts;
|
| scoped_ptr<UpdateMetadata> loaded_metadata;
|
| LoadContacts(&loaded_contacts, &loaded_metadata);
|
| @@ -190,10 +200,14 @@ TEST_F(ContactDatabaseTest, SaveAndReload) {
|
| SetPhoto(gfx::Size(64, 64), contact.get());
|
| contacts_to_save.reset(new ContactPointers);
|
| contacts_to_save->push_back(contact.get());
|
| + contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
|
| metadata_to_save.reset(new UpdateMetadata);
|
| const int64 kNewLastUpdateTime = 5678;
|
| metadata_to_save->set_last_update_start_time(kNewLastUpdateTime);
|
| - SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + true);
|
|
|
| LoadContacts(&loaded_contacts, &loaded_metadata);
|
| EXPECT_EQ(VarContactsToString(1, contact.get()),
|
| @@ -219,8 +233,13 @@ TEST_F(ContactDatabaseTest, FullAndIncrementalUpdates) {
|
| scoped_ptr<ContactPointers> contacts_to_save(new ContactPointers);
|
| contacts_to_save->push_back(contact1.get());
|
| contacts_to_save->push_back(contact2.get());
|
| + scoped_ptr<ContactDatabaseInterface::ContactIds> contact_ids_to_delete(
|
| + new ContactDatabaseInterface::ContactIds);
|
| scoped_ptr<UpdateMetadata> metadata_to_save(new UpdateMetadata);
|
| - SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + true);
|
|
|
| scoped_ptr<ScopedVector<Contact> > loaded_contacts;
|
| scoped_ptr<UpdateMetadata> loaded_metadata;
|
| @@ -234,8 +253,12 @@ TEST_F(ContactDatabaseTest, FullAndIncrementalUpdates) {
|
| "", true, contact2.get());
|
| contacts_to_save.reset(new ContactPointers);
|
| contacts_to_save->push_back(contact2.get());
|
| + contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
|
| metadata_to_save.reset(new UpdateMetadata);
|
| - SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), false);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + false);
|
| LoadContacts(&loaded_contacts, &loaded_metadata);
|
| EXPECT_EQ(VarContactsToString(2, contact1.get(), contact2.get()),
|
| ContactsToString(*loaded_contacts));
|
| @@ -243,10 +266,14 @@ TEST_F(ContactDatabaseTest, FullAndIncrementalUpdates) {
|
| // Do an empty incremental update and check that the metadata is still
|
| // updated.
|
| contacts_to_save.reset(new ContactPointers);
|
| + contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
|
| metadata_to_save.reset(new UpdateMetadata);
|
| const int64 kLastUpdateTime = 1234;
|
| metadata_to_save->set_last_update_start_time(kLastUpdateTime);
|
| - SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), false);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + false);
|
| LoadContacts(&loaded_contacts, &loaded_metadata);
|
| EXPECT_EQ(VarContactsToString(2, contact1.get(), contact2.get()),
|
| ContactsToString(*loaded_contacts));
|
| @@ -261,16 +288,24 @@ TEST_F(ContactDatabaseTest, FullAndIncrementalUpdates) {
|
| "", true, contact1.get());
|
| contacts_to_save.reset(new ContactPointers);
|
| contacts_to_save->push_back(contact1.get());
|
| + contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
|
| metadata_to_save.reset(new UpdateMetadata);
|
| - SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + true);
|
| LoadContacts(&loaded_contacts, &loaded_metadata);
|
| EXPECT_EQ(VarContactsToString(1, contact1.get()),
|
| ContactsToString(*loaded_contacts));
|
|
|
| // Do a full update including no contacts. The database should be cleared.
|
| contacts_to_save.reset(new ContactPointers);
|
| + contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
|
| metadata_to_save.reset(new UpdateMetadata);
|
| - SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + true);
|
| LoadContacts(&loaded_contacts, &loaded_metadata);
|
| EXPECT_TRUE(loaded_contacts->empty());
|
| }
|
| @@ -292,8 +327,13 @@ TEST_F(ContactDatabaseTest, DeleteWhenCorrupt) {
|
| InitContact("1", "1", false, contact.get());
|
| scoped_ptr<ContactPointers> contacts_to_save(new ContactPointers);
|
| contacts_to_save->push_back(contact.get());
|
| + scoped_ptr<ContactDatabaseInterface::ContactIds> contact_ids_to_delete(
|
| + new ContactDatabaseInterface::ContactIds);
|
| scoped_ptr<UpdateMetadata> metadata_to_save(new UpdateMetadata);
|
| - SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + true);
|
|
|
| scoped_ptr<ScopedVector<Contact> > loaded_contacts;
|
| scoped_ptr<UpdateMetadata> loaded_metadata;
|
| @@ -302,5 +342,75 @@ TEST_F(ContactDatabaseTest, DeleteWhenCorrupt) {
|
| ContactsToString(*loaded_contacts));
|
| }
|
|
|
| +TEST_F(ContactDatabaseTest, DeleteRequestedContacts) {
|
| + // Insert two contacts into the database with a full update.
|
| + const std::string kContactId1 = "contact_id_1";
|
| + scoped_ptr<Contact> contact1(new Contact);
|
| + InitContact(kContactId1, "1", false, contact1.get());
|
| + const std::string kContactId2 = "contact_id_2";
|
| + scoped_ptr<Contact> contact2(new Contact);
|
| + InitContact(kContactId2, "2", false, contact2.get());
|
| +
|
| + scoped_ptr<ContactPointers> contacts_to_save(new ContactPointers);
|
| + contacts_to_save->push_back(contact1.get());
|
| + contacts_to_save->push_back(contact2.get());
|
| + scoped_ptr<ContactDatabaseInterface::ContactIds> contact_ids_to_delete(
|
| + new ContactDatabaseInterface::ContactIds);
|
| + scoped_ptr<UpdateMetadata> metadata_to_save(new UpdateMetadata);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + true);
|
| +
|
| + // Do an incremental update that inserts a third contact and deletes the first
|
| + // contact.
|
| + const std::string kContactId3 = "contact_id_3";
|
| + scoped_ptr<Contact> contact3(new Contact);
|
| + InitContact(kContactId3, "3", false, contact3.get());
|
| +
|
| + contacts_to_save.reset(new ContactPointers);
|
| + contacts_to_save->push_back(contact3.get());
|
| + contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
|
| + contact_ids_to_delete->push_back(kContactId1);
|
| + metadata_to_save.reset(new UpdateMetadata);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + false);
|
| +
|
| + // LoadContacts() should return only the second and third contacts.
|
| + scoped_ptr<ScopedVector<Contact> > loaded_contacts;
|
| + scoped_ptr<UpdateMetadata> loaded_metadata;
|
| + LoadContacts(&loaded_contacts, &loaded_metadata);
|
| + EXPECT_EQ(VarContactsToString(2, contact2.get(), contact3.get()),
|
| + ContactsToString(*loaded_contacts));
|
| +
|
| + // Do another incremental update that deletes the second contact.
|
| + contacts_to_save.reset(new ContactPointers);
|
| + contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
|
| + contact_ids_to_delete->push_back(kContactId2);
|
| + metadata_to_save.reset(new UpdateMetadata);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + false);
|
| + LoadContacts(&loaded_contacts, &loaded_metadata);
|
| + EXPECT_EQ(VarContactsToString(1, contact3.get()),
|
| + ContactsToString(*loaded_contacts));
|
| +
|
| + // Deleting a contact that isn't present should be a no-op.
|
| + contacts_to_save.reset(new ContactPointers);
|
| + contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
|
| + contact_ids_to_delete->push_back("bogus_id");
|
| + metadata_to_save.reset(new UpdateMetadata);
|
| + SaveContacts(contacts_to_save.Pass(),
|
| + contact_ids_to_delete.Pass(),
|
| + metadata_to_save.Pass(),
|
| + false);
|
| + LoadContacts(&loaded_contacts, &loaded_metadata);
|
| + EXPECT_EQ(VarContactsToString(1, contact3.get()),
|
| + ContactsToString(*loaded_contacts));
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace contacts
|
|
|