Slice 2 (Phase 1a) of the M9 Monterey retarget. Converts all pure Core suites (argv builders, CGATS/CUPS/profcheck/gamut-mesh parsers, colour math, file/artefact helpers, classifiers) to XCTestCase, and adds the shared assertAsyncThrows helper for the async-throws sites that Slice 3 will convert. Deferred to Slice 3 (kept on Swift Testing in mixed files): ProcessManagerTests, ArgyllRunner*Tests, ProcessRunSupportTests, store/UI suites, and the runner suites embedded in TargenTests / PrinttargTests / ProcessManagerTests. Also qualifies six bare `throw .case` expressions in CGATSParser with CGATSParseError — they only compiled under typed throws, which Slice 1 demoted to untyped `throws`; without this the ICCeryCore target fails to build and no test gate can run. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
22 lines
733 B
Swift
22 lines
733 B
Swift
import XCTest
|
|
|
|
extension XCTestCase {
|
|
func assertAsyncThrows<T, E: Error>(
|
|
expectedType: E.Type,
|
|
_ expression: () async throws -> T,
|
|
_ message: @autoclosure () -> String = "",
|
|
file: StaticString = #filePath,
|
|
line: UInt = #line,
|
|
errorHandler: ((E) -> Void)? = nil
|
|
) async {
|
|
do {
|
|
_ = try await expression()
|
|
XCTFail("Expected \(expectedType) to be thrown but expression succeeded. \(message())", file: file, line: line)
|
|
} catch let error as E {
|
|
errorHandler?(error)
|
|
} catch {
|
|
XCTFail("Expected \(expectedType) but caught \(type(of: error)): \(error). \(message())", file: file, line: line)
|
|
}
|
|
}
|
|
}
|