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.
		
		
		
		
		
			
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Swift
		
	
import XCTest
 | 
						|
 | 
						|
extension XCTestCase {
 | 
						|
 | 
						|
    /// A helper for asynchronous testing.
 | 
						|
    ///
 | 
						|
    /// Usage example:
 | 
						|
    ///
 | 
						|
    /// ```
 | 
						|
    /// func testSomething() {
 | 
						|
    ///     doAsyncThings()
 | 
						|
    ///     eventually {
 | 
						|
    ///         /* XCTAssert goes here... */
 | 
						|
    ///     }
 | 
						|
    /// }
 | 
						|
    /// ```
 | 
						|
    ///
 | 
						|
    /// The provided closure won't execute until `timeout` seconds have passed. Pass
 | 
						|
    /// in a timeout long enough for your asynchronous process to finish if it's
 | 
						|
    /// expected to take more than the default 0.1 second.
 | 
						|
    ///
 | 
						|
    /// - Parameters:
 | 
						|
    ///   - timeout: number of seconds to wait before executing `closure`.
 | 
						|
    ///   - closure: a closure to execute when `timeout` seconds have passed.
 | 
						|
    ///
 | 
						|
    /// - Note: `timeout` must be less than 60 seconds.
 | 
						|
    func eventually(timeout: TimeInterval = 0.1, closure: @escaping () -> Void) {
 | 
						|
        assert(timeout < 60)
 | 
						|
        let expectation = self.expectation(description: "")
 | 
						|
        expectation.fulfillAfter(timeout)
 | 
						|
        self.waitForExpectations(timeout: 60) { _ in
 | 
						|
            closure()
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
extension XCTestExpectation {
 | 
						|
 | 
						|
    /// Call `fulfill()` after some time.
 | 
						|
    ///
 | 
						|
    /// - Parameter time: number of seconds after which `fulfill()` will be called.
 | 
						|
    func fulfillAfter(_ time: TimeInterval) {
 | 
						|
        DispatchQueue.main.asyncAfter(deadline: .now() + time) {
 | 
						|
            self.fulfill()
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |