OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/dom_distiller/core/dom_distiller_store.h" | 5 #include "components/dom_distiller/core/dom_distiller_store.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 |
8 #include <utility> | 9 #include <utility> |
9 | 10 |
10 #include "base/bind.h" | 11 #include "base/bind.h" |
11 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
12 #include "base/files/scoped_temp_dir.h" | 13 #include "base/files/scoped_temp_dir.h" |
| 14 #include "base/memory/ptr_util.h" |
13 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
14 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
15 #include "base/time/time.h" | 17 #include "base/time/time.h" |
16 #include "components/dom_distiller/core/article_entry.h" | 18 #include "components/dom_distiller/core/article_entry.h" |
17 #include "components/dom_distiller/core/dom_distiller_test_util.h" | 19 #include "components/dom_distiller/core/dom_distiller_test_util.h" |
18 #include "components/leveldb_proto/testing/fake_db.h" | 20 #include "components/leveldb_proto/testing/fake_db.h" |
19 #include "sync/api/attachments/attachment_id.h" | 21 #include "sync/api/attachments/attachment_id.h" |
20 #include "sync/internal_api/public/attachments/attachment_service_proxy_for_test
.h" | 22 #include "sync/internal_api/public/attachments/attachment_service_proxy_for_test
.h" |
21 #include "sync/protocol/sync.pb.h" | 23 #include "sync/protocol/sync.pb.h" |
22 #include "testing/gmock/include/gmock/gmock.h" | 24 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 void CreateStore() { | 149 void CreateStore() { |
148 fake_db_ = new FakeDB<ArticleEntry>(&db_model_); | 150 fake_db_ = new FakeDB<ArticleEntry>(&db_model_); |
149 store_.reset(test::util::CreateStoreWithFakeDB(fake_db_, store_model_)); | 151 store_.reset(test::util::CreateStoreWithFakeDB(fake_db_, store_model_)); |
150 } | 152 } |
151 | 153 |
152 void StartSyncing() { | 154 void StartSyncing() { |
153 fake_sync_processor_ = new FakeSyncChangeProcessor(&sync_model_); | 155 fake_sync_processor_ = new FakeSyncChangeProcessor(&sync_model_); |
154 | 156 |
155 store_->MergeDataAndStartSyncing( | 157 store_->MergeDataAndStartSyncing( |
156 kDomDistillerModelType, SyncDataFromEntryMap(sync_model_), | 158 kDomDistillerModelType, SyncDataFromEntryMap(sync_model_), |
157 make_scoped_ptr<SyncChangeProcessor>(fake_sync_processor_), | 159 base::WrapUnique<SyncChangeProcessor>(fake_sync_processor_), |
158 scoped_ptr<SyncErrorFactory>(new FakeSyncErrorFactory())); | 160 std::unique_ptr<SyncErrorFactory>(new FakeSyncErrorFactory())); |
159 } | 161 } |
160 | 162 |
161 protected: | 163 protected: |
162 SyncData CreateSyncData(const ArticleEntry& entry) { | 164 SyncData CreateSyncData(const ArticleEntry& entry) { |
163 EntitySpecifics specifics = SpecificsFromEntry(entry); | 165 EntitySpecifics specifics = SpecificsFromEntry(entry); |
164 return SyncData::CreateRemoteData( | 166 return SyncData::CreateRemoteData( |
165 next_sync_id_++, specifics, Time::UnixEpoch(), | 167 next_sync_id_++, specifics, Time::UnixEpoch(), |
166 syncer::AttachmentIdList(), | 168 syncer::AttachmentIdList(), |
167 syncer::AttachmentServiceProxyForTest::Create()); | 169 syncer::AttachmentServiceProxyForTest::Create()); |
168 } | 170 } |
169 | 171 |
170 SyncDataList SyncDataFromEntryMap(const EntryMap& model) { | 172 SyncDataList SyncDataFromEntryMap(const EntryMap& model) { |
171 SyncDataList data; | 173 SyncDataList data; |
172 for (EntryMap::const_iterator it = model.begin(); it != model.end(); ++it) { | 174 for (EntryMap::const_iterator it = model.begin(); it != model.end(); ++it) { |
173 data.push_back(CreateSyncData(it->second)); | 175 data.push_back(CreateSyncData(it->second)); |
174 } | 176 } |
175 return data; | 177 return data; |
176 } | 178 } |
177 | 179 |
178 base::MessageLoop message_loop_; | 180 base::MessageLoop message_loop_; |
179 | 181 |
180 EntryMap db_model_; | 182 EntryMap db_model_; |
181 EntryMap sync_model_; | 183 EntryMap sync_model_; |
182 FakeDB<ArticleEntry>::EntryMap store_model_; | 184 FakeDB<ArticleEntry>::EntryMap store_model_; |
183 | 185 |
184 scoped_ptr<DomDistillerStore> store_; | 186 std::unique_ptr<DomDistillerStore> store_; |
185 | 187 |
186 // Both owned by |store_|. | 188 // Both owned by |store_|. |
187 FakeDB<ArticleEntry>* fake_db_; | 189 FakeDB<ArticleEntry>* fake_db_; |
188 FakeSyncChangeProcessor* fake_sync_processor_; | 190 FakeSyncChangeProcessor* fake_sync_processor_; |
189 | 191 |
190 int64_t next_sync_id_; | 192 int64_t next_sync_id_; |
191 }; | 193 }; |
192 | 194 |
193 AssertionResult AreEntriesEqual(const DomDistillerStore::EntryVector& entries, | 195 AssertionResult AreEntriesEqual(const DomDistillerStore::EntryVector& entries, |
194 EntryMap expected_entries) { | 196 EntryMap expected_entries) { |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 store_->RemoveEntry(updated_entry); | 311 store_->RemoveEntry(updated_entry); |
310 EXPECT_FALSE(store_->UpdateEntry(updated_entry)); | 312 EXPECT_FALSE(store_->UpdateEntry(updated_entry)); |
311 EXPECT_FALSE(store_->UpdateEntry(GetSampleEntry(0))); | 313 EXPECT_FALSE(store_->UpdateEntry(GetSampleEntry(0))); |
312 } | 314 } |
313 | 315 |
314 class MockAttachmentsCallbacks { | 316 class MockAttachmentsCallbacks { |
315 public: | 317 public: |
316 MOCK_METHOD2(Get, void(bool, ArticleAttachmentsData*)); | 318 MOCK_METHOD2(Get, void(bool, ArticleAttachmentsData*)); |
317 MOCK_METHOD1(Update, void(bool)); | 319 MOCK_METHOD1(Update, void(bool)); |
318 | 320 |
319 void GetImpl(bool success, scoped_ptr<ArticleAttachmentsData> attachments) { | 321 void GetImpl(bool success, |
| 322 std::unique_ptr<ArticleAttachmentsData> attachments) { |
320 Get(success, attachments.get()); | 323 Get(success, attachments.get()); |
321 } | 324 } |
322 | 325 |
323 DomDistillerStore::UpdateAttachmentsCallback UpdateCallback() { | 326 DomDistillerStore::UpdateAttachmentsCallback UpdateCallback() { |
324 return base::Bind(&MockAttachmentsCallbacks::Update, | 327 return base::Bind(&MockAttachmentsCallbacks::Update, |
325 base::Unretained(this)); | 328 base::Unretained(this)); |
326 } | 329 } |
327 | 330 |
328 DomDistillerStore::GetAttachmentsCallback GetCallback() { | 331 DomDistillerStore::GetAttachmentsCallback GetCallback() { |
329 return base::Bind(&MockAttachmentsCallbacks::GetImpl, | 332 return base::Bind(&MockAttachmentsCallbacks::GetImpl, |
(...skipping 14 matching lines...) Expand all Loading... |
344 store_->GetAttachments(entry.entry_id(), callbacks.GetCallback()); | 347 store_->GetAttachments(entry.entry_id(), callbacks.GetCallback()); |
345 EXPECT_CALL(callbacks, Get(false, _)); | 348 EXPECT_CALL(callbacks, Get(false, _)); |
346 base::RunLoop().RunUntilIdle(); | 349 base::RunLoop().RunUntilIdle(); |
347 | 350 |
348 ArticleAttachmentsData attachments, got_attachments; | 351 ArticleAttachmentsData attachments, got_attachments; |
349 DistilledArticleProto article_proto; | 352 DistilledArticleProto article_proto; |
350 article_proto.set_title("A title"); | 353 article_proto.set_title("A title"); |
351 attachments.set_distilled_article(article_proto); | 354 attachments.set_distilled_article(article_proto); |
352 store_->UpdateAttachments( | 355 store_->UpdateAttachments( |
353 entry.entry_id(), | 356 entry.entry_id(), |
354 make_scoped_ptr(new ArticleAttachmentsData(attachments)), | 357 base::WrapUnique(new ArticleAttachmentsData(attachments)), |
355 callbacks.UpdateCallback()); | 358 callbacks.UpdateCallback()); |
356 EXPECT_CALL(callbacks, Update(true)); | 359 EXPECT_CALL(callbacks, Update(true)); |
357 base::RunLoop().RunUntilIdle(); | 360 base::RunLoop().RunUntilIdle(); |
358 | 361 |
359 store_->GetAttachments(entry.entry_id(), callbacks.GetCallback()); | 362 store_->GetAttachments(entry.entry_id(), callbacks.GetCallback()); |
360 EXPECT_CALL(callbacks, Get(true, _)) | 363 EXPECT_CALL(callbacks, Get(true, _)) |
361 .WillOnce(SaveArgPointee<1>(&got_attachments)); | 364 .WillOnce(SaveArgPointee<1>(&got_attachments)); |
362 base::RunLoop().RunUntilIdle(); | 365 base::RunLoop().RunUntilIdle(); |
363 | 366 |
364 EXPECT_EQ(attachments.ToString(), | 367 EXPECT_EQ(attachments.ToString(), |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 AddEntry(GetSampleEntry(3), &expected_model); | 505 AddEntry(GetSampleEntry(3), &expected_model); |
503 AddEntry(GetSampleEntry(4), &expected_model); | 506 AddEntry(GetSampleEntry(4), &expected_model); |
504 | 507 |
505 CreateStore(); | 508 CreateStore(); |
506 | 509 |
507 fake_db_->InitCallback(true); | 510 fake_db_->InitCallback(true); |
508 fake_db_->LoadCallback(true); | 511 fake_db_->LoadCallback(true); |
509 | 512 |
510 FakeDB<ArticleEntry>* other_fake_db = | 513 FakeDB<ArticleEntry>* other_fake_db = |
511 new FakeDB<ArticleEntry>(&other_db_model); | 514 new FakeDB<ArticleEntry>(&other_db_model); |
512 scoped_ptr<DomDistillerStore> owned_other_store(new DomDistillerStore( | 515 std::unique_ptr<DomDistillerStore> owned_other_store(new DomDistillerStore( |
513 scoped_ptr<leveldb_proto::ProtoDatabase<ArticleEntry> >(other_fake_db), | 516 std::unique_ptr<leveldb_proto::ProtoDatabase<ArticleEntry>>( |
| 517 other_fake_db), |
514 std::vector<ArticleEntry>(), | 518 std::vector<ArticleEntry>(), |
515 base::FilePath(FILE_PATH_LITERAL("/fake/other/path")))); | 519 base::FilePath(FILE_PATH_LITERAL("/fake/other/path")))); |
516 DomDistillerStore* other_store = owned_other_store.get(); | 520 DomDistillerStore* other_store = owned_other_store.get(); |
517 other_fake_db->InitCallback(true); | 521 other_fake_db->InitCallback(true); |
518 other_fake_db->LoadCallback(true); | 522 other_fake_db->LoadCallback(true); |
519 | 523 |
520 EXPECT_FALSE(AreEntriesEqual(store_->GetEntries(), expected_model)); | 524 EXPECT_FALSE(AreEntriesEqual(store_->GetEntries(), expected_model)); |
521 EXPECT_FALSE(AreEntriesEqual(other_store->GetEntries(), expected_model)); | 525 EXPECT_FALSE(AreEntriesEqual(other_store->GetEntries(), expected_model)); |
522 ASSERT_TRUE(AreEntriesEqual(other_store->GetEntries(), other_db_model)); | 526 ASSERT_TRUE(AreEntriesEqual(other_store->GetEntries(), other_db_model)); |
523 | 527 |
524 FakeSyncErrorFactory* other_error_factory = new FakeSyncErrorFactory(); | 528 FakeSyncErrorFactory* other_error_factory = new FakeSyncErrorFactory(); |
525 store_->MergeDataAndStartSyncing( | 529 store_->MergeDataAndStartSyncing( |
526 kDomDistillerModelType, SyncDataFromEntryMap(other_db_model), | 530 kDomDistillerModelType, SyncDataFromEntryMap(other_db_model), |
527 std::move(owned_other_store), | 531 std::move(owned_other_store), |
528 make_scoped_ptr<SyncErrorFactory>(other_error_factory)); | 532 base::WrapUnique<SyncErrorFactory>(other_error_factory)); |
529 | 533 |
530 EXPECT_TRUE(AreEntriesEqual(store_->GetEntries(), expected_model)); | 534 EXPECT_TRUE(AreEntriesEqual(store_->GetEntries(), expected_model)); |
531 EXPECT_TRUE(AreEntriesEqual(other_store->GetEntries(), expected_model)); | 535 EXPECT_TRUE(AreEntriesEqual(other_store->GetEntries(), expected_model)); |
532 } | 536 } |
533 | 537 |
534 TEST_F(DomDistillerStoreTest, TestObserver) { | 538 TEST_F(DomDistillerStoreTest, TestObserver) { |
535 CreateStore(); | 539 CreateStore(); |
536 MockDistillerObserver observer; | 540 MockDistillerObserver observer; |
537 store_->AddObserver(&observer); | 541 store_->AddObserver(&observer); |
538 fake_db_->InitCallback(true); | 542 fake_db_->InitCallback(true); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
578 expected_updates.push_back(update); | 582 expected_updates.push_back(update); |
579 EXPECT_CALL(observer, ArticleEntriesUpdated( | 583 EXPECT_CALL(observer, ArticleEntriesUpdated( |
580 test::util::HasExpectedUpdates(expected_updates))); | 584 test::util::HasExpectedUpdates(expected_updates))); |
581 | 585 |
582 FakeSyncErrorFactory* fake_error_factory = new FakeSyncErrorFactory(); | 586 FakeSyncErrorFactory* fake_error_factory = new FakeSyncErrorFactory(); |
583 EntryMap fake_model; | 587 EntryMap fake_model; |
584 FakeSyncChangeProcessor* fake_sync_change_processor = | 588 FakeSyncChangeProcessor* fake_sync_change_processor = |
585 new FakeSyncChangeProcessor(&fake_model); | 589 new FakeSyncChangeProcessor(&fake_model); |
586 store_->MergeDataAndStartSyncing( | 590 store_->MergeDataAndStartSyncing( |
587 kDomDistillerModelType, change_data, | 591 kDomDistillerModelType, change_data, |
588 make_scoped_ptr<SyncChangeProcessor>(fake_sync_change_processor), | 592 base::WrapUnique<SyncChangeProcessor>(fake_sync_change_processor), |
589 make_scoped_ptr<SyncErrorFactory>(fake_error_factory)); | 593 base::WrapUnique<SyncErrorFactory>(fake_error_factory)); |
590 } | 594 } |
591 | 595 |
592 } // namespace dom_distiller | 596 } // namespace dom_distiller |
OLD | NEW |