mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The `-unavailable-decl-optimization` flag is a frontend flag and therefore requires `-Xfrontend` when passed through the driver.
49 lines
1.3 KiB
Swift
49 lines
1.3 KiB
Swift
// RUN: %target-run-simple-swift
|
|
// RUN: %target-run-simple-swift(-Xfrontend -unavailable-decl-optimization=complete)
|
|
// REQUIRES: executable_test
|
|
// REQUIRES: objc_interop
|
|
|
|
import StdlibUnittest
|
|
import Foundation
|
|
|
|
var CodableEnumUnavailableElementTestSuite = TestSuite("CodableEnumUnavailableElement")
|
|
|
|
@available(*, unavailable)
|
|
struct UnavailableStruct: Codable {}
|
|
|
|
enum EnumWithUnavailableCase: Codable {
|
|
case a
|
|
@available(*, unavailable)
|
|
case b(UnavailableStruct)
|
|
}
|
|
|
|
func decodeEnum(from json: String) throws -> EnumWithUnavailableCase {
|
|
let data = json.data(using: .utf8)!
|
|
return try JSONDecoder().decode(EnumWithUnavailableCase.self, from: data)
|
|
}
|
|
|
|
CodableEnumUnavailableElementTestSuite.test("decode_available_case") {
|
|
do {
|
|
let decoded = try decodeEnum(from: #"{"a":{}}"#)
|
|
switch decoded {
|
|
case .a: break
|
|
default: assertionFailure("Unexpected value \(decoded)")
|
|
}
|
|
} catch {
|
|
expectUnreachable("Unexpected error \(error)")
|
|
}
|
|
}
|
|
|
|
CodableEnumUnavailableElementTestSuite.test("decode_unavailable_case") {
|
|
do {
|
|
let decoded = try decodeEnum(from: #"{"b":{"_0":{}}}"#)
|
|
expectUnreachable("Unexpectedly decoded \(decoded)")
|
|
} catch DecodingError.dataCorrupted {
|
|
// Expected error
|
|
} catch {
|
|
expectUnreachable("Unexpected error \(error)")
|
|
}
|
|
}
|
|
|
|
runAllTests()
|