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 BOOL connected_; | |
17 } | |
18 | |
19 + (TestIOBluetoothDevice*)deviceWithName:(NSString*)name | |
20 address:(NSString*)address; | |
21 - (id)initWithName:(NSString*)name address:(NSString*)address; | |
22 - (void)setName:(NSString*)name; | |
23 - (void)setAddress:(NSString*)address; | |
24 - (void)setConnected:(BOOL)connected; | |
25 @end | |
26 | |
27 @implementation TestIOBluetoothDevice | |
28 | |
29 + (TestIOBluetoothDevice*)deviceWithName:(NSString*)name | |
30 address:(NSString*)address { | |
31 return [[[TestIOBluetoothDevice alloc] initWithName:name | |
32 address:address] autorelease]; | |
33 } | |
34 | |
35 - (id)initWithName:(NSString*)name address:(NSString*)address { | |
36 if (self = [super init]) { | |
37 connected_ = false; | |
38 mName = name; | |
Mark Mentovai
2013/03/19 16:04:35
This (and your access of mAddress) is really prett
youngki
2013/03/19 19:04:55
Done.
| |
39 IOBluetoothNSStringToDeviceAddress(address, &mAddress); | |
40 } | |
41 | |
42 return self; | |
43 } | |
44 | |
45 - (void)setName:(NSString*)name { | |
46 mName = name; | |
47 } | |
48 | |
49 - (void)setAddress:(NSString*)address { | |
50 IOBluetoothNSStringToDeviceAddress(address, &mAddress); | |
51 } | |
52 | |
53 - (void)setConnected:(BOOL)connected { | |
54 connected_ = connected; | |
55 } | |
56 | |
57 - (BOOL)isConnected { | |
58 return connected_; | |
59 } | |
60 | |
61 @end | |
62 | |
63 namespace { | |
64 | |
65 class AdapterObserver : public device::BluetoothAdapter::Observer { | |
66 public: | |
67 AdapterObserver() { | |
68 Clear(); | |
69 } | |
70 | |
71 void Clear() { | |
72 num_device_added_ = 0; | |
73 num_device_changed_ = 0; | |
74 num_device_removed_ = 0; | |
75 } | |
76 | |
77 virtual void DeviceAdded( | |
78 device::BluetoothAdapter* adapter, | |
79 device::BluetoothDevice* device) OVERRIDE { | |
80 num_device_added_++; | |
81 } | |
82 | |
83 virtual void DeviceChanged( | |
84 device::BluetoothAdapter* adapter, | |
85 device::BluetoothDevice* device) OVERRIDE { | |
86 num_device_changed_++; | |
87 } | |
88 | |
89 virtual void DeviceRemoved( | |
90 device::BluetoothAdapter* adapter, | |
91 device::BluetoothDevice* device) OVERRIDE { | |
92 num_device_removed_++; | |
93 } | |
94 | |
95 int num_device_added() const { | |
96 return num_device_added_; | |
97 } | |
98 | |
99 int num_device_changed() const { | |
100 return num_device_changed_; | |
101 } | |
102 | |
103 int num_device_removed() const { | |
104 return num_device_removed_; | |
105 } | |
106 | |
107 private: | |
108 int num_device_added_; | |
109 int num_device_changed_; | |
110 int num_device_removed_; | |
111 }; | |
112 | |
113 } // namespace | |
114 | |
10 namespace device { | 115 namespace device { |
11 | 116 |
12 class BluetoothAdapterMacTest : public testing::Test { | 117 class BluetoothAdapterMacTest : public testing::Test { |
13 public: | 118 public: |
14 BluetoothAdapterMacTest() | 119 BluetoothAdapterMacTest() |
15 : ui_task_runner_(new base::TestSimpleTaskRunner()), | 120 : ui_task_runner_(new base::TestSimpleTaskRunner()), |
16 adapter_(new BluetoothAdapterMac()), | 121 adapter_(new BluetoothAdapterMac()), |
17 adapter_mac_(static_cast<BluetoothAdapterMac*>(adapter_.get())) { | 122 adapter_mac_(static_cast<BluetoothAdapterMac*>(adapter_.get())) { |
18 adapter_mac_->TrackTestAdapter(ui_task_runner_); | 123 adapter_mac_->TrackTestAdapter(ui_task_runner_); |
124 adapter_observer_.Clear(); | |
19 } | 125 } |
20 | 126 |
21 virtual void SetUp() OVERRIDE { | 127 virtual void SetUp() OVERRIDE { |
128 adapter_mac_->AddObserver(&adapter_observer_); | |
22 } | 129 } |
23 | 130 |
24 virtual void TearDown() OVERRIDE { | 131 virtual void TearDown() OVERRIDE { |
132 adapter_mac_->RemoveObserver(&adapter_observer_); | |
133 } | |
134 | |
135 void UpdateDevices(NSArray* devices) { | |
136 adapter_mac_->UpdateDevices(devices); | |
25 } | 137 } |
26 | 138 |
27 protected: | 139 protected: |
28 scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; | 140 scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; |
29 scoped_refptr<BluetoothAdapter> adapter_; | 141 scoped_refptr<BluetoothAdapter> adapter_; |
30 BluetoothAdapterMac* adapter_mac_; | 142 BluetoothAdapterMac* adapter_mac_; |
143 AdapterObserver adapter_observer_; | |
31 }; | 144 }; |
32 | 145 |
33 TEST_F(BluetoothAdapterMacTest, Poll) { | 146 TEST_F(BluetoothAdapterMacTest, Poll) { |
34 EXPECT_FALSE(ui_task_runner_->GetPendingTasks().empty()); | 147 EXPECT_FALSE(ui_task_runner_->GetPendingTasks().empty()); |
35 } | 148 } |
36 | 149 |
150 TEST_F(BluetoothAdapterMacTest, UpdateDevices) { | |
151 TestIOBluetoothDevice* android_device = | |
152 [TestIOBluetoothDevice deviceWithName:@"android" | |
153 address:@"11:22:33:44:55:66"]; | |
154 TestIOBluetoothDevice* laptop_device = | |
155 [TestIOBluetoothDevice deviceWithName:@"laptop" | |
156 address:@"77:88:99:aa:bb:cc"]; | |
157 TestIOBluetoothDevice* iphone_device = | |
158 [TestIOBluetoothDevice deviceWithName:@"iphone" | |
159 address:@"dd:ee:ff:11:22:33"]; | |
160 NSMutableArray* devices = [NSMutableArray arrayWithCapacity:3]; | |
161 [devices addObject:android_device]; | |
162 [devices addObject:laptop_device]; | |
163 [devices addObject:iphone_device]; | |
164 UpdateDevices(devices); | |
165 EXPECT_EQ(3, adapter_observer_.num_device_added()); | |
166 adapter_observer_.Clear(); | |
167 | |
168 UpdateDevices(devices); | |
169 EXPECT_EQ(0, adapter_observer_.num_device_added()); | |
170 EXPECT_EQ(0, adapter_observer_.num_device_changed()); | |
171 EXPECT_EQ(0, adapter_observer_.num_device_removed()); | |
172 | |
173 [iphone_device setName:@"apple phone"]; | |
174 UpdateDevices(devices); | |
175 EXPECT_EQ(0, adapter_observer_.num_device_added()); | |
176 EXPECT_EQ(1, adapter_observer_.num_device_changed()); | |
177 EXPECT_EQ(0, adapter_observer_.num_device_removed()); | |
178 adapter_observer_.Clear(); | |
179 | |
180 [laptop_device setAddress:@"12:34:56:78:90:ab"]; | |
181 [laptop_device setConnected:true]; | |
182 UpdateDevices(devices); | |
183 EXPECT_EQ(1, adapter_observer_.num_device_added()); | |
184 EXPECT_EQ(0, adapter_observer_.num_device_changed()); | |
185 EXPECT_EQ(1, adapter_observer_.num_device_removed()); | |
186 adapter_observer_.Clear(); | |
187 | |
188 [devices removeAllObjects]; | |
189 UpdateDevices(devices); | |
190 EXPECT_EQ(2, adapter_observer_.num_device_removed()); | |
191 EXPECT_EQ(1, adapter_observer_.num_device_changed()); | |
192 } | |
193 | |
37 } // namespace device | 194 } // namespace device |
OLD | NEW |