mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			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.
		
		
		
		
		
			
		
			
				
	
	
		
			80 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			80 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Swift
		
	
//
 | 
						|
//  Copyright (c) 2017 Open Whisper Systems. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
import XCTest
 | 
						|
@testable import Signal
 | 
						|
@testable import SignalMessaging
 | 
						|
 | 
						|
class SearcherTest: XCTestCase {
 | 
						|
 | 
						|
    struct TestCharacter {
 | 
						|
        let name: String
 | 
						|
        let description: String
 | 
						|
        let phoneNumber: String?
 | 
						|
    }
 | 
						|
 | 
						|
    let smerdyakov = TestCharacter(name: "Pavel Fyodorovich Smerdyakov", description: "A rusty hue in the sky", phoneNumber: nil)
 | 
						|
    let stinkingLizaveta = TestCharacter(name: "Stinking Lizaveta", description: "object of pity", phoneNumber: "+13235555555")
 | 
						|
    let regularLizaveta = TestCharacter(name: "Lizaveta", description: "", phoneNumber: "1 (415) 555-5555")
 | 
						|
 | 
						|
    let indexer = { (character: TestCharacter) in
 | 
						|
        return "\(character.name) \(character.description) \(character.phoneNumber ?? "")"
 | 
						|
    }
 | 
						|
 | 
						|
    var searcher: Searcher<TestCharacter> {
 | 
						|
        return Searcher(indexer: indexer)
 | 
						|
    }
 | 
						|
 | 
						|
    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 testSimple() {
 | 
						|
        XCTAssert(searcher.matches(item: smerdyakov, query: "Pavel"))
 | 
						|
        XCTAssert(searcher.matches(item: smerdyakov, query: "pavel"))
 | 
						|
        XCTAssertFalse(searcher.matches(item: smerdyakov, query: "asdf"))
 | 
						|
        XCTAssertFalse(searcher.matches(item: smerdyakov, query: ""))
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query: "Pity"))
 | 
						|
    }
 | 
						|
 | 
						|
    func testRepeats() {
 | 
						|
        XCTAssert(searcher.matches(item: smerdyakov, query: "pavel pavel"))
 | 
						|
        XCTAssertFalse(searcher.matches(item: smerdyakov, query: "pavelpavel"))
 | 
						|
    }
 | 
						|
 | 
						|
    func testSplitWords() {
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query: "Lizaveta"))
 | 
						|
        XCTAssert(searcher.matches(item: regularLizaveta, query: "Lizaveta"))
 | 
						|
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query: "Stinking Lizaveta"))
 | 
						|
        XCTAssertFalse(searcher.matches(item: regularLizaveta, query: "Stinking Lizaveta"))
 | 
						|
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query: "Lizaveta Stinking"))
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query: "Lizaveta St"))
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query: "  Lizaveta St "))
 | 
						|
    }
 | 
						|
 | 
						|
    func testFormattingChars() {
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query:"323"))
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query:"1-323-555-5555"))
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query:"13235555555"))
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query:"+1-323"))
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query:"Liza +1-323"))
 | 
						|
 | 
						|
        // Sanity check, match both by names
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query:"Liza"))
 | 
						|
        XCTAssert(searcher.matches(item: regularLizaveta, query:"Liza"))
 | 
						|
 | 
						|
        // Disambiguate the two Liza's by area code
 | 
						|
        XCTAssert(searcher.matches(item: stinkingLizaveta, query:"Liza 323"))
 | 
						|
        XCTAssertFalse(searcher.matches(item: regularLizaveta, query:"Liza 323"))
 | 
						|
    }
 | 
						|
}
 |