|  |  |  | // | 
					
						
							|  |  |  | //  Copyright (c) 2018 Open Whisper Systems. All rights reserved. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import XCTest | 
					
						
							|  |  |  | import Contacts | 
					
						
							|  |  |  | @testable import Signal | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | final class ContactsPickerTest: XCTestCase { | 
					
						
							|  |  |  |     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.index(of: "B") { | 
					
						
							|  |  |  |             let bSectionContacts = collatedContacts[bIndex] | 
					
						
							|  |  |  |             XCTAssertEqual(bSectionContacts.first, emailOnlyContactB) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if let dIndex = sectionTitles.index(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.index(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") | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |