date_changed_helper_unittest.cc 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/metrics/date_changed_helper.h"
  5. #include "base/time/time.h"
  6. #include "base/time/time_override.h"
  7. #include "components/prefs/testing_pref_service.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. namespace metrics {
  10. namespace {
  11. using base::subtle::TimeNowIgnoringOverride;
  12. const char kTestPrefName[] = "TestPref";
  13. // TODO(crbug.com/1004987): Use TaskEnvironment::TimeSource::MOCK_TIME here
  14. // instead of explicit clock overrides when it better supports setting a
  15. // specific time of day and rewinding time.
  16. class DateChangedHelperTest : public testing::Test {
  17. public:
  18. void SetUp() override {
  19. date_changed_helper::RegisterPref(prefs_.registry(), kTestPrefName);
  20. }
  21. protected:
  22. TestingPrefServiceSimple prefs_;
  23. };
  24. } // namespace
  25. // Should not consider date changed if the preference is not available.
  26. TEST_F(DateChangedHelperTest, TestNewDoesNotFire) {
  27. SCOPED_TRACE(base::Time::Now());
  28. ASSERT_FALSE(
  29. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
  30. }
  31. // Should consider date changed if the preference is more than a day old.
  32. TEST_F(DateChangedHelperTest, TestOldFires) {
  33. SCOPED_TRACE(base::Time::Now());
  34. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
  35. base::subtle::ScopedTimeClockOverrides time_override(
  36. []() { return TimeNowIgnoringOverride() + base::Hours(25); }, nullptr,
  37. nullptr);
  38. ASSERT_TRUE(
  39. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
  40. }
  41. // Should consider date changed if the preference is more than a day in the
  42. // future.
  43. TEST_F(DateChangedHelperTest, TestFutureFires) {
  44. SCOPED_TRACE(base::Time::Now());
  45. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
  46. base::subtle::ScopedTimeClockOverrides time_override(
  47. []() { return TimeNowIgnoringOverride() - base::Hours(25); }, nullptr,
  48. nullptr);
  49. ASSERT_TRUE(
  50. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
  51. }
  52. // Should not consider date changed if the preference is earlier the same day.
  53. TEST_F(DateChangedHelperTest, TestEarlierSameDayNotFired) {
  54. SCOPED_TRACE(base::Time::Now());
  55. {
  56. base::subtle::ScopedTimeClockOverrides time_override(
  57. []() {
  58. return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(2);
  59. },
  60. nullptr, nullptr);
  61. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
  62. }
  63. base::subtle::ScopedTimeClockOverrides time_override(
  64. []() {
  65. return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(22);
  66. },
  67. nullptr, nullptr);
  68. ASSERT_FALSE(
  69. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
  70. }
  71. // Should not consider date changed if the preference is later the same day.
  72. TEST_F(DateChangedHelperTest, TestLaterSameDayNotFired) {
  73. SCOPED_TRACE(base::Time::Now());
  74. {
  75. base::subtle::ScopedTimeClockOverrides time_override(
  76. []() {
  77. return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(22);
  78. },
  79. nullptr, nullptr);
  80. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
  81. }
  82. base::subtle::ScopedTimeClockOverrides time_override(
  83. []() {
  84. return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(2);
  85. },
  86. nullptr, nullptr);
  87. ASSERT_FALSE(
  88. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
  89. }
  90. // Should consider date changed if the preference is in the previous day.
  91. TEST_F(DateChangedHelperTest, TestJustNextDayFired) {
  92. SCOPED_TRACE(base::Time::Now());
  93. {
  94. base::subtle::ScopedTimeClockOverrides time_override(
  95. []() {
  96. return TimeNowIgnoringOverride().LocalMidnight() - base::Minutes(5);
  97. },
  98. nullptr, nullptr);
  99. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
  100. }
  101. base::subtle::ScopedTimeClockOverrides time_override(
  102. []() {
  103. return TimeNowIgnoringOverride().LocalMidnight() + base::Minutes(5);
  104. },
  105. nullptr, nullptr);
  106. ASSERT_TRUE(
  107. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
  108. }
  109. // Should consider date changed if the preference is in the next day.
  110. TEST_F(DateChangedHelperTest, TestJustPreviousDayFired) {
  111. SCOPED_TRACE(base::Time::Now());
  112. {
  113. base::subtle::ScopedTimeClockOverrides time_override(
  114. []() {
  115. return TimeNowIgnoringOverride().LocalMidnight() + base::Minutes(5);
  116. },
  117. nullptr, nullptr);
  118. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
  119. }
  120. base::subtle::ScopedTimeClockOverrides time_override(
  121. []() {
  122. return TimeNowIgnoringOverride().LocalMidnight() - base::Minutes(5);
  123. },
  124. nullptr, nullptr);
  125. ASSERT_TRUE(
  126. date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
  127. }
  128. } // namespace metrics