OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2017 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/run_loop.h" | |
6 #include "device/wake_lock/public/interfaces/wake_lock_context.mojom.h" | |
7 #include "device/wake_lock/public/interfaces/wake_lock_provider.mojom.h" | |
8 #include "device/wake_lock/public/interfaces/wake_lock_service.mojom.h" | |
9 #include "mojo/public/cpp/bindings/interface_ptr.h" | |
10 #include "services/device/device_service_test_base.h" | |
11 #include "services/device/public/interfaces/constants.mojom.h" | |
12 | |
13 namespace device { | |
14 | |
15 namespace { | |
16 | |
17 void OnHasWakeLock(bool* out, base::Closure quit_closure, bool has_wakelock) { | |
blundell
2017/05/16 13:37:55
nit: I would just make this a method of WakeLockSe
ke.he
2017/05/17 07:19:54
Done.
| |
18 *out = has_wakelock; | |
19 quit_closure.Run(); | |
20 } | |
21 | |
22 class WakeLockServiceImplTest : public DeviceServiceTestBase { | |
23 public: | |
24 WakeLockServiceImplTest() = default; | |
25 ~WakeLockServiceImplTest() override = default; | |
26 | |
27 protected: | |
28 void SetUp() override { | |
29 DeviceServiceTestBase::SetUp(); | |
30 connector()->BindInterface(mojom::kServiceName, &wake_lock_provider_); | |
31 | |
32 wake_lock_provider_->GetWakeLockWithoutContext( | |
33 device::mojom::WakeLockType::PreventAppSuspension, | |
34 device::mojom::WakeLockReason::ReasonOther, "WakeLockServiceImplTest", | |
35 mojo::MakeRequest(&wake_lock_)); | |
36 } | |
37 | |
38 bool HasWakeLock() { | |
39 bool has_wakelock = false; | |
40 | |
41 base::RunLoop run_loop; | |
42 wake_lock_->HasWakeLockForTests( | |
43 base::Bind(&OnHasWakeLock, &has_wakelock, run_loop.QuitClosure())); | |
44 run_loop.Run(); | |
45 | |
46 return has_wakelock; | |
47 } | |
48 | |
49 mojom::WakeLockProviderPtr wake_lock_provider_; | |
50 mojom::WakeLockServicePtr wake_lock_; | |
51 | |
52 DISALLOW_COPY_AND_ASSIGN(WakeLockServiceImplTest); | |
53 }; | |
54 | |
55 TEST_F(WakeLockServiceImplTest, RequestThenCancel) { | |
56 EXPECT_FALSE(HasWakeLock()); | |
57 | |
58 wake_lock_->RequestWakeLock(); | |
59 EXPECT_TRUE(HasWakeLock()); | |
60 | |
61 wake_lock_->CancelWakeLock(); | |
62 EXPECT_FALSE(HasWakeLock()); | |
63 } | |
64 | |
65 TEST_F(WakeLockServiceImplTest, CancelThenRequest) { | |
66 EXPECT_FALSE(HasWakeLock()); | |
67 | |
68 wake_lock_->CancelWakeLock(); | |
69 EXPECT_FALSE(HasWakeLock()); | |
70 | |
71 wake_lock_->RequestWakeLock(); | |
72 EXPECT_TRUE(HasWakeLock()); | |
73 | |
74 wake_lock_->CancelWakeLock(); | |
75 EXPECT_FALSE(HasWakeLock()); | |
76 } | |
77 | |
78 TEST_F(WakeLockServiceImplTest, MultipleRequests) { | |
79 EXPECT_FALSE(HasWakeLock()); | |
80 | |
81 wake_lock_->RequestWakeLock(); | |
82 wake_lock_->RequestWakeLock(); | |
83 wake_lock_->RequestWakeLock(); | |
84 EXPECT_TRUE(HasWakeLock()); | |
85 | |
86 wake_lock_->CancelWakeLock(); | |
87 EXPECT_FALSE(HasWakeLock()); | |
88 } | |
89 | |
90 TEST_F(WakeLockServiceImplTest, OnWakeLockProviderConnectionError) { | |
91 EXPECT_FALSE(HasWakeLock()); | |
92 | |
93 wake_lock_->RequestWakeLock(); | |
94 EXPECT_TRUE(HasWakeLock()); | |
95 | |
96 wake_lock_provider_.reset(); | |
97 base::RunLoop().RunUntilIdle(); | |
98 | |
99 EXPECT_TRUE(HasWakeLock()); | |
100 wake_lock_->CancelWakeLock(); | |
101 EXPECT_FALSE(HasWakeLock()); | |
102 } | |
103 | |
104 TEST_F(WakeLockServiceImplTest, MultipleClients) { | |
105 EXPECT_FALSE(HasWakeLock()); | |
106 | |
107 mojom::WakeLockServicePtr wake_lock_1; | |
108 mojom::WakeLockServicePtr wake_lock_2; | |
109 mojom::WakeLockServicePtr wake_lock_3; | |
110 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_1)); | |
111 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_2)); | |
112 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_3)); | |
113 | |
114 EXPECT_FALSE(HasWakeLock()); | |
115 | |
116 wake_lock_1->RequestWakeLock(); | |
117 wake_lock_2->RequestWakeLock(); | |
118 wake_lock_3->RequestWakeLock(); | |
119 EXPECT_TRUE(HasWakeLock()); | |
120 | |
121 wake_lock_1->CancelWakeLock(); | |
122 wake_lock_2->CancelWakeLock(); | |
123 EXPECT_TRUE(HasWakeLock()); | |
124 | |
125 wake_lock_3->CancelWakeLock(); | |
126 EXPECT_FALSE(HasWakeLock()); | |
127 } | |
128 | |
129 TEST_F(WakeLockServiceImplTest, OnWakeLockConnectionError) { | |
130 EXPECT_FALSE(HasWakeLock()); | |
131 | |
132 mojom::WakeLockServicePtr wake_lock_1; | |
133 mojom::WakeLockServicePtr wake_lock_2; | |
134 mojom::WakeLockServicePtr wake_lock_3; | |
135 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_1)); | |
136 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_2)); | |
137 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_3)); | |
138 | |
139 EXPECT_FALSE(HasWakeLock()); | |
140 | |
141 wake_lock_1->RequestWakeLock(); | |
142 wake_lock_2->RequestWakeLock(); | |
143 wake_lock_3->RequestWakeLock(); | |
144 EXPECT_TRUE(HasWakeLock()); | |
145 | |
146 wake_lock_1.reset(); | |
147 base::RunLoop().RunUntilIdle(); | |
148 EXPECT_TRUE(HasWakeLock()); | |
149 | |
150 wake_lock_2.reset(); | |
151 wake_lock_3.reset(); | |
152 base::RunLoop().RunUntilIdle(); | |
153 EXPECT_FALSE(HasWakeLock()); | |
154 } | |
155 | |
156 TEST_F(WakeLockServiceImplTest, MixedTest) { | |
blundell
2017/05/16 13:37:55
nit: All of these tests could use 1 line of docume
ke.he
2017/05/17 07:19:54
Done.
| |
157 EXPECT_FALSE(HasWakeLock()); | |
158 | |
159 mojom::WakeLockServicePtr wake_lock_1; | |
160 mojom::WakeLockServicePtr wake_lock_2; | |
161 mojom::WakeLockServicePtr wake_lock_3; | |
162 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_1)); | |
163 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_2)); | |
164 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_3)); | |
165 | |
166 EXPECT_FALSE(HasWakeLock()); | |
167 | |
168 wake_lock_1->RequestWakeLock(); | |
blundell
2017/05/16 13:37:55
This could use a line of documentation on what the
ke.he
2017/05/17 07:19:54
Done.
| |
169 wake_lock_1->CancelWakeLock(); | |
170 wake_lock_2->RequestWakeLock(); | |
171 wake_lock_1->RequestWakeLock(); | |
172 wake_lock_1->RequestWakeLock(); | |
173 wake_lock_3->CancelWakeLock(); | |
174 wake_lock_3->CancelWakeLock(); | |
175 wake_lock_2->CancelWakeLock(); | |
176 wake_lock_3->RequestWakeLock(); | |
177 wake_lock_2.reset(); | |
178 EXPECT_TRUE(HasWakeLock()); | |
179 | |
180 wake_lock_1.reset(); | |
181 base::RunLoop().RunUntilIdle(); | |
182 EXPECT_TRUE(HasWakeLock()); | |
183 | |
184 wake_lock_3->CancelWakeLock(); | |
185 EXPECT_FALSE(HasWakeLock()); | |
186 } | |
187 | |
188 } // namespace | |
189 | |
190 } // namespace device | |
OLD | NEW |