Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(530)

Side by Side Diff: device/bluetooth/bluetooth_adapter_mac_unittest.mm

Issue 12929003: Implemented BluetoothAdapterMac::AddDevices(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698