Index: components/metrics/daily_interval_unittest.cc |
diff --git a/components/metrics/daily_interval_unittest.cc b/components/metrics/daily_interval_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c4dac911020bbe5c504aaa4848ceba65342a309a |
--- /dev/null |
+++ b/components/metrics/daily_interval_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_interval.h" |
+ |
+#include "base/prefs/testing_pref_service.h" |
+#include "components/metrics/daily_observer.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace metrics { |
+ |
+namespace { |
+ |
+const char kTestPrefName[] = "TestPref"; |
+const char kTestMetricName[] = "TestMetric"; |
+ |
+class TestDailyObserver : public DailyObserver { |
+ public: |
+ TestDailyObserver() : fired_(false) {} |
+ |
+ bool fired() const { return fired_; } |
+ |
+ virtual void OnDailyInterval() OVERRIDE { |
+ fired_ = true; |
+ } |
+ |
+ void Reset() { |
+ fired_ = false; |
+ } |
+ |
+ private: |
+ // True if this event has been observed. |
+ bool fired_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestDailyObserver); |
+}; |
+ |
+class DailyIntervalTest : public testing::Test { |
+ public: |
+ DailyIntervalTest() : interval_(&prefs_, kTestPrefName, kTestMetricName) { |
+ DailyInterval::RegisterPref(prefs_.registry(), kTestPrefName); |
+ observer_ = new TestDailyObserver(); |
+ interval_.AddObserver(observer_); |
+ } |
+ |
+ protected: |
+ TestingPrefServiceSimple prefs_; |
+ TestDailyObserver* observer_; |
+ DailyInterval interval_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(DailyIntervalTest); |
+}; |
+ |
+} // namespace |
+ |
+// The event should fire if the preference is not available. |
+TEST_F(DailyIntervalTest, TestNewFires) { |
+ interval_.CheckInterval(); |
+ EXPECT_TRUE(observer_->fired()); |
+} |
+ |
+// The event should fire if the preference is more than a day old. |
+TEST_F(DailyIntervalTest, TestOldFires) { |
+ base::Time last_time = base::Time::Now() - base::TimeDelta::FromHours(25); |
+ prefs_.SetInt64(kTestPrefName, last_time.ToInternalValue()); |
+ interval_.CheckInterval(); |
+ EXPECT_TRUE(observer_->fired()); |
+} |
+ |
+// The event should fire if the preference is more than a day in the future. |
+TEST_F(DailyIntervalTest, TestFutureFires) { |
+ base::Time last_time = base::Time::Now() + base::TimeDelta::FromHours(25); |
+ prefs_.SetInt64(kTestPrefName, last_time.ToInternalValue()); |
+ interval_.CheckInterval(); |
+ EXPECT_TRUE(observer_->fired()); |
+} |
+ |
+// The event should not fire if the preference is more recent than a day. |
+TEST_F(DailyIntervalTest, TestRecentNotFired) { |
+ base::Time last_time = base::Time::Now() - base::TimeDelta::FromMinutes(2); |
+ prefs_.SetInt64(kTestPrefName, last_time.ToInternalValue()); |
+ interval_.CheckInterval(); |
+ EXPECT_FALSE(observer_->fired()); |
+} |
+ |
+// The event should not fire if the preference is less than a day in the future. |
+TEST_F(DailyIntervalTest, TestSoonNotFired) { |
+ base::Time last_time = base::Time::Now() + base::TimeDelta::FromMinutes(2); |
+ prefs_.SetInt64(kTestPrefName, last_time.ToInternalValue()); |
+ interval_.CheckInterval(); |
+ EXPECT_FALSE(observer_->fired()); |
+} |
+ |
+} // namespace metrics |