Home | History | Annotate | Download | only in browser
      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
    110