Skip to content

Commit 9a6c8c4

Browse files
committed
Add testSwizzleExistingSelectors
Add test to ensure our swizzling still calls the original methods.
1 parent 1a2b961 commit 9a6c8c4

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

iOS_SDK/OneSignalSDK/UnitTests/UIApplicationDelegateSwizzlingTests.m

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,57 @@ @interface AppDelegateForInfiniteLoopTest : UIResponder<UIApplicationDelegate>
8585
@implementation AppDelegateForInfiniteLoopTest
8686
@end
8787

88+
@interface AppDelegateForExistingSelectorsTest : UIResponder<UIApplicationDelegate> {
89+
@public NSMutableDictionary *selectorCallsDict;
90+
}
91+
@end
92+
@implementation AppDelegateForExistingSelectorsTest
93+
- (instancetype)init {
94+
self = [super init];
95+
selectorCallsDict = [NSMutableDictionary new];
96+
return self;
97+
}
98+
99+
- (void)application:(UIApplication *)application
100+
didReceiveRemoteNotification:(NSDictionary *)userInfo
101+
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
102+
SEL thisSelector = @selector(application:didReceiveRemoteNotification:fetchCompletionHandler:);
103+
[selectorCallsDict
104+
setObject:@(true)
105+
forKey:NSStringFromSelector(thisSelector)
106+
];
107+
}
108+
109+
- (void)application:(UIApplication *)application
110+
didFailToRegisterForRemoteNotificationsWithError:(NSError*)err
111+
{
112+
SEL thisSelector = @selector(application:didFailToRegisterForRemoteNotificationsWithError:);
113+
[selectorCallsDict
114+
setObject:@(true)
115+
forKey:NSStringFromSelector(thisSelector)
116+
];
117+
}
118+
119+
- (void)application:(UIApplication *)application
120+
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)data
121+
{
122+
SEL thisSelector = @selector(application:didRegisterForRemoteNotificationsWithDeviceToken:);
123+
[selectorCallsDict
124+
setObject:@(true)
125+
forKey:NSStringFromSelector(thisSelector)
126+
];
127+
}
128+
129+
- (void)applicationWillTerminate:(UIApplication *)application
130+
{
131+
SEL thisSelector = @selector(applicationWillTerminate:);
132+
[selectorCallsDict
133+
setObject:@(true)
134+
forKey:NSStringFromSelector(thisSelector)
135+
];
136+
}
137+
@end
138+
88139
static id<UIApplicationDelegate> orignalDelegate;
89140

90141
@interface UIApplicationDelegateSwizzlingTest : XCTestCase
@@ -187,4 +238,46 @@ - (void)testDoubleSwizzleInfiniteLoop {
187238
// 4. Call something to confirm we don't get stuck in an infinite call loop
188239
[localOrignalDelegate applicationWillTerminate:UIApplication.sharedApplication];
189240
}
241+
242+
- (void)testSwizzleExistingSelectors {
243+
AppDelegateForExistingSelectorsTest* myAppDelegate = [AppDelegateForExistingSelectorsTest new];
244+
UIApplication.sharedApplication.delegate = myAppDelegate;
245+
id<UIApplicationDelegate> appDelegate = UIApplication.sharedApplication.delegate;
246+
247+
[appDelegate
248+
application:UIApplication.sharedApplication
249+
didReceiveRemoteNotification:@{}
250+
fetchCompletionHandler:^(UIBackgroundFetchResult result){}];
251+
XCTAssertTrue([myAppDelegate->selectorCallsDict
252+
objectForKey:NSStringFromSelector(
253+
@selector(application:didReceiveRemoteNotification:fetchCompletionHandler:)
254+
)
255+
]);
256+
257+
[appDelegate
258+
application:UIApplication.sharedApplication
259+
didFailToRegisterForRemoteNotificationsWithError:[NSError new]];
260+
XCTAssertTrue([myAppDelegate->selectorCallsDict
261+
objectForKey:NSStringFromSelector(
262+
@selector(application:didFailToRegisterForRemoteNotificationsWithError:)
263+
)
264+
]);
265+
266+
[appDelegate
267+
application:UIApplication.sharedApplication
268+
didRegisterForRemoteNotificationsWithDeviceToken:[NSData new]];
269+
XCTAssertTrue([myAppDelegate->selectorCallsDict
270+
objectForKey:NSStringFromSelector(
271+
@selector(application:didRegisterForRemoteNotificationsWithDeviceToken:)
272+
)
273+
]);
274+
275+
[appDelegate
276+
applicationWillTerminate:UIApplication.sharedApplication];
277+
XCTAssertTrue([myAppDelegate->selectorCallsDict
278+
objectForKey:NSStringFromSelector(
279+
@selector(applicationWillTerminate:)
280+
)
281+
]);
282+
}
190283
@end

0 commit comments

Comments
 (0)