Skip to content

Commit 571a93c

Browse files
committed
add test for basic type array
1 parent 814d9fe commit 571a93c

1 file changed

Lines changed: 74 additions & 0 deletions

File tree

Tests/ReerJSONTests/ReerJSONDecoderTests.swift

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1909,6 +1909,80 @@ class ReerJSONTests: XCTestCase {
19091909
XCTAssert(model4.c == [1, 2, 3])
19101910
}
19111911

1912+
func testBasicTypeArray() throws {
1913+
struct Test: Decodable {
1914+
var double: [Double]
1915+
var int: [Int]
1916+
var string: [String]
1917+
}
1918+
1919+
let data = """
1920+
{
1921+
"double": [1.1, 2.2, 3.3],
1922+
"int": [1, 2, 3],
1923+
"string": ["1", "2", "3"]
1924+
}
1925+
""".data(using: .utf8)!
1926+
let model = try ReerJSONDecoder().decode(Test.self, from: data)
1927+
XCTAssert(model.double == [1.1, 2.2, 3.3])
1928+
XCTAssert(model.int == [1, 2, 3])
1929+
XCTAssert(model.string == ["1", "2", "3"])
1930+
}
1931+
1932+
func testBasicTypeArray2() throws {
1933+
struct Test: Decodable {
1934+
var double: [Double]
1935+
var int: [Int]
1936+
var string: [String]
1937+
1938+
enum CodingKeys: String, CodingKey {
1939+
case double
1940+
case int
1941+
case string
1942+
}
1943+
1944+
init(from decoder: any Decoder) throws {
1945+
let keyed = try decoder.container(keyedBy: CodingKeys.self)
1946+
var doubleUnkeyed = try keyed.nestedUnkeyedContainer(forKey: .double)
1947+
var intUnkeyed = try keyed.nestedUnkeyedContainer(forKey: .int)
1948+
var stringUnkeyed = try keyed.nestedUnkeyedContainer(forKey: .string)
1949+
1950+
var doubleRet: [Double] = []
1951+
while !doubleUnkeyed.isAtEnd {
1952+
let element = try doubleUnkeyed.decode(Double.self)
1953+
doubleRet.append(element)
1954+
}
1955+
self.double = doubleRet
1956+
1957+
var intRet: [Int] = []
1958+
while !intUnkeyed.isAtEnd {
1959+
let element = try intUnkeyed.decode(Int.self)
1960+
intRet.append(element)
1961+
}
1962+
self.int = intRet
1963+
1964+
var stringRet: [String] = []
1965+
while !stringUnkeyed.isAtEnd {
1966+
let element = try stringUnkeyed.decode(String.self)
1967+
stringRet.append(element)
1968+
}
1969+
self.string = stringRet
1970+
}
1971+
}
1972+
1973+
let data = """
1974+
{
1975+
"double": [1.1, 2.2, 3.3],
1976+
"int": [1, 2, 3],
1977+
"string": ["1", "2", "3"]
1978+
}
1979+
""".data(using: .utf8)!
1980+
let model = try ReerJSONDecoder().decode(Test.self, from: data)
1981+
XCTAssert(model.double == [1.1, 2.2, 3.3])
1982+
XCTAssert(model.int == [1, 2, 3])
1983+
XCTAssert(model.string == ["1", "2", "3"])
1984+
}
1985+
19121986
#if !os(Linux)
19131987
@available(macOS 12, iOS 15, tvOS 15, watchOS 8, visionOS 1, *)
19141988
func testDecodableWithConfiguration() throws {

0 commit comments

Comments
 (0)