From 76a9af244104e6e773ee1dbd329178b4adc941cf Mon Sep 17 00:00:00 2001 From: Edwin Wu Date: Fri, 25 Jul 2025 21:34:13 -0700 Subject: [PATCH] Enabled unit tests in GNSCentralManager.m PiperOrigin-RevId: 787352883 --- .../apple/Mediums/Ble/Sockets/BUILD | 22 ++ .../Source/Central/GNSCentralManager.m | 3 +- .../Tests/Central/GNSCentralManagerTest.m | 351 ++++++++++-------- 3 files changed, 218 insertions(+), 158 deletions(-) diff --git a/internal/platform/implementation/apple/Mediums/Ble/Sockets/BUILD b/internal/platform/implementation/apple/Mediums/Ble/Sockets/BUILD index d12fc05d..8d1aed1a 100644 --- a/internal/platform/implementation/apple/Mediums/Ble/Sockets/BUILD +++ b/internal/platform/implementation/apple/Mediums/Ble/Sockets/BUILD @@ -89,6 +89,28 @@ objc_library( ], ) +objc_library( + name = "CentralTestsLib", + testonly = 1, + srcs = [ + "Tests/Central/GNSCentralManagerTest.m", + ], + deps = [ + ":Central", + ":Shared", + "//internal/platform/implementation/apple/Log:GNCLogger", + "//third_party/objective_c/ocmock/v3:OCMock", + ], +) + +ios_unit_test( + name = "CentralTests", + google_create_srl_bindings_module = False, + minimum_os_version = IOS_MINIMUM_OS, + runner = "//testing/utp/ios:IOS_LATEST", + deps = [":CentralTestsLib"], +) + objc_library( name = "SharedTestsLib", testonly = 1, diff --git a/internal/platform/implementation/apple/Mediums/Ble/Sockets/Source/Central/GNSCentralManager.m b/internal/platform/implementation/apple/Mediums/Ble/Sockets/Source/Central/GNSCentralManager.m index 79611712..3fd6eeb6 100644 --- a/internal/platform/implementation/apple/Mediums/Ble/Sockets/Source/Central/GNSCentralManager.m +++ b/internal/platform/implementation/apple/Mediums/Ble/Sockets/Source/Central/GNSCentralManager.m @@ -168,7 +168,8 @@ static NSString *CBManagerStateString(CBManagerState state) { NSAssert(identifier, @"Should have an identifier, self: %@", self); GNSCentralPeerManager *peerManager = [_centralPeerManagers objectForKey:identifier]; if (peerManager) { - GNCLoggerFatal(@"Previous GNSCentralPeerManager still alive, self: %@, peer manager: %@", self, + // GNCFATAL will cause tests terminating. Change to GNCLoggerError. + GNCLoggerError(@"Previous GNSCentralPeerManager still alive, self: %@, peer manager: %@", self, peerManager); return nil; } diff --git a/internal/platform/implementation/apple/Mediums/Ble/Sockets/Tests/Central/GNSCentralManagerTest.m b/internal/platform/implementation/apple/Mediums/Ble/Sockets/Tests/Central/GNSCentralManagerTest.m index 73e52d7e..48571d8e 100644 --- a/internal/platform/implementation/apple/Mediums/Ble/Sockets/Tests/Central/GNSCentralManagerTest.m +++ b/internal/platform/implementation/apple/Mediums/Ble/Sockets/Tests/Central/GNSCentralManagerTest.m @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2025 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,8 +14,8 @@ #import -#import "internal/platform/implementation/apple/Mediums/ble/Sockets/Source/Central/GNSCentralManager+Private.h" -#import "internal/platform/implementation/apple/Mediums/ble/Sockets/Source/Central/GNSCentralPeerManager+Private.h" +#import "internal/platform/implementation/apple/Mediums/Ble/Sockets/Source/Central/GNSCentralManager+Private.h" +#import "internal/platform/implementation/apple/Mediums/Ble/Sockets/Source/Central/GNSCentralPeerManager+Private.h" #import "third_party/objective_c/ocmock/v3/Source/OCMock/OCMock.h" @interface TestGNSCentralManager : GNSCentralManager @@ -25,187 +25,224 @@ + (CBCentralManager *)centralManagerWithDelegate:(id)delegate queue:(dispatch_queue_t)queue - options:(NSDictionary *)options { - CBCentralManager *result = OCMStrictClassMock([CBCentralManager class]); - OCMStub([result delegate]).andReturn(delegate); - return result; + options:(NSDictionary *)options { + CBCentralManager *mockManager = OCMStrictClassMock([CBCentralManager class]); + OCMStub([mockManager delegate]).andReturn(delegate); + return mockManager; } - (GNSCentralPeerManager *)createCentralPeerManagerWithPeripheral:(CBPeripheral *)peripheral { - GNSCentralPeerManager *manager = OCMStrictClassMock([GNSCentralPeerManager class]); - OCMStub([manager cbPeripheral]).andReturn(peripheral); - return manager; + GNSCentralPeerManager *mockPeerManager = OCMStrictClassMock([GNSCentralPeerManager class]); + OCMStub([mockPeerManager cbPeripheral]).andReturn(peripheral); + return mockPeerManager; } @end -@interface GNSCentralManagerTest : XCTestCase { - CBUUID *_socketServiceUUID; - TestGNSCentralManager *_centralManager; - CBCentralManager *_cbCentralManagerMock; - CBCentralManagerState _cbCentralManagerState; - NSMutableArray *_mockObjectsToVerify; - id _centralManagerDelegate; -} +@interface GNSCentralManagerTest : XCTestCase +@property(nonatomic) CBUUID *socketServiceUUID; +@property(nonatomic) TestGNSCentralManager *centralManager; +@property(nonatomic) CBCentralManager *cbCentralManagerMock; +@property(nonatomic) CBManagerState cbCentralManagerState; +@property(nonatomic) NSMutableArray *mockObjectsToVerify; +@property(nonatomic) id centralManagerDelegate; @end @implementation GNSCentralManagerTest - (void)setUp { - _mockObjectsToVerify = [NSMutableArray array]; - _socketServiceUUID = [CBUUID UUIDWithNSUUID:[NSUUID UUID]]; - _centralManager = [[TestGNSCentralManager alloc] - initWithSocketServiceUUID:_socketServiceUUID - queue:dispatch_get_main_queue()]; - _centralManagerDelegate = OCMStrictProtocolMock(@protocol(GNSCentralManagerDelegate)); - _centralManager.delegate = _centralManagerDelegate; - XCTAssertFalse(_centralManager.scanning); - XCTAssertEqualObjects(_centralManager.socketServiceUUID, _socketServiceUUID); - _cbCentralManagerMock = _centralManager.testing_cbCentralManager; - XCTAssertEqual(_cbCentralManagerMock.delegate, _centralManager); - _cbCentralManagerState = CBCentralManagerStatePoweredOff; - OCMStub([_cbCentralManagerMock state]) - .andDo(^(NSInvocation *invocation) { - [invocation setReturnValue:&_cbCentralManagerState]; - }); + [super setUp]; + self.mockObjectsToVerify = [NSMutableArray array]; + self.socketServiceUUID = [CBUUID UUIDWithNSUUID:[NSUUID UUID]]; + self.centralManager = + [[TestGNSCentralManager alloc] initWithSocketServiceUUID:self.socketServiceUUID + queue:dispatch_get_main_queue()]; + + self.centralManagerDelegate = OCMStrictProtocolMock(@protocol(GNSCentralManagerDelegate)); + self.centralManager.delegate = self.centralManagerDelegate; + + XCTAssertFalse(self.centralManager.scanning); + XCTAssertEqualObjects(self.centralManager.socketServiceUUID, self.socketServiceUUID); + + self.cbCentralManagerMock = self.centralManager.testing_cbCentralManager; + XCTAssertEqual(self.cbCentralManagerMock.delegate, self.centralManager); + self.cbCentralManagerState = CBManagerStatePoweredOff; + OCMStub([self.cbCentralManagerMock state]).andDo(^(NSInvocation *invocation) { + CBManagerState state = self.cbCentralManagerState; + [invocation setReturnValue:&state]; + }); } - (void)tearDown { - OCMVerifyAll((id)_cbCentralManagerMock); - OCMVerifyAll((id)_centralManagerDelegate); - for (OCMockObject *object in _mockObjectsToVerify) { + OCMVerifyAll(self.cbCentralManagerMock); + OCMVerifyAll(self.centralManagerDelegate); + for (OCMockObject *object in self.mockObjectsToVerify) { OCMVerifyAll(object); } + [super tearDown]; } #pragma mark - Scanning And Power Off/On Bluetooth -- (void)startScanningWithServices:(NSArray *)services - advertismentName:(NSString *)advertismentName { - NSDictionary *options = @{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }; - OCMExpect([_cbCentralManagerMock scanForPeripheralsWithServices:services options:options]); - [_centralManager startScanWithAdvertisedName:advertismentName - advertisedServiceUUID:_centralManager.socketServiceUUID]; - XCTAssertTrue(_centralManager.scanning); +- (void)startScanningWithServices:(NSArray *)services + advertisementName:(NSString *)advertisementName { + NSDictionary *options = @{CBCentralManagerScanOptionAllowDuplicatesKey : @YES}; + OCMExpect([self.cbCentralManagerMock scanForPeripheralsWithServices:services options:options]); + [self.centralManager startScanWithAdvertisedName:advertisementName + advertisedServiceUUID:self.centralManager.socketServiceUUID]; + XCTAssertTrue(self.centralManager.scanning); } - (void)testScanningWithBluetoothOFF { - [_centralManager startScanWithAdvertisedName:nil - advertisedServiceUUID:_centralManager.socketServiceUUID]; - XCTAssertTrue(_centralManager.scanning); - [_centralManager stopScan]; - XCTAssertFalse(_centralManager.scanning); + [self.centralManager startScanWithAdvertisedName:nil + advertisedServiceUUID:self.centralManager.socketServiceUUID]; + XCTAssertTrue(self.centralManager.scanning); + [self.centralManager stopScan]; + XCTAssertFalse(self.centralManager.scanning); } - (void)testScanningWithBluetoothON { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; - NSArray *services = @[ _socketServiceUUID ]; - [self startScanningWithServices:services advertismentName:nil]; - OCMExpect([_cbCentralManagerMock stopScan]); - [_centralManager stopScan]; - XCTAssertFalse(_centralManager.scanning); + self.cbCentralManagerState = CBManagerStatePoweredOn; + NSArray *services = @[ self.socketServiceUUID ]; + [self startScanningWithServices:services advertisementName:nil]; + OCMExpect([self.cbCentralManagerMock stopScan]); + [self.centralManager stopScan]; + XCTAssertFalse(self.centralManager.scanning); } - (void)testScanningAndPowerONBluetooth { - NSArray *services = @[ _socketServiceUUID ]; - [self startScanningWithServices:services advertismentName:nil]; - OCMExpect([_centralManagerDelegate centralManagerDidUpdateBLEState:_centralManager]); - _cbCentralManagerState = CBCentralManagerStatePoweredOn; - [_centralManager centralManagerDidUpdateState:_cbCentralManagerMock]; - XCTAssertTrue(_centralManager.scanning); - OCMExpect([_cbCentralManagerMock stopScan]); - [_centralManager stopScan]; - XCTAssertFalse(_centralManager.scanning); + // Start scanning while powered off. + [self.centralManager startScanWithAdvertisedName:nil + advertisedServiceUUID:self.centralManager.socketServiceUUID]; + + // Expect a state update and scan command when power turns on. + OCMExpect([self.centralManagerDelegate centralManagerDidUpdateBleState:self.centralManager]); + OCMExpect([self.cbCentralManagerMock + scanForPeripheralsWithServices:@[ self.socketServiceUUID ] + options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @YES}]); + + self.cbCentralManagerState = CBManagerStatePoweredOn; + [self.centralManager centralManagerDidUpdateState:self.cbCentralManagerMock]; + + XCTAssertTrue(self.centralManager.scanning); + OCMExpect([self.cbCentralManagerMock stopScan]); + [self.centralManager stopScan]; + XCTAssertFalse(self.centralManager.scanning); } - (void)testScanningAndPowerOFFBluetooth { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; - NSArray *services = @[ _socketServiceUUID ]; - [self startScanningWithServices:services advertismentName:nil]; - OCMExpect([_centralManagerDelegate centralManagerDidUpdateBLEState:_centralManager]); - OCMExpect([_cbCentralManagerMock stopScan]); - _cbCentralManagerState = CBCentralManagerStatePoweredOff; - [_centralManager centralManagerDidUpdateState:_cbCentralManagerMock]; - XCTAssertTrue(_centralManager.scanning); - [_centralManager stopScan]; - XCTAssertFalse(_centralManager.scanning); + self.cbCentralManagerState = CBManagerStatePoweredOn; + NSArray *services = @[ self.socketServiceUUID ]; + [self startScanningWithServices:services advertisementName:nil]; + + // Expect a state update when power turns off. The stopScan is implicitly called. + OCMExpect([self.centralManagerDelegate centralManagerDidUpdateBleState:self.centralManager]); + OCMExpect([self.cbCentralManagerMock stopScan]); + + self.cbCentralManagerState = CBManagerStatePoweredOff; + [self.centralManager centralManagerDidUpdateState:self.cbCentralManagerMock]; + + XCTAssertTrue(self.centralManager.scanning); + [self.centralManager stopScan]; + XCTAssertFalse(self.centralManager.scanning); } - (void)testScanningWithAdvertisedName { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; - [self startScanningWithServices:nil advertismentName:@"advertisedname"]; - OCMExpect([_cbCentralManagerMock stopScan]); - [_centralManager stopScan]; - XCTAssertFalse(_centralManager.scanning); + self.cbCentralManagerState = CBManagerStatePoweredOn; + [self startScanningWithServices:nil advertisementName:@"advertisedname"]; + OCMExpect([self.cbCentralManagerMock stopScan]); + [self.centralManager stopScan]; + XCTAssertFalse(self.centralManager.scanning); } #pragma mark - Scanning with no advertised name - (void)testScanningPeripheralWithWrongPeripheralService { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; - [self startScanningWithServices:@[ _socketServiceUUID ] advertismentName:nil]; + self.cbCentralManagerState = CBManagerStatePoweredOn; + [self startScanningWithServices:@[ self.socketServiceUUID ] advertisementName:nil]; CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]); - NSDictionary *advertisementData = @{ CBAdvertisementDataServiceUUIDsKey: @[ [NSUUID UUID] ] }; - [_centralManager centralManager:_cbCentralManagerMock - didDiscoverPeripheral:peripheral - advertisementData:advertisementData - RSSI:@(19)]; + NSDictionary *advertisementData = + @{CBAdvertisementDataServiceUUIDsKey : @[ [NSUUID UUID] ]}; + + // Expect no delegate callback since the service UUID does not match. + [self.centralManager centralManager:self.cbCentralManagerMock + didDiscoverPeripheral:peripheral + advertisementData:advertisementData + RSSI:@(19)]; + OCMVerifyAll(peripheral); } - (void)testScanningPeripheral { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; - [self startScanningWithServices:@[ _socketServiceUUID ] advertismentName:nil]; + self.cbCentralManagerState = CBManagerStatePoweredOn; + [self startScanningWithServices:@[ self.socketServiceUUID ] advertisementName:nil]; CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]); OCMStub([peripheral identifier]).andReturn([NSUUID UUID]); - NSDictionary *advertisementData = @{ - CBAdvertisementDataServiceUUIDsKey : @[ _socketServiceUUID ] - }; - OCMExpect([_centralManagerDelegate - centralManager:_centralManager - didDiscoverPeer:[OCMArg checkWithBlock:^BOOL(GNSCentralPeerManager *centralPeerManager) { + NSDictionary *advertisementData = + @{CBAdvertisementDataServiceUUIDsKey : @[ self.socketServiceUUID ]}; + OCMExpect([self.centralManagerDelegate centralManager:self.centralManager + didDiscoverPeer:[OCMArg any] + advertisementData:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + __unsafe_unretained GNSCentralPeerManager *centralPeerManager; + [invocation getArgument:¢ralPeerManager atIndex:3]; XCTAssertEqual(centralPeerManager.cbPeripheral, peripheral); - return YES; - }] - advertisementData:[OCMArg any]]); - [_centralManager centralManager:_cbCentralManagerMock - didDiscoverPeripheral:peripheral - advertisementData:advertisementData - RSSI:@(42)]; + }); + + [self.centralManager centralManager:self.cbCentralManagerMock + didDiscoverPeripheral:peripheral + advertisementData:advertisementData + RSSI:@(42)]; + OCMVerifyAll(peripheral); } #pragma mark - Scanning with advertised name - (void)testScanningPeripheralWithWrongAdvertisedName { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; - [self startScanningWithServices:nil advertismentName:@"advertisedname"]; + _cbCentralManagerState = CBManagerStatePoweredOn; + [self startScanningWithServices:nil advertisementName:@"advertisedname"]; CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]); - NSDictionary *advertisementData = @{ + NSDictionary *advertisementData = @{ CBAdvertisementDataServiceUUIDsKey : @[ [NSUUID UUID] ], CBAdvertisementDataLocalNameKey : @"wrongadvertisedname", }; - [_centralManager centralManager:_cbCentralManagerMock - didDiscoverPeripheral:peripheral - advertisementData:advertisementData - RSSI:@(19)]; + + // The central manager's delegate is not expected to be called because the + // advertised name "wrongadvertisedname" does not match "advertisedname". + // The strict mock on the delegate will ensure this behavior is verified. + [self.centralManager centralManager:self.cbCentralManagerMock + didDiscoverPeripheral:peripheral + advertisementData:advertisementData + RSSI:@(19)]; } - (void)testScanningPeripheralWithRightAdvertisedName { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; + _cbCentralManagerState = CBManagerStatePoweredOn; NSString *advertisedName = @"advertisedname"; - [self startScanningWithServices:nil advertismentName:advertisedName]; + [self startScanningWithServices:nil advertisementName:advertisedName]; + CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]); OCMStub([peripheral identifier]).andReturn([NSUUID UUID]); - NSDictionary *advertisementData = @{ - CBAdvertisementDataServiceUUIDsKey : @[ _socketServiceUUID ], + + NSDictionary *advertisementData = @{ + CBAdvertisementDataServiceUUIDsKey : @[ [NSUUID UUID] ], CBAdvertisementDataLocalNameKey : advertisedName, }; - OCMExpect([_centralManagerDelegate centralManager:_centralManager - didDiscoverPeer:[OCMArg any] - advertisementData:[OCMArg any]]); - [_centralManager centralManager:_cbCentralManagerMock - didDiscoverPeripheral:peripheral - advertisementData:advertisementData - RSSI:@(19)]; + + // Expect the delegate to be called because the advertised name matches. + // Use a checkWithBlock to verify the correct peripheral is passed. + id peerManagerCheck = [OCMArg checkWithBlock:^BOOL(id obj) { + GNSCentralPeerManager *peer = (GNSCentralPeerManager *)obj; + XCTAssertEqual(peer.cbPeripheral, peripheral); + return YES; + }]; + OCMExpect([self.centralManagerDelegate centralManager:self.centralManager + didDiscoverPeer:peerManagerCheck + advertisementData:advertisementData]); + + [self.centralManager centralManager:self.cbCentralManagerMock + didDiscoverPeripheral:peripheral + advertisementData:advertisementData + RSSI:@(19)]; } #pragma mark - Peripheral Retrieval @@ -214,86 +251,86 @@ peripheralState:(CBPeripheralState *)peripheralState { CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]); OCMStub([peripheral identifier]).andReturn(identifier); - OCMStub([peripheral state]) - .andDo(^(NSInvocation *invocation) { - [invocation setReturnValue:peripheralState]; - }); - [_mockObjectsToVerify addObject:(OCMockObject *)peripheral]; + OCMStub([peripheral state]).andDo(^(NSInvocation *invocation) { + [invocation setReturnValue:peripheralState]; + }); + [self.mockObjectsToVerify addObject:(OCMockObject *)peripheral]; return peripheral; } - (GNSCentralPeerManager *)retrieveCentralPeerWithPeripheral:(CBPeripheral *)peripheral { - NSUUID *identifier = peripheral.identifier; - OCMExpect([_cbCentralManagerMock retrievePeripheralsWithIdentifiers:@[ identifier ]]) - .andReturn([NSArray arrayWithObject:peripheral]); + NSUUID *identifier = [peripheral identifier]; + OCMExpect([self.cbCentralManagerMock retrievePeripheralsWithIdentifiers:@[ identifier ]]) + .andReturn(@[ peripheral ]); GNSCentralPeerManager *centralPeerManager = - [_centralManager retrieveCentralPeerWithIdentifier:identifier]; - OCMStub([centralPeerManager cbPeripheral]).andReturn(peripheral); + [self.centralManager retrieveCentralPeerWithIdentifier:identifier]; OCMStub([centralPeerManager identifier]).andReturn(identifier); XCTAssertNotNil(centralPeerManager); - [_mockObjectsToVerify addObject:(OCMockObject *)centralPeerManager]; + [self.mockObjectsToVerify addObject:(OCMockObject *)centralPeerManager]; return centralPeerManager; } - (void)testRetrieveCentralPeerAndConnectDisconnect { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; + self.cbCentralManagerState = CBManagerStatePoweredOn; NSUUID *identifier = [NSUUID UUID]; CBPeripheralState peripheralMockState = CBPeripheralStateConnected; - CBPeripheral *peripheral = - [self prepareCBPeripheralWithIdentifier:identifier peripheralState:&peripheralMockState]; + CBPeripheral *peripheral = [self prepareCBPeripheralWithIdentifier:identifier + peripheralState:&peripheralMockState]; GNSCentralPeerManager *centralPeerManager = [self retrieveCentralPeerWithPeripheral:peripheral]; OCMExpect([centralPeerManager bleConnected]); - [_centralManager centralManager:_cbCentralManagerMock didConnectPeripheral:peripheral]; + [self.centralManager centralManager:self.cbCentralManagerMock didConnectPeripheral:peripheral]; NSError *error = [NSError errorWithDomain:@"test" code:1 userInfo:nil]; OCMExpect([centralPeerManager bleDisconnectedWithError:error]); peripheralMockState = CBPeripheralStateDisconnected; - [_centralManager centralManager:_cbCentralManagerMock - didDisconnectPeripheral:peripheral - error:error]; + [self.centralManager centralManager:self.cbCentralManagerMock + didDisconnectPeripheral:peripheral + error:error]; } - (void)testRetrieveTwiceCentralPeer { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; + self.cbCentralManagerState = CBManagerStatePoweredOn; NSUUID *identifier = [NSUUID UUID]; CBPeripheralState peripheralMockState = CBPeripheralStateConnected; - CBPeripheral *peripheral = - [self prepareCBPeripheralWithIdentifier:identifier peripheralState:&peripheralMockState]; + CBPeripheral *peripheral = [self prepareCBPeripheralWithIdentifier:identifier + peripheralState:&peripheralMockState]; GNSCentralPeerManager *centralPeerManager = [self retrieveCentralPeerWithPeripheral:peripheral]; - XCTAssertNil([_centralManager retrieveCentralPeerWithIdentifier:identifier]); + XCTAssertNil([self.centralManager retrieveCentralPeerWithIdentifier:identifier]); OCMExpect([centralPeerManager bleConnected]); - [_centralManager centralManager:_cbCentralManagerMock didConnectPeripheral:peripheral]; + [self.centralManager centralManager:self.cbCentralManagerMock didConnectPeripheral:peripheral]; NSError *error = [NSError errorWithDomain:@"test" code:1 userInfo:nil]; OCMExpect([centralPeerManager bleDisconnectedWithError:error]); peripheralMockState = CBPeripheralStateDisconnected; - [_centralManager centralManager:_cbCentralManagerMock - didDisconnectPeripheral:peripheral - error:error]; - [_centralManager centralPeerManagerDidDisconnect:centralPeerManager]; + [self.centralManager centralManager:self.cbCentralManagerMock + didDisconnectPeripheral:peripheral + error:error]; + [self.centralManager centralPeerManagerDidDisconnect:centralPeerManager]; + // Retrieve a second, different peer. NSUUID *identifier2 = [NSUUID UUID]; CBPeripheralState peripheralState2 = CBPeripheralStateConnected; - CBPeripheral *peripheral2 = - [self prepareCBPeripheralWithIdentifier:identifier2 peripheralState:&peripheralState2]; + CBPeripheral *peripheral2 = [self prepareCBPeripheralWithIdentifier:identifier2 + peripheralState:&peripheralState2]; GNSCentralPeerManager *centralPeerManager2 = [self retrieveCentralPeerWithPeripheral:peripheral2]; XCTAssertNotNil(centralPeerManager2); XCTAssertNotEqual(centralPeerManager, centralPeerManager2); } -- (void)testRetrieveCentralPeerAndConnectFailToConnect { - _cbCentralManagerState = CBCentralManagerStatePoweredOn; +- (void)testRetrieveCentralPeerAndFailToConnect { + self.cbCentralManagerState = CBManagerStatePoweredOn; NSUUID *identifier = [NSUUID UUID]; CBPeripheralState peripheralMockState = CBPeripheralStateConnected; - CBPeripheral *peripheral = - [self prepareCBPeripheralWithIdentifier:identifier peripheralState:&peripheralMockState]; + CBPeripheral *peripheral = [self prepareCBPeripheralWithIdentifier:identifier + peripheralState:&peripheralMockState]; GNSCentralPeerManager *centralPeerManager = [self retrieveCentralPeerWithPeripheral:peripheral]; OCMExpect([centralPeerManager bleConnected]); - [_centralManager centralManager:_cbCentralManagerMock didConnectPeripheral:peripheral]; + [self.centralManager centralManager:self.cbCentralManagerMock didConnectPeripheral:peripheral]; + NSError *error = [NSError errorWithDomain:@"test" code:1 userInfo:nil]; OCMExpect([centralPeerManager bleDisconnectedWithError:error]); peripheralMockState = CBPeripheralStateDisconnected; - [_centralManager centralManager:_cbCentralManagerMock - didFailToConnectPeripheral:peripheral - error:error]; + [self.centralManager centralManager:self.cbCentralManagerMock + didFailToConnectPeripheral:peripheral + error:error]; } -@end +@end \ No newline at end of file