Index: device/bluetooth/bluetooth_adapter_mac_unittest.mm |
diff --git a/device/bluetooth/bluetooth_adapter_mac_unittest.mm b/device/bluetooth/bluetooth_adapter_mac_unittest.mm |
index 9067820d68e9143a15379ab918bd174bad6163e9..9db14c2c9fd0aedf2b9ddb51e51b5ef871b2853e 100644 |
--- a/device/bluetooth/bluetooth_adapter_mac_unittest.mm |
+++ b/device/bluetooth/bluetooth_adapter_mac_unittest.mm |
@@ -2,11 +2,116 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#import <IOBluetooth/IOBluetoothUtilities.h> |
+#import <IOBluetooth/objc/IOBluetoothDevice.h> |
+ |
#include "base/memory/ref_counted.h" |
#include "base/test/test_simple_task_runner.h" |
+#include "device/bluetooth/bluetooth_adapter.h" |
#include "device/bluetooth/bluetooth_adapter_mac.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+@interface TestIOBluetoothDevice : IOBluetoothDevice { |
+ @private |
+ BOOL connected_; |
+} |
+ |
++ (TestIOBluetoothDevice*)deviceWithName:(NSString*)name |
+ address:(NSString*)address; |
+- (id)initWithName:(NSString*)name address:(NSString*)address; |
+- (void)setName:(NSString*)name; |
+- (void)setAddress:(NSString*)address; |
+- (void)setConnected:(BOOL)connected; |
+@end |
+ |
+@implementation TestIOBluetoothDevice |
+ |
++ (TestIOBluetoothDevice*)deviceWithName:(NSString*)name |
+ address:(NSString*)address { |
+ return [[[TestIOBluetoothDevice alloc] initWithName:name |
+ address:address] autorelease]; |
+} |
+ |
+- (id)initWithName:(NSString*)name address:(NSString*)address { |
+ if (self = [super init]) { |
+ connected_ = false; |
+ 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.
|
+ IOBluetoothNSStringToDeviceAddress(address, &mAddress); |
+ } |
+ |
+ return self; |
+} |
+ |
+- (void)setName:(NSString*)name { |
+ mName = name; |
+} |
+ |
+- (void)setAddress:(NSString*)address { |
+ IOBluetoothNSStringToDeviceAddress(address, &mAddress); |
+} |
+ |
+- (void)setConnected:(BOOL)connected { |
+ connected_ = connected; |
+} |
+ |
+- (BOOL)isConnected { |
+ return connected_; |
+} |
+ |
+@end |
+ |
+namespace { |
+ |
+class AdapterObserver : public device::BluetoothAdapter::Observer { |
+ public: |
+ AdapterObserver() { |
+ Clear(); |
+ } |
+ |
+ void Clear() { |
+ num_device_added_ = 0; |
+ num_device_changed_ = 0; |
+ num_device_removed_ = 0; |
+ } |
+ |
+ virtual void DeviceAdded( |
+ device::BluetoothAdapter* adapter, |
+ device::BluetoothDevice* device) OVERRIDE { |
+ num_device_added_++; |
+ } |
+ |
+ virtual void DeviceChanged( |
+ device::BluetoothAdapter* adapter, |
+ device::BluetoothDevice* device) OVERRIDE { |
+ num_device_changed_++; |
+ } |
+ |
+ virtual void DeviceRemoved( |
+ device::BluetoothAdapter* adapter, |
+ device::BluetoothDevice* device) OVERRIDE { |
+ num_device_removed_++; |
+ } |
+ |
+ int num_device_added() const { |
+ return num_device_added_; |
+ } |
+ |
+ int num_device_changed() const { |
+ return num_device_changed_; |
+ } |
+ |
+ int num_device_removed() const { |
+ return num_device_removed_; |
+ } |
+ |
+ private: |
+ int num_device_added_; |
+ int num_device_changed_; |
+ int num_device_removed_; |
+}; |
+ |
+} // namespace |
+ |
namespace device { |
class BluetoothAdapterMacTest : public testing::Test { |
@@ -16,22 +121,74 @@ class BluetoothAdapterMacTest : public testing::Test { |
adapter_(new BluetoothAdapterMac()), |
adapter_mac_(static_cast<BluetoothAdapterMac*>(adapter_.get())) { |
adapter_mac_->TrackTestAdapter(ui_task_runner_); |
+ adapter_observer_.Clear(); |
} |
virtual void SetUp() OVERRIDE { |
+ adapter_mac_->AddObserver(&adapter_observer_); |
} |
virtual void TearDown() OVERRIDE { |
+ adapter_mac_->RemoveObserver(&adapter_observer_); |
+ } |
+ |
+ void UpdateDevices(NSArray* devices) { |
+ adapter_mac_->UpdateDevices(devices); |
} |
protected: |
scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; |
scoped_refptr<BluetoothAdapter> adapter_; |
BluetoothAdapterMac* adapter_mac_; |
+ AdapterObserver adapter_observer_; |
}; |
TEST_F(BluetoothAdapterMacTest, Poll) { |
EXPECT_FALSE(ui_task_runner_->GetPendingTasks().empty()); |
} |
+TEST_F(BluetoothAdapterMacTest, UpdateDevices) { |
+ TestIOBluetoothDevice* android_device = |
+ [TestIOBluetoothDevice deviceWithName:@"android" |
+ address:@"11:22:33:44:55:66"]; |
+ TestIOBluetoothDevice* laptop_device = |
+ [TestIOBluetoothDevice deviceWithName:@"laptop" |
+ address:@"77:88:99:aa:bb:cc"]; |
+ TestIOBluetoothDevice* iphone_device = |
+ [TestIOBluetoothDevice deviceWithName:@"iphone" |
+ address:@"dd:ee:ff:11:22:33"]; |
+ NSMutableArray* devices = [NSMutableArray arrayWithCapacity:3]; |
+ [devices addObject:android_device]; |
+ [devices addObject:laptop_device]; |
+ [devices addObject:iphone_device]; |
+ UpdateDevices(devices); |
+ EXPECT_EQ(3, adapter_observer_.num_device_added()); |
+ adapter_observer_.Clear(); |
+ |
+ UpdateDevices(devices); |
+ EXPECT_EQ(0, adapter_observer_.num_device_added()); |
+ EXPECT_EQ(0, adapter_observer_.num_device_changed()); |
+ EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
+ |
+ [iphone_device setName:@"apple phone"]; |
+ UpdateDevices(devices); |
+ EXPECT_EQ(0, adapter_observer_.num_device_added()); |
+ EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
+ EXPECT_EQ(0, adapter_observer_.num_device_removed()); |
+ adapter_observer_.Clear(); |
+ |
+ [laptop_device setAddress:@"12:34:56:78:90:ab"]; |
+ [laptop_device setConnected:true]; |
+ UpdateDevices(devices); |
+ EXPECT_EQ(1, adapter_observer_.num_device_added()); |
+ EXPECT_EQ(0, adapter_observer_.num_device_changed()); |
+ EXPECT_EQ(1, adapter_observer_.num_device_removed()); |
+ adapter_observer_.Clear(); |
+ |
+ [devices removeAllObjects]; |
+ UpdateDevices(devices); |
+ EXPECT_EQ(2, adapter_observer_.num_device_removed()); |
+ EXPECT_EQ(1, adapter_observer_.num_device_changed()); |
+} |
+ |
} // namespace device |