diff --git a/SignalServiceKit/src/Contacts/PhoneNumber.m b/SignalServiceKit/src/Contacts/PhoneNumber.m index 12de6be57..db530e2de 100644 --- a/SignalServiceKit/src/Contacts/PhoneNumber.m +++ b/SignalServiceKit/src/Contacts/PhoneNumber.m @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // #import "PhoneNumber.h" @@ -203,8 +203,10 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN static NSString *result = nil; static NSString *cachedClientPhoneNumber = nil; static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // clientPhoneNumber is the local user's phone number and should never change. + + // clientPhoneNumber is the local user's phone number and should never change. + static void (^updateCachedClientPhoneNumber)(void); + updateCachedClientPhoneNumber = ^(void) { NSNumber *localCallingCode = [[PhoneNumber phoneNumberFromE164:clientPhoneNumber] getCountryCode]; if (localCallingCode != nil) { NSString *localCallingCodePrefix = [NSString stringWithFormat:@"+%@", localCallingCode]; @@ -214,11 +216,30 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN NBMetadataHelper *helper = [[NBMetadataHelper alloc] init]; NBPhoneMetaData *localNumberRegionMetadata = [helper getMetadataForRegion:localCountryCode]; result = localNumberRegionMetadata.nationalPrefixTransformRule; + } else { + result = nil; } } cachedClientPhoneNumber = [clientPhoneNumber copy]; + }; + +#ifdef DEBUG + // For performance, we want to cahce this result, but it breaks tests since local number + // can change. + if (CurrentAppContext().isRunningTests) { + updateCachedClientPhoneNumber(); + } else { + dispatch_once(&onceToken, ^{ + updateCachedClientPhoneNumber(); + }); + } +#else + dispatch_once(&onceToken, ^{ + updateCachedClientPhoneNumber(); }); OWSAssertDebug([cachedClientPhoneNumber isEqualToString:clientPhoneNumber]); +#endif + return result; } diff --git a/SignalServiceKit/tests/Contacts/PhoneNumberTest.m b/SignalServiceKit/tests/Contacts/PhoneNumberTest.m index 360432d72..35e0ae29f 100644 --- a/SignalServiceKit/tests/Contacts/PhoneNumberTest.m +++ b/SignalServiceKit/tests/Contacts/PhoneNumberTest.m @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // #import "PhoneNumber.h" @@ -13,13 +13,10 @@ @implementation PhoneNumberTest -#ifdef BROKEN_TESTS - -(void)testE164 { XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"+1 (902) 555-5555"] toE164]); XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"1 (902) 555-5555"] toE164]); XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"1-902-555-5555"] toE164]); - XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"1-902-555-5555"] toE164]); // Phone numbers missing a calling code. XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"9025555555"] toE164]); @@ -132,6 +129,4 @@ XCTAssertTrue([parsed containsObject:@"+13235551234"]); } -#endif - @end