| OLD | NEW | 
|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "ios/chrome/browser/reading_list/reading_list_entry.h" | 5 #include "ios/chrome/browser/reading_list/reading_list_entry.h" | 
| 6 | 6 | 
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" | 
| 8 #include "base/test/simple_test_tick_clock.h" | 8 #include "base/test/simple_test_tick_clock.h" | 
|  | 9 #include "components/sync/protocol/reading_list_specifics.pb.h" | 
|  | 10 #include "ios/chrome/browser/reading_list/proto/reading_list.pb.h" | 
| 9 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" | 
| 10 | 12 | 
| 11 namespace { | 13 namespace { | 
| 12 const int kFirstBackoff = 10; | 14 const int kFirstBackoff = 10; | 
| 13 const int kSecondBackoff = 10; | 15 const int kSecondBackoff = 10; | 
| 14 const int kThirdBackoff = 60; | 16 const int kThirdBackoff = 60; | 
| 15 const int kFourthBackoff = 120; | 17 const int kFourthBackoff = 120; | 
| 16 const int kFifthBackoff = 120; | 18 const int kFifthBackoff = 120; | 
| 17 }  // namespace | 19 }  // namespace | 
| 18 | 20 | 
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 175   EXPECT_EQ(1, e.FailedDownloadCounter()); | 177   EXPECT_EQ(1, e.FailedDownloadCounter()); | 
| 176 | 178 | 
| 177   e.SetDistilledState(ReadingListEntry::PROCESSING); | 179   e.SetDistilledState(ReadingListEntry::PROCESSING); | 
| 178   EXPECT_EQ(1, e.FailedDownloadCounter()); | 180   EXPECT_EQ(1, e.FailedDownloadCounter()); | 
| 179 | 181 | 
| 180   e.SetDistilledState(ReadingListEntry::WILL_RETRY); | 182   e.SetDistilledState(ReadingListEntry::WILL_RETRY); | 
| 181   EXPECT_EQ(2, e.FailedDownloadCounter()); | 183   EXPECT_EQ(2, e.FailedDownloadCounter()); | 
| 182   e.SetDistilledState(ReadingListEntry::ERROR); | 184   e.SetDistilledState(ReadingListEntry::ERROR); | 
| 183   EXPECT_EQ(2, e.FailedDownloadCounter()); | 185   EXPECT_EQ(2, e.FailedDownloadCounter()); | 
| 184 } | 186 } | 
|  | 187 | 
|  | 188 // Tests that the reading list entry is correctly encoded to | 
|  | 189 // sync_pb::ReadingListSpecifics. | 
|  | 190 TEST(ReadingListEntry, AsReadingListSpecifics) { | 
|  | 191   ReadingListEntry entry(GURL("http://example.com/"), "bar"); | 
|  | 192   int64_t creation_time_us = entry.UpdateTime(); | 
|  | 193 | 
|  | 194   std::unique_ptr<sync_pb::ReadingListSpecifics> pb_entry( | 
|  | 195       entry.AsReadingListSpecifics(false)); | 
|  | 196   EXPECT_EQ(pb_entry->entry_id(), "http://example.com/"); | 
|  | 197   EXPECT_EQ(pb_entry->url(), "http://example.com/"); | 
|  | 198   EXPECT_EQ(pb_entry->title(), "bar"); | 
|  | 199   EXPECT_EQ(pb_entry->creation_time_us(), creation_time_us); | 
|  | 200   EXPECT_EQ(pb_entry->update_time_us(), entry.UpdateTime()); | 
|  | 201   EXPECT_EQ(pb_entry->status(), sync_pb::ReadingListSpecifics::UNREAD); | 
|  | 202 | 
|  | 203   entry.MarkEntryUpdated(); | 
|  | 204   EXPECT_NE(entry.UpdateTime(), creation_time_us); | 
|  | 205   std::unique_ptr<sync_pb::ReadingListSpecifics> updated_pb_entry( | 
|  | 206       entry.AsReadingListSpecifics(true)); | 
|  | 207   EXPECT_EQ(updated_pb_entry->creation_time_us(), creation_time_us); | 
|  | 208   EXPECT_EQ(updated_pb_entry->update_time_us(), entry.UpdateTime()); | 
|  | 209   EXPECT_EQ(updated_pb_entry->status(), sync_pb::ReadingListSpecifics::READ); | 
|  | 210 } | 
|  | 211 | 
|  | 212 // Tests that the reading list entry is correctly parsed from | 
|  | 213 // sync_pb::ReadingListSpecifics. | 
|  | 214 TEST(ReadingListEntry, FromReadingListSpecifics) { | 
|  | 215   std::unique_ptr<sync_pb::ReadingListSpecifics> pb_entry = | 
|  | 216       base::MakeUnique<sync_pb::ReadingListSpecifics>(); | 
|  | 217   pb_entry->set_entry_id("http://example.com/"); | 
|  | 218   pb_entry->set_url("http://example.com/"); | 
|  | 219   pb_entry->set_title("title"); | 
|  | 220   pb_entry->set_creation_time_us(1); | 
|  | 221   pb_entry->set_update_time_us(2); | 
|  | 222   pb_entry->set_status(sync_pb::ReadingListSpecifics::UNREAD); | 
|  | 223 | 
|  | 224   std::unique_ptr<ReadingListEntry> entry( | 
|  | 225       ReadingListEntry::FromReadingListSpecifics(*pb_entry)); | 
|  | 226   EXPECT_EQ(entry->URL().spec(), "http://example.com/"); | 
|  | 227   EXPECT_EQ(entry->Title(), "title"); | 
|  | 228   EXPECT_EQ(entry->UpdateTime(), 2); | 
|  | 229   EXPECT_EQ(entry->FailedDownloadCounter(), 0); | 
|  | 230 } | 
|  | 231 | 
|  | 232 // Tests that the reading list entry is correctly encoded to | 
|  | 233 // reading_list::ReadingListLocal. | 
|  | 234 TEST(ReadingListEntry, AsReadingListLocal) { | 
|  | 235   ReadingListEntry entry(GURL("http://example.com/"), "bar"); | 
|  | 236   int64_t creation_time_us = entry.UpdateTime(); | 
|  | 237 | 
|  | 238   std::unique_ptr<reading_list::ReadingListLocal> pb_entry( | 
|  | 239       entry.AsReadingListLocal(false)); | 
|  | 240   EXPECT_EQ(pb_entry->entry_id(), "http://example.com/"); | 
|  | 241   EXPECT_EQ(pb_entry->url(), "http://example.com/"); | 
|  | 242   EXPECT_EQ(pb_entry->title(), "bar"); | 
|  | 243   EXPECT_EQ(pb_entry->creation_time_us(), creation_time_us); | 
|  | 244   EXPECT_EQ(pb_entry->update_time_us(), entry.UpdateTime()); | 
|  | 245   EXPECT_EQ(pb_entry->status(), reading_list::ReadingListLocal::UNREAD); | 
|  | 246   EXPECT_EQ(pb_entry->distillation_state(), | 
|  | 247             reading_list::ReadingListLocal::WAITING); | 
|  | 248   EXPECT_EQ(pb_entry->distilled_url(), ""); | 
|  | 249   EXPECT_EQ(pb_entry->failed_download_counter(), 0); | 
|  | 250   EXPECT_NE(pb_entry->backoff(), ""); | 
|  | 251 | 
|  | 252   entry.SetDistilledState(ReadingListEntry::WILL_RETRY); | 
|  | 253   std::unique_ptr<reading_list::ReadingListLocal> will_retry_pb_entry( | 
|  | 254       entry.AsReadingListLocal(true)); | 
|  | 255   EXPECT_EQ(will_retry_pb_entry->distillation_state(), | 
|  | 256             reading_list::ReadingListLocal::WILL_RETRY); | 
|  | 257   EXPECT_EQ(will_retry_pb_entry->failed_download_counter(), 1); | 
|  | 258 | 
|  | 259   entry.SetDistilledURL(GURL("http://distilled.foo/")); | 
|  | 260   entry.MarkEntryUpdated(); | 
|  | 261   EXPECT_NE(entry.UpdateTime(), creation_time_us); | 
|  | 262   std::unique_ptr<reading_list::ReadingListLocal> distilled_pb_entry( | 
|  | 263       entry.AsReadingListLocal(true)); | 
|  | 264   EXPECT_EQ(distilled_pb_entry->creation_time_us(), creation_time_us); | 
|  | 265   EXPECT_EQ(distilled_pb_entry->update_time_us(), entry.UpdateTime()); | 
|  | 266   EXPECT_NE(distilled_pb_entry->backoff(), ""); | 
|  | 267   EXPECT_EQ(distilled_pb_entry->status(), reading_list::ReadingListLocal::READ); | 
|  | 268   EXPECT_EQ(distilled_pb_entry->distillation_state(), | 
|  | 269             reading_list::ReadingListLocal::PROCESSED); | 
|  | 270   EXPECT_EQ(distilled_pb_entry->distilled_url(), "http://distilled.foo/"); | 
|  | 271   EXPECT_EQ(distilled_pb_entry->failed_download_counter(), 0); | 
|  | 272 } | 
|  | 273 | 
|  | 274 // Tests that the reading list entry is correctly parsed from | 
|  | 275 // sync_pb::ReadingListLocal. | 
|  | 276 TEST(ReadingListEntry, FromReadingListLocal) { | 
|  | 277   ReadingListEntry entry(GURL("http://example.com/"), "title"); | 
|  | 278   base::Time next_call = base::Time::Now() + entry.TimeUntilNextTry(); | 
|  | 279 | 
|  | 280   std::unique_ptr<reading_list::ReadingListLocal> pb_entry( | 
|  | 281       entry.AsReadingListLocal(false)); | 
|  | 282 | 
|  | 283   pb_entry->set_entry_id("http://example.com/"); | 
|  | 284   pb_entry->set_url("http://example.com/"); | 
|  | 285   pb_entry->set_title("title"); | 
|  | 286   pb_entry->set_creation_time_us(1); | 
|  | 287   pb_entry->set_update_time_us(2); | 
|  | 288   pb_entry->set_status(reading_list::ReadingListLocal::UNREAD); | 
|  | 289   pb_entry->set_distillation_state(reading_list::ReadingListLocal::WAITING); | 
|  | 290   pb_entry->set_failed_download_counter(2); | 
|  | 291 | 
|  | 292   std::unique_ptr<ReadingListEntry> waiting_entry( | 
|  | 293       ReadingListEntry::FromReadingListLocal(*pb_entry)); | 
|  | 294   EXPECT_EQ(waiting_entry->URL().spec(), "http://example.com/"); | 
|  | 295   EXPECT_EQ(waiting_entry->Title(), "title"); | 
|  | 296   EXPECT_EQ(waiting_entry->UpdateTime(), 2); | 
|  | 297   EXPECT_EQ(waiting_entry->FailedDownloadCounter(), 2); | 
|  | 298   EXPECT_EQ(waiting_entry->DistilledState(), ReadingListEntry::WAITING); | 
|  | 299   EXPECT_EQ(waiting_entry->DistilledURL(), GURL()); | 
|  | 300   base::Time waiting_next_call = | 
|  | 301       base::Time::Now() + waiting_entry->TimeUntilNextTry(); | 
|  | 302   base::TimeDelta delta = next_call - waiting_next_call; | 
|  | 303   EXPECT_NEAR(delta.InMillisecondsRoundedUp(), 0, 10); | 
|  | 304 } | 
|  | 305 | 
|  | 306 // Tests that the merging of two ReadingListEntry. | 
|  | 307 TEST(ReadingListEntry, MergeLocalStateFrom) { | 
|  | 308   ReadingListEntry local_entry(GURL("http://example.com/"), "title"); | 
|  | 309   base::Time next_call = base::Time::Now() + local_entry.TimeUntilNextTry(); | 
|  | 310   int64_t local_update_time_us = local_entry.UpdateTime(); | 
|  | 311   local_entry.SetDistilledURL(GURL("http://distilled.com/")); | 
|  | 312 | 
|  | 313   ReadingListEntry sync_entry(GURL("http://example2.com/"), "title2"); | 
|  | 314   sync_entry.SetDistilledState(ReadingListEntry::ERROR); | 
|  | 315   int64_t sync_update_time_us = sync_entry.UpdateTime(); | 
|  | 316   EXPECT_NE(local_update_time_us, sync_update_time_us); | 
|  | 317   sync_entry.MergeLocalStateFrom(local_entry); | 
|  | 318   EXPECT_EQ(sync_entry.URL().spec(), "http://example2.com/"); | 
|  | 319   EXPECT_EQ(sync_entry.Title(), "title2"); | 
|  | 320   EXPECT_EQ(sync_entry.UpdateTime(), sync_update_time_us); | 
|  | 321   EXPECT_EQ(sync_entry.FailedDownloadCounter(), 0); | 
|  | 322   EXPECT_EQ(sync_entry.DistilledState(), ReadingListEntry::PROCESSED); | 
|  | 323   EXPECT_EQ(sync_entry.DistilledURL().spec(), "http://distilled.com/"); | 
|  | 324   base::Time sync_next_call = base::Time::Now() + sync_entry.TimeUntilNextTry(); | 
|  | 325   base::TimeDelta delta = next_call - sync_next_call; | 
|  | 326   EXPECT_NEAR(delta.InMillisecondsRoundedUp(), 0, 10); | 
|  | 327 } | 
| OLD | NEW | 
|---|