Home | History | Annotate | Download | only in status
      1 // Copyright (c) 2011 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 "chrome/browser/chromeos/status/power_menu_button.h"
      6 
      7 #include "chrome/browser/chromeos/cros/cros_in_process_browser_test.h"
      8 #include "chrome/browser/chromeos/cros/mock_power_library.h"
      9 #include "chrome/browser/chromeos/frame/browser_view.h"
     10 #include "chrome/browser/chromeos/status/status_area_view.h"
     11 #include "chrome/browser/chromeos/view_ids.h"
     12 #include "chrome/browser/ui/browser.h"
     13 #include "chrome/browser/ui/browser_window.h"
     14 #include "grit/theme_resources.h"
     15 
     16 namespace chromeos {
     17 using ::testing::AnyNumber;
     18 using ::testing::InvokeWithoutArgs;
     19 using ::testing::Return;
     20 using ::testing::ReturnRef;
     21 using ::testing::_;
     22 
     23 class PowerMenuButtonTest : public CrosInProcessBrowserTest {
     24  protected:
     25   MockPowerLibrary *mock_power_library_;
     26 
     27   PowerMenuButtonTest() : CrosInProcessBrowserTest(),
     28                           mock_power_library_(NULL) {
     29   }
     30 
     31   virtual void SetUpInProcessBrowserTestFixture() {
     32     cros_mock_->InitStatusAreaMocks();
     33     cros_mock_->SetStatusAreaMocksExpectations();
     34     mock_power_library_ = cros_mock_->mock_power_library();
     35   }
     36 
     37   PowerMenuButton* GetPowerMenuButton() {
     38     BrowserView* view = static_cast<BrowserView*>(browser()->window());
     39     PowerMenuButton* power = static_cast<StatusAreaView*>(view->
     40         GetViewByID(VIEW_ID_STATUS_AREA))->power_view();
     41     return power;
     42   }
     43 
     44   int CallPowerChangedAndGetIconId() {
     45     PowerMenuButton* power = GetPowerMenuButton();
     46     power->PowerChanged(mock_power_library_);
     47     return power->icon_id();
     48   }
     49 };
     50 
     51 IN_PROC_BROWSER_TEST_F(PowerMenuButtonTest, BatteryMissingTest) {
     52   EXPECT_CALL(*mock_power_library_, battery_is_present())
     53       .WillOnce((Return(false)))  // no battery
     54       .RetiresOnSaturation();
     55   EXPECT_CALL(*mock_power_library_, battery_percentage())
     56       .WillOnce((Return(42.0)))
     57       .RetiresOnSaturation();
     58   EXPECT_CALL(*mock_power_library_, battery_fully_charged())
     59       .WillOnce((Return(false)))
     60       .RetiresOnSaturation();
     61   EXPECT_CALL(*mock_power_library_, line_power_on())
     62       .WillOnce((Return(false)))
     63       .RetiresOnSaturation();
     64   EXPECT_CALL(*mock_power_library_, battery_time_to_empty())
     65       .WillOnce((Return(base::TimeDelta::FromMinutes(42))))
     66       .RetiresOnSaturation();
     67   EXPECT_CALL(*mock_power_library_, battery_time_to_full())
     68       .WillOnce((Return(base::TimeDelta::FromMinutes(24))))
     69       .RetiresOnSaturation();
     70   EXPECT_EQ(IDR_STATUSBAR_BATTERY_MISSING, CallPowerChangedAndGetIconId());
     71 }
     72 
     73 IN_PROC_BROWSER_TEST_F(PowerMenuButtonTest, BatteryChargedTest) {
     74   EXPECT_CALL(*mock_power_library_, battery_is_present())
     75       .WillOnce((Return(true)))
     76       .RetiresOnSaturation();
     77   EXPECT_CALL(*mock_power_library_, battery_percentage())
     78       .WillOnce((Return(42.0)))
     79       .RetiresOnSaturation();
     80   EXPECT_CALL(*mock_power_library_, battery_fully_charged())
     81       .WillOnce((Return(true)))  // fully charged
     82       .RetiresOnSaturation();
     83   EXPECT_CALL(*mock_power_library_, line_power_on())
     84       .WillOnce((Return(true)))  // plugged in
     85       .RetiresOnSaturation();
     86   EXPECT_CALL(*mock_power_library_, battery_time_to_empty())
     87       .WillOnce((Return(base::TimeDelta::FromMinutes(42))))
     88       .RetiresOnSaturation();
     89   EXPECT_CALL(*mock_power_library_, battery_time_to_full())
     90       .WillOnce((Return(base::TimeDelta::FromMinutes(0))))
     91       .RetiresOnSaturation();
     92   EXPECT_EQ(IDR_STATUSBAR_BATTERY_CHARGED, CallPowerChangedAndGetIconId());
     93 }
     94 
     95 IN_PROC_BROWSER_TEST_F(PowerMenuButtonTest, BatteryChargingTest) {
     96   const int NUM_TIMES = 19;
     97   EXPECT_CALL(*mock_power_library_, battery_is_present())
     98       .Times(NUM_TIMES)
     99       .WillRepeatedly((Return(true)))
    100       .RetiresOnSaturation();
    101   EXPECT_CALL(*mock_power_library_, battery_fully_charged())
    102       .Times(NUM_TIMES)
    103       .WillRepeatedly((Return(false)))
    104       .RetiresOnSaturation();
    105   EXPECT_CALL(*mock_power_library_, line_power_on())
    106       .Times(NUM_TIMES)
    107       .WillRepeatedly((Return(true)))  // plugged in
    108       .RetiresOnSaturation();
    109   EXPECT_CALL(*mock_power_library_, battery_time_to_empty())
    110       .Times(NUM_TIMES)
    111       .WillRepeatedly((Return(base::TimeDelta::FromMinutes(42))))
    112       .RetiresOnSaturation();
    113   EXPECT_CALL(*mock_power_library_, battery_time_to_full())
    114       .Times(NUM_TIMES)
    115       .WillRepeatedly((Return(base::TimeDelta::FromMinutes(24))))
    116       .RetiresOnSaturation();
    117 
    118   // Test the 16 battery charging states.
    119   // NOTE: Use an array rather than just calculating a resource number to avoid
    120   // creating implicit ordering dependencies on the resource values.
    121   static const int kChargingImages[] = {
    122     IDR_STATUSBAR_BATTERY_CHARGING_1,
    123     IDR_STATUSBAR_BATTERY_CHARGING_2,
    124     IDR_STATUSBAR_BATTERY_CHARGING_3,
    125     IDR_STATUSBAR_BATTERY_CHARGING_4,
    126     IDR_STATUSBAR_BATTERY_CHARGING_5,
    127     IDR_STATUSBAR_BATTERY_CHARGING_6,
    128     IDR_STATUSBAR_BATTERY_CHARGING_7,
    129     IDR_STATUSBAR_BATTERY_CHARGING_8,
    130     IDR_STATUSBAR_BATTERY_CHARGING_9,
    131     IDR_STATUSBAR_BATTERY_CHARGING_10,
    132     IDR_STATUSBAR_BATTERY_CHARGING_11,
    133     IDR_STATUSBAR_BATTERY_CHARGING_12,
    134     IDR_STATUSBAR_BATTERY_CHARGING_13,
    135     IDR_STATUSBAR_BATTERY_CHARGING_14,
    136     IDR_STATUSBAR_BATTERY_CHARGING_15,
    137     IDR_STATUSBAR_BATTERY_CHARGING_16,
    138     IDR_STATUSBAR_BATTERY_CHARGING_17,
    139     IDR_STATUSBAR_BATTERY_CHARGING_18,
    140     IDR_STATUSBAR_BATTERY_CHARGING_19,
    141   };
    142   size_t id = 0;
    143   for (float percent = 5.0; percent < 100.0; percent += 5.0) {
    144     EXPECT_CALL(*mock_power_library_, battery_percentage())
    145         .WillOnce((Return(percent)))
    146         .RetiresOnSaturation();
    147     ASSERT_LT(id, arraysize(kChargingImages));
    148     EXPECT_EQ(kChargingImages[id], CallPowerChangedAndGetIconId());
    149     id++;
    150   }
    151 }
    152 
    153 IN_PROC_BROWSER_TEST_F(PowerMenuButtonTest, BatteryDischargingTest) {
    154   const int NUM_TIMES = 19;
    155   EXPECT_CALL(*mock_power_library_, battery_is_present())
    156       .Times(NUM_TIMES)
    157       .WillRepeatedly((Return(true)))
    158       .RetiresOnSaturation();
    159   EXPECT_CALL(*mock_power_library_, battery_fully_charged())
    160       .Times(NUM_TIMES)
    161       .WillRepeatedly((Return(false)))
    162       .RetiresOnSaturation();
    163   EXPECT_CALL(*mock_power_library_, line_power_on())
    164       .Times(NUM_TIMES)
    165       .WillRepeatedly((Return(false)))
    166       .RetiresOnSaturation();
    167   EXPECT_CALL(*mock_power_library_, battery_time_to_empty())
    168       .Times(NUM_TIMES)
    169       .WillRepeatedly((Return(base::TimeDelta::FromMinutes(42))))
    170       .RetiresOnSaturation();
    171   EXPECT_CALL(*mock_power_library_, battery_time_to_full())
    172       .Times(NUM_TIMES)
    173       .WillRepeatedly((Return(base::TimeDelta::FromMinutes(24))))
    174       .RetiresOnSaturation();
    175 
    176   // Test the 16 battery discharing states.
    177   // NOTE: Use an array rather than just calculating a resource number to avoid
    178   // creating implicit ordering dependencies on the resource values.
    179   static const int kDischargingImages[] = {
    180     IDR_STATUSBAR_BATTERY_DISCHARGING_1,
    181     IDR_STATUSBAR_BATTERY_DISCHARGING_2,
    182     IDR_STATUSBAR_BATTERY_DISCHARGING_3,
    183     IDR_STATUSBAR_BATTERY_DISCHARGING_4,
    184     IDR_STATUSBAR_BATTERY_DISCHARGING_5,
    185     IDR_STATUSBAR_BATTERY_DISCHARGING_6,
    186     IDR_STATUSBAR_BATTERY_DISCHARGING_7,
    187     IDR_STATUSBAR_BATTERY_DISCHARGING_8,
    188     IDR_STATUSBAR_BATTERY_DISCHARGING_9,
    189     IDR_STATUSBAR_BATTERY_DISCHARGING_10,
    190     IDR_STATUSBAR_BATTERY_DISCHARGING_11,
    191     IDR_STATUSBAR_BATTERY_DISCHARGING_12,
    192     IDR_STATUSBAR_BATTERY_DISCHARGING_13,
    193     IDR_STATUSBAR_BATTERY_DISCHARGING_14,
    194     IDR_STATUSBAR_BATTERY_DISCHARGING_15,
    195     IDR_STATUSBAR_BATTERY_DISCHARGING_16,
    196     IDR_STATUSBAR_BATTERY_DISCHARGING_17,
    197     IDR_STATUSBAR_BATTERY_DISCHARGING_18,
    198     IDR_STATUSBAR_BATTERY_DISCHARGING_19,
    199   };
    200   size_t id = 0;
    201   for (float percent = 5.0; percent < 100.0; percent += 5.0) {
    202     EXPECT_CALL(*mock_power_library_, battery_percentage())
    203         .WillOnce((Return(percent)))
    204         .RetiresOnSaturation();
    205     ASSERT_LT(id, arraysize(kDischargingImages));
    206     EXPECT_EQ(kDischargingImages[id], CallPowerChangedAndGetIconId());
    207     id++;
    208   }
    209 }
    210 
    211 }  // namespace chromeos
    212