summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicoleYarroch <nicole@livio.io>2020-06-23 09:52:27 -0400
committerNicoleYarroch <nicole@livio.io>2020-06-23 09:52:27 -0400
commit2f5db51750091549ddbb439bed368fac91e4bb1e (patch)
tree99a751b03b70afb165f2d5ef24510daef8a4c93b
parent05e20b47a7bb1350022eda4c1df1e1abb0faa7de (diff)
downloadsdl_ios-2f5db51750091549ddbb439bed368fac91e4bb1e.tar.gz
Added subscribe button selector tests
Signed-off-by: NicoleYarroch <nicole@livio.io>
-rw-r--r--SmartDeviceLink/SDLSubscribeButtonManager.m13
-rw-r--r--SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m175
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", ^{