mirror of https://github.com/oxen-io/session-ios
commit
f167b08312
@ -1 +1 @@
|
||||
Subproject commit 58e7f2e84662e05d5d3f8664a4f93e4fd28f5b3f
|
||||
Subproject commit cfe3608532c42224ce3f5c24295616862f884fc7
|
@ -1,157 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
import PromiseKit
|
||||
import SignalServiceKit
|
||||
@testable import Session
|
||||
|
||||
struct VerificationFailedError: Error { }
|
||||
struct FailedToGetRPRegistrationTokenError: Error { }
|
||||
|
||||
enum PushNotificationRequestResult: String {
|
||||
case FailTSOnly = "FailTSOnly",
|
||||
FailRPOnly = "FailRPOnly",
|
||||
FailBoth = "FailBoth",
|
||||
Succeed = "Succeed"
|
||||
}
|
||||
|
||||
class FailingTSAccountManager: TSAccountManager {
|
||||
override public init(primaryStorage: OWSPrimaryStorage) {
|
||||
AssertIsOnMainThread()
|
||||
|
||||
super.init(primaryStorage: primaryStorage)
|
||||
|
||||
self.phoneNumberAwaitingVerification = "+13235555555"
|
||||
}
|
||||
|
||||
override func verifyAccount(withCode: String,
|
||||
pin: String?,
|
||||
success: @escaping () -> Void, failure: @escaping (Error) -> Void) {
|
||||
failure(VerificationFailedError())
|
||||
}
|
||||
|
||||
override func registerForPushNotifications(pushToken: String, voipToken: String, isForcedUpdate: Bool, success successHandler: @escaping () -> Void, failure failureHandler: @escaping (Error) -> Void) {
|
||||
if pushToken == PushNotificationRequestResult.FailTSOnly.rawValue || pushToken == PushNotificationRequestResult.FailBoth.rawValue {
|
||||
failureHandler(OWSErrorMakeUnableToProcessServerResponseError())
|
||||
} else {
|
||||
successHandler()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class VerifyingTSAccountManager: FailingTSAccountManager {
|
||||
override func verifyAccount(withCode: String,
|
||||
pin: String?,
|
||||
success: @escaping () -> Void, failure: @escaping (Error) -> Void) {
|
||||
success()
|
||||
}
|
||||
|
||||
override func performUpdateAccountAttributes() -> AnyPromise {
|
||||
return AnyPromise(Promise.value(()))
|
||||
}
|
||||
}
|
||||
|
||||
class TokenObtainingTSAccountManager: VerifyingTSAccountManager {
|
||||
}
|
||||
|
||||
class VerifyingPushRegistrationManager: PushRegistrationManager {
|
||||
public override func requestPushTokens() -> Promise<(pushToken: String, voipToken: String)> {
|
||||
return Promise.value(("a", "b"))
|
||||
}
|
||||
}
|
||||
|
||||
class AccountManagerTest: SignalBaseTest {
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
|
||||
let tsAccountManager = FailingTSAccountManager(primaryStorage: OWSPrimaryStorage.shared())
|
||||
let sskEnvironment = SSKEnvironment.shared as! MockSSKEnvironment
|
||||
sskEnvironment.tsAccountManager = tsAccountManager
|
||||
}
|
||||
|
||||
override func tearDown() {
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
func testRegisterWhenEmptyCode() {
|
||||
let accountManager = AccountManager()
|
||||
|
||||
let expectation = self.expectation(description: "should fail")
|
||||
|
||||
firstly {
|
||||
accountManager.register(verificationCode: "", pin: "")
|
||||
}.done {
|
||||
XCTFail("Should fail")
|
||||
}.catch { error in
|
||||
let nserror = error as NSError
|
||||
if OWSErrorCode(rawValue: nserror.code) == OWSErrorCode.userError {
|
||||
expectation.fulfill()
|
||||
} else {
|
||||
XCTFail("Unexpected error: \(error)")
|
||||
}
|
||||
}.retainUntilComplete()
|
||||
|
||||
self.waitForExpectations(timeout: 1.0, handler: nil)
|
||||
}
|
||||
|
||||
func testRegisterWhenVerificationFails() {
|
||||
let accountManager = AccountManager()
|
||||
|
||||
let expectation = self.expectation(description: "should fail")
|
||||
|
||||
firstly {
|
||||
accountManager.register(verificationCode: "123456", pin: "")
|
||||
}.done {
|
||||
XCTFail("Should fail")
|
||||
}.catch { error in
|
||||
if error is VerificationFailedError {
|
||||
expectation.fulfill()
|
||||
} else {
|
||||
XCTFail("Unexpected error: \(error)")
|
||||
}
|
||||
}.retainUntilComplete()
|
||||
|
||||
self.waitForExpectations(timeout: 1.0, handler: nil)
|
||||
}
|
||||
|
||||
func testSuccessfulRegistration() {
|
||||
let tsAccountManager = TokenObtainingTSAccountManager(primaryStorage: OWSPrimaryStorage.shared())
|
||||
let sskEnvironment = SSKEnvironment.shared as! MockSSKEnvironment
|
||||
sskEnvironment.tsAccountManager = tsAccountManager
|
||||
|
||||
AppEnvironment.shared.pushRegistrationManager = VerifyingPushRegistrationManager()
|
||||
|
||||
let accountManager = AccountManager()
|
||||
|
||||
let expectation = self.expectation(description: "should succeed")
|
||||
|
||||
firstly {
|
||||
accountManager.register(verificationCode: "123456", pin: "")
|
||||
}.done {
|
||||
expectation.fulfill()
|
||||
}.catch { error in
|
||||
XCTFail("Unexpected error: \(error)")
|
||||
}.retainUntilComplete()
|
||||
|
||||
self.waitForExpectations(timeout: 1.0, handler: nil)
|
||||
}
|
||||
|
||||
func testUpdatePushTokens() {
|
||||
let accountManager = AccountManager()
|
||||
|
||||
let expectation = self.expectation(description: "should fail")
|
||||
|
||||
firstly {
|
||||
accountManager.updatePushTokens(pushToken: PushNotificationRequestResult.FailTSOnly.rawValue, voipToken: "whatever", isForcedUpdate: false)
|
||||
}.done {
|
||||
XCTFail("Expected to fail.")
|
||||
}.catch { _ in
|
||||
expectation.fulfill()
|
||||
}.retainUntilComplete()
|
||||
|
||||
self.waitForExpectations(timeout: 1.0, handler: nil)
|
||||
}
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
import Session
|
||||
|
||||
class PhoneNumberValidatorTest: SignalBaseTest {
|
||||
|
||||
func assertValid(e164: String,
|
||||
file: StaticString = #file,
|
||||
line: UInt = #line) {
|
||||
let validator = PhoneNumberValidator()
|
||||
guard let phoneNumber = PhoneNumber(fromE164: e164) else {
|
||||
XCTFail("unparseable phone number", file: file, line: line)
|
||||
return
|
||||
}
|
||||
let isValid = validator.isValidForRegistration(phoneNumber: phoneNumber)
|
||||
XCTAssertTrue(isValid, file: file, line: line)
|
||||
}
|
||||
|
||||
func assertInvalid(e164: String,
|
||||
file: StaticString = #file,
|
||||
line: UInt = #line) {
|
||||
let validator = PhoneNumberValidator()
|
||||
guard let phoneNumber = PhoneNumber(fromE164: e164) else {
|
||||
XCTFail("unparseable phone number", file: file, line: line)
|
||||
return
|
||||
}
|
||||
let isValid = validator.isValidForRegistration(phoneNumber: phoneNumber)
|
||||
XCTAssertFalse(isValid, file: file, line: line)
|
||||
}
|
||||
|
||||
func testUnitedStates() {
|
||||
// valid us number
|
||||
assertValid(e164: "+13235551234")
|
||||
|
||||
// too short
|
||||
assertInvalid(e164: "+1323555123")
|
||||
|
||||
// too long
|
||||
assertInvalid(e164: "+132355512345")
|
||||
|
||||
// not a US phone number
|
||||
assertValid(e164: "+3235551234")
|
||||
}
|
||||
|
||||
func testBrazil() {
|
||||
// valid mobile
|
||||
assertValid(e164: "+5532912345678")
|
||||
|
||||
// valid landline
|
||||
assertValid(e164: "+553212345678")
|
||||
|
||||
// mobile length, but with out the leading '9'
|
||||
assertInvalid(e164: "+5532812345678")
|
||||
|
||||
// too short
|
||||
assertInvalid(e164: "+5532812345678")
|
||||
|
||||
// too long landline
|
||||
assertInvalid(e164: "+5532123456789")
|
||||
assertInvalid(e164: "+55321234567890")
|
||||
|
||||
// too long mobile
|
||||
assertInvalid(e164: "+55329123456789")
|
||||
assertInvalid(e164: "+553291234567890")
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import SignalServiceKit
|
||||
|
||||
class ContactDiscoveryOperationTest: SignalBaseTest {
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||
}
|
||||
|
||||
override func tearDown() {
|
||||
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
func tesBoolArrayFromEmptyData() {
|
||||
let data = Data()
|
||||
let bools = CDSBatchOperation.boolArray(data: data)
|
||||
XCTAssert(bools == [])
|
||||
}
|
||||
|
||||
func testBoolArrayFromFalseByte() {
|
||||
let data = Data(repeating: 0x00, count: 4)
|
||||
let bools = CDSBatchOperation.boolArray(data: data)
|
||||
XCTAssert(bools == [false, false, false, false])
|
||||
}
|
||||
|
||||
func testBoolArrayFromTrueByte() {
|
||||
let data = Data(repeating: 0x01, count: 4)
|
||||
let bools = CDSBatchOperation.boolArray(data: data)
|
||||
XCTAssert(bools == [true, true, true, true])
|
||||
}
|
||||
|
||||
func testBoolArrayFromMixedBytes() {
|
||||
let data = Data(bytes: [0x01, 0x00, 0x01, 0x01])
|
||||
let bools = CDSBatchOperation.boolArray(data: data)
|
||||
XCTAssert(bools == [true, false, true, true])
|
||||
}
|
||||
|
||||
func testEncodeNumber() {
|
||||
let recipientIds = [ "+1011" ]
|
||||
let actual = try! CDSBatchOperation.encodePhoneNumbers(recipientIds: recipientIds)
|
||||
let expected: Data = Data(bytes: [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf3])
|
||||
|
||||
XCTAssertEqual(expected, actual)
|
||||
}
|
||||
|
||||
func testEncodeMultipleNumber() {
|
||||
let recipientIds = [ "+1011", "+15551231234"]
|
||||
let actual = try! CDSBatchOperation.encodePhoneNumbers(recipientIds: recipientIds)
|
||||
let expected: Data = Data(bytes: [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf3,
|
||||
0x00, 0x00, 0x00, 0x03, 0x9e, 0xec, 0xf5, 0x02])
|
||||
|
||||
XCTAssertEqual(expected, actual)
|
||||
}
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
import Contacts
|
||||
@testable import Session
|
||||
|
||||
final class ContactsPickerTest: SignalBaseTest {
|
||||
private var prevLang: Any?
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
|
||||
prevLang = getLang()
|
||||
}
|
||||
|
||||
override func tearDown() {
|
||||
super.tearDown()
|
||||
|
||||
if let prevLang = prevLang {
|
||||
setLang(value: prevLang)
|
||||
}
|
||||
}
|
||||
|
||||
func testContactSectionMatchesEmailFirstLetterWhenOnlyEmailContact() {
|
||||
setLangEN()
|
||||
|
||||
let emailOnlyContactB = CNMutableContact()
|
||||
emailOnlyContactB.emailAddresses.append(CNLabeledValue(label: nil, value: "bla@bla.com"))
|
||||
|
||||
let emailOnlyContactD = CNMutableContact()
|
||||
emailOnlyContactD.emailAddresses.append(CNLabeledValue(label: nil, value: "dude@bla.com"))
|
||||
|
||||
let contactsPicker = ContactsPicker(allowsMultipleSelection: false, subtitleCellType: .phoneNumber)
|
||||
let collatedContacts = contactsPicker.collatedContacts([emailOnlyContactB, emailOnlyContactD])
|
||||
|
||||
let sectionTitles = contactsPicker.collationForTests.sectionTitles
|
||||
if let bIndex = sectionTitles.firstIndex(of: "B") {
|
||||
let bSectionContacts = collatedContacts[bIndex]
|
||||
XCTAssertEqual(bSectionContacts.first, emailOnlyContactB)
|
||||
}
|
||||
|
||||
if let dIndex = sectionTitles.firstIndex(of: "D") {
|
||||
let dSectionContacts = collatedContacts[dIndex]
|
||||
XCTAssertEqual(dSectionContacts.first, emailOnlyContactD)
|
||||
}
|
||||
}
|
||||
|
||||
func testContactSectionMatchesNameFirstLetterWhenNameExistsInContact() {
|
||||
setLangEN()
|
||||
|
||||
let nameAndEmailContact = CNMutableContact()
|
||||
nameAndEmailContact.givenName = "Alice"
|
||||
nameAndEmailContact.emailAddresses.append(CNLabeledValue(label: nil, value: "nameAndEmail@bla.com"))
|
||||
|
||||
let contactsPicker = ContactsPicker(allowsMultipleSelection: false, subtitleCellType: .phoneNumber)
|
||||
let collatedContacts = contactsPicker.collatedContacts([nameAndEmailContact])
|
||||
|
||||
let sectionTitles = contactsPicker.collationForTests.sectionTitles
|
||||
if let aIndex = sectionTitles.firstIndex(of: "A") {
|
||||
let aSectionContacts = collatedContacts[aIndex]
|
||||
XCTAssertEqual(aSectionContacts.first, nameAndEmailContact)
|
||||
}
|
||||
}
|
||||
|
||||
private func setLangEN() {
|
||||
setLang(value: "en")
|
||||
}
|
||||
|
||||
private func setLang(value: Any) {
|
||||
UserDefaults.standard.set(value, forKey: "AppleLanguages")
|
||||
UserDefaults.standard.synchronize()
|
||||
}
|
||||
|
||||
private func setLang(value: String) {
|
||||
setLang(value: [value])
|
||||
}
|
||||
|
||||
private func getLang() -> Any? {
|
||||
return UserDefaults.standard.value(forKey: "AppleLanguages")
|
||||
}
|
||||
}
|
@ -1,122 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Contact.h"
|
||||
#import "SSKBaseTestObjC.h"
|
||||
|
||||
@import Contacts;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface ContactSortingTest : SSKBaseTestObjC
|
||||
|
||||
@end
|
||||
|
||||
@implementation ContactSortingTest
|
||||
|
||||
- (void)setUp
|
||||
{
|
||||
[super setUp];
|
||||
|
||||
srandom((unsigned int)time(NULL));
|
||||
}
|
||||
|
||||
- (void)testSortingNamesByFirstLast
|
||||
{
|
||||
NSComparator comparator = [Contact comparatorSortingNamesByFirstThenLast:YES];
|
||||
NSArray<Contact *>*sortedContacts = [self.class contactArrayForNames:@[@[@"Adam", @"Smith"],
|
||||
@[@"Adam", @"West"],
|
||||
@[@"", @"Daisy"],
|
||||
@[@"Daisy", @"Chain"],
|
||||
@[@"Daisy", @"Duke"],
|
||||
@[@"James", @"Smith"],
|
||||
@[@"James", @"Van"],
|
||||
@[@"James", @"Van Der Beek"],
|
||||
@[@"Kevin", @"Smith"],
|
||||
@[@"Mae", @"West"],
|
||||
@[@"Mary", @"Oliver"],
|
||||
@[@"Mary Jo", @"Catlett"],
|
||||
]];
|
||||
NSUInteger numContacts = sortedContacts.count;
|
||||
|
||||
for (NSUInteger i = 0; i < 20; i++) {
|
||||
NSArray *shuffledContacts = [self.class shuffleArray:sortedContacts];
|
||||
NSArray *resortedContacts = [shuffledContacts sortedArrayUsingComparator:comparator];
|
||||
for (NSUInteger j = 0; j < numContacts; j++) {
|
||||
Contact *a = sortedContacts[j];
|
||||
Contact *b = resortedContacts[j];
|
||||
BOOL correct = ([a.firstName isEqualToString:b.firstName] && [a.lastName isEqualToString:b.lastName]);
|
||||
if (!correct) {
|
||||
XCTFail(@"Contacts failed to sort names by first, last");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)testSortingNamesByLastFirst
|
||||
{
|
||||
NSComparator comparator = [Contact comparatorSortingNamesByFirstThenLast:NO];
|
||||
NSArray<Contact *>*sortedContacts = [self.class contactArrayForNames:@[@[@"Mary Jo", @"Catlett"],
|
||||
@[@"Daisy", @"Chain"],
|
||||
@[@"", @"Daisy"],
|
||||
@[@"Daisy", @"Duke"],
|
||||
@[@"Mary", @"Oliver"],
|
||||
@[@"Adam", @"Smith"],
|
||||
@[@"James", @"Smith"],
|
||||
@[@"Kevin", @"Smith"],
|
||||
@[@"James", @"Van"],
|
||||
@[@"James", @"Van Der Beek"],
|
||||
@[@"Adam", @"West"],
|
||||
@[@"Mae", @"West"],
|
||||
]];
|
||||
NSUInteger numContacts = sortedContacts.count;
|
||||
|
||||
for (NSUInteger i = 0; i < 20; i++) {
|
||||
NSArray *shuffledContacts = [self.class shuffleArray:sortedContacts];
|
||||
NSArray *resortedContacts = [shuffledContacts sortedArrayUsingComparator:comparator];
|
||||
for (NSUInteger j = 0; j < numContacts; j++) {
|
||||
Contact *a = sortedContacts[j];
|
||||
Contact *b = resortedContacts[j];
|
||||
BOOL correct = ([a.firstName isEqualToString:b.firstName] && [a.lastName isEqualToString:b.lastName]);
|
||||
if (!correct) {
|
||||
XCTFail(@"Contacts failed to sort names by last, first");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+ (NSArray<Contact *> *)contactArrayForNames:(NSArray<NSArray<NSString *>*>*)namePairs
|
||||
{
|
||||
NSMutableArray<Contact *>*contacts = [[NSMutableArray alloc] initWithCapacity:namePairs.count];
|
||||
for (NSArray<NSString *>*namePair in namePairs) {
|
||||
|
||||
CNMutableContact *cnContact = [CNMutableContact new];
|
||||
cnContact.givenName = namePair[0];
|
||||
cnContact.familyName = namePair[1];
|
||||
|
||||
Contact *c = [[Contact alloc] initWithSystemContact:cnContact];
|
||||
|
||||
[contacts addObject:c];
|
||||
}
|
||||
|
||||
return [contacts copy]; // Return an immutable for good hygene
|
||||
}
|
||||
|
||||
+ (NSArray*)shuffleArray:(NSArray *)array
|
||||
{
|
||||
NSMutableArray *shuffled = [[NSMutableArray alloc] initWithArray:array];
|
||||
|
||||
for(NSUInteger i = [array count]; i > 1; i--) {
|
||||
NSUInteger j = arc4random_uniform((uint32_t)i);
|
||||
[shuffled exchangeObjectAtIndex:(i - 1) withObjectAtIndex:j];
|
||||
}
|
||||
|
||||
return [shuffled copy]; // Return an immutable for good hygene
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
@ -1,202 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PhoneNumber.h"
|
||||
#import "SSKBaseTestObjC.h"
|
||||
|
||||
@interface PhoneNumberTest : SSKBaseTestObjC
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation PhoneNumberTest
|
||||
|
||||
-(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]);
|
||||
|
||||
// Phone numbers missing a calling code.
|
||||
XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"9025555555"] toE164]);
|
||||
|
||||
// Phone numbers with a calling code but without a plus
|
||||
XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"19025555555"] toE164]);
|
||||
|
||||
// Empty input.
|
||||
XCTAssertEqualObjects(nil, [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@""] 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"]);
|
||||
}
|
||||
|
||||
- (void)testMissingAreaCode_USA
|
||||
{
|
||||
// Add area code to numbers that look like "local" numbers
|
||||
NSArray<NSString *> *parsed =
|
||||
[self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"555-1234" clientPhoneNumber:@"+13233214321"];
|
||||
XCTAssertTrue([parsed containsObject:@"+13235551234"]);
|
||||
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"5551234" clientPhoneNumber:@"+13233214321"];
|
||||
XCTAssertTrue([parsed containsObject:@"+13235551234"]);
|
||||
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"555 1234" clientPhoneNumber:@"+13233214321"];
|
||||
XCTAssertTrue([parsed containsObject:@"+13235551234"]);
|
||||
|
||||
// Don't touch numbers that look like e164, even if they're the same length as a "local" us number
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"+5551234" clientPhoneNumber:@"+13213214321"];
|
||||
XCTAssertTrue([parsed containsObject:@"+5551234"]);
|
||||
|
||||
// Don't touch numbers that already have an area code
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"570 555 1234" clientPhoneNumber:@"+13233214321"];
|
||||
XCTAssertTrue([parsed containsObject:@"+15705551234"]);
|
||||
|
||||
// Don't touch numbers that are already in e164
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"+33170393800" clientPhoneNumber:@"+13213214321"];
|
||||
XCTAssertTrue([parsed containsObject:@"+33170393800"]);
|
||||
}
|
||||
|
||||
- (void)testMissingAreaCode_Brazil
|
||||
{
|
||||
// Add area code to land-line numbers that look like "local" numbers
|
||||
NSArray<NSString *> *parsed =
|
||||
[self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"87654321" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+552187654321"]);
|
||||
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"8765-4321" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+552187654321"]);
|
||||
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"8765 4321" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+552187654321"]);
|
||||
|
||||
// Add area code to mobile numbers that look like "local" numbers
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"987654321" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+5521987654321"]);
|
||||
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"9 8765-4321" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+5521987654321"]);
|
||||
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"9 8765 4321" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+5521987654321"]);
|
||||
|
||||
// Don't touch numbers that look like e164, even if they're the same length as a "local" us number
|
||||
parsed = [self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"+3365-4321" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+33654321"]);
|
||||
|
||||
// Don't touch land-line numbers that already have an area code
|
||||
parsed =
|
||||
[self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"22 8765 4321" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+552287654321"]);
|
||||
|
||||
// Don't touch mobile numbers that already have an area code
|
||||
parsed =
|
||||
[self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"22 9 8765 4321" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+5522987654321"]);
|
||||
|
||||
// Don't touch numbers that are already in e164
|
||||
parsed =
|
||||
[self unpackTryParsePhoneNumbersFromsUserSpecifiedText:@"+33170393800" clientPhoneNumber:@"+5521912345678"];
|
||||
XCTAssertTrue([parsed containsObject:@"+33170393800"]);
|
||||
}
|
||||
|
||||
|
||||
@end
|
@ -1,209 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PhoneNumberUtil.h"
|
||||
#import "SSKBaseTestObjC.h"
|
||||
|
||||
@interface PhoneNumberUtilTest : SSKBaseTestObjC
|
||||
|
||||
@end
|
||||
|
||||
@implementation PhoneNumberUtilTest
|
||||
|
||||
#ifdef BROKEN_TESTS
|
||||
|
||||
- (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"]);
|
||||
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:@"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"]);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@end
|
@ -1,40 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SignalServiceKit
|
||||
import XCTest
|
||||
|
||||
class OWSSignalAddressTest: SSKBaseTestSwift {
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||
}
|
||||
|
||||
override func tearDown() {
|
||||
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
func testInitializer() {
|
||||
let recipientId = "+13213214321"
|
||||
let deviceId: UInt = 1
|
||||
let address = try! OWSSignalAddress(recipientId: recipientId, deviceId: deviceId)
|
||||
XCTAssertEqual(address.recipientId, recipientId)
|
||||
XCTAssertEqual(address.deviceId, deviceId)
|
||||
}
|
||||
|
||||
func testInitializer_badRecipientId() {
|
||||
let recipientId = ""
|
||||
let deviceId: UInt = 1
|
||||
XCTAssertThrowsError(try OWSSignalAddress(recipientId: recipientId, deviceId: deviceId))
|
||||
}
|
||||
|
||||
func testInitializer_badDeviceId() {
|
||||
let recipientId = "+13213214321"
|
||||
let deviceId: UInt = 0
|
||||
XCTAssertThrowsError(try OWSSignalAddress(recipientId: recipientId, deviceId: deviceId))
|
||||
}
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "OWSAnalytics.h"
|
||||
#import "SSKBaseTestObjC.h"
|
||||
#import <SignalCoreKit/NSData+OWS.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSAnalyticsTests : SSKBaseTestObjC
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation OWSAnalyticsTests
|
||||
|
||||
- (void)testOrderOfMagnitudeOf
|
||||
{
|
||||
XCTAssertEqual(0, [OWSAnalytics orderOfMagnitudeOf:-1]);
|
||||
XCTAssertEqual(0, [OWSAnalytics orderOfMagnitudeOf:0]);
|
||||
XCTAssertEqual(1, [OWSAnalytics orderOfMagnitudeOf:1]);
|
||||
XCTAssertEqual(1, [OWSAnalytics orderOfMagnitudeOf:5]);
|
||||
XCTAssertEqual(1, [OWSAnalytics orderOfMagnitudeOf:9]);
|
||||
XCTAssertEqual(10, [OWSAnalytics orderOfMagnitudeOf:10]);
|
||||
XCTAssertEqual(10, [OWSAnalytics orderOfMagnitudeOf:11]);
|
||||
XCTAssertEqual(10, [OWSAnalytics orderOfMagnitudeOf:19]);
|
||||
XCTAssertEqual(10, [OWSAnalytics orderOfMagnitudeOf:99]);
|
||||
XCTAssertEqual(100, [OWSAnalytics orderOfMagnitudeOf:100]);
|
||||
XCTAssertEqual(100, [OWSAnalytics orderOfMagnitudeOf:303]);
|
||||
XCTAssertEqual(100, [OWSAnalytics orderOfMagnitudeOf:999]);
|
||||
XCTAssertEqual(1000, [OWSAnalytics orderOfMagnitudeOf:1000]);
|
||||
XCTAssertEqual(1000, [OWSAnalytics orderOfMagnitudeOf:3030]);
|
||||
XCTAssertEqual(10000, [OWSAnalytics orderOfMagnitudeOf:10000]);
|
||||
XCTAssertEqual(10000, [OWSAnalytics orderOfMagnitudeOf:30303]);
|
||||
XCTAssertEqual(10000, [OWSAnalytics orderOfMagnitudeOf:99999]);
|
||||
XCTAssertEqual(100000, [OWSAnalytics orderOfMagnitudeOf:100000]);
|
||||
XCTAssertEqual(100000, [OWSAnalytics orderOfMagnitudeOf:303030]);
|
||||
XCTAssertEqual(100000, [OWSAnalytics orderOfMagnitudeOf:999999]);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
Loading…
Reference in New Issue