-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d1913ea
commit ee07c6b
Showing
1 changed file
with
33 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
#if os(Linux) | ||
extension XCTestCase { | ||
/// Wait on an array of expectations for up to the specified timeout, and optionally specify whether they | ||
/// must be fulfilled in the given order. May return early based on fulfillment of the waited on expectations. | ||
/// | ||
/// - Parameter expectations: The expectations to wait on. | ||
/// - Parameter timeout: The maximum total time duration to wait on all expectations. | ||
/// - Parameter enforceOrder: Specifies whether the expectations must be fulfilled in the order | ||
/// they are specified in the `expectations` Array. Default is false. | ||
/// - Parameter file: The file name to use in the error message if | ||
/// expectations are not fulfilled before the given timeout. Default is the file | ||
/// containing the call to this method. It is rare to provide this | ||
/// parameter when calling this method. | ||
/// - Parameter line: The line number to use in the error message if the | ||
/// expectations are not fulfilled before the given timeout. Default is the line | ||
/// number of the call to this method in the calling file. It is rare to | ||
/// provide this parameter when calling this method. | ||
/// | ||
/// - SeeAlso: XCTWaiter | ||
@available(macOS 12.0, *) | ||
func fulfillment(of expectations: [XCTestExpectation], timeout: TimeInterval, enforceOrder: Bool = false, file: StaticString = #file, line: Int = #line) async { | ||
return await withCheckedContinuation { continuation in | ||
// This function operates by blocking a background thread instead of one owned by libdispatch or by the | ||
// Swift runtime (as used by Swift concurrency.) To ensure we use a thread owned by neither subsystem, use | ||
// Foundation's Thread.detachNewThread(_:). | ||
Thread.detachNewThread { [self] in | ||
wait(for: expectations, timeout: timeout, enforceOrder: enforceOrder) | ||
continuation.resume() | ||
} | ||
} | ||
} | ||
} | ||
#endif |