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 | |
8 #include "base/memory/ref_counted.h" | 5 #include "base/memory/ref_counted.h" |
9 #include "base/test/test_simple_task_runner.h" | 6 #include "base/test/test_simple_task_runner.h" |
10 #include "device/bluetooth/bluetooth_adapter.h" | 7 #include "device/bluetooth/bluetooth_adapter.h" |
11 #include "device/bluetooth/bluetooth_adapter_mac.h" | 8 #include "device/bluetooth/bluetooth_adapter_mac.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
13 | 10 |
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 | |
120 namespace device { | 11 namespace device { |
121 | 12 |
122 class BluetoothAdapterMacTest : public testing::Test { | 13 class BluetoothAdapterMacTest : public testing::Test { |
123 public: | 14 public: |
124 BluetoothAdapterMacTest() | 15 BluetoothAdapterMacTest() |
125 : ui_task_runner_(new base::TestSimpleTaskRunner()), | 16 : ui_task_runner_(new base::TestSimpleTaskRunner()), |
126 adapter_(new BluetoothAdapterMac()), | 17 adapter_(new BluetoothAdapterMac()), |
127 adapter_mac_(static_cast<BluetoothAdapterMac*>(adapter_.get())) { | 18 adapter_mac_(static_cast<BluetoothAdapterMac*>(adapter_.get())) { |
128 adapter_mac_->InitForTest(ui_task_runner_); | 19 adapter_mac_->InitForTest(ui_task_runner_); |
129 adapter_mac_->RemoveUnpairedDevices([NSArray array]); | |
130 adapter_observer_.Clear(); | |
131 } | |
132 | |
133 virtual void SetUp() OVERRIDE { | |
134 adapter_mac_->AddObserver(&adapter_observer_); | |
135 } | |
136 | |
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); | |
147 } | 20 } |
148 | 21 |
149 protected: | 22 protected: |
150 scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; | 23 scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; |
151 scoped_refptr<BluetoothAdapter> adapter_; | 24 scoped_refptr<BluetoothAdapter> adapter_; |
152 BluetoothAdapterMac* adapter_mac_; | 25 BluetoothAdapterMac* adapter_mac_; |
153 AdapterObserver adapter_observer_; | |
154 }; | 26 }; |
155 | 27 |
156 TEST_F(BluetoothAdapterMacTest, Poll) { | 28 TEST_F(BluetoothAdapterMacTest, Poll) { |
157 EXPECT_FALSE(ui_task_runner_->GetPendingTasks().empty()); | 29 EXPECT_FALSE(ui_task_runner_->GetPendingTasks().empty()); |
158 } | 30 } |
159 | 31 |
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 | |
215 } // namespace device | 32 } // namespace device |
OLD | NEW |