summaryrefslogtreecommitdiffstats
path: root/base/power_monitor/power_monitor_unittest.cc
diff options
context:
space:
mode:
authorbajones@chromium.org <bajones@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-02 22:09:13 +0000
committerbajones@chromium.org <bajones@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-02 22:09:13 +0000
commit9dd901522edbaf51a00f03504cac30553b5dbfde (patch)
tree5e812fac198a30a83f80490814b691ba4b869573 /base/power_monitor/power_monitor_unittest.cc
parent1d1b537362626b73838ebbe55d4aed3f8116e7d9 (diff)
downloadchromium_src-9dd901522edbaf51a00f03504cac30553b5dbfde.zip
chromium_src-9dd901522edbaf51a00f03504cac30553b5dbfde.tar.gz
chromium_src-9dd901522edbaf51a00f03504cac30553b5dbfde.tar.bz2
Created multi-process-friendly PowerMonitor interface.
PowerMonitor status is now captured in the browser process, which has the appropriate UI thread, and then sent via IPC to other processes which are interested in the power state. BUG=236031 R=apatrick@chromium.org, jam@chromium.org, jar@chromium.org, jvoung@chromium.org, kbr@chromium.org, mpcomplete@chromium.org, palmer@chromium.org, piman@chromium.org, vandebo@chromium.org Review URL: https://codereview.chromium.org/17074009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@215381 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/power_monitor/power_monitor_unittest.cc')
-rw-r--r--base/power_monitor/power_monitor_unittest.cc112
1 files changed, 43 insertions, 69 deletions
diff --git a/base/power_monitor/power_monitor_unittest.cc b/base/power_monitor/power_monitor_unittest.cc
index 90f36f0..61b720e 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