OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
| 9 #include "base/strings/string_number_conversions.h" |
9 #include "base/test/test_simple_task_runner.h" | 10 #include "base/test/test_simple_task_runner.h" |
10 #include "device/bluetooth/bluetooth_adapter.h" | 11 #include "device/bluetooth/bluetooth_adapter.h" |
11 #include "device/bluetooth/bluetooth_adapter_win.h" | 12 #include "device/bluetooth/bluetooth_adapter_win.h" |
12 #include "device/bluetooth/bluetooth_device.h" | 13 #include "device/bluetooth/bluetooth_device.h" |
13 #include "device/bluetooth/bluetooth_task_manager_win.h" | 14 #include "device/bluetooth/bluetooth_task_manager_win.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 | 16 |
16 namespace { | 17 namespace { |
17 | 18 |
18 const char kAdapterAddress[] = "A1:B2:C3:D4:E5:F6"; | 19 const char kAdapterAddress[] = "A1:B2:C3:D4:E5:F6"; |
19 const char kAdapterName[] = "Bluetooth Adapter Name"; | 20 const char kAdapterName[] = "Bluetooth Adapter Name"; |
20 | 21 |
| 22 const char kTestAudioSdpName[] = "Audio"; |
| 23 const char kTestAudioSdpName2[] = "Audio2"; |
| 24 const char kTestAudioSdpBytes[] = |
| 25 "35510900000a00010001090001350319110a09000435103506190100090019350619001909" |
| 26 "010209000535031910020900093508350619110d090102090100250c417564696f20536f75" |
| 27 "726365090311090001"; |
| 28 const device::BluetoothUUID kTestAudioSdpUuid("110a"); |
21 | 29 |
22 void MakeDeviceState(const std::string& name, | 30 void MakeDeviceState(const std::string& name, |
23 const std::string& address, | 31 const std::string& address, |
24 device::BluetoothTaskManagerWin::DeviceState* state) { | 32 device::BluetoothTaskManagerWin::DeviceState* state) { |
25 state->name = name; | 33 state->name = name; |
26 state->address = address; | 34 state->address = address; |
27 state->bluetooth_class = 0; | 35 state->bluetooth_class = 0; |
28 state->authenticated = false; | 36 state->authenticated = false; |
29 state->connected = false; | 37 state->connected = false; |
30 } | 38 } |
31 | 39 |
32 class AdapterObserver : public device::BluetoothAdapter::Observer { | 40 class AdapterObserver : public device::BluetoothAdapter::Observer { |
33 public: | 41 public: |
34 AdapterObserver() | 42 AdapterObserver() { ResetCounters(); } |
35 : num_present_changed_(0), | 43 |
36 num_powered_changed_(0), | 44 void ResetCounters() { |
37 num_discovering_changed_(0), | 45 num_present_changed_ = 0; |
38 num_device_added_(0) { | 46 num_powered_changed_ = 0; |
| 47 num_discovering_changed_ = 0; |
| 48 num_device_added_ = 0; |
| 49 num_device_removed_ = 0; |
| 50 num_device_changed_ = 0; |
39 } | 51 } |
40 | 52 |
41 virtual void AdapterPresentChanged( | 53 virtual void AdapterPresentChanged( |
42 device::BluetoothAdapter* adapter, bool present) OVERRIDE { | 54 device::BluetoothAdapter* adapter, bool present) OVERRIDE { |
43 num_present_changed_++; | 55 num_present_changed_++; |
44 } | 56 } |
45 | 57 |
46 virtual void AdapterPoweredChanged( | 58 virtual void AdapterPoweredChanged( |
47 device::BluetoothAdapter* adapter, bool powered) OVERRIDE { | 59 device::BluetoothAdapter* adapter, bool powered) OVERRIDE { |
48 num_powered_changed_++; | 60 num_powered_changed_++; |
49 } | 61 } |
50 | 62 |
51 virtual void AdapterDiscoveringChanged( | 63 virtual void AdapterDiscoveringChanged( |
52 device::BluetoothAdapter* adapter, bool discovering) OVERRIDE { | 64 device::BluetoothAdapter* adapter, bool discovering) OVERRIDE { |
53 num_discovering_changed_++; | 65 num_discovering_changed_++; |
54 } | 66 } |
55 | 67 |
56 virtual void DeviceAdded( | 68 virtual void DeviceAdded( |
57 device::BluetoothAdapter* adapter, | 69 device::BluetoothAdapter* adapter, |
58 device::BluetoothDevice* device) OVERRIDE { | 70 device::BluetoothDevice* device) OVERRIDE { |
59 num_device_added_++; | 71 num_device_added_++; |
60 } | 72 } |
61 | 73 |
62 int num_present_changed() const { | 74 virtual void DeviceRemoved(device::BluetoothAdapter* adapter, |
63 return num_present_changed_; | 75 device::BluetoothDevice* device) OVERRIDE { |
| 76 num_device_removed_++; |
64 } | 77 } |
65 | 78 |
66 int num_powered_changed() const { | 79 virtual void DeviceChanged(device::BluetoothAdapter* adapter, |
67 return num_powered_changed_; | 80 device::BluetoothDevice* device) OVERRIDE { |
| 81 num_device_changed_++; |
68 } | 82 } |
69 | 83 |
70 int num_discovering_changed() const { | 84 int num_present_changed() const { return num_present_changed_; } |
71 return num_discovering_changed_; | |
72 } | |
73 | 85 |
74 int num_device_added() const { | 86 int num_powered_changed() const { return num_powered_changed_; } |
75 return num_device_added_; | 87 |
76 } | 88 int num_discovering_changed() const { return num_discovering_changed_; } |
| 89 |
| 90 int num_device_added() const { return num_device_added_; } |
| 91 |
| 92 int num_device_removed() const { return num_device_removed_; } |
| 93 |
| 94 int num_device_changed() const { return num_device_changed_; } |
77 | 95 |
78 private: | 96 private: |
79 int num_present_changed_; | 97 int num_present_changed_; |
80 int num_powered_changed_; | 98 int num_powered_changed_; |
81 int num_discovering_changed_; | 99 int num_discovering_changed_; |
82 int num_device_added_; | 100 int num_device_added_; |
| 101 int num_device_removed_; |
| 102 int num_device_changed_; |
83 }; | 103 }; |
84 | 104 |
85 } // namespace | 105 } // namespace |
86 | 106 |
87 namespace device { | 107 namespace device { |
88 | 108 |
89 class BluetoothAdapterWinTest : public testing::Test { | 109 class BluetoothAdapterWinTest : public testing::Test { |
90 public: | 110 public: |
91 BluetoothAdapterWinTest() | 111 BluetoothAdapterWinTest() |
92 : ui_task_runner_(new base::TestSimpleTaskRunner()), | 112 : ui_task_runner_(new base::TestSimpleTaskRunner()), |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 base::Unretained(this)), | 500 base::Unretained(this)), |
481 BluetoothAdapter::ErrorCallback()); | 501 BluetoothAdapter::ErrorCallback()); |
482 ui_task_runner_->ClearPendingTasks(); | 502 ui_task_runner_->ClearPendingTasks(); |
483 adapter_win_->DiscoveryStarted(false); | 503 adapter_win_->DiscoveryStarted(false); |
484 ui_task_runner_->RunPendingTasks(); | 504 ui_task_runner_->RunPendingTasks(); |
485 EXPECT_EQ(1, num_start_discovery_error_callbacks_); | 505 EXPECT_EQ(1, num_start_discovery_error_callbacks_); |
486 EXPECT_EQ(1, num_stop_discovery_callbacks_); | 506 EXPECT_EQ(1, num_stop_discovery_callbacks_); |
487 EXPECT_EQ(0, adapter_observer_.num_discovering_changed()); | 507 EXPECT_EQ(0, adapter_observer_.num_discovering_changed()); |
488 } | 508 } |
489 | 509 |
490 TEST_F(BluetoothAdapterWinTest, DevicesDiscovered) { | 510 TEST_F(BluetoothAdapterWinTest, DevicesPolled) { |
491 BluetoothTaskManagerWin::DeviceState* android_phone_state = | 511 BluetoothTaskManagerWin::DeviceState* android_phone_state = |
492 new BluetoothTaskManagerWin::DeviceState(); | 512 new BluetoothTaskManagerWin::DeviceState(); |
493 MakeDeviceState("phone", "android phone address", android_phone_state); | 513 MakeDeviceState("phone", "A1:B2:C3:D4:E5:E0", android_phone_state); |
494 BluetoothTaskManagerWin::DeviceState* laptop_state = | 514 BluetoothTaskManagerWin::DeviceState* laptop_state = |
495 new BluetoothTaskManagerWin::DeviceState(); | 515 new BluetoothTaskManagerWin::DeviceState(); |
496 MakeDeviceState("laptop", "laptop address", laptop_state); | 516 MakeDeviceState("laptop", "A1:B2:C3:D4:E5:E1", laptop_state); |
497 BluetoothTaskManagerWin::DeviceState* iphone_state = | 517 BluetoothTaskManagerWin::DeviceState* iphone_state = |
498 new BluetoothTaskManagerWin::DeviceState(); | 518 new BluetoothTaskManagerWin::DeviceState(); |
499 MakeDeviceState("phone", "iphone address", iphone_state); | 519 MakeDeviceState("phone", "A1:B2:C3:D4:E5:E2", iphone_state); |
500 ScopedVector<BluetoothTaskManagerWin::DeviceState> devices; | 520 ScopedVector<BluetoothTaskManagerWin::DeviceState> devices; |
501 devices.push_back(android_phone_state); | 521 devices.push_back(android_phone_state); |
502 devices.push_back(laptop_state); | 522 devices.push_back(laptop_state); |
503 devices.push_back(iphone_state); | 523 devices.push_back(iphone_state); |
504 | 524 |
505 adapter_win_->DevicesDiscovered(devices); | 525 // Add 3 devices |
| 526 adapter_observer_.ResetCounters(); |
| 527 adapter_win_->DevicesPolled(devices); |
506 EXPECT_EQ(3, adapter_observer_.num_device_added()); | 528 EXPECT_EQ(3, adapter_observer_.num_device_added()); |
| 529 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 530 EXPECT_EQ(0, adapter_observer_.num_device_changed()); |
| 531 |
| 532 // Change a device name |
| 533 android_phone_state->name = "phone2"; |
| 534 adapter_observer_.ResetCounters(); |
| 535 adapter_win_->DevicesPolled(devices); |
| 536 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 537 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 538 EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
| 539 |
| 540 // Change a device address |
| 541 android_phone_state->address = "A1:B2:C3:D4:E5:E6"; |
| 542 adapter_observer_.ResetCounters(); |
| 543 adapter_win_->DevicesPolled(devices); |
| 544 EXPECT_EQ(1, adapter_observer_.num_device_added()); |
| 545 EXPECT_EQ(1, adapter_observer_.num_device_removed()); |
| 546 EXPECT_EQ(0, adapter_observer_.num_device_changed()); |
| 547 |
| 548 // Remove a device |
| 549 devices.erase(devices.begin()); |
| 550 adapter_observer_.ResetCounters(); |
| 551 adapter_win_->DevicesPolled(devices); |
| 552 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 553 EXPECT_EQ(1, adapter_observer_.num_device_removed()); |
| 554 EXPECT_EQ(0, adapter_observer_.num_device_changed()); |
| 555 |
| 556 // Add a service |
| 557 BluetoothTaskManagerWin::ServiceRecordState* audio_state = |
| 558 new BluetoothTaskManagerWin::ServiceRecordState(); |
| 559 audio_state->name = kTestAudioSdpName; |
| 560 base::HexStringToBytes(kTestAudioSdpBytes, &audio_state->sdp_bytes); |
| 561 laptop_state->service_record_states.push_back(audio_state); |
| 562 adapter_observer_.ResetCounters(); |
| 563 adapter_win_->DevicesPolled(devices); |
| 564 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 565 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 566 EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
| 567 |
| 568 // Change a service |
| 569 audio_state->name = kTestAudioSdpName2; |
| 570 adapter_observer_.ResetCounters(); |
| 571 adapter_win_->DevicesPolled(devices); |
| 572 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 573 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 574 EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
| 575 |
| 576 // Remove a service |
| 577 laptop_state->service_record_states.clear(); |
| 578 adapter_observer_.ResetCounters(); |
| 579 adapter_win_->DevicesPolled(devices); |
| 580 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 581 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 582 EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
507 } | 583 } |
508 | 584 |
509 } // namespace device | 585 } // namespace device |
OLD | NEW |