Revert of Componentize TemplateURLService (https://codereview.chromium.org/367023002/)
[chromium-blink-merge.git] / device / bluetooth / bluetooth_adapter_win_unittest.cc
blobc3dc9101ec4dc7d457aa3366a68b3dc1736a4fca
1 // Copyright (c) 2012 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.
5 #include <string>
7 #include "base/bind.h"
8 #include "base/memory/ref_counted.h"
9 #include "base/test/test_simple_task_runner.h"
10 #include "device/bluetooth/bluetooth_adapter.h"
11 #include "device/bluetooth/bluetooth_adapter_win.h"
12 #include "device/bluetooth/bluetooth_device.h"
13 #include "device/bluetooth/bluetooth_task_manager_win.h"
14 #include "testing/gtest/include/gtest/gtest.h"
16 namespace {
18 const char kAdapterAddress[] = "A1:B2:C3:D4:E5:F6";
19 const char kAdapterName[] = "Bluetooth Adapter Name";
22 void MakeDeviceState(const std::string& name,
23 const std::string& address,
24 device::BluetoothTaskManagerWin::DeviceState* state) {
25 state->name = name;
26 state->address = address;
27 state->bluetooth_class = 0;
28 state->authenticated = false;
29 state->connected = false;
32 class AdapterObserver : public device::BluetoothAdapter::Observer {
33 public:
34 AdapterObserver()
35 : num_present_changed_(0),
36 num_powered_changed_(0),
37 num_discovering_changed_(0),
38 num_device_added_(0) {
41 virtual void AdapterPresentChanged(
42 device::BluetoothAdapter* adapter, bool present) OVERRIDE {
43 num_present_changed_++;
46 virtual void AdapterPoweredChanged(
47 device::BluetoothAdapter* adapter, bool powered) OVERRIDE {
48 num_powered_changed_++;
51 virtual void AdapterDiscoveringChanged(
52 device::BluetoothAdapter* adapter, bool discovering) OVERRIDE {
53 num_discovering_changed_++;
56 virtual void DeviceAdded(
57 device::BluetoothAdapter* adapter,
58 device::BluetoothDevice* device) OVERRIDE {
59 num_device_added_++;
62 int num_present_changed() const {
63 return num_present_changed_;
66 int num_powered_changed() const {
67 return num_powered_changed_;
70 int num_discovering_changed() const {
71 return num_discovering_changed_;
74 int num_device_added() const {
75 return num_device_added_;
78 private:
79 int num_present_changed_;
80 int num_powered_changed_;
81 int num_discovering_changed_;
82 int num_device_added_;
85 } // namespace
87 namespace device {
89 class BluetoothAdapterWinTest : public testing::Test {
90 public:
91 BluetoothAdapterWinTest()
92 : ui_task_runner_(new base::TestSimpleTaskRunner()),
93 bluetooth_task_runner_(new base::TestSimpleTaskRunner()),
94 adapter_(new BluetoothAdapterWin(
95 base::Bind(&BluetoothAdapterWinTest::RunInitCallback,
96 base::Unretained(this)))),
97 adapter_win_(static_cast<BluetoothAdapterWin*>(adapter_.get())),
98 init_callback_called_(false) {
99 adapter_win_->InitForTest(ui_task_runner_, bluetooth_task_runner_);
102 virtual void SetUp() OVERRIDE {
103 adapter_win_->AddObserver(&adapter_observer_);
104 num_start_discovery_callbacks_ = 0;
105 num_start_discovery_error_callbacks_ = 0;
106 num_stop_discovery_callbacks_ = 0;
107 num_stop_discovery_error_callbacks_ = 0;
110 virtual void TearDown() OVERRIDE {
111 adapter_win_->RemoveObserver(&adapter_observer_);
114 void RunInitCallback() {
115 init_callback_called_ = true;
118 void IncrementNumStartDiscoveryCallbacks() {
119 num_start_discovery_callbacks_++;
122 void IncrementNumStartDiscoveryErrorCallbacks() {
123 num_start_discovery_error_callbacks_++;
126 void IncrementNumStopDiscoveryCallbacks() {
127 num_stop_discovery_callbacks_++;
130 void IncrementNumStopDiscoveryErrorCallbacks() {
131 num_stop_discovery_error_callbacks_++;
134 void CallAddDiscoverySession(
135 const base::Closure& callback,
136 const BluetoothAdapter::ErrorCallback& error_callback) {
137 adapter_win_->AddDiscoverySession(callback, error_callback);
140 void CallRemoveDiscoverySession(
141 const base::Closure& callback,
142 const BluetoothAdapter::ErrorCallback& error_callback) {
143 adapter_win_->RemoveDiscoverySession(callback, error_callback);
146 protected:
147 scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_;
148 scoped_refptr<base::TestSimpleTaskRunner> bluetooth_task_runner_;
149 scoped_refptr<BluetoothAdapter> adapter_;
150 BluetoothAdapterWin* adapter_win_;
151 AdapterObserver adapter_observer_;
152 bool init_callback_called_;
153 int num_start_discovery_callbacks_;
154 int num_start_discovery_error_callbacks_;
155 int num_stop_discovery_callbacks_;
156 int num_stop_discovery_error_callbacks_;
159 TEST_F(BluetoothAdapterWinTest, AdapterNotPresent) {
160 BluetoothTaskManagerWin::AdapterState state;
161 adapter_win_->AdapterStateChanged(state);
162 EXPECT_FALSE(adapter_win_->IsPresent());
165 TEST_F(BluetoothAdapterWinTest, AdapterPresent) {
166 BluetoothTaskManagerWin::AdapterState state;
167 state.address = kAdapterAddress;
168 state.name = kAdapterName;
169 adapter_win_->AdapterStateChanged(state);
170 EXPECT_TRUE(adapter_win_->IsPresent());
173 TEST_F(BluetoothAdapterWinTest, AdapterPresentChanged) {
174 BluetoothTaskManagerWin::AdapterState state;
175 state.address = kAdapterAddress;
176 state.name = kAdapterName;
177 adapter_win_->AdapterStateChanged(state);
178 EXPECT_EQ(1, adapter_observer_.num_present_changed());
179 adapter_win_->AdapterStateChanged(state);
180 EXPECT_EQ(1, adapter_observer_.num_present_changed());
181 BluetoothTaskManagerWin::AdapterState empty_state;
182 adapter_win_->AdapterStateChanged(empty_state);
183 EXPECT_EQ(2, adapter_observer_.num_present_changed());
186 TEST_F(BluetoothAdapterWinTest, AdapterPoweredChanged) {
187 BluetoothTaskManagerWin::AdapterState state;
188 state.powered = true;
189 adapter_win_->AdapterStateChanged(state);
190 EXPECT_EQ(1, adapter_observer_.num_powered_changed());
191 adapter_win_->AdapterStateChanged(state);
192 EXPECT_EQ(1, adapter_observer_.num_powered_changed());
193 state.powered = false;
194 adapter_win_->AdapterStateChanged(state);
195 EXPECT_EQ(2, adapter_observer_.num_powered_changed());
198 TEST_F(BluetoothAdapterWinTest, AdapterInitialized) {
199 EXPECT_FALSE(adapter_win_->IsInitialized());
200 EXPECT_FALSE(init_callback_called_);
201 BluetoothTaskManagerWin::AdapterState state;
202 adapter_win_->AdapterStateChanged(state);
203 EXPECT_TRUE(adapter_win_->IsInitialized());
204 EXPECT_TRUE(init_callback_called_);
207 TEST_F(BluetoothAdapterWinTest, SingleStartDiscovery) {
208 bluetooth_task_runner_->ClearPendingTasks();
209 CallAddDiscoverySession(
210 base::Bind(&BluetoothAdapterWinTest::IncrementNumStartDiscoveryCallbacks,
211 base::Unretained(this)),
212 BluetoothAdapter::ErrorCallback());
213 EXPECT_TRUE(ui_task_runner_->GetPendingTasks().empty());
214 EXPECT_EQ(1, bluetooth_task_runner_->GetPendingTasks().size());
215 EXPECT_FALSE(adapter_->IsDiscovering());
216 EXPECT_EQ(0, num_start_discovery_callbacks_);
217 adapter_win_->DiscoveryStarted(true);
218 ui_task_runner_->RunPendingTasks();
219 EXPECT_TRUE(adapter_->IsDiscovering());
220 EXPECT_EQ(1, num_start_discovery_callbacks_);
221 EXPECT_EQ(1, adapter_observer_.num_discovering_changed());
224 TEST_F(BluetoothAdapterWinTest, SingleStartDiscoveryFailure) {
225 CallAddDiscoverySession(
226 base::Closure(),
227 base::Bind(
228 &BluetoothAdapterWinTest::IncrementNumStartDiscoveryErrorCallbacks,
229 base::Unretained(this)));
230 adapter_win_->DiscoveryStarted(false);
231 ui_task_runner_->RunPendingTasks();
232 EXPECT_FALSE(adapter_->IsDiscovering());
233 EXPECT_EQ(1, num_start_discovery_error_callbacks_);
234 EXPECT_EQ(0, adapter_observer_.num_discovering_changed());
237 TEST_F(BluetoothAdapterWinTest, MultipleStartDiscoveries) {
238 bluetooth_task_runner_->ClearPendingTasks();
239 int num_discoveries = 5;
240 for (int i = 0; i < num_discoveries; i++) {
241 CallAddDiscoverySession(
242 base::Bind(
243 &BluetoothAdapterWinTest::IncrementNumStartDiscoveryCallbacks,
244 base::Unretained(this)),
245 BluetoothAdapter::ErrorCallback());
246 EXPECT_EQ(1, bluetooth_task_runner_->GetPendingTasks().size());
248 EXPECT_TRUE(ui_task_runner_->GetPendingTasks().empty());
249 EXPECT_FALSE(adapter_->IsDiscovering());
250 EXPECT_EQ(0, num_start_discovery_callbacks_);
251 adapter_win_->DiscoveryStarted(true);
252 ui_task_runner_->RunPendingTasks();
253 EXPECT_TRUE(adapter_->IsDiscovering());
254 EXPECT_EQ(num_discoveries, num_start_discovery_callbacks_);
255 EXPECT_EQ(1, adapter_observer_.num_discovering_changed());
258 TEST_F(BluetoothAdapterWinTest, MultipleStartDiscoveriesFailure) {
259 int num_discoveries = 5;
260 for (int i = 0; i < num_discoveries; i++) {
261 CallAddDiscoverySession(
262 base::Closure(),
263 base::Bind(
264 &BluetoothAdapterWinTest::IncrementNumStartDiscoveryErrorCallbacks,
265 base::Unretained(this)));
267 adapter_win_->DiscoveryStarted(false);
268 ui_task_runner_->RunPendingTasks();
269 EXPECT_FALSE(adapter_->IsDiscovering());
270 EXPECT_EQ(num_discoveries, num_start_discovery_error_callbacks_);
271 EXPECT_EQ(0, adapter_observer_.num_discovering_changed());
274 TEST_F(BluetoothAdapterWinTest, MultipleStartDiscoveriesAfterDiscovering) {
275 CallAddDiscoverySession(
276 base::Bind(&BluetoothAdapterWinTest::IncrementNumStartDiscoveryCallbacks,
277 base::Unretained(this)),
278 BluetoothAdapter::ErrorCallback());
279 adapter_win_->DiscoveryStarted(true);
280 ui_task_runner_->RunPendingTasks();
281 EXPECT_TRUE(adapter_->IsDiscovering());
282 EXPECT_EQ(1, num_start_discovery_callbacks_);
284 bluetooth_task_runner_->ClearPendingTasks();
285 for (int i = 0; i < 5; i++) {
286 int num_start_discovery_callbacks = num_start_discovery_callbacks_;
287 CallAddDiscoverySession(
288 base::Bind(
289 &BluetoothAdapterWinTest::IncrementNumStartDiscoveryCallbacks,
290 base::Unretained(this)),
291 BluetoothAdapter::ErrorCallback());
292 EXPECT_TRUE(adapter_->IsDiscovering());
293 EXPECT_TRUE(bluetooth_task_runner_->GetPendingTasks().empty());
294 EXPECT_TRUE(ui_task_runner_->GetPendingTasks().empty());
295 EXPECT_EQ(num_start_discovery_callbacks + 1,
296 num_start_discovery_callbacks_);
298 EXPECT_EQ(1, adapter_observer_.num_discovering_changed());
301 TEST_F(BluetoothAdapterWinTest, StartDiscoveryAfterDiscoveringFailure) {
302 CallAddDiscoverySession(
303 base::Closure(),
304 base::Bind(
305 &BluetoothAdapterWinTest::IncrementNumStartDiscoveryErrorCallbacks,
306 base::Unretained(this)));
307 adapter_win_->DiscoveryStarted(false);
308 ui_task_runner_->RunPendingTasks();
309 EXPECT_FALSE(adapter_->IsDiscovering());
310 EXPECT_EQ(1, num_start_discovery_error_callbacks_);
312 CallAddDiscoverySession(
313 base::Bind(&BluetoothAdapterWinTest::IncrementNumStartDiscoveryCallbacks,
314 base::Unretained(this)),
315 BluetoothAdapter::ErrorCallback());
316 adapter_win_->DiscoveryStarted(true);
317 ui_task_runner_->RunPendingTasks();
318 EXPECT_TRUE(adapter_->IsDiscovering());
319 EXPECT_EQ(1, num_start_discovery_callbacks_);
322 TEST_F(BluetoothAdapterWinTest, SingleStopDiscovery) {
323 CallAddDiscoverySession(
324 base::Closure(), BluetoothAdapter::ErrorCallback());
325 adapter_win_->DiscoveryStarted(true);
326 ui_task_runner_->ClearPendingTasks();
327 CallRemoveDiscoverySession(
328 base::Bind(&BluetoothAdapterWinTest::IncrementNumStopDiscoveryCallbacks,
329 base::Unretained(this)),
330 BluetoothAdapter::ErrorCallback());
331 EXPECT_TRUE(adapter_->IsDiscovering());
332 EXPECT_EQ(0, num_stop_discovery_callbacks_);
333 bluetooth_task_runner_->ClearPendingTasks();
334 adapter_win_->DiscoveryStopped();
335 ui_task_runner_->RunPendingTasks();
336 EXPECT_FALSE(adapter_->IsDiscovering());
337 EXPECT_EQ(1, num_stop_discovery_callbacks_);
338 EXPECT_TRUE(bluetooth_task_runner_->GetPendingTasks().empty());
339 EXPECT_EQ(2, adapter_observer_.num_discovering_changed());
342 TEST_F(BluetoothAdapterWinTest, MultipleStopDiscoveries) {
343 int num_discoveries = 5;
344 for (int i = 0; i < num_discoveries; i++) {
345 CallAddDiscoverySession(
346 base::Closure(), BluetoothAdapter::ErrorCallback());
348 adapter_win_->DiscoveryStarted(true);
349 ui_task_runner_->ClearPendingTasks();
350 bluetooth_task_runner_->ClearPendingTasks();
351 for (int i = 0; i < num_discoveries - 1; i++) {
352 CallRemoveDiscoverySession(
353 base::Bind(&BluetoothAdapterWinTest::IncrementNumStopDiscoveryCallbacks,
354 base::Unretained(this)),
355 BluetoothAdapter::ErrorCallback());
356 EXPECT_TRUE(bluetooth_task_runner_->GetPendingTasks().empty());
357 ui_task_runner_->RunPendingTasks();
358 EXPECT_EQ(i + 1, num_stop_discovery_callbacks_);
360 CallRemoveDiscoverySession(
361 base::Bind(&BluetoothAdapterWinTest::IncrementNumStopDiscoveryCallbacks,
362 base::Unretained(this)),
363 BluetoothAdapter::ErrorCallback());
364 EXPECT_EQ(1, bluetooth_task_runner_->GetPendingTasks().size());
365 EXPECT_TRUE(adapter_->IsDiscovering());
366 adapter_win_->DiscoveryStopped();
367 ui_task_runner_->RunPendingTasks();
368 EXPECT_FALSE(adapter_->IsDiscovering());
369 EXPECT_EQ(num_discoveries, num_stop_discovery_callbacks_);
370 EXPECT_EQ(2, adapter_observer_.num_discovering_changed());
373 TEST_F(BluetoothAdapterWinTest,
374 StartDiscoveryAndStartDiscoveryAndStopDiscoveries) {
375 CallAddDiscoverySession(
376 base::Bind(&BluetoothAdapterWinTest::IncrementNumStartDiscoveryCallbacks,
377 base::Unretained(this)),
378 BluetoothAdapter::ErrorCallback());
379 adapter_win_->DiscoveryStarted(true);
380 CallAddDiscoverySession(
381 base::Bind(&BluetoothAdapterWinTest::IncrementNumStartDiscoveryCallbacks,
382 base::Unretained(this)),
383 BluetoothAdapter::ErrorCallback());
384 ui_task_runner_->ClearPendingTasks();
385 bluetooth_task_runner_->ClearPendingTasks();
386 CallRemoveDiscoverySession(
387 base::Bind(&BluetoothAdapterWinTest::IncrementNumStopDiscoveryCallbacks,
388 base::Unretained(this)),
389 BluetoothAdapter::ErrorCallback());
390 EXPECT_TRUE(bluetooth_task_runner_->GetPendingTasks().empty());
391 CallRemoveDiscoverySession(
392 base::Bind(&BluetoothAdapterWinTest::IncrementNumStopDiscoveryCallbacks,
393 base::Unretained(this)),
394 BluetoothAdapter::ErrorCallback());
395 EXPECT_EQ(1, bluetooth_task_runner_->GetPendingTasks().size());
398 TEST_F(BluetoothAdapterWinTest,
399 StartDiscoveryAndStopDiscoveryAndStartDiscovery) {
400 CallAddDiscoverySession(
401 base::Closure(), BluetoothAdapter::ErrorCallback());
402 adapter_win_->DiscoveryStarted(true);
403 EXPECT_TRUE(adapter_->IsDiscovering());
404 CallRemoveDiscoverySession(
405 base::Closure(), BluetoothAdapter::ErrorCallback());
406 adapter_win_->DiscoveryStopped();
407 EXPECT_FALSE(adapter_->IsDiscovering());
408 CallAddDiscoverySession(
409 base::Closure(), BluetoothAdapter::ErrorCallback());
410 adapter_win_->DiscoveryStarted(true);
411 EXPECT_TRUE(adapter_->IsDiscovering());
414 TEST_F(BluetoothAdapterWinTest, StartDiscoveryBeforeDiscoveryStopped) {
415 CallAddDiscoverySession(
416 base::Closure(), BluetoothAdapter::ErrorCallback());
417 adapter_win_->DiscoveryStarted(true);
418 CallRemoveDiscoverySession(
419 base::Closure(), BluetoothAdapter::ErrorCallback());
420 CallAddDiscoverySession(
421 base::Closure(), BluetoothAdapter::ErrorCallback());
422 bluetooth_task_runner_->ClearPendingTasks();
423 adapter_win_->DiscoveryStopped();
424 EXPECT_EQ(1, bluetooth_task_runner_->GetPendingTasks().size());
427 TEST_F(BluetoothAdapterWinTest, StopDiscoveryWithoutStartDiscovery) {
428 CallRemoveDiscoverySession(
429 base::Closure(),
430 base::Bind(
431 &BluetoothAdapterWinTest::IncrementNumStopDiscoveryErrorCallbacks,
432 base::Unretained(this)));
433 EXPECT_EQ(1, num_stop_discovery_error_callbacks_);
436 TEST_F(BluetoothAdapterWinTest, StopDiscoveryBeforeDiscoveryStarted) {
437 CallAddDiscoverySession(
438 base::Closure(), BluetoothAdapter::ErrorCallback());
439 CallRemoveDiscoverySession(
440 base::Closure(), BluetoothAdapter::ErrorCallback());
441 bluetooth_task_runner_->ClearPendingTasks();
442 adapter_win_->DiscoveryStarted(true);
443 EXPECT_EQ(1, bluetooth_task_runner_->GetPendingTasks().size());
446 TEST_F(BluetoothAdapterWinTest, StartAndStopBeforeDiscoveryStarted) {
447 int num_expected_start_discoveries = 3;
448 int num_expected_stop_discoveries = 2;
449 for (int i = 0; i < num_expected_start_discoveries; i++) {
450 CallAddDiscoverySession(
451 base::Bind(
452 &BluetoothAdapterWinTest::IncrementNumStartDiscoveryCallbacks,
453 base::Unretained(this)),
454 BluetoothAdapter::ErrorCallback());
456 for (int i = 0; i < num_expected_stop_discoveries; i++) {
457 CallRemoveDiscoverySession(
458 base::Bind(
459 &BluetoothAdapterWinTest::IncrementNumStopDiscoveryCallbacks,
460 base::Unretained(this)),
461 BluetoothAdapter::ErrorCallback());
463 bluetooth_task_runner_->ClearPendingTasks();
464 adapter_win_->DiscoveryStarted(true);
465 EXPECT_TRUE(bluetooth_task_runner_->GetPendingTasks().empty());
466 ui_task_runner_->RunPendingTasks();
467 EXPECT_EQ(num_expected_start_discoveries, num_start_discovery_callbacks_);
468 EXPECT_EQ(num_expected_stop_discoveries, num_stop_discovery_callbacks_);
471 TEST_F(BluetoothAdapterWinTest, StopDiscoveryBeforeDiscoveryStartedAndFailed) {
472 CallAddDiscoverySession(
473 base::Closure(),
474 base::Bind(
475 &BluetoothAdapterWinTest::IncrementNumStartDiscoveryErrorCallbacks,
476 base::Unretained(this)));
477 CallRemoveDiscoverySession(
478 base::Bind(
479 &BluetoothAdapterWinTest::IncrementNumStopDiscoveryCallbacks,
480 base::Unretained(this)),
481 BluetoothAdapter::ErrorCallback());
482 ui_task_runner_->ClearPendingTasks();
483 adapter_win_->DiscoveryStarted(false);
484 ui_task_runner_->RunPendingTasks();
485 EXPECT_EQ(1, num_start_discovery_error_callbacks_);
486 EXPECT_EQ(1, num_stop_discovery_callbacks_);
487 EXPECT_EQ(0, adapter_observer_.num_discovering_changed());
490 TEST_F(BluetoothAdapterWinTest, DevicesDiscovered) {
491 BluetoothTaskManagerWin::DeviceState* android_phone_state =
492 new BluetoothTaskManagerWin::DeviceState();
493 MakeDeviceState("phone", "android phone address", android_phone_state);
494 BluetoothTaskManagerWin::DeviceState* laptop_state =
495 new BluetoothTaskManagerWin::DeviceState();
496 MakeDeviceState("laptop", "laptop address", laptop_state);
497 BluetoothTaskManagerWin::DeviceState* iphone_state =
498 new BluetoothTaskManagerWin::DeviceState();
499 MakeDeviceState("phone", "iphone address", iphone_state);
500 ScopedVector<BluetoothTaskManagerWin::DeviceState> devices;
501 devices.push_back(android_phone_state);
502 devices.push_back(laptop_state);
503 devices.push_back(iphone_state);
505 adapter_win_->DevicesDiscovered(devices);
506 EXPECT_EQ(3, adapter_observer_.num_device_added());
509 } // namespace device