| Index: device/bluetooth/test/bluetooth_test_mac.mm
|
| diff --git a/device/bluetooth/test/bluetooth_test_mac.mm b/device/bluetooth/test/bluetooth_test_mac.mm
|
| index cc4b8d85f108e4324b61616c904472b36a309f8d..41ca2742d935fd866294e3fd58225a1871437bdc 100644
|
| --- a/device/bluetooth/test/bluetooth_test_mac.mm
|
| +++ b/device/bluetooth/test/bluetooth_test_mac.mm
|
| @@ -10,8 +10,11 @@
|
| #include "base/strings/string_number_conversions.h"
|
| #include "build/build_config.h"
|
| #include "device/bluetooth/bluetooth_adapter_mac.h"
|
| +#include "device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h"
|
| #include "device/bluetooth/bluetooth_remote_gatt_service_mac.h"
|
| +#include "device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h"
|
| #include "device/bluetooth/test/mock_bluetooth_cbperipheral_mac.h"
|
| +#include "device/bluetooth/test/mock_bluetooth_cbservice_mac.h"
|
| #include "device/bluetooth/test/mock_bluetooth_central_manager_mac.h"
|
| #include "device/bluetooth/test/test_bluetooth_adapter_observer.h"
|
| #include "third_party/ocmock/OCMock/OCMock.h"
|
| @@ -21,6 +24,18 @@
|
| using base::mac::ObjCCast;
|
| using base::scoped_nsobject;
|
|
|
| +namespace {
|
| +
|
| +void DidDiscoverServices(MockCBPeripheral* peripheral_mock) {
|
| + [peripheral_mock didDiscoverServicesWithError:nil];
|
| + // BluetoothLowEnergyDeviceMac is expected to call
|
| + // -[CBPeripheral discoverCharacteristics:forService:] for each services,
|
| + // so -[<CBPeripheralDelegate peripheral:didDiscoverCharacteristicsForService:
|
| + // error:] needs to be called
|
| + [peripheral_mock didDiscoverCharactericsForAllServices];
|
| +}
|
| +} // namespace
|
| +
|
| namespace device {
|
|
|
| // This class hides Objective-C from bluetooth_test_mac.h.
|
| @@ -237,7 +252,7 @@ void BluetoothTestMac::SimulateGattServicesDiscovered(
|
| [services addObject:cb_service_uuid];
|
| }
|
| [peripheral_mock addServices:services];
|
| - [peripheral_mock didDiscoverServicesWithError:nil];
|
| + DidDiscoverServices(peripheral_mock);
|
| }
|
|
|
| void BluetoothTestMac::SimulateGattServiceRemoved(
|
| @@ -252,7 +267,44 @@ void BluetoothTestMac::SimulateGattServiceRemoved(
|
| CBPeripheral* peripheral = device_mac->GetPeripheral();
|
| MockCBPeripheral* peripheral_mock = ObjCCast<MockCBPeripheral>(peripheral);
|
| [peripheral_mock removeService:mac_gatt_service->GetService()];
|
| - [peripheral_mock didDiscoverServicesWithError:nil];
|
| + // After -[MockCBPeripheral removeService:], BluetoothLowEnergyDeviceMac is
|
| + // expected to call -[CBPeripheral discoverServices:]
|
| + DidDiscoverServices(peripheral_mock);
|
| +}
|
| +
|
| +void BluetoothTestMac::SimulateGattCharacteristic(
|
| + BluetoothRemoteGattService* service,
|
| + const std::string& uuid,
|
| + int properties) {
|
| + BluetoothRemoteGattServiceMac* mac_gatt_service =
|
| + static_cast<BluetoothRemoteGattServiceMac*>(service);
|
| + CBService* cb_service = mac_gatt_service->GetService();
|
| + MockCBService* service_mock = ObjCCast<MockCBService>(cb_service);
|
| + CBUUID* cb_uuid = [CBUUID UUIDWithString:@(uuid.c_str())];
|
| + [service_mock addCharacteristicWithUUID:cb_uuid properties:properties];
|
| + MockCBPeripheral* peripheral_mock = GetMockCBPeripheral(service);
|
| + [peripheral_mock didModifyServices:@[]];
|
| + // After -[MockCBPeripheral didModifyServices:], BluetoothLowEnergyDeviceMac
|
| + // is expected to call -[CBPeripheral discoverServices:]
|
| + DidDiscoverServices(peripheral_mock);
|
| +}
|
| +
|
| +void BluetoothTestMac::SimulateGattCharacteristicRemoved(
|
| + BluetoothRemoteGattService* service,
|
| + BluetoothRemoteGattCharacteristic* characteristic) {
|
| + MockCBPeripheral* peripheral_mock = GetMockCBPeripheral(service);
|
| + BluetoothRemoteGattServiceMac* mac_gatt_service =
|
| + static_cast<BluetoothRemoteGattServiceMac*>(service);
|
| + CBService* cb_service = mac_gatt_service->GetService();
|
| + MockCBService* service_mock = ObjCCast<MockCBService>(cb_service);
|
| + BluetoothRemoteGattCharacteristicMac* characteristic_mac =
|
| + static_cast<BluetoothRemoteGattCharacteristicMac*>(characteristic);
|
| + CBCharacteristic* cb_characteristic =
|
| + characteristic_mac->GetCBCharacteristic();
|
| + MockCBCharacteristic* characteristic_mock =
|
| + ObjCCast<MockCBCharacteristic>(cb_characteristic);
|
| + [service_mock removeCharacteristicMock:characteristic_mock];
|
| + DidDiscoverServices(peripheral_mock);
|
| }
|
|
|
| void BluetoothTestMac::OnFakeBluetoothDeviceConnectGattCalled() {
|
| @@ -267,6 +319,15 @@ void BluetoothTestMac::OnFakeBluetoothServiceDiscovery() {
|
| gatt_discovery_attempts_++;
|
| }
|
|
|
| +MockCBPeripheral* BluetoothTestMac::GetMockCBPeripheral(
|
| + BluetoothRemoteGattService* service) const {
|
| + BluetoothDevice* device = service->GetDevice();
|
| + BluetoothLowEnergyDeviceMac* device_mac =
|
| + static_cast<BluetoothLowEnergyDeviceMac*>(device);
|
| + CBPeripheral* cb_peripheral = device_mac->GetPeripheral();
|
| + return ObjCCast<MockCBPeripheral>(cb_peripheral);
|
| +}
|
| +
|
| // Utility function for generating new (CBUUID, address) pairs where CBUUID
|
| // hashes to address. For use when adding a new device address to the testing
|
| // suite because CoreBluetooth peripherals have CBUUIDs in place of addresses,
|
|
|