Index: components/metrics/daily_event_unittest.cc |
diff --git a/components/metrics/daily_event_unittest.cc b/components/metrics/daily_event_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4253c1304539904ebc014fd0bd8c084294c231fa |
--- /dev/null |
+++ b/components/metrics/daily_event_unittest.cc |
@@ -0,0 +1,96 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/metrics/daily_event.h" |
+ |
+#include "base/prefs/testing_pref_service.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace metrics { |
+ |
+namespace { |
+ |
+const char kTestPrefName[] = "TestPref"; |
+const char kTestMetricName[] = "TestMetric"; |
+ |
+class TestDailyObserver : public DailyEvent::Observer { |
+ public: |
+ TestDailyObserver() : fired_(false) {} |
+ |
+ bool fired() const { return fired_; } |
+ |
+ virtual void OnDailyEvent() OVERRIDE { |
+ fired_ = true; |
+ } |
+ |
+ void Reset() { |
+ fired_ = false; |
+ } |
+ |
+ private: |
+ // True if this event has been observed. |
+ bool fired_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestDailyObserver); |
+}; |
+ |
+class DailyEventTest : public testing::Test { |
+ public: |
+ DailyEventTest() : event_(&prefs_, kTestPrefName, kTestMetricName) { |
+ DailyEvent::RegisterPref(prefs_.registry(), kTestPrefName); |
+ observer_ = new TestDailyObserver(); |
+ scoped_ptr<metrics::DailyEvent::Observer> p(observer_); |
+ event_.AddObserver(p.Pass()); |
+ } |
+ |
+ protected: |
+ TestingPrefServiceSimple prefs_; |
+ TestDailyObserver* observer_; |
+ DailyEvent event_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(DailyEventTest); |
+}; |
+ |
+} // namespace |
+ |
+// The event should fire if the preference is not available. |
+TEST_F(DailyEventTest, TestNewFires) { |
+ event_.CheckInterval(); |
+ EXPECT_TRUE(observer_->fired()); |
+} |
+ |
+// The event should fire if the preference is more than a day old. |
+TEST_F(DailyEventTest, TestOldFires) { |
+ base::Time last_time = base::Time::Now() - base::TimeDelta::FromHours(25); |
+ prefs_.SetInt64(kTestPrefName, last_time.ToInternalValue()); |
+ event_.CheckInterval(); |
+ EXPECT_TRUE(observer_->fired()); |
+} |
+ |
+// The event should fire if the preference is more than a day in the future. |
+TEST_F(DailyEventTest, TestFutureFires) { |
+ base::Time last_time = base::Time::Now() + base::TimeDelta::FromHours(25); |
+ prefs_.SetInt64(kTestPrefName, last_time.ToInternalValue()); |
+ event_.CheckInterval(); |
+ EXPECT_TRUE(observer_->fired()); |
+} |
+ |
+// The event should not fire if the preference is more recent than a day. |
+TEST_F(DailyEventTest, TestRecentNotFired) { |
+ base::Time last_time = base::Time::Now() - base::TimeDelta::FromMinutes(2); |
+ prefs_.SetInt64(kTestPrefName, last_time.ToInternalValue()); |
+ event_.CheckInterval(); |
+ EXPECT_FALSE(observer_->fired()); |
+} |
+ |
+// The event should not fire if the preference is less than a day in the future. |
+TEST_F(DailyEventTest, TestSoonNotFired) { |
+ base::Time last_time = base::Time::Now() + base::TimeDelta::FromMinutes(2); |
+ prefs_.SetInt64(kTestPrefName, last_time.ToInternalValue()); |
+ event_.CheckInterval(); |
+ EXPECT_FALSE(observer_->fired()); |
+} |
+ |
+} // namespace metrics |