Index: base/power_monitor/power_monitor_unittest.cc |
diff --git a/base/power_monitor/power_monitor_unittest.cc b/base/power_monitor/power_monitor_unittest.cc |
index 90f36f0736235800e483cfd61a50ea6f68fe40f4..61b720ed8c400eab44f3855ffebf97555cb603b1 100644 |
--- a/base/power_monitor/power_monitor_unittest.cc |
+++ b/base/power_monitor/power_monitor_unittest.cc |
@@ -3,104 +3,78 @@ |
// found in the LICENSE file. |
#include "base/power_monitor/power_monitor.h" |
- |
-#include "base/message_loop/message_loop.h" |
+#include "base/power_monitor/power_monitor_test_base.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace base { |
-class PowerTest : public PowerObserver { |
- public: |
- PowerTest() |
- : power_state_changes_(0), |
- suspends_(0), |
- resumes_(0) { |
- } |
- |
- // PowerObserver callbacks. |
- virtual void OnPowerStateChange(bool on_battery_power) OVERRIDE { |
- power_state_changes_++; |
- } |
- |
- virtual void OnSuspend() OVERRIDE { |
- suspends_++; |
- } |
- |
- virtual void OnResume() OVERRIDE { |
- resumes_++; |
- } |
- |
- // Test status counts. |
- int power_state_changes() { return power_state_changes_; } |
- int suspends() { return suspends_; } |
- int resumes() { return resumes_; } |
- |
- private: |
- int power_state_changes_; // Count of OnPowerStateChange notifications. |
- int suspends_; // Count of OnSuspend notifications. |
- int resumes_; // Count of OnResume notifications. |
-}; |
- |
class PowerMonitorTest : public testing::Test { |
protected: |
PowerMonitorTest() { |
-#if defined(OS_MACOSX) |
- // This needs to happen before PowerMonitor's ctor. |
- PowerMonitor::AllocateSystemIOPorts(); |
-#endif |
- power_monitor_.reset(new PowerMonitor); |
- } |
- |
- void ProcessPowerEvent(PowerMonitor::PowerEvent event_id) { |
- power_monitor_->ProcessPowerEvent(event_id); |
+ power_monitor_source_ = new PowerMonitorTestSource(); |
+ power_monitor_.reset(new PowerMonitor( |
+ scoped_ptr<PowerMonitorSource>(power_monitor_source_))); |
} |
+ virtual ~PowerMonitorTest() {}; |
- virtual ~PowerMonitorTest() {} |
+ PowerMonitorTestSource* source() { return power_monitor_source_; } |
+ PowerMonitor* monitor() { return power_monitor_.get(); } |
- MessageLoop message_loop_; |
+ private: |
+ PowerMonitorTestSource* power_monitor_source_; |
scoped_ptr<PowerMonitor> power_monitor_; |
DISALLOW_COPY_AND_ASSIGN(PowerMonitorTest); |
}; |
+// PowerMonitorSource is tightly coupled with the PowerMonitor, so this test |
+// Will cover both classes |
TEST_F(PowerMonitorTest, PowerNotifications) { |
const int kObservers = 5; |
- PowerTest test[kObservers]; |
+ PowerMonitorTestObserver observers[kObservers]; |
for (int index = 0; index < kObservers; ++index) |
- power_monitor_->AddObserver(&test[index]); |
- |
- // Send a bunch of power changes. Since the battery power hasn't |
- // actually changed, we shouldn't get notifications. |
- for (int index = 0; index < 5; index++) { |
- ProcessPowerEvent(PowerMonitor::POWER_STATE_EVENT); |
- EXPECT_EQ(test[0].power_state_changes(), 0); |
- } |
+ monitor()->AddObserver(&observers[index]); |
// Sending resume when not suspended should have no effect. |
- ProcessPowerEvent(PowerMonitor::RESUME_EVENT); |
- message_loop_.RunUntilIdle(); |
- EXPECT_EQ(test[0].resumes(), 0); |
+ source()->GenerateResumeEvent(); |
+ EXPECT_EQ(observers[0].resumes(), 0); |
// Pretend we suspended. |
- ProcessPowerEvent(PowerMonitor::SUSPEND_EVENT); |
- message_loop_.RunUntilIdle(); |
- EXPECT_EQ(test[0].suspends(), 1); |
+ source()->GenerateSuspendEvent(); |
+ // Ensure all observers were notified of the event |
+ for (int index = 0; index < kObservers; ++index) |
+ EXPECT_EQ(observers[index].suspends(), 1); |
// Send a second suspend notification. This should be suppressed. |
- ProcessPowerEvent(PowerMonitor::SUSPEND_EVENT); |
- message_loop_.RunUntilIdle(); |
- EXPECT_EQ(test[0].suspends(), 1); |
+ source()->GenerateSuspendEvent(); |
+ EXPECT_EQ(observers[0].suspends(), 1); |
// Pretend we were awakened. |
- ProcessPowerEvent(PowerMonitor::RESUME_EVENT); |
- message_loop_.RunUntilIdle(); |
- EXPECT_EQ(test[0].resumes(), 1); |
+ source()->GenerateResumeEvent(); |
+ EXPECT_EQ(observers[0].resumes(), 1); |
// Send a duplicate resume notification. This should be suppressed. |
- ProcessPowerEvent(PowerMonitor::RESUME_EVENT); |
- message_loop_.RunUntilIdle(); |
- EXPECT_EQ(test[0].resumes(), 1); |
+ source()->GenerateResumeEvent(); |
+ EXPECT_EQ(observers[0].resumes(), 1); |
+ |
+ // Pretend the device has gone on battery power |
+ source()->GeneratePowerStateEvent(true); |
+ EXPECT_EQ(observers[0].power_state_changes(), 1); |
+ EXPECT_EQ(observers[0].last_power_state(), true); |
+ |
+ // Repeated indications the device is on battery power should be suppressed. |
+ source()->GeneratePowerStateEvent(true); |
+ EXPECT_EQ(observers[0].power_state_changes(), 1); |
+ |
+ // Pretend the device has gone off battery power |
+ source()->GeneratePowerStateEvent(false); |
+ EXPECT_EQ(observers[0].power_state_changes(), 2); |
+ EXPECT_EQ(observers[0].last_power_state(), false); |
+ |
+ // Repeated indications the device is off battery power should be suppressed. |
+ source()->GeneratePowerStateEvent(false); |
+ EXPECT_EQ(observers[0].power_state_changes(), 2); |
} |
} // namespace base |