OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #import <IOBluetooth/IOBluetoothUtilities.h> |
| 6 #import <IOBluetooth/objc/IOBluetoothDevice.h> |
| 7 |
5 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
6 #include "base/test/test_simple_task_runner.h" | 9 #include "base/test/test_simple_task_runner.h" |
| 10 #include "device/bluetooth/bluetooth_adapter.h" |
7 #include "device/bluetooth/bluetooth_adapter_mac.h" | 11 #include "device/bluetooth/bluetooth_adapter_mac.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
9 | 13 |
| 14 @interface TestIOBluetoothDevice : IOBluetoothDevice { |
| 15 @private |
| 16 NSString* device_name_; |
| 17 NSString* device_address_; |
| 18 BOOL paired_; |
| 19 } |
| 20 |
| 21 + (TestIOBluetoothDevice*)deviceWithName:(NSString*)device_name |
| 22 address:(NSString*)device_address |
| 23 paired:(BOOL)paired; |
| 24 - (id)initWithName:(NSString*)device_name |
| 25 address:(NSString*)device_address |
| 26 paired:(BOOL)paired; |
| 27 |
| 28 @property (nonatomic, copy, getter=name) NSString* deviceName; |
| 29 @property (nonatomic, copy, getter=addressString) NSString* deviceAddress; |
| 30 @property (nonatomic, assign, getter=isPaired) BOOL paired; |
| 31 |
| 32 @end |
| 33 |
| 34 @implementation TestIOBluetoothDevice |
| 35 |
| 36 @synthesize deviceName = device_name_; |
| 37 @synthesize deviceAddress = device_address_; |
| 38 @synthesize paired = paired_; |
| 39 |
| 40 + (TestIOBluetoothDevice*)deviceWithName:(NSString*)device_name |
| 41 address:(NSString*)device_address |
| 42 paired:(BOOL)paired { |
| 43 return [[[TestIOBluetoothDevice alloc] initWithName:device_name |
| 44 address:device_address |
| 45 paired:paired] autorelease]; |
| 46 } |
| 47 |
| 48 - (id)initWithName:(NSString*)device_name |
| 49 address:(NSString*)device_address |
| 50 paired:(BOOL)paired { |
| 51 if (self = [super init]) { |
| 52 [self setDeviceName:device_name]; |
| 53 [self setDeviceAddress:device_address]; |
| 54 [self setPaired:paired]; |
| 55 } |
| 56 |
| 57 return self; |
| 58 } |
| 59 |
| 60 - (void)dealloc { |
| 61 [self setDeviceName:nil]; |
| 62 [self setDeviceAddress:nil]; |
| 63 [super dealloc]; |
| 64 } |
| 65 |
| 66 @end |
| 67 |
| 68 namespace { |
| 69 |
| 70 class AdapterObserver : public device::BluetoothAdapter::Observer { |
| 71 public: |
| 72 AdapterObserver() { |
| 73 Clear(); |
| 74 } |
| 75 |
| 76 void Clear() { |
| 77 num_device_added_ = 0; |
| 78 num_device_changed_ = 0; |
| 79 num_device_removed_ = 0; |
| 80 } |
| 81 |
| 82 virtual void DeviceAdded( |
| 83 device::BluetoothAdapter* adapter, |
| 84 device::BluetoothDevice* device) OVERRIDE { |
| 85 num_device_added_++; |
| 86 } |
| 87 |
| 88 virtual void DeviceChanged( |
| 89 device::BluetoothAdapter* adapter, |
| 90 device::BluetoothDevice* device) OVERRIDE { |
| 91 num_device_changed_++; |
| 92 } |
| 93 |
| 94 virtual void DeviceRemoved( |
| 95 device::BluetoothAdapter* adapter, |
| 96 device::BluetoothDevice* device) OVERRIDE { |
| 97 num_device_removed_++; |
| 98 } |
| 99 |
| 100 int num_device_added() const { |
| 101 return num_device_added_; |
| 102 } |
| 103 |
| 104 int num_device_changed() const { |
| 105 return num_device_changed_; |
| 106 } |
| 107 |
| 108 int num_device_removed() const { |
| 109 return num_device_removed_; |
| 110 } |
| 111 |
| 112 private: |
| 113 int num_device_added_; |
| 114 int num_device_changed_; |
| 115 int num_device_removed_; |
| 116 }; |
| 117 |
| 118 } // namespace |
| 119 |
10 namespace device { | 120 namespace device { |
11 | 121 |
12 class BluetoothAdapterMacTest : public testing::Test { | 122 class BluetoothAdapterMacTest : public testing::Test { |
13 public: | 123 public: |
14 BluetoothAdapterMacTest() | 124 BluetoothAdapterMacTest() |
15 : ui_task_runner_(new base::TestSimpleTaskRunner()), | 125 : ui_task_runner_(new base::TestSimpleTaskRunner()), |
16 adapter_(new BluetoothAdapterMac()), | 126 adapter_(new BluetoothAdapterMac()), |
17 adapter_mac_(static_cast<BluetoothAdapterMac*>(adapter_.get())) { | 127 adapter_mac_(static_cast<BluetoothAdapterMac*>(adapter_.get())) { |
18 adapter_mac_->TrackTestAdapter(ui_task_runner_); | 128 adapter_mac_->TrackTestAdapter(ui_task_runner_); |
| 129 adapter_mac_->RemoveUnpairedDevices([NSArray array]); |
| 130 adapter_observer_.Clear(); |
19 } | 131 } |
20 | 132 |
21 virtual void SetUp() OVERRIDE { | 133 virtual void SetUp() OVERRIDE { |
| 134 adapter_mac_->AddObserver(&adapter_observer_); |
22 } | 135 } |
23 | 136 |
24 virtual void TearDown() OVERRIDE { | 137 virtual void TearDown() OVERRIDE { |
| 138 adapter_mac_->RemoveObserver(&adapter_observer_); |
| 139 } |
| 140 |
| 141 void AddDevices(NSArray* devices) { |
| 142 adapter_mac_->AddDevices(devices); |
| 143 } |
| 144 |
| 145 void RemoveUnpairedDevices(NSArray* devices) { |
| 146 adapter_mac_->RemoveUnpairedDevices(devices); |
25 } | 147 } |
26 | 148 |
27 protected: | 149 protected: |
28 scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; | 150 scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; |
29 scoped_refptr<BluetoothAdapter> adapter_; | 151 scoped_refptr<BluetoothAdapter> adapter_; |
30 BluetoothAdapterMac* adapter_mac_; | 152 BluetoothAdapterMac* adapter_mac_; |
| 153 AdapterObserver adapter_observer_; |
31 }; | 154 }; |
32 | 155 |
33 TEST_F(BluetoothAdapterMacTest, Poll) { | 156 TEST_F(BluetoothAdapterMacTest, Poll) { |
34 EXPECT_FALSE(ui_task_runner_->GetPendingTasks().empty()); | 157 EXPECT_FALSE(ui_task_runner_->GetPendingTasks().empty()); |
35 } | 158 } |
36 | 159 |
| 160 TEST_F(BluetoothAdapterMacTest, AddDevices) { |
| 161 TestIOBluetoothDevice* android_device = |
| 162 [TestIOBluetoothDevice deviceWithName:@"android" |
| 163 address:@"11:22:33:44:55:66" |
| 164 paired:false]; |
| 165 TestIOBluetoothDevice* laptop_device = |
| 166 [TestIOBluetoothDevice deviceWithName:@"laptop" |
| 167 address:@"77:88:99:aa:bb:cc" |
| 168 paired:false]; |
| 169 TestIOBluetoothDevice* iphone_device = |
| 170 [TestIOBluetoothDevice deviceWithName:@"iphone" |
| 171 address:@"dd:ee:ff:11:22:33" |
| 172 paired:false]; |
| 173 NSMutableArray* devices = [NSMutableArray arrayWithCapacity:3]; |
| 174 [devices addObject:android_device]; |
| 175 [devices addObject:laptop_device]; |
| 176 [devices addObject:iphone_device]; |
| 177 AddDevices(devices); |
| 178 EXPECT_EQ(3, adapter_observer_.num_device_added()); |
| 179 adapter_observer_.Clear(); |
| 180 |
| 181 AddDevices(devices); |
| 182 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 183 EXPECT_EQ(0, adapter_observer_.num_device_changed()); |
| 184 |
| 185 [iphone_device setDeviceName:@"apple phone"]; |
| 186 AddDevices(devices); |
| 187 EXPECT_EQ(0, adapter_observer_.num_device_added()); |
| 188 EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
| 189 adapter_observer_.Clear(); |
| 190 } |
| 191 |
| 192 TEST_F(BluetoothAdapterMacTest, RemoveUnpairedDevices) { |
| 193 TestIOBluetoothDevice* android_device = |
| 194 [TestIOBluetoothDevice deviceWithName:@"android" |
| 195 address:@"11:22:33:44:55:66" |
| 196 paired:true]; |
| 197 TestIOBluetoothDevice* laptop_device = |
| 198 [TestIOBluetoothDevice deviceWithName:@"laptop" |
| 199 address:@"77:88:99:aa:bb:cc" |
| 200 paired:false]; |
| 201 NSMutableArray* devices = [NSMutableArray arrayWithCapacity:2]; |
| 202 [devices addObject:android_device]; |
| 203 [devices addObject:laptop_device]; |
| 204 AddDevices(devices); |
| 205 adapter_observer_.Clear(); |
| 206 |
| 207 RemoveUnpairedDevices([NSArray arrayWithObject:android_device]); |
| 208 EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
| 209 |
| 210 RemoveUnpairedDevices([NSArray array]); |
| 211 EXPECT_EQ(1, adapter_observer_.num_device_removed()); |
| 212 |
| 213 } |
| 214 |
37 } // namespace device | 215 } // namespace device |
OLD | NEW |