|
11 | 11 | #import "GMAError.h" |
12 | 12 | #import "GMATestCommonConstants.h" |
13 | 13 | #import "UADSRepeatableTimerMock.h" |
| 14 | +#import "UADSTimerFactoryMock.h" |
| 15 | +#import "XCTestCase+Convenience.h" |
14 | 16 |
|
15 | 17 | @interface GMAInterstitialAdDelegateProxyTests : XCTestCase |
16 | 18 | @property (nonatomic, strong) USRVWebViewAppMock *webAppMock; |
17 | | -@property (nonatomic, strong) UADSRepeatableTimerMock *timerMock; |
| 19 | +@property (nonatomic, strong) UADSTimerFactoryMock *timerFactoryMock; |
18 | 20 | @end |
19 | 21 |
|
20 | 22 | @implementation GMAInterstitialAdDelegateProxyTests |
21 | 23 |
|
22 | 24 | - (void)setUp { |
23 | | - _timerMock = [UADSRepeatableTimerMock new]; |
| 25 | + _timerFactoryMock = [UADSTimerFactoryMock new]; |
24 | 26 | _webAppMock = [USRVWebViewAppMock new]; |
25 | 27 | [USRVWebViewApp setCurrentApp: _webAppMock]; |
26 | 28 | } |
@@ -148,7 +150,7 @@ - (void)test_no_quarlites_events_after_did_dismiss { |
148 | 150 | [delegateToTest interstitialWillPresentScreen: self.fakeAdObject]; |
149 | 151 | [self simulateQuartilesPlayed: 2]; |
150 | 152 | [delegateToTest interstitialDidDismissScreen: self.fakeAdObject]; |
151 | | - XCTAssertTrue(_timerMock.invalidateCalled); |
| 153 | + XCTAssertTrue(self.timerFactoryMock.lastTimerMock.invalidateCalled); |
152 | 154 | GMAAdMetaData *meta = self.defaultMeta; |
153 | 155 | NSArray<GMAWebViewEvent *> *expectedEvents = @[ |
154 | 156 | [GMAWebViewEvent newAdStartedWithMeta: meta], |
@@ -260,7 +262,7 @@ - (void)test_did_fail_sends_id_error_and_code { |
260 | 262 | } |
261 | 263 |
|
262 | 264 | - (void)simulateQuartilesPlayed: (NSInteger)count { |
263 | | - [_timerMock fire: count]; |
| 265 | + [self.timerFactoryMock.lastTimerMock fire: count]; |
264 | 266 | } |
265 | 267 |
|
266 | 268 | - (void)validateExpectedEvents: (NSArray<GMAWebViewEvent *> *)expectedEvents { |
@@ -313,7 +315,59 @@ - (GMAAdMetaData *)defaultMeta { |
313 | 315 |
|
314 | 316 | return [GMADelegatesBaseFactory newWithEventSender: eventSender |
315 | 317 | errorHandler: errorHandler |
316 | | - timer: _timerMock]; |
| 318 | + timerFactory: self.timerFactoryMock]; |
| 319 | +} |
| 320 | + |
| 321 | +- (void)test_factory_not_crash_if_ad_not_started_before_background { |
| 322 | + id<UADSWebViewEventSender>eventSender = [UADSWebViewEventSenderBase new]; |
| 323 | + id<UADSErrorHandler>errorHandler = [UADSWebViewErrorHandler newWithEventSender: eventSender]; |
| 324 | + |
| 325 | + [GMADelegatesBaseFactory newWithEventSender: eventSender |
| 326 | + errorHandler: errorHandler]; |
| 327 | + |
| 328 | + [self postDidEnterBackground]; |
| 329 | + [self postDidBecomeActive]; |
| 330 | +} |
| 331 | + |
| 332 | +- (void)test_interstitial_delegate_not_crash_if_ad_not_started_before_background { |
| 333 | + id<UADSWebViewEventSender>eventSender = [UADSWebViewEventSenderBase new]; |
| 334 | + id<UADSErrorHandler>errorHandler = [UADSWebViewErrorHandler newWithEventSender: eventSender]; |
| 335 | + |
| 336 | + GMADelegatesBaseFactory *factory = [GMADelegatesBaseFactory newWithEventSender: eventSender |
| 337 | + errorHandler: errorHandler]; |
| 338 | + |
| 339 | + [factory interstitialDelegate: self.defaultMeta |
| 340 | + andCompletion: [UADSAnyCompletion new]]; |
| 341 | + |
| 342 | + [self postDidEnterBackground]; |
| 343 | + [self postDidBecomeActive]; |
| 344 | +} |
| 345 | + |
| 346 | +- (void)test_no_quartile_events_sent_after_dismiss_ad { |
| 347 | + id<UADSWebViewEventSender>eventSender = [UADSWebViewEventSenderBase new]; |
| 348 | + id<UADSErrorHandler>errorHandler = [UADSWebViewErrorHandler newWithEventSender: eventSender]; |
| 349 | + |
| 350 | + GMADelegatesBaseFactory *factory = [GMADelegatesBaseFactory newWithEventSender: eventSender |
| 351 | + errorHandler: errorHandler]; |
| 352 | + |
| 353 | + @autoreleasepool { |
| 354 | + GMAInterstitialAdDelegateProxy *delegateToTest = [factory interstitialDelegate: self.defaultMeta |
| 355 | + andCompletion: [UADSAnyCompletion new]]; |
| 356 | + |
| 357 | + [delegateToTest interstitialWillPresentScreen: self.fakeAdObject]; |
| 358 | + [delegateToTest adDidDismissFullScreenContent: self.fakeAdObject]; |
| 359 | + } |
| 360 | + [self postDidEnterBackground]; |
| 361 | + [self postDidBecomeActive]; |
| 362 | + GMAAdMetaData *meta = self.defaultMeta; |
| 363 | + NSArray<GMAWebViewEvent *> *expectedEvents = @[ |
| 364 | + [GMAWebViewEvent newAdStartedWithMeta: meta], |
| 365 | + [GMAWebViewEvent newAdSkippedWithMeta: meta], |
| 366 | + [GMAWebViewEvent newAdClosedWithMeta: meta], |
| 367 | + ]; |
| 368 | + |
| 369 | + [self waitForTimeInterval: 0.5]; |
| 370 | + [self validateExpectedEvents: expectedEvents]; |
317 | 371 | } |
318 | 372 |
|
319 | 373 | @end |
0 commit comments