@@ -370,6 +370,25 @@ - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(N
370370
371371@end
372372
373+ @interface NSLocaleOverrider : NSObject
374+ @end
375+
376+ @implementation NSLocaleOverrider
377+
378+ static NSArray * preferredLanguagesArray;
379+
380+ + (void )load {
381+ injectStaticSelector ([NSLocaleOverrider class ], @selector (overriderPreferredLanguages ), [NSLocale class ], @selector (preferredLanguages ));
382+ }
383+
384+ + (NSArray <NSString*> *) overriderPreferredLanguages {
385+ return preferredLanguagesArray;
386+ }
387+
388+ @end
389+
390+
391+
373392
374393// END - Selector Shadowing
375394
@@ -393,6 +412,8 @@ - (void)setUp {
393412
394413 lastSetCategories = nil ;
395414
415+ preferredLanguagesArray = @[@" en-US" ];
416+
396417 [OneSignalHelper lastMessageReceived: nil ];
397418 OneSignalHelper.lastMessageIdFromAction = nil ;
398419 [OneSignal setValue: nil forKeyPath: @" lastAppActiveMessageId" ];
@@ -525,7 +546,7 @@ - (void)testBasicInitTest {
525546 XCTAssertEqualObjects (lastHTTPRequset[@" notification_types" ], @7 );
526547 XCTAssertEqualObjects (lastHTTPRequset[@" device_model" ], @" x86_64" );
527548 XCTAssertEqualObjects (lastHTTPRequset[@" device_type" ], @0 );
528- XCTAssertEqualObjects (lastHTTPRequset[@" language" ], @" en" );
549+ XCTAssertEqualObjects (lastHTTPRequset[@" language" ], @" en-US " );
529550
530551 // 2nd init call should not fire another on_session call.
531552 lastHTTPRequset = nil ;
@@ -535,6 +556,13 @@ - (void)testBasicInitTest {
535556 XCTAssertEqual (networkRequestCount, 1 );
536557}
537558
559+ // Seen a few rare crash reports where [NSLocale preferredLanguages] resturns an empty array
560+ - (void )testInitWithEmptyPreferredLanguages {
561+ preferredLanguagesArray = @[];
562+ [self initOneSignal ];
563+ [self runBackgroundThreads ];
564+ }
565+
538566- (void )testInitOnSimulator {
539567 [self setCurrentNotificationPermission: false ];
540568 [self backgroundModesDisabledInXcode ];
@@ -549,7 +577,7 @@ - (void)testInitOnSimulator {
549577 XCTAssertEqualObjects (lastHTTPRequset[@" notification_types" ], @-15 );
550578 XCTAssertEqualObjects (lastHTTPRequset[@" device_model" ], @" x86_64" );
551579 XCTAssertEqualObjects (lastHTTPRequset[@" device_type" ], @0 );
552- XCTAssertEqualObjects (lastHTTPRequset[@" language" ], @" en" );
580+ XCTAssertEqualObjects (lastHTTPRequset[@" language" ], @" en-US " );
553581
554582 // 2nd init call should not fire another on_session call.
555583 lastHTTPRequset = nil ;
0 commit comments