From 478b5b247a19c9a27c8447aaf7d945395db2ec8c Mon Sep 17 00:00:00 2001 From: Thomas Guillet Date: Mon, 19 Dec 2016 16:01:10 +0100 Subject: [PATCH 1/3] Remove convoluted dependency of PhoneNumberUtil to ContactsManagerProtocol Also moved tests from Signal-iOS repository here. --- .../TSKitiOSTestApp.xcodeproj/project.pbxproj | 4 +++ src/Contacts/PhoneNumberUtil.h | 2 ++ src/Contacts/PhoneNumberUtil.m | 21 +++++++++-- src/Protocols/ContactsManagerProtocol.h | 1 - tests/Util/PhoneNumberUtilTest.m | 36 +++++++++++++++++++ 5 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 tests/Util/PhoneNumberUtilTest.m diff --git a/Example/TSKitiOSTestApp/TSKitiOSTestApp.xcodeproj/project.pbxproj b/Example/TSKitiOSTestApp/TSKitiOSTestApp.xcodeproj/project.pbxproj index e668183de..8a055aeaa 100644 --- a/Example/TSKitiOSTestApp/TSKitiOSTestApp.xcodeproj/project.pbxproj +++ b/Example/TSKitiOSTestApp/TSKitiOSTestApp.xcodeproj/project.pbxproj @@ -47,6 +47,7 @@ B6273DE11C13A2E500738558 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B6273DE01C13A2E500738558 /* Assets.xcassets */; }; B6273DE41C13A2E500738558 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B6273DE21C13A2E500738558 /* LaunchScreen.storyboard */; }; D2AECE731DE8C3360068CE15 /* ContactSortingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = D2AECE721DE8C3360068CE15 /* ContactSortingTest.m */; }; + E95668321E0964F9002418B1 /* PhoneNumberUtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E95668311E0964F9002418B1 /* PhoneNumberUtilTest.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -117,6 +118,7 @@ C0DC1A83C39CBC09FB2405A3 /* libPods-TSKitiOSTestAppTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TSKitiOSTestAppTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; D2AECE721DE8C3360068CE15 /* ContactSortingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ContactSortingTest.m; path = ../../../tests/Contacts/ContactSortingTest.m; sourceTree = ""; }; D3737F7A041D7147015C02C2 /* Pods-TSKitiOSTestAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TSKitiOSTestAppTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-TSKitiOSTestAppTests/Pods-TSKitiOSTestAppTests.release.xcconfig"; sourceTree = ""; }; + E95668311E0964F9002418B1 /* PhoneNumberUtilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhoneNumberUtilTest.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -192,6 +194,7 @@ 45458B721CC342B600A02153 /* Util */ = { isa = PBXGroup; children = ( + E95668311E0964F9002418B1 /* PhoneNumberUtilTest.m */, 45458B731CC342B600A02153 /* CryptographyTests.m */, 45458B741CC342B600A02153 /* MessagePaddingTests.m */, ); @@ -569,6 +572,7 @@ 4516E3EA1DD1542300DC4206 /* TSContactThreadTest.m in Sources */, 45458B771CC342B600A02153 /* TSMessageStorageTests.m in Sources */, 45046FE01D95A6130015EFF2 /* TSMessagesManagerTest.m in Sources */, + E95668321E0964F9002418B1 /* PhoneNumberUtilTest.m in Sources */, 45458B7C1CC342B600A02153 /* MessagePaddingTests.m in Sources */, 45A856AC1D220BFF0056CD4D /* TSAttributesTest.m in Sources */, 45731A6C1DA87AA1007E22AA /* TSOutgoingMessageTest.m in Sources */, diff --git a/src/Contacts/PhoneNumberUtil.h b/src/Contacts/PhoneNumberUtil.h index ff0e24275..ebcb0615a 100644 --- a/src/Contacts/PhoneNumberUtil.h +++ b/src/Contacts/PhoneNumberUtil.h @@ -10,6 +10,8 @@ @property (nonatomic, retain) NBPhoneNumberUtil *nbPhoneNumberUtil; ++ (BOOL)name:(NSString *)nameString matchesQuery:(NSString *)queryString; + + (NSString *)callingCodeFromCountryCode:(NSString *)countryCode; + (NSString *)countryNameFromCountryCode:(NSString *)countryCode; + (NSArray *)countryCodesForSearchTerm:(NSString *)searchTerm; diff --git a/src/Contacts/PhoneNumberUtil.m b/src/Contacts/PhoneNumberUtil.m index 773c71fb2..eabc512f4 100644 --- a/src/Contacts/PhoneNumberUtil.m +++ b/src/Contacts/PhoneNumberUtil.m @@ -5,7 +5,6 @@ #import "PhoneNumberUtil.h" #import "ContactsManagerProtocol.h" #import "FunctionalUtil.h" -#import "TextSecureKitEnv.h" #import "Util.h" @implementation PhoneNumberUtil @@ -97,6 +96,21 @@ return countryCodes; } ++ (BOOL)name:(NSString *)nameString matchesQuery:(NSString *)queryString { + NSCharacterSet *whitespaceSet = NSCharacterSet.whitespaceCharacterSet; + NSArray *queryStrings = [queryString componentsSeparatedByCharactersInSet:whitespaceSet]; + NSArray *nameStrings = [nameString componentsSeparatedByCharactersInSet:whitespaceSet]; + + return [queryStrings all:^int(NSString *query) { + if (query.length == 0) + return YES; + return [nameStrings any:^int(NSString *nameWord) { + NSStringCompareOptions searchOpts = NSCaseInsensitiveSearch | NSAnchoredSearch; + return [nameWord rangeOfString:query options:searchOpts].location != NSNotFound; + }]; + }]; +} + // search term -> country codes + (NSArray *)countryCodesForSearchTerm:(NSString *)searchTerm { searchTerm = [searchTerm stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; @@ -113,10 +127,11 @@ return NO; } - if ([[[TextSecureKitEnv sharedEnv].contactsManager class] name:countryName matchesQuery:searchTerm]) { + if ([self name:countryName matchesQuery:searchTerm]) { return YES; } - if ([[[TextSecureKitEnv sharedEnv].contactsManager class] name:countryCode matchesQuery:searchTerm]) { + + if ([self name:countryCode matchesQuery:searchTerm]) { return YES; } diff --git a/src/Protocols/ContactsManagerProtocol.h b/src/Protocols/ContactsManagerProtocol.h index e55cf9137..64317fa58 100644 --- a/src/Protocols/ContactsManagerProtocol.h +++ b/src/Protocols/ContactsManagerProtocol.h @@ -9,7 +9,6 @@ - (NSString * _Nonnull)displayNameForPhoneIdentifier:(NSString * _Nullable)phoneNumber; - (NSArray * _Nonnull)signalContacts; -+ (BOOL)name:(NSString * _Nonnull)nameString matchesQuery:(NSString * _Nonnull)queryString; #if TARGET_OS_IPHONE - (UIImage * _Nullable)imageForPhoneIdentifier:(NSString * _Nullable)phoneNumber; diff --git a/tests/Util/PhoneNumberUtilTest.m b/tests/Util/PhoneNumberUtilTest.m new file mode 100644 index 000000000..419d6fa25 --- /dev/null +++ b/tests/Util/PhoneNumberUtilTest.m @@ -0,0 +1,36 @@ +// +// PhoneNumberTest.m +// Signal +// +// Created by Michael Kirk on 6/28/16. +// Copyright © 2016 Open Whisper Systems. All rights reserved. +// + +#import +#import "PhoneNumberUtil.h" + +@interface PhoneNumberUtilTest : XCTestCase + +@end + +@implementation PhoneNumberUtilTest + +- (void)testQueryMatching { + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big dave"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dave big"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dave"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big "]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@" big "]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dav"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"bi dav"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big big big big big big big big big big dave dave dave dave dave"]); + + XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"ave"]); + XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"dare"]); + XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"mike"]); + XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"mike"]); + XCTAssertFalse([PhoneNumberUtil name:@"dave" matchesQuery:@"big"]); +} + +@end From d3ecbba0e8bea59c2a3a181dd91fe9410f499e9c Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Sun, 19 Mar 2017 16:09:14 -0400 Subject: [PATCH 2/3] Keep unit tests with their class files Moved from Signal-iOS and updated to use standard XCTest macros vs. our test-util's // FREEBIE --- .../TSKitiOSTestApp.xcodeproj/project.pbxproj | 8 +- tests/Contacts/PhoneNumberTest.m | 13 +- tests/Contacts/PhoneNumberUtilTest.m | 203 ++++++++++++++++++ tests/Util/PhoneNumberUtilTest.m | 36 ---- 4 files changed, 215 insertions(+), 45 deletions(-) create mode 100644 tests/Contacts/PhoneNumberUtilTest.m delete mode 100644 tests/Util/PhoneNumberUtilTest.m diff --git a/Example/TSKitiOSTestApp/TSKitiOSTestApp.xcodeproj/project.pbxproj b/Example/TSKitiOSTestApp/TSKitiOSTestApp.xcodeproj/project.pbxproj index 8a055aeaa..7be549331 100644 --- a/Example/TSKitiOSTestApp/TSKitiOSTestApp.xcodeproj/project.pbxproj +++ b/Example/TSKitiOSTestApp/TSKitiOSTestApp.xcodeproj/project.pbxproj @@ -118,7 +118,7 @@ C0DC1A83C39CBC09FB2405A3 /* libPods-TSKitiOSTestAppTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TSKitiOSTestAppTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; D2AECE721DE8C3360068CE15 /* ContactSortingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ContactSortingTest.m; path = ../../../tests/Contacts/ContactSortingTest.m; sourceTree = ""; }; D3737F7A041D7147015C02C2 /* Pods-TSKitiOSTestAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TSKitiOSTestAppTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-TSKitiOSTestAppTests/Pods-TSKitiOSTestAppTests.release.xcconfig"; sourceTree = ""; }; - E95668311E0964F9002418B1 /* PhoneNumberUtilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhoneNumberUtilTest.m; sourceTree = ""; }; + E95668311E0964F9002418B1 /* PhoneNumberUtilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PhoneNumberUtilTest.m; path = ../../../tests/Contacts/PhoneNumberUtilTest.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -194,7 +194,6 @@ 45458B721CC342B600A02153 /* Util */ = { isa = PBXGroup; children = ( - E95668311E0964F9002418B1 /* PhoneNumberUtilTest.m */, 45458B731CC342B600A02153 /* CryptographyTests.m */, 45458B741CC342B600A02153 /* MessagePaddingTests.m */, ); @@ -213,12 +212,13 @@ 459850BF1D22C6C4006FFEDB /* Contacts */ = { isa = PBXGroup; children = ( + D2AECE721DE8C3360068CE15 /* ContactSortingTest.m */, + 45B700961D9841E400269FFD /* OWSDisappearingMessagesConfigurationTest.m */, 459850C01D22C6F2006FFEDB /* PhoneNumberTest.m */, + E95668311E0964F9002418B1 /* PhoneNumberUtilTest.m */, 452EE6CE1D4A754C00E934BA /* TSThreadTest.m */, - 45B700961D9841E400269FFD /* OWSDisappearingMessagesConfigurationTest.m */, 4516E3E71DD153CC00DC4206 /* TSGroupThreadTest.m */, 4516E3E91DD1542300DC4206 /* TSContactThreadTest.m */, - D2AECE721DE8C3360068CE15 /* ContactSortingTest.m */, ); name = Contacts; sourceTree = ""; diff --git a/tests/Contacts/PhoneNumberTest.m b/tests/Contacts/PhoneNumberTest.m index 009afbba4..d920bf9d1 100644 --- a/tests/Contacts/PhoneNumberTest.m +++ b/tests/Contacts/PhoneNumberTest.m @@ -1,9 +1,5 @@ // -// PhoneNumberTest.m -// Signal -// -// Created by Michael Kirk on 6/28/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. // #import @@ -15,6 +11,13 @@ @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-555-5555" fromRegion:@"US"] toE164]); +} + - (void)testTryParsePhoneNumberFromUserSpecifiedTextAssumesLocalRegion { PhoneNumber *actual = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"3235551234"]; XCTAssertEqualObjects(@"+13235551234", [actual toE164]); diff --git a/tests/Contacts/PhoneNumberUtilTest.m b/tests/Contacts/PhoneNumberUtilTest.m new file mode 100644 index 000000000..25f5033ca --- /dev/null +++ b/tests/Contacts/PhoneNumberUtilTest.m @@ -0,0 +1,203 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import "PhoneNumberUtil.h" +#import + +@interface PhoneNumberUtilTest : XCTestCase + +@end + +@implementation PhoneNumberUtilTest + +- (void)testQueryMatching +{ + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big dave"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dave big"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dave"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big "]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@" big "]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dav"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"bi dav"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" + matchesQuery:@"big big big big big big big big big big dave dave dave dave dave"]); + + XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"ave"]); + XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"dare"]); + XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"mike"]); + XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"mike"]); + XCTAssertFalse([PhoneNumberUtil name:@"dave" matchesQuery:@"big"]); +} + +- (void)testTranslateCursorPosition +{ + XCTAssertThrows([PhoneNumberUtil translateCursorPosition:0 from:nil to:@"" stickingRightward:true]); + XCTAssertThrows([PhoneNumberUtil translateCursorPosition:0 from:@"" to:nil stickingRightward:true]); + XCTAssertThrows([PhoneNumberUtil translateCursorPosition:1 from:@"" to:@"" stickingRightward:true]); + + XCTAssertEqual(0, [PhoneNumberUtil translateCursorPosition:0 from:@"" to:@"" stickingRightward:true]); + XCTAssertEqual(0, [PhoneNumberUtil translateCursorPosition:0 from:@"12" to:@"1" stickingRightward:true]); + XCTAssertEqual(1, [PhoneNumberUtil translateCursorPosition:1 from:@"12" to:@"1" stickingRightward:true]); + XCTAssertEqual(1, [PhoneNumberUtil translateCursorPosition:2 from:@"12" to:@"1" stickingRightward:true]); + + XCTAssertEqual(0, [PhoneNumberUtil translateCursorPosition:0 from:@"1" to:@"12" stickingRightward:false]); + XCTAssertEqual(0, [PhoneNumberUtil translateCursorPosition:0 from:@"1" to:@"12" stickingRightward:true]); + XCTAssertEqual(1, [PhoneNumberUtil translateCursorPosition:1 from:@"1" to:@"12" stickingRightward:false]); + XCTAssertEqual(2, [PhoneNumberUtil translateCursorPosition:1 from:@"1" to:@"12" stickingRightward:true]); + + XCTAssertEqual(0, [PhoneNumberUtil translateCursorPosition:0 from:@"12" to:@"132" stickingRightward:false]); + XCTAssertEqual(0, [PhoneNumberUtil translateCursorPosition:0 from:@"12" to:@"132" stickingRightward:true]); + XCTAssertEqual(1, [PhoneNumberUtil translateCursorPosition:1 from:@"12" to:@"132" stickingRightward:false]); + XCTAssertEqual(2, [PhoneNumberUtil translateCursorPosition:1 from:@"12" to:@"132" stickingRightward:true]); + XCTAssertEqual(3, [PhoneNumberUtil translateCursorPosition:2 from:@"12" to:@"132" stickingRightward:false]); + XCTAssertEqual(3, [PhoneNumberUtil translateCursorPosition:2 from:@"12" to:@"132" stickingRightward:true]); + + XCTAssertEqual(0, + [PhoneNumberUtil translateCursorPosition:0 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + XCTAssertEqual(1, + [PhoneNumberUtil translateCursorPosition:1 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + XCTAssertEqual(2, + [PhoneNumberUtil translateCursorPosition:2 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + XCTAssertEqual(3, + [PhoneNumberUtil translateCursorPosition:3 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + XCTAssertEqual(3, + [PhoneNumberUtil translateCursorPosition:4 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + XCTAssertEqual(3, + [PhoneNumberUtil translateCursorPosition:5 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + XCTAssertEqual(6, + [PhoneNumberUtil translateCursorPosition:6 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + XCTAssertEqual(7, + [PhoneNumberUtil translateCursorPosition:7 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + XCTAssertEqual(8, + [PhoneNumberUtil translateCursorPosition:8 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + XCTAssertEqual(8, + [PhoneNumberUtil translateCursorPosition:9 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:true]); + + XCTAssertEqual(0, + [PhoneNumberUtil translateCursorPosition:0 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + XCTAssertEqual(1, + [PhoneNumberUtil translateCursorPosition:1 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + XCTAssertEqual(2, + [PhoneNumberUtil translateCursorPosition:2 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + XCTAssertEqual(3, + [PhoneNumberUtil translateCursorPosition:3 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + XCTAssertEqual(3, + [PhoneNumberUtil translateCursorPosition:4 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + XCTAssertEqual(3, + [PhoneNumberUtil translateCursorPosition:5 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + XCTAssertEqual(4, + [PhoneNumberUtil translateCursorPosition:6 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + XCTAssertEqual(7, + [PhoneNumberUtil translateCursorPosition:7 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + XCTAssertEqual(8, + [PhoneNumberUtil translateCursorPosition:8 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + XCTAssertEqual(8, + [PhoneNumberUtil translateCursorPosition:9 from:@"(55) 123-4567" to:@"(551) 234-567" stickingRightward:false]); + + XCTAssertEqual(0, + [PhoneNumberUtil translateCursorPosition:0 from:@"(5551) 234-567" to:@"(555) 123-4567" stickingRightward:true]); + XCTAssertEqual(1, + [PhoneNumberUtil translateCursorPosition:1 from:@"(5551) 234-567" to:@"(555) 123-4567" stickingRightward:true]); + XCTAssertEqual(2, + [PhoneNumberUtil translateCursorPosition:2 from:@"(5551) 234-567" to:@"(555) 123-4567" stickingRightward:true]); + XCTAssertEqual(3, + [PhoneNumberUtil translateCursorPosition:3 from:@"(5551) 234-567" to:@"(555) 123-4567" stickingRightward:true]); + XCTAssertEqual(6, + [PhoneNumberUtil translateCursorPosition:4 from:@"(5551) 234-567" to:@"(555) 123-4567" stickingRightward:true]); + XCTAssertEqual(7, + [PhoneNumberUtil translateCursorPosition:5 from:@"(5551) 234-567" to:@"(555) 123-4567" stickingRightward:true]); + + XCTAssertEqual(0, + [PhoneNumberUtil translateCursorPosition:0 + from:@"(5551) 234-567" + to:@"(555) 123-4567" + stickingRightward:false]); + XCTAssertEqual(1, + [PhoneNumberUtil translateCursorPosition:1 + from:@"(5551) 234-567" + to:@"(555) 123-4567" + stickingRightward:false]); + XCTAssertEqual(2, + [PhoneNumberUtil translateCursorPosition:2 + from:@"(5551) 234-567" + to:@"(555) 123-4567" + stickingRightward:false]); + XCTAssertEqual(3, + [PhoneNumberUtil translateCursorPosition:3 + from:@"(5551) 234-567" + to:@"(555) 123-4567" + stickingRightward:false]); + XCTAssertEqual(4, + [PhoneNumberUtil translateCursorPosition:4 + from:@"(5551) 234-567" + to:@"(555) 123-4567" + stickingRightward:false]); + XCTAssertEqual(7, + [PhoneNumberUtil translateCursorPosition:5 + from:@"(5551) 234-567" + to:@"(555) 123-4567" + stickingRightward:false]); +} + +- (void)testCallingCodeFromCountryCode +{ + XCTAssertEqualObjects([PhoneNumberUtil callingCodeFromCountryCode:@"US"], @"+1"); + XCTAssertEqualObjects([PhoneNumberUtil callingCodeFromCountryCode:@"GB"], @"+44"); + // Invalid country code. + XCTAssertEqualObjects([PhoneNumberUtil callingCodeFromCountryCode:@"EK"], @"+0"); + XCTAssertEqualObjects([PhoneNumberUtil callingCodeFromCountryCode:@"ZZZ"], @"+0"); + XCTAssertEqualObjects([PhoneNumberUtil callingCodeFromCountryCode:nil], @"+0"); +} + +- (void)testCountryNameFromCountryCode +{ + XCTAssertEqualObjects([PhoneNumberUtil countryNameFromCountryCode:@"US"], @"United States"); + XCTAssertEqualObjects([PhoneNumberUtil countryNameFromCountryCode:@"GB"], @"United Kingdom"); + // Invalid country code. + XCTAssertEqualObjects([PhoneNumberUtil countryNameFromCountryCode:@"EK"], @"EK"); + XCTAssertEqualObjects([PhoneNumberUtil countryNameFromCountryCode:@"ZZZ"], @"ZZZ"); + XCTAssertThrows([PhoneNumberUtil countryNameFromCountryCode:nil]); +} + +- (void)testCountryCodesForSearchTerm +{ + // Empty search. + XCTAssertGreaterThan([PhoneNumberUtil countryCodesForSearchTerm:nil].count, (NSUInteger)30); + XCTAssertGreaterThan([PhoneNumberUtil countryCodesForSearchTerm:@""].count, (NSUInteger)30); + XCTAssertGreaterThan([PhoneNumberUtil countryCodesForSearchTerm:@" "].count, (NSUInteger)30); + + // Searches with no results. + XCTAssertEqual([PhoneNumberUtil countryCodesForSearchTerm:@" . "].count, (NSUInteger)0); + XCTAssertEqual([PhoneNumberUtil countryCodesForSearchTerm:@" XXXXX "].count, (NSUInteger)0); + XCTAssertEqual([PhoneNumberUtil countryCodesForSearchTerm:@" ! "].count, (NSUInteger)0); + + // Search by country code. + XCTAssertEqualObjects([PhoneNumberUtil countryCodesForSearchTerm:@"GB"], (@[ @"GB" ])); + XCTAssertEqualObjects([PhoneNumberUtil countryCodesForSearchTerm:@"gb"], (@[ @"GB" ])); + XCTAssertEqualObjects([PhoneNumberUtil countryCodesForSearchTerm:@"GB "], (@[ @"GB" ])); + XCTAssertEqualObjects([PhoneNumberUtil countryCodesForSearchTerm:@" GB"], (@[ @"GB" ])); + XCTAssertTrue([[PhoneNumberUtil countryCodesForSearchTerm:@" G"] containsObject:@"GB"]); + XCTAssertFalse([[PhoneNumberUtil countryCodesForSearchTerm:@" B"] containsObject:@"GB"]); + + // Search by country name. + XCTAssertEqualObjects([PhoneNumberUtil countryCodesForSearchTerm:@"united kingdom"], (@[ @"GB" ])); + XCTAssertEqualObjects([PhoneNumberUtil countryCodesForSearchTerm:@" UNITED KINGDOM "], (@[ @"GB" ])); + XCTAssertEqualObjects([PhoneNumberUtil countryCodesForSearchTerm:@" UNITED KING "], (@[ @"GB" ])); + XCTAssertEqualObjects([PhoneNumberUtil countryCodesForSearchTerm:@" UNI KING "], (@[ @"GB" ])); + XCTAssertEqualObjects([PhoneNumberUtil countryCodesForSearchTerm:@" u k "], (@[ @"GB" ])); + XCTAssertTrue([[PhoneNumberUtil countryCodesForSearchTerm:@" u"] containsObject:@"GB"]); + XCTAssertTrue([[PhoneNumberUtil countryCodesForSearchTerm:@" k"] containsObject:@"GB"]); + XCTAssertFalse([[PhoneNumberUtil countryCodesForSearchTerm:@" m"] containsObject:@"GB"]); + + // Search by calling code. + XCTAssertTrue([[PhoneNumberUtil countryCodesForSearchTerm:@" +44 "] containsObject:@"GB"]); + XCTAssertTrue([[PhoneNumberUtil countryCodesForSearchTerm:@" 44 "] containsObject:@"GB"]); + XCTAssertTrue([[PhoneNumberUtil countryCodesForSearchTerm:@" +4 "] containsObject:@"GB"]); + XCTAssertTrue([[PhoneNumberUtil countryCodesForSearchTerm:@" 4 "] containsObject:@"GB"]); + XCTAssertFalse([[PhoneNumberUtil countryCodesForSearchTerm:@" +123 "] containsObject:@"GB"]); + XCTAssertFalse([[PhoneNumberUtil countryCodesForSearchTerm:@" +444 "] containsObject:@"GB"]); +} + +@end diff --git a/tests/Util/PhoneNumberUtilTest.m b/tests/Util/PhoneNumberUtilTest.m deleted file mode 100644 index 419d6fa25..000000000 --- a/tests/Util/PhoneNumberUtilTest.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// PhoneNumberTest.m -// Signal -// -// Created by Michael Kirk on 6/28/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. -// - -#import -#import "PhoneNumberUtil.h" - -@interface PhoneNumberUtilTest : XCTestCase - -@end - -@implementation PhoneNumberUtilTest - -- (void)testQueryMatching { - XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big dave"]); - XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dave big"]); - XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dave"]); - XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big"]); - XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big "]); - XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@" big "]); - XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dav"]); - XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"bi dav"]); - XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big big big big big big big big big big dave dave dave dave dave"]); - - XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"ave"]); - XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"dare"]); - XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"mike"]); - XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"mike"]); - XCTAssertFalse([PhoneNumberUtil name:@"dave" matchesQuery:@"big"]); -} - -@end From c8fa47d9c96c81474efc5e37c1469f767f68603c Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Mon, 20 Mar 2017 15:22:34 -0400 Subject: [PATCH 3/3] Added some tests per CR // FREEBIE --- tests/Contacts/PhoneNumberTest.m | 9 +++++++++ tests/Contacts/PhoneNumberUtilTest.m | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/tests/Contacts/PhoneNumberTest.m b/tests/Contacts/PhoneNumberTest.m index d920bf9d1..0206deb64 100644 --- a/tests/Contacts/PhoneNumberTest.m +++ b/tests/Contacts/PhoneNumberTest.m @@ -16,6 +16,15 @@ 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]); + + // 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 { diff --git a/tests/Contacts/PhoneNumberUtilTest.m b/tests/Contacts/PhoneNumberUtilTest.m index 25f5033ca..188d1c391 100644 --- a/tests/Contacts/PhoneNumberUtilTest.m +++ b/tests/Contacts/PhoneNumberUtilTest.m @@ -13,7 +13,10 @@ - (void)testQueryMatching { + XCTAssertTrue([PhoneNumberUtil name:@"dave" matchesQuery:@"dave"]); XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big dave"]); + XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big dave dave"]); + XCTAssertTrue([PhoneNumberUtil name:@"big big dave" matchesQuery:@"big dave"]); XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dave big"]); XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"dave"]); XCTAssertTrue([PhoneNumberUtil name:@"big dave" matchesQuery:@"big"]); @@ -27,7 +30,6 @@ XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"ave"]); XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"dare"]); XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"mike"]); - XCTAssertFalse([PhoneNumberUtil name:@"big dave" matchesQuery:@"mike"]); XCTAssertFalse([PhoneNumberUtil name:@"dave" matchesQuery:@"big"]); }