-
Notifications
You must be signed in to change notification settings - Fork 267
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
XCTestCase.fulfillment(…) missing on Linux #436
Comments
I've also checked Xcode 14.2/iOS 16.2 on an M1 and Intel MacBook Pro, and it keeps saying "Cannot find 'fulfillment' in scope" . Any clue why? |
@tmaly1980 this seems like a question better asked on StackOverflow than on a specific issue on GitHub, as it's like to be your project configuration at fault (check your minimum deployment targets). |
XCTestCase.fulfillment(…) missing on Linux #436
Thanks, @grynspan ❤️ |
Always happy to help! |
@grynspan saw this was merged into main, what are the chances of it making into 5.9? Kind of needed to do asynchronous testing on Linux |
@briancroom is looking into it. |
XCTestCase.fulfillment(…) missing on Linux #436
If anyone stumbles upon this before Swift 5.10/whatever release this becomes available, here is the extension I use for support on Linux (based on @grynspan's PR). When this is officially released, you should just be able to remove the extension. #if os(Linux)
import XCTest
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
func fulfillment(of expectations: [XCTestExpectation], timeout: TimeInterval, enforceOrder: Bool = false) 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 |
For anyone watching at home: if you're developing for a Darwin-based platform (macOS, iOS, etc.) using the version of XCTest that ships with Xcode 14.3 or later, this API is already available and you don't need the category. |
…hod since it's not available on Linux yet, see swiftlang/swift-corelibs-xctest#436
Hi folks,
It looks like the
fulfillment(…)
methods onXCTestCase
andXCTWaiter
are both missing on Linux.It would be helpful to have API parity here, as Xcode 14.3 complains if I use the older
wait(…)
methods:Here are the missing methods:
The text was updated successfully, but these errors were encountered: