Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3421)

Unified Diff: base/power_monitor/power_monitor_unittest.cc

Issue 17074009: Created multi-process-friendly PowerMonitor interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Killing Nits Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 af3ed419ef9842933b8b048aef339e13e6411b45..3178b4ae9108d6d976d87971542d4925e1e36b91 100644
--- a/base/power_monitor/power_monitor_unittest.cc
+++ b/base/power_monitor/power_monitor_unittest.cc
@@ -2,105 +2,78 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/power_monitor/power_monitor.h"
-
-#include "base/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

Powered by Google App Engine
This is Rietveld 408576698