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

Side by Side Diff: content/browser/battery_status/battery_status_service_unittest.cc

Issue 278043002: Battery Status API: browser-side implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 "content/browser/battery_status/battery_status_service.h"
6
7 #include "base/bind.h"
8 #include "base/run_loop.h"
9 #include "content/browser/battery_status/battery_status_manager_interface.h"
10 #include "content/public/test/test_browser_thread_bundle.h"
11
12 namespace content {
13
14 namespace {
15
16 class FakeBatteryManager : public BatteryStatusManagerInterface {
17 public:
18 FakeBatteryManager(const BatteryStatusUpdateCallback& callback)
19 : callback_(callback),
20 start_invoked_count_(0),
21 stop_invoked_count_(0) {
22 }
23 virtual ~FakeBatteryManager() { }
24
25 // Methods from Battery Status Manager
26 virtual bool StartListeningBatteryChange() OVERRIDE {
27 start_invoked_count_++;
28 return true;
29 }
30
31 virtual void StopListeningBatteryChange() OVERRIDE {
32 stop_invoked_count_++;
33 }
34
35 void InvokeUpdateCallback(const blink::WebBatteryStatus& status) {
36 callback_.Run(status);
37 }
38
39 int start_invoked_count() const { return start_invoked_count_; }
40 int stop_invoked_count() const { return stop_invoked_count_; }
41
42 private:
43 BatteryStatusUpdateCallback callback_;
44 int start_invoked_count_;
45 int stop_invoked_count_;
46
47 DISALLOW_COPY_AND_ASSIGN(FakeBatteryManager);
48 };
49
50 class BatteryStatusServiceTest : public testing::Test {
51 public:
52 BatteryStatusServiceTest()
53 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
54 battery_service_(0),
55 battery_manager_(0),
56 callback1_invoked_count_(0),
57 callback2_invoked_count_(0) {
58 }
59 virtual ~BatteryStatusServiceTest() { }
60
61 protected:
62 virtual void SetUp() OVERRIDE {
63 callback1_ = base::Bind(&BatteryStatusServiceTest::Callback1,
64 base::Unretained(this));
65 callback2_ = base::Bind(&BatteryStatusServiceTest::Callback2,
66 base::Unretained(this));
67 battery_service_ = BatteryStatusService::GetInstance();
68 battery_manager_ = new FakeBatteryManager(
69 battery_service_->update_callback());
70 battery_service_->SetBatteryManagerForTests(battery_manager_);
71 }
72
73 virtual void TearDown() OVERRIDE {
74 base::RunLoop().RunUntilIdle();
75 battery_service_->SetBatteryManagerForTests(0);
76 }
77
78 FakeBatteryManager* battery_manager() {
79 return battery_manager_;
80 }
81
82 void AddCallback(const BatteryStatusUpdateCallback& callback) {
83 battery_service_->AddCallback(callback);
84 }
85
86 void RemoveCallback(const BatteryStatusUpdateCallback& callback) {
87 battery_service_->RemoveCallback(callback);
88 }
89
90 int callback1_invoked_count() const {
91 return callback1_invoked_count_;
92 }
93
94 int callback2_invoked_count() const {
95 return callback2_invoked_count_;
96 }
97
98 const blink::WebBatteryStatus& battery_status() const {
99 return battery_status_;
100 }
101
102 const BatteryStatusUpdateCallback& callback1() const {
103 return callback1_;
104 }
105
106 const BatteryStatusUpdateCallback& callback2() const {
107 return callback2_;
108 }
109
110 private:
111 void Callback1(const blink::WebBatteryStatus& status) {
112 callback1_invoked_count_++;
113 battery_status_ = status;
114 }
115
116 void Callback2(const blink::WebBatteryStatus& status) {
117 callback2_invoked_count_++;
118 battery_status_ = status;
119 }
120
121 content::TestBrowserThreadBundle thread_bundle_;
122 BatteryStatusService* battery_service_;
123 FakeBatteryManager* battery_manager_;
124 BatteryStatusUpdateCallback callback1_;
125 BatteryStatusUpdateCallback callback2_;
126 int callback1_invoked_count_;
127 int callback2_invoked_count_;
128 blink::WebBatteryStatus battery_status_;
129
130 DISALLOW_COPY_AND_ASSIGN(BatteryStatusServiceTest);
131 };
132
133 TEST_F(BatteryStatusServiceTest, AddFirstCallback) {
134 AddCallback(callback1());
135 EXPECT_EQ(1, battery_manager()->start_invoked_count());
136 EXPECT_EQ(0, battery_manager()->stop_invoked_count());
137 RemoveCallback(callback1());
138 EXPECT_EQ(1, battery_manager()->start_invoked_count());
139 EXPECT_EQ(1, battery_manager()->stop_invoked_count());
140 }
141
142 TEST_F(BatteryStatusServiceTest, AddCallbackAfterUpdate) {
143 AddCallback(callback1());
144 blink::WebBatteryStatus status;
145 battery_manager()->InvokeUpdateCallback(status);
146 base::RunLoop().RunUntilIdle();
147 EXPECT_EQ(1, callback1_invoked_count());
148 EXPECT_EQ(0, callback2_invoked_count());
149
150 AddCallback(callback2());
151 EXPECT_EQ(1, callback1_invoked_count());
152 EXPECT_EQ(1, callback2_invoked_count());
153
154 RemoveCallback(callback1());
155 RemoveCallback(callback2());
156 }
157
158 TEST_F(BatteryStatusServiceTest, TwoCallbacksUpdate) {
159 AddCallback(callback1());
160 AddCallback(callback2());
161
162 blink::WebBatteryStatus status;
163 status.charging = true;
164 status.chargingTime = 100;
165 status.dischargingTime = 200;
166 status.level = 0.5;
167 battery_manager()->InvokeUpdateCallback(status);
168 base::RunLoop().RunUntilIdle();
169 EXPECT_EQ(1, callback1_invoked_count());
170 EXPECT_EQ(1, callback2_invoked_count());
171 EXPECT_EQ(status.charging, battery_status().charging);
172 EXPECT_EQ(status.chargingTime, battery_status().chargingTime);
173 EXPECT_EQ(status.dischargingTime, battery_status().dischargingTime);
174 EXPECT_EQ(status.level, battery_status().level);
175
176 RemoveCallback(callback1());
177 RemoveCallback(callback2());
178 }
179
180 TEST_F(BatteryStatusServiceTest, RemoveOneCallback) {
181 AddCallback(callback1());
182 AddCallback(callback2());
183
184 blink::WebBatteryStatus status;
185 battery_manager()->InvokeUpdateCallback(status);
186 base::RunLoop().RunUntilIdle();
187 EXPECT_EQ(1, callback1_invoked_count());
188 EXPECT_EQ(1, callback2_invoked_count());
189
190 RemoveCallback(callback1());
191 battery_manager()->InvokeUpdateCallback(status);
192 base::RunLoop().RunUntilIdle();
193 EXPECT_EQ(1, callback1_invoked_count());
194 EXPECT_EQ(2, callback2_invoked_count());
195
196 RemoveCallback(callback2());
197 }
198
199 TEST_F(BatteryStatusServiceTest, AddDuplicateCallback) {
200 AddCallback(callback1());
201 AddCallback(callback1());
202 blink::WebBatteryStatus status;
203 battery_manager()->InvokeUpdateCallback(status);
204 base::RunLoop().RunUntilIdle();
205 EXPECT_EQ(1, callback1_invoked_count());
206 EXPECT_EQ(0, callback2_invoked_count());
207
208 RemoveCallback(callback1());
209 }
210
211 } // namespace
212
213 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698