53 lines
1.4 KiB
Swift
53 lines
1.4 KiB
Swift
//
|
|
// Copyright 2023 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
@testable import SignalServiceKit
|
|
public import XCTest
|
|
|
|
public class UnknownEnumCodableTest: XCTestCase {
|
|
|
|
enum StringEnum: String, UnknownEnumCodable {
|
|
case first
|
|
case second
|
|
case unknown
|
|
}
|
|
|
|
func test_unknownStringEnum() throws {
|
|
let cases: [String: StringEnum] = [
|
|
"\"first\"": .first,
|
|
"\"second\"": .second,
|
|
"\"unknown\"": .unknown,
|
|
"\"whatever\"": .unknown,
|
|
"\"\"": .unknown
|
|
]
|
|
let decoder = JSONDecoder()
|
|
for (raw, expected) in cases {
|
|
let parsed = try decoder.decode(StringEnum.self, from: raw.data(using: .utf8)!)
|
|
XCTAssertEqual(parsed, expected)
|
|
}
|
|
}
|
|
|
|
enum IntEnum: Int, UnknownEnumCodable {
|
|
case hundo = 100
|
|
case life = 42
|
|
case unknown = -1
|
|
}
|
|
|
|
func test_unknownIntEnum() throws {
|
|
let cases: [String: IntEnum] = [
|
|
"100": .hundo,
|
|
"42": .life,
|
|
"-1": .unknown,
|
|
"333": .unknown,
|
|
"0": .unknown
|
|
]
|
|
let decoder = JSONDecoder()
|
|
for (raw, expected) in cases {
|
|
let parsed = try decoder.decode(IntEnum.self, from: raw.data(using: .utf8)!)
|
|
XCTAssertEqual(parsed, expected)
|
|
}
|
|
}
|
|
}
|