Skip to content

Instantly share code, notes, and snippets.

@JARinteractive
Last active September 4, 2022 14:40
Show Gist options
  • Save JARinteractive/7fb33b6b0043f365ddfd to your computer and use it in GitHub Desktop.
Save JARinteractive/7fb33b6b0043f365ddfd to your computer and use it in GitHub Desktop.
wait for condition to be true
// https://gist.github.com/JARinteractive/7fb33b6b0043f365ddfd
import Foundation
import XCTest
@discardableResult
public func AssertEventuallyTrue(file: StaticString = #file, line: UInt = #line, _ checkSuccess: @autoclosure () -> Bool) -> Bool {
    return AssertEventuallyTrue(10.0, file: file, line: line, checkSuccess)
}
@discardableResult
public func AssertEventuallyTrue(_ timeout: Double, file: StaticString = #file, line: UInt = #line, _ checkSuccess: @autoclosure () -> Bool) -> Bool {
    let startDate = NSDate()
    var success = false
    while !success && abs(startDate.timeIntervalSinceNow) < timeout {
        RunLoop.current.run(until: Date(timeIntervalSinceNow: 0.01))
        success = checkSuccess()
    }
    if !success { XCTFail("Timeout occurred while waiting for condition (waitUntil)", file: file, line: line) }
    return success
}
@marksands
Copy link

Add @discardableResult if you want those missing assignment warnings to go away

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment