Files
swift-mirror/validation-test/stdlib/ErrorProtocol.swift

60 lines
1.6 KiB
Swift

// RUN: %target-run-simple-swift
// REQUIRES: executable_test
// REQUIRES: objc_interop
import SwiftPrivate
import StdlibUnittest
import Foundation
// Also import modules which are used by StdlibUnittest internally. This
// workaround is needed to link all required libraries in case we compile
// StdlibUnittest with -sil-serialize-all.
import SwiftPrivatePthreadExtras
#if _runtime(_ObjC)
import ObjectiveC
#endif
enum SomeError : ErrorProtocol {
case GoneToFail
}
struct ErrorProtocolAsNSErrorRaceTest : RaceTestWithPerTrialData {
class RaceData {
let error: ErrorProtocol
init(error: ErrorProtocol) {
self.error = error
}
}
func makeRaceData() -> RaceData {
return RaceData(error: SomeError.GoneToFail)
}
func makeThreadLocalData() {}
func thread1(raceData: RaceData, inout _: Void) -> Observation3Int {
let ns = raceData.error as NSError
// Use valueForKey to bypass bridging, so we can verify that the identity
// of the unbridged NSString object is stable.
let domainInt: Int = unsafeBitCast(ns.value(forKey: "domain"), to: Int.self)
let code: Int = ns.code
let userInfoInt: Int = unsafeBitCast(ns.value(forKey: "userInfo"), to: Int.self)
return Observation3Int(domainInt, code, userInfoInt)
}
func evaluateObservations(
observations: [Observation3Int],
_ sink: (RaceTestObservationEvaluation) -> Void
) {
sink(evaluateObservationsAllEqual(observations))
}
}
var ErrorProtocolRaceTestSuite = TestSuite("ErrorProtocol races")
ErrorProtocolRaceTestSuite.test("NSError bridging") {
runRaceTest(ErrorProtocolAsNSErrorRaceTest.self, operations: 1000)
}
runAllTests()