|
13 | 13 | //===----------------------------------------------------------------------===//
|
14 | 14 | import XCTest
|
15 | 15 | #if canImport(Foundation)
|
16 |
| -#if canImport(Darwin) |
17 |
| -import class Foundation.NSNull |
18 |
| -#else |
19 |
| -@preconcurrency import class Foundation.NSNull |
20 |
| -#endif |
| 16 | +@preconcurrency import Foundation |
| 17 | +import CoreFoundation |
21 | 18 | #endif
|
22 | 19 | @_spi(Generated) @testable import OpenAPIRuntime
|
23 | 20 |
|
@@ -80,8 +77,58 @@ final class Test_OpenAPIValue: Test_Runtime {
|
80 | 77 | """#
|
81 | 78 | try _testPrettyEncoded(container, expectedJSON: expectedString)
|
82 | 79 | }
|
83 |
| - #endif |
84 | 80 |
|
| 81 | + func testEncodingNSNumber() throws { |
| 82 | + func assertEncodedCF( |
| 83 | + _ value: CFNumber, |
| 84 | + as encodedValue: String, |
| 85 | + file: StaticString = #filePath, |
| 86 | + line: UInt = #line |
| 87 | + ) throws { |
| 88 | + #if canImport(ObjectiveC) |
| 89 | + let nsNumber = value as NSNumber |
| 90 | + #else |
| 91 | + let nsNumber = unsafeBitCast(self, to: NSNumber.self) |
| 92 | + #endif |
| 93 | + try assertEncoded(nsNumber, as: encodedValue, file: file, line: line) |
| 94 | + } |
| 95 | + func assertEncoded( |
| 96 | + _ value: NSNumber, |
| 97 | + as encodedValue: String, |
| 98 | + file: StaticString = #filePath, |
| 99 | + line: UInt = #line |
| 100 | + ) throws { |
| 101 | + let container = try OpenAPIValueContainer(unvalidatedValue: value) |
| 102 | + let encoder = JSONEncoder() |
| 103 | + encoder.outputFormatting = .sortedKeys |
| 104 | + let data = try encoder.encode(container) |
| 105 | + XCTAssertEqual(String(decoding: data, as: UTF8.self), encodedValue, file: file, line: line) |
| 106 | + } |
| 107 | + try assertEncoded(NSNumber(value: true as Bool), as: "true") |
| 108 | + try assertEncoded(NSNumber(value: false as Bool), as: "false") |
| 109 | + try assertEncoded(NSNumber(value: 24 as Int8), as: "24") |
| 110 | + try assertEncoded(NSNumber(value: 24 as Int16), as: "24") |
| 111 | + try assertEncoded(NSNumber(value: 24 as Int32), as: "24") |
| 112 | + try assertEncoded(NSNumber(value: 24 as Int64), as: "24") |
| 113 | + try assertEncoded(NSNumber(value: 24 as Int), as: "24") |
| 114 | + try assertEncoded(NSNumber(value: 24 as UInt8), as: "24") |
| 115 | + try assertEncoded(NSNumber(value: 24 as UInt16), as: "24") |
| 116 | + try assertEncoded(NSNumber(value: 24 as UInt32), as: "24") |
| 117 | + try assertEncoded(NSNumber(value: 24 as UInt64), as: "24") |
| 118 | + try assertEncoded(NSNumber(value: 24 as UInt), as: "24") |
| 119 | + #if canImport(ObjectiveC) |
| 120 | + try assertEncoded(NSNumber(value: 24 as NSInteger), as: "24") |
| 121 | + #endif |
| 122 | + try assertEncoded(NSNumber(value: 24 as CFIndex), as: "24") |
| 123 | + try assertEncoded(NSNumber(value: 24.1 as Float32), as: "24.1") |
| 124 | + try assertEncoded(NSNumber(value: 24.1 as Float64), as: "24.1") |
| 125 | + try assertEncoded(NSNumber(value: 24.1 as Float), as: "24.1") |
| 126 | + try assertEncoded(NSNumber(value: 24.1 as Double), as: "24.1") |
| 127 | + XCTAssertThrowsError(try assertEncodedCF(kCFNumberNaN, as: "-")) |
| 128 | + XCTAssertThrowsError(try assertEncodedCF(kCFNumberNegativeInfinity, as: "-")) |
| 129 | + XCTAssertThrowsError(try assertEncodedCF(kCFNumberPositiveInfinity, as: "-")) |
| 130 | + } |
| 131 | + #endif |
85 | 132 | func testEncoding_container_failure() throws {
|
86 | 133 | struct Foobar: Equatable {}
|
87 | 134 | XCTAssertThrowsError(try OpenAPIValueContainer(unvalidatedValue: Foobar())) { error in
|
|
0 commit comments