- add sources.
[platform/framework/web/crosswalk.git] / src / content / browser / power_monitor_message_broadcaster_unittest.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/test/power_monitor_test_base.h"
6 #include "content/browser/power_monitor_message_broadcaster.h"
7 #include "content/common/power_monitor_messages.h"
8 #include "ipc/ipc_sender.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace content {
12
13 class PowerMonitorMessageSender : public IPC::Sender {
14  public:
15   PowerMonitorMessageSender()
16       : power_state_changes_(0),
17         suspends_(0),
18         resumes_(0) {
19   }
20   virtual ~PowerMonitorMessageSender() {}
21
22   virtual bool Send(IPC::Message* msg) OVERRIDE {
23     switch (msg->type()) {
24       case PowerMonitorMsg_Suspend::ID:
25         suspends_++;
26         break;
27       case PowerMonitorMsg_Resume::ID:
28         resumes_++;
29         break;
30       case PowerMonitorMsg_PowerStateChange::ID:
31         power_state_changes_++;
32         break;
33     }
34     delete msg;
35     return true;
36   };
37
38   // Test status counts.
39   int power_state_changes() { return power_state_changes_; }
40   int suspends() { return suspends_; }
41   int resumes() { return resumes_; }
42
43  private:
44   int power_state_changes_;  // Count of OnPowerStateChange notifications.
45   int suspends_;  // Count of OnSuspend notifications.
46   int resumes_;  // Count of OnResume notifications.
47 };
48
49 class PowerMonitorMessageBroadcasterTest : public testing::Test {
50  protected:
51   PowerMonitorMessageBroadcasterTest() {
52     power_monitor_source_ = new base::PowerMonitorTestSource();
53     power_monitor_.reset(new base::PowerMonitor(
54         scoped_ptr<base::PowerMonitorSource>(power_monitor_source_)));
55   }
56   virtual ~PowerMonitorMessageBroadcasterTest() {};
57
58   base::PowerMonitorTestSource* source() { return power_monitor_source_; }
59   base::PowerMonitor* monitor() { return power_monitor_.get(); }
60
61  private:
62   base::PowerMonitorTestSource* power_monitor_source_;
63   scoped_ptr<base::PowerMonitor> power_monitor_;
64
65   DISALLOW_COPY_AND_ASSIGN(PowerMonitorMessageBroadcasterTest);
66 };
67
68 TEST_F(PowerMonitorMessageBroadcasterTest, PowerMessageBroadcast) {
69   PowerMonitorMessageSender sender;
70   PowerMonitorMessageBroadcaster broadcaster(&sender);
71
72   // Sending resume when not suspended should have no effect.
73   source()->GenerateResumeEvent();
74   EXPECT_EQ(sender.resumes(), 0);
75
76   // Pretend we suspended.
77   source()->GenerateSuspendEvent();
78   EXPECT_EQ(sender.suspends(), 1);
79
80   // Send a second suspend notification.  This should be suppressed.
81   source()->GenerateSuspendEvent();
82   EXPECT_EQ(sender.suspends(), 1);
83
84   // Pretend we were awakened.
85   source()->GenerateResumeEvent();
86   EXPECT_EQ(sender.resumes(), 1);
87
88   // Send a duplicate resume notification.  This should be suppressed.
89   source()->GenerateResumeEvent();
90   EXPECT_EQ(sender.resumes(), 1);
91
92   // Pretend the device has gone on battery power
93   source()->GeneratePowerStateEvent(true);
94   EXPECT_EQ(sender.power_state_changes(), 1);
95
96   // Repeated indications the device is on battery power should be suppressed.
97   source()->GeneratePowerStateEvent(true);
98   EXPECT_EQ(sender.power_state_changes(), 1);
99
100   // Pretend the device has gone off battery power
101   source()->GeneratePowerStateEvent(false);
102   EXPECT_EQ(sender.power_state_changes(), 2);
103
104   // Repeated indications the device is off battery power should be suppressed.
105   source()->GeneratePowerStateEvent(false);
106   EXPECT_EQ(sender.power_state_changes(), 2);
107 }
108
109 }  // namespace base