diff options
author | NicoleYarroch <nicole@livio.io> | 2018-04-05 15:32:35 -0400 |
---|---|---|
committer | NicoleYarroch <nicole@livio.io> | 2018-04-05 15:32:35 -0400 |
commit | 195c001c0bda653f1d145b1c84c3299a5ca2fcd9 (patch) | |
tree | ba09ea17b32422594bf533c444d3e6a7810511bd | |
parent | 6427905fdacd576b87352f576dd290afc5ccec43 (diff) | |
download | sdl_ios-195c001c0bda653f1d145b1c84c3299a5ca2fcd9.tar.gz |
System capability manager now observes SDLDidReceiveGetSystemCapabilitiesResponse
-rw-r--r-- | SmartDeviceLink/SDLSystemCapabilityManager.m | 45 | ||||
-rw-r--r-- | SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m | 59 |
2 files changed, 75 insertions, 29 deletions
diff --git a/SmartDeviceLink/SDLSystemCapabilityManager.m b/SmartDeviceLink/SDLSystemCapabilityManager.m index bdd57c488..f8782651d 100644 --- a/SmartDeviceLink/SDLSystemCapabilityManager.m +++ b/SmartDeviceLink/SDLSystemCapabilityManager.m @@ -55,7 +55,7 @@ NS_ASSUME_NONNULL_BEGIN } _connectionManager = manager; - [self sdl_registerForNotifications]; + [self sdl_registerForNotifications]; return self; } @@ -66,10 +66,12 @@ NS_ASSUME_NONNULL_BEGIN -(void)sdl_registerForNotifications { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_registerResponse:) name:SDLDidReceiveRegisterAppInterfaceResponse object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_displayLayoutResponse:) name:SDLDidReceiveSetDisplayLayoutResponse object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_systemCapabilityResponse:) name:SDLDidReceiveGetSystemCapabilitiesResponse object:nil]; } - (void)sdl_registerResponse:(SDLRPCResponseNotification *)notification { SDLRegisterAppInterfaceResponse *response = (SDLRegisterAppInterfaceResponse *)notification.response; + if (!response.success) { return; } self.displayCapabilities = response.displayCapabilities; self.hmiCapabilities = response.hmiCapabilities; @@ -86,6 +88,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)sdl_displayLayoutResponse:(SDLRPCResponseNotification *)notification { SDLSetDisplayLayoutResponse *response = (SDLSetDisplayLayoutResponse *)notification.response; + if (!response.success) { return; } self.displayCapabilities = response.displayCapabilities; self.buttonCapabilities = response.buttonCapabilities; @@ -93,6 +96,13 @@ NS_ASSUME_NONNULL_BEGIN self.presetBankCapabilities = response.presetBankCapabilities; } +- (void)sdl_systemCapabilityResponse:(SDLRPCResponseNotification *)notification { + SDLGetSystemCapabilityResponse *response = (SDLGetSystemCapabilityResponse *)notification.response; + if (!response.success) { return; } + + SDLSystemCapability *systemCapabilityResponse = ((SDLGetSystemCapabilityResponse *)response).systemCapability; + [self sdl_saveSystemCapabilityResponse:systemCapabilityResponse]; +} #pragma mark - Capability Request @@ -100,29 +110,32 @@ NS_ASSUME_NONNULL_BEGIN SDLGetSystemCapability *getSystemCapability = [[SDLGetSystemCapability alloc] initWithType:type]; [self.connectionManager sendConnectionRequest:getSystemCapability withResponseHandler:^(__kindof SDLRPCRequest *request, __kindof SDLRPCResponse *response, NSError *error) { if (!response.success.boolValue || [response isMemberOfClass:SDLGenericResponse.class]) { - SDLLogW(@"%@ system capability response failed: %@", type, error); + SDLLogW(@"Get System Capability request for %@ failed: %@", type, error); return handler(error, self); } SDLSystemCapability *systemCapabilityResponse = ((SDLGetSystemCapabilityResponse *)response).systemCapability; - SDLSystemCapabilityType systemCapabilityType = systemCapabilityResponse.systemCapabilityType; - - if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypePhoneCall]) { - self.phoneCapability = systemCapabilityResponse.phoneCapability; - } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeNavigation]) { - self.navigationCapability = systemCapabilityResponse.navigationCapability; - } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeRemoteControl]) { - self.remoteControlCapability = systemCapabilityResponse.remoteControlCapability; - } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeVideoStreaming]) { - self.videoStreamingCapability = systemCapabilityResponse.videoStreamingCapability; - } else { - SDLLogW(@"Received response for unknown System Capability Type: %@", systemCapabilityType); - } - + [self sdl_saveSystemCapabilityResponse:systemCapabilityResponse]; handler(nil, self); }]; } +- (void)sdl_saveSystemCapabilityResponse:(SDLSystemCapability *)systemCapabilityResponse { + SDLSystemCapabilityType systemCapabilityType = systemCapabilityResponse.systemCapabilityType; + + if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypePhoneCall]) { + self.phoneCapability = systemCapabilityResponse.phoneCapability; + } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeNavigation]) { + self.navigationCapability = systemCapabilityResponse.navigationCapability; + } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeRemoteControl]) { + self.remoteControlCapability = systemCapabilityResponse.remoteControlCapability; + } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeVideoStreaming]) { + self.videoStreamingCapability = systemCapabilityResponse.videoStreamingCapability; + } else { + SDLLogW(@"Received response for unknown System Capability Type: %@", systemCapabilityType); + } +} + @end NS_ASSUME_NONNULL_END diff --git a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m index c65a3c0e1..bc5413e94 100644 --- a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m +++ b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m @@ -69,10 +69,15 @@ describe(@"System capability manager", ^{ context(@"When notified of a register app interface response", ^{ __block SDLRegisterAppInterfaceResponse *testRegisterAppInterfaceResponse = nil; - it(@"should not save any capabilities if all the capabilities in the RAI response are nil", ^{ + + beforeEach(^{ testRegisterAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init]; }); + it(@"should not save any capabilities the request fails", ^{ + testRegisterAppInterfaceResponse.success = @NO; + }); + it(@"should should save the correct capabilities if all capabilities in the RAI response are valid", ^{ testDisplayCapabilities = [[SDLDisplayCapabilities alloc] init]; testDisplayCapabilities.graphicSupported = @NO; @@ -111,7 +116,7 @@ describe(@"System capability manager", ^{ testAudioPassThruCapabilities = @[audioPassThruCapability]; testPCMStreamCapabilities = audioPassThruCapability; - testRegisterAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init]; + testRegisterAppInterfaceResponse.success = @YES; testRegisterAppInterfaceResponse.displayCapabilities = testDisplayCapabilities; testRegisterAppInterfaceResponse.hmiCapabilities = testHMICapabilities; testRegisterAppInterfaceResponse.softButtonCapabilities = testSoftButtonCapabilities; @@ -136,12 +141,12 @@ describe(@"System capability manager", ^{ context(@"When notified of a set display layout response", ^ { __block SDLSetDisplayLayoutResponse *testSetDisplayLayoutResponse = nil; - it(@"should not save any capabilities if all the capabilities in the set display layout response are nil", ^{ + beforeEach(^{ testSetDisplayLayoutResponse = [[SDLSetDisplayLayoutResponse alloc] init]; - testSetDisplayLayoutResponse.displayCapabilities = nil; - testSetDisplayLayoutResponse.buttonCapabilities = nil; - testSetDisplayLayoutResponse.softButtonCapabilities = nil; - testSetDisplayLayoutResponse.presetBankCapabilities = nil; + }); + + it(@"should not save any capabilities if all the capabilities in the set display layout response are nil", ^{ + testSetDisplayLayoutResponse.success = @NO; }); it(@"should should save the correct capabilities if all capabilities in the set display layout response are valid", ^{ @@ -165,7 +170,7 @@ describe(@"System capability manager", ^{ testPresetBankCapabilities = [[SDLPresetBankCapabilities alloc] init]; testPresetBankCapabilities.onScreenPresetsAvailable = @NO; - testSetDisplayLayoutResponse = [[SDLSetDisplayLayoutResponse alloc] init]; + testSetDisplayLayoutResponse.success = @YES; testSetDisplayLayoutResponse.displayCapabilities = testDisplayCapabilities; testSetDisplayLayoutResponse.buttonCapabilities = testButtonCapabilities; testSetDisplayLayoutResponse.softButtonCapabilities = testSoftButtonCapabilities; @@ -197,7 +202,7 @@ describe(@"System capability manager", ^{ testGetSystemCapabilityResponse.success = @YES; testGetSystemCapabilityResponse.systemCapability = [[SDLSystemCapability alloc] init]; testGetSystemCapabilityResponse.systemCapability.phoneCapability = testPhoneCapability; - testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = SDLSystemCapabilityTypePhoneCall; + testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = systemCapabilityType; }); it(@"should save the navigation capabilities", ^{ @@ -207,7 +212,7 @@ describe(@"System capability manager", ^{ testGetSystemCapabilityResponse.success = @YES; testGetSystemCapabilityResponse.systemCapability = [[SDLSystemCapability alloc] init]; testGetSystemCapabilityResponse.systemCapability.navigationCapability = testNavigationCapability; - testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = SDLSystemCapabilityTypeNavigation; + testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = systemCapabilityType; }); it(@"should save the remote control capabilities", ^{ @@ -217,7 +222,7 @@ describe(@"System capability manager", ^{ testGetSystemCapabilityResponse.success = @YES; testGetSystemCapabilityResponse.systemCapability = [[SDLSystemCapability alloc] init]; testGetSystemCapabilityResponse.systemCapability.remoteControlCapability = testRemoteControlCapability; - testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = SDLSystemCapabilityTypeRemoteControl; + testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = systemCapabilityType; }); it(@"should save the video streaming capabilities", ^{ @@ -227,7 +232,7 @@ describe(@"System capability manager", ^{ testGetSystemCapabilityResponse.success = @YES; testGetSystemCapabilityResponse.systemCapability = [[SDLSystemCapability alloc] init]; testGetSystemCapabilityResponse.systemCapability.videoStreamingCapability = testVideoStreamingCapability; - testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = SDLSystemCapabilityTypeVideoStreaming; + testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = systemCapabilityType; }); it(@"should return the error if the request is not successful", ^{ @@ -238,7 +243,7 @@ describe(@"System capability manager", ^{ testGetSystemCapabilityResponse.success = @NO; testGetSystemCapabilityResponse.systemCapability = [[SDLSystemCapability alloc] init]; testGetSystemCapabilityResponse.systemCapability.videoStreamingCapability = nil; - testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = SDLSystemCapabilityTypeVideoStreaming; + testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = systemCapabilityType; }); afterEach(^{ @@ -256,6 +261,34 @@ describe(@"System capability manager", ^{ }); }); + context(@"If a Get System Capability request is sent outside of this manager", ^{ + __block SDLGetSystemCapabilityResponse *testGetSystemCapabilityResponse = nil; + + beforeEach(^{ + testGetSystemCapabilityResponse = [[SDLGetSystemCapabilityResponse alloc] init]; + }); + + it(@"should capture and save the capability type in the manager", ^{ + testNavigationCapability = [[SDLNavigationCapability alloc] initWithSendLocation:YES waypoints:YES]; + + testGetSystemCapabilityResponse.success = @YES; + testGetSystemCapabilityResponse.systemCapability = [[SDLSystemCapability alloc] init]; + testGetSystemCapabilityResponse.systemCapability.navigationCapability = testNavigationCapability; + testGetSystemCapabilityResponse.systemCapability.systemCapabilityType = SDLSystemCapabilityTypeNavigation; + }); + + it(@"should not save any capabilities if the request failed", ^{ + testGetSystemCapabilityResponse.success = @NO; + }); + + afterEach(^{ + SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveGetSystemCapabilitiesResponse object:self rpcResponse:testGetSystemCapabilityResponse]; + + [[NSNotificationCenter defaultCenter] postNotification:notification]; + [NSThread sleepForTimeInterval:0.1]; + }); + }); + afterEach(^{ expect(testSystemCapabilityManager.displayCapabilities).to(testDisplayCapabilities != nil ? equal(testDisplayCapabilities) : beNil()); expect(testSystemCapabilityManager.hmiCapabilities).to(testHMICapabilities != nil ? equal(testHMICapabilities) : beNil()); |