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

Unified 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698