Index: components/reading_list/ios/reading_list_store_unittest.mm |
diff --git a/components/reading_list/ios/reading_list_store_unittest.mm b/components/reading_list/ios/reading_list_store_unittest.mm |
index 3c49c74153fb0ff791f995c38782a8cc90dc19e1..e6e00304a50c2fedeb3f5040bf39c33e31235065 100644 |
--- a/components/reading_list/ios/reading_list_store_unittest.mm |
+++ b/components/reading_list/ios/reading_list_store_unittest.mm |
@@ -17,6 +17,30 @@ |
#include "components/sync/model/model_type_store_test_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+// Tests that the transition from |entryA| to |entryB| is possible (|possible| |
+// is true) or not. |
+void ExpectAB(const sync_pb::ReadingListSpecifics& entryA, |
+ const sync_pb::ReadingListSpecifics& entryB, |
+ bool possible) { |
+ EXPECT_EQ(ReadingListStore::CompareEntriesForSync(entryA, entryB), possible); |
+ std::unique_ptr<ReadingListEntry> a = |
+ ReadingListEntry::FromReadingListSpecifics(entryA); |
+ std::unique_ptr<ReadingListEntry> b = |
+ ReadingListEntry::FromReadingListSpecifics(entryB); |
+ a->MergeWithEntry(*b); |
+ std::unique_ptr<sync_pb::ReadingListSpecifics> mergedEntry = |
+ a->AsReadingListSpecifics(); |
+ if (possible) { |
+ // If transition is possible, the merge should be B. |
+ EXPECT_EQ(entryB.SerializeAsString(), mergedEntry->SerializeAsString()); |
+ } else { |
+ // If transition is not possible, the transition shold be possible to the |
+ // merged state. |
+ EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, *mergedEntry)); |
+ EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryB, *mergedEntry)); |
+ } |
+} |
+ |
class FakeModelTypeChangeProcessorObserver { |
public: |
virtual void Put(const std::string& client_tag, |
@@ -293,48 +317,73 @@ TEST_F(ReadingListStoreTest, ApplySyncChangesOneRemove) { |
TEST_F(ReadingListStoreTest, CompareEntriesForSync) { |
sync_pb::ReadingListSpecifics entryA; |
sync_pb::ReadingListSpecifics entryB; |
- entryA.set_url("http://foo.bar"); |
- entryB.set_url("http://foo.bar"); |
+ entryA.set_entry_id("http://foo.bar/"); |
+ entryB.set_entry_id("http://foo.bar/"); |
+ entryA.set_url("http://foo.bar/"); |
+ entryB.set_url("http://foo.bar/"); |
entryA.set_title("Foo Bar"); |
entryB.set_title("Foo Bar"); |
entryA.set_status(sync_pb::ReadingListSpecifics::UNREAD); |
entryB.set_status(sync_pb::ReadingListSpecifics::UNREAD); |
entryA.set_creation_time_us(10); |
entryB.set_creation_time_us(10); |
+ entryA.set_first_read_time_us(50); |
+ entryB.set_first_read_time_us(50); |
entryA.set_update_time_us(100); |
entryB.set_update_time_us(100); |
// Equal entries can be submitted. |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, true); |
// Try to update each field. |
// You cannot change the URL of an entry. |
- entryA.set_url("http://foo.foo"); |
+ entryA.set_url("http://foo.foo/"); |
EXPECT_FALSE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
EXPECT_FALSE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
- entryA.set_url("http://foo.bar"); |
+ entryA.set_url("http://foo.bar/"); |
// You can set a title to a title later in alphabetical order. |
entryA.set_title(""); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
- EXPECT_FALSE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
entryA.set_title("Foo Aar"); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
- EXPECT_FALSE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
entryA.set_title("Foo Ba"); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
- EXPECT_FALSE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
entryA.set_title("Foo Bar"); |
entryA.set_creation_time_us(9); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
- EXPECT_FALSE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
+ entryA.set_first_read_time_us(51); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
+ entryA.set_first_read_time_us(49); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
+ entryA.set_first_read_time_us(0); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
+ entryA.set_first_read_time_us(50); |
+ entryB.set_first_read_time_us(0); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
+ entryB.set_first_read_time_us(50); |
entryA.set_creation_time_us(10); |
+ entryA.set_first_read_time_us(51); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
+ entryA.set_first_read_time_us(0); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
+ entryA.set_first_read_time_us(50); |
entryA.set_update_time_us(99); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
- EXPECT_FALSE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
sync_pb::ReadingListSpecifics::ReadingListEntryStatus status_oder[3] = { |
sync_pb::ReadingListSpecifics::UNSEEN, |
sync_pb::ReadingListSpecifics::UNREAD, |
@@ -343,20 +392,20 @@ TEST_F(ReadingListStoreTest, CompareEntriesForSync) { |
entryA.set_status(status_oder[index_a]); |
for (int index_b = 0; index_b < 3; index_b++) { |
entryB.set_status(status_oder[index_b]); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
- EXPECT_FALSE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
} |
} |
entryA.set_update_time_us(100); |
for (int index_a = 0; index_a < 3; index_a++) { |
entryA.set_status(status_oder[index_a]); |
entryB.set_status(status_oder[index_a]); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, true); |
for (int index_b = index_a + 1; index_b < 3; index_b++) { |
entryB.set_status(status_oder[index_b]); |
- EXPECT_TRUE(ReadingListStore::CompareEntriesForSync(entryA, entryB)); |
- EXPECT_FALSE(ReadingListStore::CompareEntriesForSync(entryB, entryA)); |
+ ExpectAB(entryA, entryB, true); |
+ ExpectAB(entryB, entryA, false); |
} |
} |
} |