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

Side by Side Diff: device/battery/battery_status_service_unittest.cc

Issue 2818673003: [DeviceService] Expose battery monitoring solely via the Device Service (Closed)
Patch Set: Java file format change Created 3 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
« no previous file with comments | « device/battery/battery_status_service.cc ('k') | services/device/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "device/battery/battery_status_service.h"
6
7 #include <memory>
8 #include <utility>
9
10 #include "base/bind.h"
11 #include "base/macros.h"
12 #include "base/message_loop/message_loop.h"
13 #include "base/run_loop.h"
14 #include "device/battery/battery_status_manager.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 namespace device {
18
19 namespace {
20
21 class FakeBatteryManager : public BatteryStatusManager {
22 public:
23 explicit FakeBatteryManager(
24 const BatteryStatusService::BatteryUpdateCallback& callback)
25 : callback_(callback), start_invoked_count_(0), stop_invoked_count_(0) {}
26 ~FakeBatteryManager() override {}
27
28 // Methods from Battery Status Manager
29 bool StartListeningBatteryChange() override {
30 start_invoked_count_++;
31 return true;
32 }
33
34 void StopListeningBatteryChange() override { stop_invoked_count_++; }
35
36 void InvokeUpdateCallback(const mojom::BatteryStatus& status) {
37 callback_.Run(status);
38 }
39
40 int start_invoked_count() const { return start_invoked_count_; }
41 int stop_invoked_count() const { return stop_invoked_count_; }
42
43 private:
44 BatteryStatusService::BatteryUpdateCallback callback_;
45 int start_invoked_count_;
46 int stop_invoked_count_;
47
48 DISALLOW_COPY_AND_ASSIGN(FakeBatteryManager);
49 };
50
51 } // namespace
52
53 class BatteryStatusServiceTest : public testing::Test {
54 public:
55 BatteryStatusServiceTest()
56 : battery_manager_(nullptr),
57 callback1_invoked_count_(0),
58 callback2_invoked_count_(0) {}
59 ~BatteryStatusServiceTest() override {}
60
61 protected:
62 typedef BatteryStatusService::BatteryUpdateSubscription BatterySubscription;
63
64 void SetUp() override {
65 callback1_ = base::Bind(&BatteryStatusServiceTest::Callback1,
66 base::Unretained(this));
67 callback2_ = base::Bind(&BatteryStatusServiceTest::Callback2,
68 base::Unretained(this));
69
70 // We keep a raw pointer to the FakeBatteryManager, which we expect to
71 // remain valid for the lifetime of the BatteryStatusService.
72 std::unique_ptr<FakeBatteryManager> battery_manager(
73 new FakeBatteryManager(battery_service_.GetUpdateCallbackForTesting()));
74 battery_manager_ = battery_manager.get();
75
76 battery_service_.SetBatteryManagerForTesting(std::move(battery_manager));
77 }
78
79 void TearDown() override {
80 base::RunLoop().RunUntilIdle();
81 }
82
83 FakeBatteryManager* battery_manager() {
84 return battery_manager_;
85 }
86
87 std::unique_ptr<BatterySubscription> AddCallback(
88 const BatteryStatusService::BatteryUpdateCallback& callback) {
89 return battery_service_.AddCallback(callback);
90 }
91
92 int callback1_invoked_count() const {
93 return callback1_invoked_count_;
94 }
95
96 int callback2_invoked_count() const {
97 return callback2_invoked_count_;
98 }
99
100 const mojom::BatteryStatus& battery_status() const { return battery_status_; }
101
102 const BatteryStatusService::BatteryUpdateCallback& callback1() const {
103 return callback1_;
104 }
105
106 const BatteryStatusService::BatteryUpdateCallback& callback2() const {
107 return callback2_;
108 }
109
110 private:
111 void Callback1(const mojom::BatteryStatus& status) {
112 callback1_invoked_count_++;
113 battery_status_ = status;
114 }
115
116 void Callback2(const mojom::BatteryStatus& status) {
117 callback2_invoked_count_++;
118 battery_status_ = status;
119 }
120
121 base::MessageLoop message_loop_;
122 BatteryStatusService battery_service_;
123 FakeBatteryManager* battery_manager_;
124 BatteryStatusService::BatteryUpdateCallback callback1_;
125 BatteryStatusService::BatteryUpdateCallback callback2_;
126 int callback1_invoked_count_;
127 int callback2_invoked_count_;
128 mojom::BatteryStatus battery_status_;
129
130 DISALLOW_COPY_AND_ASSIGN(BatteryStatusServiceTest);
131 };
132
133 TEST_F(BatteryStatusServiceTest, AddFirstCallback) {
134 std::unique_ptr<BatterySubscription> subscription1 = AddCallback(callback1());
135 EXPECT_EQ(1, battery_manager()->start_invoked_count());
136 EXPECT_EQ(0, battery_manager()->stop_invoked_count());
137 subscription1.reset();
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 std::unique_ptr<BatterySubscription> subscription1 = AddCallback(callback1());
144 mojom::BatteryStatus 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 std::unique_ptr<BatterySubscription> subscription2 = AddCallback(callback2());
151 EXPECT_EQ(1, callback1_invoked_count());
152 EXPECT_EQ(1, callback2_invoked_count());
153 }
154
155 TEST_F(BatteryStatusServiceTest, TwoCallbacksUpdate) {
156 std::unique_ptr<BatterySubscription> subscription1 = AddCallback(callback1());
157 std::unique_ptr<BatterySubscription> subscription2 = AddCallback(callback2());
158
159 mojom::BatteryStatus status;
160 status.charging = true;
161 status.charging_time = 100;
162 status.discharging_time = 200;
163 status.level = 0.5;
164 battery_manager()->InvokeUpdateCallback(status);
165 base::RunLoop().RunUntilIdle();
166
167 EXPECT_EQ(1, callback1_invoked_count());
168 EXPECT_EQ(1, callback2_invoked_count());
169 EXPECT_EQ(status.charging, battery_status().charging);
170 EXPECT_EQ(status.charging_time, battery_status().charging_time);
171 EXPECT_EQ(status.discharging_time, battery_status().discharging_time);
172 EXPECT_EQ(status.level, battery_status().level);
173 }
174
175 TEST_F(BatteryStatusServiceTest, RemoveOneCallback) {
176 std::unique_ptr<BatterySubscription> subscription1 = AddCallback(callback1());
177 std::unique_ptr<BatterySubscription> subscription2 = AddCallback(callback2());
178
179 mojom::BatteryStatus status;
180 battery_manager()->InvokeUpdateCallback(status);
181 base::RunLoop().RunUntilIdle();
182 EXPECT_EQ(1, callback1_invoked_count());
183 EXPECT_EQ(1, callback2_invoked_count());
184
185 subscription1.reset();
186 battery_manager()->InvokeUpdateCallback(status);
187 base::RunLoop().RunUntilIdle();
188 EXPECT_EQ(1, callback1_invoked_count());
189 EXPECT_EQ(2, callback2_invoked_count());
190 }
191
192 } // namespace device
OLDNEW
« no previous file with comments | « device/battery/battery_status_service.cc ('k') | services/device/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698