diff options
author | NicoleYarroch <nicole@livio.io> | 2020-06-23 09:52:27 -0400 |
---|---|---|
committer | NicoleYarroch <nicole@livio.io> | 2020-06-23 09:52:27 -0400 |
commit | 2f5db51750091549ddbb439bed368fac91e4bb1e (patch) | |
tree | 99a751b03b70afb165f2d5ef24510daef8a4c93b | |
parent | 05e20b47a7bb1350022eda4c1df1e1abb0faa7de (diff) | |
download | sdl_ios-2f5db51750091549ddbb439bed368fac91e4bb1e.tar.gz |
Added subscribe button selector tests
Signed-off-by: NicoleYarroch <nicole@livio.io>
-rw-r--r-- | SmartDeviceLink/SDLSubscribeButtonManager.m | 13 | ||||
-rw-r--r-- | SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m | 175 |
2 files changed, 170 insertions, 18 deletions
diff --git a/SmartDeviceLink/SDLSubscribeButtonManager.m b/SmartDeviceLink/SDLSubscribeButtonManager.m index c1cd581a6..c2ab8a002 100644 --- a/SmartDeviceLink/SDLSubscribeButtonManager.m +++ b/SmartDeviceLink/SDLSubscribeButtonManager.m @@ -110,14 +110,13 @@ NS_ASSUME_NONNULL_BEGIN SDLUnsubscribeButton *unsubscribeButton = [[SDLUnsubscribeButton alloc] initWithButtonName:buttonName]; __weak typeof(self) weakSelf = self; [self.connectionManager sendConnectionRequest:unsubscribeButton withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { - __strong typeof(weakSelf) strongSelf = weakSelf; - SDLUnsubscribeButtonResponse *unsubscribeButtonResponse = (SDLUnsubscribeButtonResponse *)response; - if (unsubscribeButtonResponse == nil || unsubscribeButtonResponse.success.boolValue == NO) { + if (response.success.boolValue == NO) { SDLLogE(@"Attempt to unsubscribe to subscribe button named %@ failed", buttonName); return completionHandler(error); } SDLLogD(@"Successfully unsubscribed to subscribe button named %@", buttonName); + __strong typeof(weakSelf) strongSelf = weakSelf; [strongSelf sdl_removeSubscribedObserver:observer forButtonName:buttonName]; return completionHandler(error); }]; @@ -187,11 +186,17 @@ NS_ASSUME_NONNULL_BEGIN @throw [NSException sdl_invalidSelectorExceptionWithSelector:observer.selector]; } + NSUInteger numberOfParametersInSelector = [NSStringFromSelector(observer.selector) componentsSeparatedByString:@":"].count - 1; + + // If a selector has 0, 1, 2, or 3 parameters and only a button event has occured, do not notify the observer of the button event. + if (buttonEvent != nil && numberOfParametersInSelector <= 3) { + return; + } + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[(NSObject *)observer.observer methodSignatureForSelector:observer.selector]]; [invocation setSelector:observer.selector]; [invocation setTarget:observer.observer]; - NSUInteger numberOfParametersInSelector = [NSStringFromSelector(observer.selector) componentsSeparatedByString:@":"].count - 1; if (numberOfParametersInSelector >= 1) { [invocation setArgument:&buttonName atIndex:2]; } diff --git a/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m b/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m index 446f8f66d..87f6b78a9 100644 --- a/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m +++ b/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m @@ -214,13 +214,30 @@ describe(@"subscribe button manager", ^{ __block SDLOnButtonEvent *testHandler2OnButtonEvent = nil; __block TestSubscribeButtonObserver *testObserver1 = nil; - __block SEL testSelector1 = @selector(buttonPressEvent); + __block SEL testSelector1 = nil; __block TestSubscribeButtonObserver *testObserver2 = nil; - __block SEL testSelector2 = @selector(buttonPressEvent); + __block SEL testSelector2 = nil; + + __block SDLOnButtonPress *testButtonPress = nil; + __block SDLOnButtonEvent *testButtonEvent = nil; + __block SDLRPCNotificationNotification *buttonEventNotification = nil; + __block SDLRPCNotificationNotification *buttonPressNotification = nil; beforeEach(^{ testButtonName = SDLButtonNameTuneUp; + + testButtonPress = [[SDLOnButtonPress alloc] init]; + testButtonPress.buttonPressMode = SDLButtonPressModeLong; + testButtonPress.buttonName = testButtonName; + + testButtonEvent = [[SDLOnButtonEvent alloc] init]; + testButtonEvent.buttonEventMode = SDLButtonEventModeButtonUp; + testButtonEvent.buttonName = testButtonName; + + buttonEventNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveButtonEventNotification object:nil rpcNotification:testButtonEvent]; + buttonPressNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveButtonPressNotification object:nil rpcNotification:testButtonPress]; + testUpdateHandler1 = ^(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error) { testHandler1Called = YES; testHandle1Error = error; @@ -247,12 +264,7 @@ describe(@"subscribe button manager", ^{ [testManager subscribeButton:testButtonName withObserver:testObserver2 selector:testSelector2]; }); - it(@"should notify all observers when a button press notification is recieved", ^{ - SDLOnButtonEvent *testButtonEvent = [[SDLOnButtonEvent alloc] init]; - testButtonEvent.buttonEventMode = SDLButtonEventModeButtonUp; - testButtonEvent.buttonName = testButtonName; - - SDLRPCNotificationNotification *buttonEventNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveButtonEventNotification object:nil rpcNotification:testButtonEvent]; + it(@"should notify all observers when a button event notification is recieved", ^{ [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification]; expect(testHandler1Called).toEventually(beTrue()); @@ -276,12 +288,7 @@ describe(@"subscribe button manager", ^{ expect(testObserver2.buttonEventsReceived[0]).to(equal(testButtonEvent)); }); - it(@"should notify all observers when a button event notification is recieved", ^{ - SDLOnButtonPress *testButtonPress = [[SDLOnButtonPress alloc] init]; - testButtonPress.buttonPressMode = SDLButtonPressModeLong; - testButtonPress.buttonName = testButtonName; - - SDLRPCNotificationNotification *buttonPressNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveButtonPressNotification object:nil rpcNotification:testButtonPress]; + it(@"should notify all observers when a button press notification is recieved", ^{ [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification]; expect(testHandler1Called).toEventually(beTrue()); @@ -304,6 +311,146 @@ describe(@"subscribe button manager", ^{ expect(testObserver2.buttonPressesReceived[0]).to(equal(testButtonPress)); expect(testObserver2.buttonEventsReceived).to(beEmpty()); }); + + it(@"should notify the observer of a button press when the selector has no parameters", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEvent); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification]; + + expect(testObserver.selectorCalledCount).to(equal(1)); + expect(testObserver.buttonNamesReceived).to(beEmpty()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived).to(beEmpty()); + expect(testObserver.buttonEventsReceived).to(beEmpty()); + }); + + it(@"should notify the observer of a button press when the selector has one parameter", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEventWithButtonName:); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification]; + + expect(testObserver.selectorCalledCount).to(equal(1)); + expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived).to(beEmpty()); + expect(testObserver.buttonEventsReceived).to(beEmpty()); + }); + + it(@"should notify the observer of a button press when the selector has two parameters", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEventWithButtonName:error:); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification]; + + expect(testObserver.selectorCalledCount).to(equal(1)); + expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived).to(beEmpty()); + expect(testObserver.buttonEventsReceived).to(beEmpty()); + }); + + it(@"should notify the observer of a button press when the selector has three parameters", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification]; + + expect(testObserver.selectorCalledCount).to(equal(1)); + expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived[0]).to(equal(testButtonPress)); + expect(testObserver.buttonEventsReceived).to(beEmpty()); + }); + + it(@"should notify the observer of a button press when the selector has four parameters", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:buttonEvent:); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification]; + + expect(testObserver.selectorCalledCount).to(equal(1)); + expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived[0]).to(equal(testButtonPress)); + expect(testObserver.buttonEventsReceived).to(beEmpty()); + }); + + it(@"should not notify the observer of a button event when the selector has no parameters", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEvent); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification]; + + expect(testObserver.selectorCalledCount).to(equal(0)); + expect(testObserver.buttonNamesReceived).to(beEmpty()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived).to(beEmpty()); + expect(testObserver.buttonEventsReceived).to(beEmpty()); + }); + + it(@"should not notify the observer of a button event when the selector has one parameter", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEventWithButtonName:); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification]; + + expect(testObserver.selectorCalledCount).to(equal(0)); + expect(testObserver.buttonNamesReceived).to(beEmpty()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived).to(beEmpty()); + expect(testObserver.buttonEventsReceived).to(beEmpty()); + }); + + it(@"should not notify the observer of a button event when the selector has two parameters", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEventWithButtonName:error:); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification]; + + expect(testObserver.selectorCalledCount).to(equal(0)); + expect(testObserver.buttonNamesReceived).to(beEmpty()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived).to(beEmpty()); + expect(testObserver.buttonEventsReceived).to(beEmpty()); + }); + + it(@"should not notify the observer of a button event when the selector has three parameters", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification]; + + expect(testObserver.selectorCalledCount).to(equal(0)); + expect(testObserver.buttonNamesReceived).to(beEmpty()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived).to(beEmpty()); + expect(testObserver.buttonEventsReceived).to(beEmpty()); + }); + + it(@"should notify the observer of a button event when the selector has four parameters", ^{ + TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init]; + SEL testSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:buttonEvent:); + [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector]; + + [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification]; + + expect(testObserver.selectorCalledCount).to(equal(1)); + expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue()); + expect(testObserver.buttonErrorsReceived).to(beEmpty()); + expect(testObserver.buttonPressesReceived).to(beEmpty()); + expect(testObserver.buttonEventsReceived[0]).to(equal(testButtonEvent)); + }); }); describe(@"should unsubscribe with an update handler", ^{ |