You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/SignalServiceKit/tests/Contacts/PhoneNumberTest.m

134 lines
6.1 KiB
Objective-C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import <XCTest/XCTest.h>
#import "PhoneNumber.h"
@interface PhoneNumberTest : XCTestCase
@end
#pragma mark -
@implementation PhoneNumberTest
-(void)testE164 {
XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"+1 (902) 555-5555" fromRegion:@"US"] toE164]);
XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"1 (902) 555-5555" fromRegion:@"US"] toE164]);
XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"1-902-555-5555" fromRegion:@"US"] toE164]);
XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"1-902--5555" fromRegion:@"US"] toE164]);
// Phone numbers missing a calling code.
XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"9025555555" fromRegion:@"US"] toE164]);
// Phone numbers with a calling code but without a plus
XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"19025555555" fromRegion:@"US"] toE164]);
// Empty input.
XCTAssertEqualObjects(nil, [[PhoneNumber tryParsePhoneNumberFromText:@"" fromRegion:@"US"] toE164]);
}
- (void)testTryParsePhoneNumberFromUserSpecifiedTextAssumesLocalRegion {
PhoneNumber *actual = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"3235551234"];
XCTAssertEqualObjects(@"+13235551234", [actual toE164]);
}
- (void)testTryParsePhoneNumberFromUserSpecifiedTextWithExplicitRegionCode {
PhoneNumber *actual = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"+33 1 70 39 38 00"];
XCTAssertEqualObjects(@"+33170393800", [actual toE164]);
}
- (void)testTryParsePhoneNumberFromUserSpecifiedTextWithoutPlus {
PhoneNumber *actual = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"33 1 70 39 38 00"];
// This might not be desired, but documents existing behavior.
// You *must* include a plus when dialing outside of your locale.
XCTAssertEqualObjects(@"+133170393800", [actual toE164]);
}
- (void)testTryParsePhoneNumberFromUserSpecifiedTextRemovesAnyFormatting {
PhoneNumber *actual = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"323 555 1234"];
XCTAssertEqualObjects(@"+13235551234", [actual toE164]);
actual = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"323-555-1234"];
XCTAssertEqualObjects(@"+13235551234", [actual toE164]);
actual = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"323.555.1234"];
XCTAssertEqualObjects(@"+13235551234", [actual toE164]);
actual = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"1-323-555-1234"];
XCTAssertEqualObjects(@"+13235551234", [actual toE164]);
}
- (NSArray<NSString *> *)unpackTryParsePhoneNumbersFromsUserSpecifiedText:(NSString *)text
clientPhoneNumber:(NSString *)clientPhoneNumber
{
NSArray<PhoneNumber *> *phoneNumbers =
[PhoneNumber tryParsePhoneNumbersFromsUserSpecifiedText:text clientPhoneNumber:clientPhoneNumber];
NSMutableArray<NSString *> *result = [NSMutableArray new];
for (PhoneNumber *phoneNumber in phoneNumbers) {
[result addObject:phoneNumber.toE164];
}
return result;
}
- (void)testTryParsePhoneNumbersFromsUserSpecifiedText_SimpleUSA
{
NSArray<NSString *> *parsed =
[self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"323 555 1234" clientPhoneNumber:@"+13213214321"];
XCTAssertTrue(parsed.count >= 1);
XCTAssertTrue([parsed containsObject:@"+13235551234"]);
XCTAssertEqualObjects(parsed.firstObject, @"+13235551234");
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"323-555-1234" clientPhoneNumber:@"+13213214321"];
XCTAssertTrue(parsed.count >= 1);
XCTAssertTrue([parsed containsObject:@"+13235551234"]);
XCTAssertEqualObjects(parsed.firstObject, @"+13235551234");
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"323.555.1234" clientPhoneNumber:@"+13213214321"];
XCTAssertTrue(parsed.count >= 1);
XCTAssertTrue([parsed containsObject:@"+13235551234"]);
XCTAssertEqualObjects(parsed.firstObject, @"+13235551234");
parsed =
[self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"1-323-555-1234" clientPhoneNumber:@"+13213214321"];
XCTAssertTrue(parsed.count >= 1);
XCTAssertTrue([parsed containsObject:@"+13235551234"]);
XCTAssertEqualObjects(parsed.firstObject, @"+13235551234");
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"+13235551234" clientPhoneNumber:@"+13213214321"];
XCTAssertTrue(parsed.count >= 1);
XCTAssertTrue([parsed containsObject:@"+13235551234"]);
XCTAssertEqualObjects(parsed.firstObject, @"+13235551234");
}
- (void)testTryParsePhoneNumbersFromsUserSpecifiedText_Mexico1
{
NSArray<NSString *> *parsed =
[self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"528341639157" clientPhoneNumber:@"+528341639144"];
XCTAssertTrue(parsed.count >= 1);
XCTAssertTrue([parsed containsObject:@"+528341639157"]);
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"8341639157" clientPhoneNumber:@"+528341639144"];
XCTAssertTrue(parsed.count >= 1);
XCTAssertTrue([parsed containsObject:@"+528341639157"]);
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"341639157" clientPhoneNumber:@"+528341639144"];
XCTAssertTrue(parsed.count >= 1);
// The parsing logic should try adding Mexico's national prefix for cell numbers "1"
// after the country code.
XCTAssertTrue([parsed containsObject:@"+52341639157"]);
XCTAssertTrue([parsed containsObject:@"+521341639157"]);
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"528341639157" clientPhoneNumber:@"+13213214321"];
XCTAssertTrue(parsed.count >= 1);
XCTAssertTrue([parsed containsObject:@"+528341639157"]);
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"13235551234" clientPhoneNumber:@"+528341639144"];
XCTAssertTrue(parsed.count >= 1);
XCTAssertTrue([parsed containsObject:@"+13235551234"]);
}
@end