power_menu_button_browsertest.cc revision 513209b27ff55e2841eac0e4120199c23acce758
1// Copyright (c) 2010 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/browser.h"
8#include "chrome/browser/browser_window.h"
9#include "chrome/browser/chromeos/cros/cros_in_process_browser_test.h"
10#include "chrome/browser/chromeos/cros/mock_power_library.h"
11#include "chrome/browser/chromeos/frame/browser_view.h"
12#include "chrome/browser/chromeos/status/status_area_view.h"
13#include "chrome/browser/chromeos/view_ids.h"
14#include "grit/theme_resources.h"
15
16namespace chromeos {
17using ::testing::AnyNumber;
18using ::testing::InvokeWithoutArgs;
19using ::testing::Return;
20using ::testing::ReturnRef;
21using ::testing::_;
22
23class 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
51IN_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
73IN_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
95IN_PROC_BROWSER_TEST_F(PowerMenuButtonTest, BatteryChargingTest) {
96  const int NUM_TIMES = 16;
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  };
139  size_t id = 0;
140  for (float percent = 6.0; percent < 100.0; percent += 6.0) {
141    EXPECT_CALL(*mock_power_library_, battery_percentage())
142        .WillOnce((Return(percent)))
143        .RetiresOnSaturation();
144    ASSERT_LT(id, arraysize(kChargingImages));
145    EXPECT_EQ(kChargingImages[id], CallPowerChangedAndGetIconId());
146    id++;
147  }
148}
149
150IN_PROC_BROWSER_TEST_F(PowerMenuButtonTest, BatteryDischargingTest) {
151  const int NUM_TIMES = 16;
152  EXPECT_CALL(*mock_power_library_, battery_is_present())
153      .Times(NUM_TIMES)
154      .WillRepeatedly((Return(true)))
155      .RetiresOnSaturation();
156  EXPECT_CALL(*mock_power_library_, battery_fully_charged())
157      .Times(NUM_TIMES)
158      .WillRepeatedly((Return(false)))
159      .RetiresOnSaturation();
160  EXPECT_CALL(*mock_power_library_, line_power_on())
161      .Times(NUM_TIMES)
162      .WillRepeatedly((Return(false)))
163      .RetiresOnSaturation();
164  EXPECT_CALL(*mock_power_library_, battery_time_to_empty())
165      .Times(NUM_TIMES)
166      .WillRepeatedly((Return(base::TimeDelta::FromMinutes(42))))
167      .RetiresOnSaturation();
168  EXPECT_CALL(*mock_power_library_, battery_time_to_full())
169      .Times(NUM_TIMES)
170      .WillRepeatedly((Return(base::TimeDelta::FromMinutes(24))))
171      .RetiresOnSaturation();
172
173  // Test the 16 battery discharing states.
174  // NOTE: Use an array rather than just calculating a resource number to avoid
175  // creating implicit ordering dependencies on the resource values.
176  static const int kDischargingImages[] = {
177    IDR_STATUSBAR_BATTERY_DISCHARGING_1,
178    IDR_STATUSBAR_BATTERY_DISCHARGING_2,
179    IDR_STATUSBAR_BATTERY_DISCHARGING_3,
180    IDR_STATUSBAR_BATTERY_DISCHARGING_4,
181    IDR_STATUSBAR_BATTERY_DISCHARGING_5,
182    IDR_STATUSBAR_BATTERY_DISCHARGING_6,
183    IDR_STATUSBAR_BATTERY_DISCHARGING_7,
184    IDR_STATUSBAR_BATTERY_DISCHARGING_8,
185    IDR_STATUSBAR_BATTERY_DISCHARGING_9,
186    IDR_STATUSBAR_BATTERY_DISCHARGING_10,
187    IDR_STATUSBAR_BATTERY_DISCHARGING_11,
188    IDR_STATUSBAR_BATTERY_DISCHARGING_12,
189    IDR_STATUSBAR_BATTERY_DISCHARGING_13,
190    IDR_STATUSBAR_BATTERY_DISCHARGING_14,
191    IDR_STATUSBAR_BATTERY_DISCHARGING_15,
192    IDR_STATUSBAR_BATTERY_DISCHARGING_16,
193  };
194  size_t id = 0;
195  for (float percent = 6.0; percent < 100.0; percent += 6.0) {
196    EXPECT_CALL(*mock_power_library_, battery_percentage())
197        .WillOnce((Return(percent)))
198        .RetiresOnSaturation();
199    ASSERT_LT(id, arraysize(kDischargingImages));
200    EXPECT_EQ(kDischargingImages[id], CallPowerChangedAndGetIconId());
201    id++;
202  }
203}
204
205}  // namespace chromeos
206