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

Unified Diff: components/reading_list/ios/reading_list_model_unittest.cc

Issue 2764533002: Reading List iOS: Use external clock in ReadingListEntry. (Closed)
Patch Set: jitter Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: components/reading_list/ios/reading_list_model_unittest.cc
diff --git a/components/reading_list/ios/reading_list_model_unittest.mm b/components/reading_list/ios/reading_list_model_unittest.cc
similarity index 85%
rename from components/reading_list/ios/reading_list_model_unittest.mm
rename to components/reading_list/ios/reading_list_model_unittest.cc
index b8bc5c11970eabd1d583f505b8e1ec2c908fc045..af9e3a08394760d79f652630930ac330c9ae129f 100644
--- a/components/reading_list/ios/reading_list_model_unittest.mm
+++ b/components/reading_list/ios/reading_list_model_unittest.cc
@@ -6,7 +6,7 @@
#include "base/bind.h"
#include "base/memory/ptr_util.h"
-#import "base/test/ios/wait_util.h"
+#include "base/test/simple_test_clock.h"
#include "components/reading_list/ios/reading_list_model_impl.h"
#include "components/reading_list/ios/reading_list_model_storage.h"
#include "components/reading_list/ios/reading_list_store_delegate.h"
@@ -19,6 +19,11 @@ namespace {
const GURL callback_url("http://example.com");
const std::string callback_title("test title");
+base::Time AdvanceAndGetTime(base::SimpleTestClock* clock) {
+ clock->Advance(base::TimeDelta::FromMilliseconds(10));
+ return clock->Now();
+}
+
class TestReadingListStorageObserver {
public:
virtual void ReadingListDidSaveEntry() = 0;
@@ -27,66 +32,63 @@ class TestReadingListStorageObserver {
class TestReadingListStorage : public ReadingListModelStorage {
public:
- TestReadingListStorage(TestReadingListStorageObserver* observer)
+ TestReadingListStorage(TestReadingListStorageObserver* observer,
+ base::SimpleTestClock* clock)
: ReadingListModelStorage(
base::Bind(&syncer::ModelTypeChangeProcessor::Create,
base::RepeatingClosure()),
syncer::READING_LIST),
entries_(new ReadingListStoreDelegate::ReadingListEntries()),
- observer_(observer) {}
+ observer_(observer),
+ clock_(clock) {}
void AddSampleEntries() {
// Adds timer and interlace read/unread entry creation to avoid having two
// entries with the same creation timestamp.
- ReadingListEntry unread_a(GURL("http://unread_a.com"), "unread_a");
+ ReadingListEntry unread_a(GURL("http://unread_a.com"), "unread_a",
+ AdvanceAndGetTime(clock_));
entries_->insert(
std::make_pair(GURL("http://unread_a.com"), std::move(unread_a)));
- base::test::ios::SpinRunLoopWithMinDelay(
- base::TimeDelta::FromMilliseconds(5));
- ReadingListEntry read_a(GURL("http://read_a.com"), "read_a");
- read_a.SetRead(true);
+ ReadingListEntry read_a(GURL("http://read_a.com"), "read_a",
+ AdvanceAndGetTime(clock_));
+ read_a.SetRead(true, AdvanceAndGetTime(clock_));
entries_->insert(
std::make_pair(GURL("http://read_a.com"), std::move(read_a)));
- base::test::ios::SpinRunLoopWithMinDelay(
- base::TimeDelta::FromMilliseconds(5));
- ReadingListEntry unread_b(GURL("http://unread_b.com"), "unread_b");
+ ReadingListEntry unread_b(GURL("http://unread_b.com"), "unread_b",
+ AdvanceAndGetTime(clock_));
entries_->insert(
std::make_pair(GURL("http://unread_b.com"), std::move(unread_b)));
- base::test::ios::SpinRunLoopWithMinDelay(
- base::TimeDelta::FromMilliseconds(5));
- ReadingListEntry read_b(GURL("http://read_b.com"), "read_b");
- read_b.SetRead(true);
+ ReadingListEntry read_b(GURL("http://read_b.com"), "read_b",
+ AdvanceAndGetTime(clock_));
+ read_b.SetRead(true, AdvanceAndGetTime(clock_));
entries_->insert(
std::make_pair(GURL("http://read_b.com"), std::move(read_b)));
- base::test::ios::SpinRunLoopWithMinDelay(
- base::TimeDelta::FromMilliseconds(5));
- ReadingListEntry unread_c(GURL("http://unread_c.com"), "unread_c");
+ ReadingListEntry unread_c(GURL("http://unread_c.com"), "unread_c",
+ AdvanceAndGetTime(clock_));
entries_->insert(
std::make_pair(GURL("http://unread_c.com"), std::move(unread_c)));
- base::test::ios::SpinRunLoopWithMinDelay(
- base::TimeDelta::FromMilliseconds(5));
- ReadingListEntry read_c(GURL("http://read_c.com"), "read_c");
- read_c.SetRead(true);
+ ReadingListEntry read_c(GURL("http://read_c.com"), "read_c",
+ AdvanceAndGetTime(clock_));
+ read_c.SetRead(true, AdvanceAndGetTime(clock_));
entries_->insert(
std::make_pair(GURL("http://read_c.com"), std::move(read_c)));
- base::test::ios::SpinRunLoopWithMinDelay(
- base::TimeDelta::FromMilliseconds(5));
- ReadingListEntry unread_d(GURL("http://unread_d.com"), "unread_d");
+ ReadingListEntry unread_d(GURL("http://unread_d.com"), "unread_d",
+ AdvanceAndGetTime(clock_));
entries_->insert(
std::make_pair(GURL("http://unread_d.com"), std::move(unread_d)));
- base::test::ios::SpinRunLoopWithMinDelay(
- base::TimeDelta::FromMilliseconds(5));
}
void SetReadingListModel(ReadingListModel* model,
- ReadingListStoreDelegate* delegate) override {
+ ReadingListStoreDelegate* delegate,
+ base::Clock* clock) override {
delegate->StoreLoaded(std::move(entries_));
+ clock_ = static_cast<base::SimpleTestClock*>(clock);
}
// Saves or updates an entry. If the entry is not yet in the database, it is
@@ -148,22 +150,28 @@ class TestReadingListStorage : public ReadingListModelStorage {
private:
std::unique_ptr<ReadingListStoreDelegate::ReadingListEntries> entries_;
TestReadingListStorageObserver* observer_;
+ base::SimpleTestClock* clock_;
};
class ReadingListModelTest : public ReadingListModelObserver,
public TestReadingListStorageObserver,
public testing::Test {
public:
- ReadingListModelTest()
- : callback_called_(false), model_(new ReadingListModelImpl()) {
+ ReadingListModelTest() : callback_called_(false) {
+ auto clock = base::MakeUnique<base::SimpleTestClock>();
+ clock_ = clock.get();
+ model_ = base::MakeUnique<ReadingListModelImpl>(nullptr, nullptr,
+ std::move(clock));
ClearCounts();
model_->AddObserver(this);
}
~ReadingListModelTest() override {}
- void SetStorage(std::unique_ptr<TestReadingListStorage> storage) {
- model_ =
- base::MakeUnique<ReadingListModelImpl>(std::move(storage), nullptr);
+ void SetStorage(std::unique_ptr<TestReadingListStorage> storage,
+ std::unique_ptr<base::SimpleTestClock> clock) {
+ clock_ = clock.get();
+ model_ = base::MakeUnique<ReadingListModelImpl>(std::move(storage), nullptr,
+ std::move(clock));
ClearCounts();
model_->AddObserver(this);
}
@@ -294,6 +302,8 @@ class ReadingListModelTest : public ReadingListModelObserver,
bool callback_called_;
std::unique_ptr<ReadingListModelImpl> model_;
+ // Owned by |model_|;
+ base::SimpleTestClock* clock_;
};
// Tests creating an empty model.
@@ -310,9 +320,10 @@ TEST_F(ReadingListModelTest, EmptyLoaded) {
// Tests load model.
TEST_F(ReadingListModelTest, ModelLoaded) {
ClearCounts();
- auto storage = base::MakeUnique<TestReadingListStorage>(this);
+ auto clock = base::MakeUnique<base::SimpleTestClock>();
+ auto storage = base::MakeUnique<TestReadingListStorage>(this, clock.get());
storage->AddSampleEntries();
- SetStorage(std::move(storage));
+ SetStorage(std::move(storage), std::move(clock));
AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0);
std::map<GURL, std::string> loaded_entries;
@@ -334,8 +345,9 @@ TEST_F(ReadingListModelTest, ModelLoaded) {
// Tests adding entry.
TEST_F(ReadingListModelTest, AddEntry) {
- auto storage = base::MakeUnique<TestReadingListStorage>(this);
- SetStorage(std::move(storage));
+ auto clock = base::MakeUnique<base::SimpleTestClock>();
+ auto storage = base::MakeUnique<TestReadingListStorage>(this, clock.get());
+ SetStorage(std::move(storage), std::move(clock));
ClearCounts();
const ReadingListEntry& entry =
@@ -360,11 +372,12 @@ TEST_F(ReadingListModelTest, AddEntry) {
// Tests addin entry from sync.
TEST_F(ReadingListModelTest, SyncAddEntry) {
- auto storage = base::MakeUnique<TestReadingListStorage>(this);
- SetStorage(std::move(storage));
- auto entry =
- base::MakeUnique<ReadingListEntry>(GURL("http://example.com"), "sample");
- entry->SetRead(true);
+ auto clock = base::MakeUnique<base::SimpleTestClock>();
+ auto storage = base::MakeUnique<TestReadingListStorage>(this, clock.get());
+ SetStorage(std::move(storage), std::move(clock));
+ auto entry = base::MakeUnique<ReadingListEntry>(
+ GURL("http://example.com"), "sample", AdvanceAndGetTime(clock_));
+ entry->SetRead(true, AdvanceAndGetTime(clock_));
ClearCounts();
model_->SyncAddEntry(std::move(entry));
@@ -377,8 +390,9 @@ TEST_F(ReadingListModelTest, SyncAddEntry) {
// Tests updating entry from sync.
TEST_F(ReadingListModelTest, SyncMergeEntry) {
- auto storage = base::MakeUnique<TestReadingListStorage>(this);
- SetStorage(std::move(storage));
+ auto clock = base::MakeUnique<base::SimpleTestClock>();
+ auto storage = base::MakeUnique<TestReadingListStorage>(this, clock.get());
+ SetStorage(std::move(storage), std::move(clock));
model_->AddEntry(GURL("http://example.com"), "sample",
reading_list::ADDED_VIA_CURRENT_APP);
const base::FilePath distilled_path("distilled/page.html");
@@ -386,16 +400,15 @@ TEST_F(ReadingListModelTest, SyncMergeEntry) {
int64_t size = 50;
int64_t time = 100;
model_->SetEntryDistilledInfo(GURL("http://example.com"), distilled_path,
- distilled_url, size, time);
+ distilled_url, size,
+ base::Time::FromTimeT(time));
const ReadingListEntry* local_entry =
model_->GetEntryByURL(GURL("http://example.com"));
int64_t local_update_time = local_entry->UpdateTime();
- base::test::ios::SpinRunLoopWithMinDelay(
- base::TimeDelta::FromMilliseconds(10));
- auto sync_entry =
- base::MakeUnique<ReadingListEntry>(GURL("http://example.com"), "sample");
- sync_entry->SetRead(true);
+ auto sync_entry = base::MakeUnique<ReadingListEntry>(
+ GURL("http://example.com"), "sample", AdvanceAndGetTime(clock_));
+ sync_entry->SetRead(true, AdvanceAndGetTime(clock_));
ASSERT_GT(sync_entry->UpdateTime(), local_update_time);
int64_t sync_update_time = sync_entry->UpdateTime();
EXPECT_TRUE(sync_entry->DistilledPath().empty());
@@ -411,13 +424,15 @@ TEST_F(ReadingListModelTest, SyncMergeEntry) {
base::FilePath("distilled/page.html"));
EXPECT_EQ(merged_entry->UpdateTime(), sync_update_time);
EXPECT_EQ(size, merged_entry->DistillationSize());
- EXPECT_EQ(time, merged_entry->DistillationTime());
+ EXPECT_EQ(time * base::Time::kMicrosecondsPerSecond,
+ merged_entry->DistillationTime());
}
// Tests deleting entry.
TEST_F(ReadingListModelTest, RemoveEntryByUrl) {
- auto storage = base::MakeUnique<TestReadingListStorage>(this);
- SetStorage(std::move(storage));
+ auto clock = base::MakeUnique<base::SimpleTestClock>();
+ auto storage = base::MakeUnique<TestReadingListStorage>(this, clock.get());
+ SetStorage(std::move(storage), std::move(clock));
model_->AddEntry(GURL("http://example.com"), "sample",
reading_list::ADDED_VIA_CURRENT_APP);
ClearCounts();
@@ -448,8 +463,9 @@ TEST_F(ReadingListModelTest, RemoveEntryByUrl) {
// Tests deleting entry from sync.
TEST_F(ReadingListModelTest, RemoveSyncEntryByUrl) {
- auto storage = base::MakeUnique<TestReadingListStorage>(this);
- SetStorage(std::move(storage));
+ auto clock = base::MakeUnique<base::SimpleTestClock>();
+ auto storage = base::MakeUnique<TestReadingListStorage>(this, clock.get());
+ SetStorage(std::move(storage), std::move(clock));
model_->AddEntry(GURL("http://example.com"), "sample",
reading_list::ADDED_VIA_CURRENT_APP);
ClearCounts();
@@ -631,13 +647,15 @@ TEST_F(ReadingListModelTest, UpdateDistilledInfo) {
int64_t size = 50;
int64_t time = 100;
model_->SetEntryDistilledInfo(GURL("http://example.com"), distilled_path,
- distilled_url, size, time);
+ distilled_url, size,
+ base::Time::FromTimeT(time));
AssertObserverCount(0, 0, 0, 0, 0, 0, 0, 1, 1);
EXPECT_EQ(ReadingListEntry::PROCESSED, entry.DistilledState());
EXPECT_EQ(distilled_path, entry.DistilledPath());
EXPECT_EQ(distilled_url, entry.DistilledURL());
EXPECT_EQ(size, entry.DistillationSize());
- EXPECT_EQ(time, entry.DistillationTime());
+ EXPECT_EQ(time * base::Time::kMicrosecondsPerSecond,
+ entry.DistillationTime());
}
// Tests setting title on read entry.
@@ -679,13 +697,15 @@ TEST_F(ReadingListModelTest, UpdateReadDistilledInfo) {
int64_t size = 50;
int64_t time = 100;
model_->SetEntryDistilledInfo(GURL("http://example.com"), distilled_path,
- distilled_url, size, time);
+ distilled_url, size,
+ base::Time::FromTimeT(time));
AssertObserverCount(0, 0, 0, 0, 0, 0, 0, 1, 1);
EXPECT_EQ(ReadingListEntry::PROCESSED, entry->DistilledState());
EXPECT_EQ(distilled_path, entry->DistilledPath());
EXPECT_EQ(distilled_url, entry->DistilledURL());
EXPECT_EQ(size, entry->DistillationSize());
- EXPECT_EQ(time, entry->DistillationTime());
+ EXPECT_EQ(time * base::Time::kMicrosecondsPerSecond,
+ entry->DistillationTime());
}
// Tests that ReadingListModel calls CallbackModelBeingDeleted when destroyed.
« no previous file with comments | « components/reading_list/ios/reading_list_model_storage.h ('k') | components/reading_list/ios/reading_list_model_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698