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* _name; | |
Mark Mentovai
2013/03/19 19:14:20
This doesn’t follow the Chromium convention of usi
youngki
2013/03/20 18:48:27
Done.
| |
17 NSString* _address; | |
18 } | |
19 | |
20 + (TestIOBluetoothDevice*)deviceWithName:(NSString*)name | |
21 address:(NSString*)address; | |
22 - (id)initWithName:(NSString*)name address:(NSString*)address; | |
23 | |
24 @property (copy) NSString* name; | |
Mark Mentovai
2013/03/19 19:14:20
You don’t need either property to be atomic, right
youngki
2013/03/20 18:48:27
Putting nonatomic here throws an error:
error: 'a
Mark Mentovai
2013/03/20 19:01:16
youngki wrote:
youngki
2013/03/20 20:30:50
Done. This has to be IOBluetoothDevice instance, s
| |
25 @property (copy) NSString* address; | |
26 | |
27 @end | |
28 | |
29 @implementation TestIOBluetoothDevice | |
30 | |
31 @synthesize name = _name; | |
32 @synthesize address = _address; | |
33 | |
34 + (TestIOBluetoothDevice*)deviceWithName:(NSString*)name | |
35 address:(NSString*)address { | |
36 return [[[TestIOBluetoothDevice alloc] initWithName:name | |
37 address:address] autorelease]; | |
38 } | |
39 | |
40 - (id)initWithName:(NSString*)name address:(NSString*)address { | |
41 if (self = [super init]) { | |
42 [self setName:name]; | |
43 [self setAddress:address]; | |
44 } | |
45 | |
46 return self; | |
47 } | |
48 | |
49 - (void)dealloc { | |
50 [self setName:nil]; | |
51 [self setAddress:nil]; | |
52 [super dealloc]; | |
53 } | |
54 | |
55 - (NSString*)addressString { | |
56 return [self address]; | |
57 } | |
58 | |
59 @end | |
60 | |
61 namespace { | |
62 | |
63 class AdapterObserver : public device::BluetoothAdapter::Observer { | |
64 public: | |
65 AdapterObserver() { | |
66 Clear(); | |
67 } | |
68 | |
69 void Clear() { | |
70 num_device_added_ = 0; | |
71 num_device_changed_ = 0; | |
72 } | |
73 | |
74 virtual void DeviceAdded( | |
75 device::BluetoothAdapter* adapter, | |
76 device::BluetoothDevice* device) OVERRIDE { | |
77 num_device_added_++; | |
78 } | |
79 | |
80 virtual void DeviceChanged( | |
81 device::BluetoothAdapter* adapter, | |
82 device::BluetoothDevice* device) OVERRIDE { | |
83 num_device_changed_++; | |
84 } | |
85 | |
86 int num_device_added() const { | |
87 return num_device_added_; | |
88 } | |
89 | |
90 int num_device_changed() const { | |
91 return num_device_changed_; | |
92 } | |
93 | |
94 private: | |
95 int num_device_added_; | |
96 int num_device_changed_; | |
97 }; | |
98 | |
99 } // namespace | |
100 | |
10 namespace device { | 101 namespace device { |
11 | 102 |
12 class BluetoothAdapterMacTest : public testing::Test { | 103 class BluetoothAdapterMacTest : public testing::Test { |
13 public: | 104 public: |
14 BluetoothAdapterMacTest() | 105 BluetoothAdapterMacTest() |
15 : ui_task_runner_(new base::TestSimpleTaskRunner()), | 106 : ui_task_runner_(new base::TestSimpleTaskRunner()), |
16 adapter_(new BluetoothAdapterMac()), | 107 adapter_(new BluetoothAdapterMac()), |
17 adapter_mac_(static_cast<BluetoothAdapterMac*>(adapter_.get())) { | 108 adapter_mac_(static_cast<BluetoothAdapterMac*>(adapter_.get())) { |
18 adapter_mac_->TrackTestAdapter(ui_task_runner_); | 109 adapter_mac_->TrackTestAdapter(ui_task_runner_); |
110 adapter_observer_.Clear(); | |
19 } | 111 } |
20 | 112 |
21 virtual void SetUp() OVERRIDE { | 113 virtual void SetUp() OVERRIDE { |
114 adapter_mac_->AddObserver(&adapter_observer_); | |
22 } | 115 } |
23 | 116 |
24 virtual void TearDown() OVERRIDE { | 117 virtual void TearDown() OVERRIDE { |
118 adapter_mac_->RemoveObserver(&adapter_observer_); | |
119 } | |
120 | |
121 void UpdateDevices(NSArray* devices) { | |
122 adapter_mac_->UpdateDevices(devices); | |
25 } | 123 } |
26 | 124 |
27 protected: | 125 protected: |
28 scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; | 126 scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; |
29 scoped_refptr<BluetoothAdapter> adapter_; | 127 scoped_refptr<BluetoothAdapter> adapter_; |
30 BluetoothAdapterMac* adapter_mac_; | 128 BluetoothAdapterMac* adapter_mac_; |
129 AdapterObserver adapter_observer_; | |
31 }; | 130 }; |
32 | 131 |
33 TEST_F(BluetoothAdapterMacTest, Poll) { | 132 TEST_F(BluetoothAdapterMacTest, Poll) { |
34 EXPECT_FALSE(ui_task_runner_->GetPendingTasks().empty()); | 133 EXPECT_FALSE(ui_task_runner_->GetPendingTasks().empty()); |
35 } | 134 } |
36 | 135 |
136 TEST_F(BluetoothAdapterMacTest, UpdateDevices) { | |
137 TestIOBluetoothDevice* android_device = | |
138 [TestIOBluetoothDevice deviceWithName:@"android" | |
139 address:@"11:22:33:44:55:66"]; | |
140 TestIOBluetoothDevice* laptop_device = | |
141 [TestIOBluetoothDevice deviceWithName:@"laptop" | |
142 address:@"77:88:99:aa:bb:cc"]; | |
143 TestIOBluetoothDevice* iphone_device = | |
144 [TestIOBluetoothDevice deviceWithName:@"iphone" | |
145 address:@"dd:ee:ff:11:22:33"]; | |
146 NSMutableArray* devices = [NSMutableArray arrayWithCapacity:3]; | |
147 [devices addObject:android_device]; | |
148 [devices addObject:laptop_device]; | |
149 [devices addObject:iphone_device]; | |
150 UpdateDevices(devices); | |
151 EXPECT_EQ(3, adapter_observer_.num_device_added()); | |
152 adapter_observer_.Clear(); | |
153 | |
154 UpdateDevices(devices); | |
155 EXPECT_EQ(0, adapter_observer_.num_device_added()); | |
156 EXPECT_EQ(0, adapter_observer_.num_device_changed()); | |
157 | |
158 [iphone_device setName:@"apple phone"]; | |
159 UpdateDevices(devices); | |
160 EXPECT_EQ(0, adapter_observer_.num_device_added()); | |
161 EXPECT_EQ(1, adapter_observer_.num_device_changed()); | |
162 adapter_observer_.Clear(); | |
163 } | |
164 | |
37 } // namespace device | 165 } // namespace device |
OLD | NEW |