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() { |
35 : num_present_changed_(0), | 43 ResetCounters(); |
36 num_powered_changed_(0), | 44 } |
37 num_discovering_changed_(0), | 45 |
38 num_device_added_(0) { | 46 void ResetCounters() { |
| 47 num_present_changed_ = 0; |
| 48 num_powered_changed_ = 0; |
| 49 num_discovering_changed_ = 0; |
| 50 num_device_added_ = 0; |
| 51 num_device_removed_ = 0; |
| 52 num_device_changed_ = 0; |
39 } | 53 } |
40 | 54 |
41 virtual void AdapterPresentChanged( | 55 virtual void AdapterPresentChanged( |
42 device::BluetoothAdapter* adapter, bool present) OVERRIDE { | 56 device::BluetoothAdapter* adapter, bool present) OVERRIDE { |
43 num_present_changed_++; | 57 num_present_changed_++; |
44 } | 58 } |
45 | 59 |
46 virtual void AdapterPoweredChanged( | 60 virtual void AdapterPoweredChanged( |
47 device::BluetoothAdapter* adapter, bool powered) OVERRIDE { | 61 device::BluetoothAdapter* adapter, bool powered) OVERRIDE { |
48 num_powered_changed_++; | 62 num_powered_changed_++; |
49 } | 63 } |
50 | 64 |
51 virtual void AdapterDiscoveringChanged( | 65 virtual void AdapterDiscoveringChanged( |
52 device::BluetoothAdapter* adapter, bool discovering) OVERRIDE { | 66 device::BluetoothAdapter* adapter, bool discovering) OVERRIDE { |
53 num_discovering_changed_++; | 67 num_discovering_changed_++; |
54 } | 68 } |
55 | 69 |
56 virtual void DeviceAdded( | 70 virtual void DeviceAdded( |
57 device::BluetoothAdapter* adapter, | 71 device::BluetoothAdapter* adapter, |
58 device::BluetoothDevice* device) OVERRIDE { | 72 device::BluetoothDevice* device) OVERRIDE { |
59 num_device_added_++; | 73 num_device_added_++; |
60 } | 74 } |
61 | 75 |
62 int num_present_changed() const { | 76 virtual void DeviceRemoved(device::BluetoothAdapter* adapter, |
63 return num_present_changed_; | 77 device::BluetoothDevice* device) OVERRIDE { |
| 78 num_device_removed_++; |
64 } | 79 } |
65 | 80 |
66 int num_powered_changed() const { | 81 virtual void DeviceChanged(device::BluetoothAdapter* adapter, |
67 return num_powered_changed_; | 82 device::BluetoothDevice* device) OVERRIDE { |
| 83 num_device_changed_++; |
68 } | 84 } |
69 | 85 |
70 int num_discovering_changed() const { | 86 int num_present_changed() const { return num_present_changed_; } |
71 return num_discovering_changed_; | |
72 } | |
73 | 87 |
74 int num_device_added() const { | 88 int num_powered_changed() const { return num_powered_changed_; } |
75 return num_device_added_; | 89 |
76 } | 90 int num_discovering_changed() const { return num_discovering_changed_; } |
| 91 |
| 92 int num_device_added() const { return num_device_added_; } |
| 93 |
| 94 int num_device_removed() const { return num_device_removed_; } |
| 95 |
| 96 int num_device_changed() const { return num_device_changed_; } |
77 | 97 |
78 private: | 98 private: |
79 int num_present_changed_; | 99 int num_present_changed_; |
80 int num_powered_changed_; | 100 int num_powered_changed_; |
81 int num_discovering_changed_; | 101 int num_discovering_changed_; |
82 int num_device_added_; | 102 int num_device_added_; |
| 103 int num_device_removed_; |
| 104 int num_device_changed_; |
83 }; | 105 }; |
84 | 106 |
85 } // namespace | 107 } // namespace |
86 | 108 |
87 namespace device { | 109 namespace device { |
88 | 110 |
89 class BluetoothAdapterWinTest : public testing::Test { | 111 class BluetoothAdapterWinTest : public testing::Test { |
90 public: | 112 public: |
91 BluetoothAdapterWinTest() | 113 BluetoothAdapterWinTest() |
92 : ui_task_runner_(new base::TestSimpleTaskRunner()), | 114 : ui_task_runner_(new base::TestSimpleTaskRunner()), |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 base::Unretained(this)), | 502 base::Unretained(this)), |
481 BluetoothAdapter::ErrorCallback()); | 503 BluetoothAdapter::ErrorCallback()); |
482 ui_task_runner_->ClearPendingTasks(); | 504 ui_task_runner_->ClearPendingTasks(); |
483 adapter_win_->DiscoveryStarted(false); | 505 adapter_win_->DiscoveryStarted(false); |
484 ui_task_runner_->RunPendingTasks(); | 506 ui_task_runner_->RunPendingTasks(); |
485 EXPECT_EQ(1, num_start_discovery_error_callbacks_); | 507 EXPECT_EQ(1, num_start_discovery_error_callbacks_); |
486 EXPECT_EQ(1, num_stop_discovery_callbacks_); | 508 EXPECT_EQ(1, num_stop_discovery_callbacks_); |
487 EXPECT_EQ(0, adapter_observer_.num_discovering_changed()); | 509 EXPECT_EQ(0, adapter_observer_.num_discovering_changed()); |
488 } | 510 } |
489 | 511 |
490 TEST_F(BluetoothAdapterWinTest, DevicesDiscovered) { | 512 TEST_F(BluetoothAdapterWinTest, DevicesPolled) { |
491 BluetoothTaskManagerWin::DeviceState* android_phone_state = | 513 BluetoothTaskManagerWin::DeviceState* android_phone_state = |
492 new BluetoothTaskManagerWin::DeviceState(); | 514 new BluetoothTaskManagerWin::DeviceState(); |
493 MakeDeviceState("phone", "android phone address", android_phone_state); | 515 MakeDeviceState("phone", "A1:B2:C3:D4:E5:E0", android_phone_state); |
494 BluetoothTaskManagerWin::DeviceState* laptop_state = | 516 BluetoothTaskManagerWin::DeviceState* laptop_state = |
495 new BluetoothTaskManagerWin::DeviceState(); | 517 new BluetoothTaskManagerWin::DeviceState(); |
496 MakeDeviceState("laptop", "laptop address", laptop_state); | 518 MakeDeviceState("laptop", "A1:B2:C3:D4:E5:E1", laptop_state); |
497 BluetoothTaskManagerWin::DeviceState* iphone_state = | 519 BluetoothTaskManagerWin::DeviceState* iphone_state = |
498 new BluetoothTaskManagerWin::DeviceState(); | 520 new BluetoothTaskManagerWin::DeviceState(); |
499 MakeDeviceState("phone", "iphone address", iphone_state); | 521 MakeDeviceState("phone", "A1:B2:C3:D4:E5:E2", iphone_state); |
500 ScopedVector<BluetoothTaskManagerWin::DeviceState> devices; | 522 ScopedVector<BluetoothTaskManagerWin::DeviceState> devices; |
501 devices.push_back(android_phone_state); | 523 devices.push_back(android_phone_state); |
502 devices.push_back(laptop_state); | 524 devices.push_back(laptop_state); |
503 devices.push_back(iphone_state); | 525 devices.push_back(iphone_state); |
504 | 526 |
505 adapter_win_->DevicesDiscovered(devices); | 527 // Add 3 devices |
| 528 adapter_observer_.ResetCounters(); |
| 529 adapter_win_->DevicesPolled(devices); |
506 EXPECT_EQ(3, adapter_observer_.num_device_added()); | 530 EXPECT_EQ(3, adapter_observer_.num_device_added()); |
| 531 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 532 EXPECT_EQ(0, adapter_observer_.num_device_changed()); |
| 533 |
| 534 // Change a device name |
| 535 android_phone_state->name = "phone2"; |
| 536 adapter_observer_.ResetCounters(); |
| 537 adapter_win_->DevicesPolled(devices); |
| 538 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 539 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 540 EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
| 541 |
| 542 // Change a device address |
| 543 android_phone_state->address = "A1:B2:C3:D4:E5:E6"; |
| 544 adapter_observer_.ResetCounters(); |
| 545 adapter_win_->DevicesPolled(devices); |
| 546 EXPECT_EQ(1, adapter_observer_.num_device_added()); |
| 547 EXPECT_EQ(1, adapter_observer_.num_device_removed()); |
| 548 EXPECT_EQ(0, adapter_observer_.num_device_changed()); |
| 549 |
| 550 // Remove a device |
| 551 devices.erase(devices.begin()); |
| 552 adapter_observer_.ResetCounters(); |
| 553 adapter_win_->DevicesPolled(devices); |
| 554 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 555 EXPECT_EQ(1, adapter_observer_.num_device_removed()); |
| 556 EXPECT_EQ(0, adapter_observer_.num_device_changed()); |
| 557 |
| 558 // Add a service |
| 559 BluetoothTaskManagerWin::ServiceRecordState* audio_state = |
| 560 new BluetoothTaskManagerWin::ServiceRecordState(); |
| 561 audio_state->name = kTestAudioSdpName; |
| 562 base::HexStringToBytes(kTestAudioSdpBytes, &audio_state->sdp_bytes); |
| 563 laptop_state->service_record_states.push_back(audio_state); |
| 564 adapter_observer_.ResetCounters(); |
| 565 adapter_win_->DevicesPolled(devices); |
| 566 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 567 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 568 EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
| 569 |
| 570 // Change a service |
| 571 audio_state->name = kTestAudioSdpName2; |
| 572 adapter_observer_.ResetCounters(); |
| 573 adapter_win_->DevicesPolled(devices); |
| 574 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 575 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 576 EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
| 577 |
| 578 // Remove a service |
| 579 laptop_state->service_record_states.clear(); |
| 580 adapter_observer_.ResetCounters(); |
| 581 adapter_win_->DevicesPolled(devices); |
| 582 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 583 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 584 EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
507 } | 585 } |
508 | 586 |
509 } // namespace device | 587 } // namespace device |
OLD | NEW |