AmazonChimeSDK/AmazonChimeSDKTests/internal/ingestion/AnyCodableTests.swift (208 lines of code) (raw):
//
// AnyCodableTests.swift
// AmazonChimeSDK
//
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
//
@testable import AmazonChimeSDK
import XCTest
class AnyCodableTests: XCTestCase {
private let encoder = JSONEncoder()
private let decoder = JSONDecoder()
}
// MARK: Decoder tests
extension AnyCodableTests{
func testAnyCodableCanInitBoolFromDecoder() {
let data = true
let codableData = AnyCodable(data)
guard let decodedData = encodeAndDecode(data: codableData) else {
XCTFail("Failed to encode/decode data")
return
}
XCTAssertEqual(data, decodedData.value as? Bool)
}
func testAnyCodableCanInitIntFromDecoder() {
let data = Int(123)
let codableData = AnyCodable(data)
guard let decodedData = encodeAndDecode(data: codableData) else {
XCTFail("Failed to encode/decode data")
return
}
XCTAssertEqual(data, decodedData.value as? Int)
}
func testAnyCodableCanInitDoubleFromDecoder() {
let data = Double(123.456)
let codableData = AnyCodable(data)
guard let decodedData = encodeAndDecode(data: codableData) else {
XCTFail("Failed to encode/decode data")
return
}
XCTAssertEqual(data, decodedData.value as? Double)
}
func testAnyCodableCanInitStringFromDecoder() {
let data = String("test string")
let codableData = AnyCodable(data)
guard let decodedData = encodeAndDecode(data: codableData) else {
XCTFail("Failed to encode/decode data")
return
}
XCTAssertEqual(data, decodedData.value as? String)
}
func testAnyCodableCanInitArrayFromDecoder() {
let data:[AnyCodable] = [1,2,3]
guard let decodedData = encodeAndDecode(data: data) else {
XCTFail("Failed to encode/decode data")
return
}
XCTAssertEqual(data[0].value as? Int, decodedData[0].value as? Int)
}
func testAnyCodableCanInitDictFromDecoder() {
let data:[String: AnyCodable] = ["a":1, "b":2, "c":3]
guard let decodedData = encodeAndDecode(data: data) else {
XCTFail("Failed to encode/decode data")
return
}
XCTAssertEqual(data["a"]?.value as? Int, decodedData["a"]?.value as? Int)
}
private func encodeAndDecode(data: AnyCodable) -> AnyCodable? {
guard let encodedData = try? encoder.encode(data) else {
return nil
}
guard let decodedData = try? decoder.decode(AnyCodable.self, from: encodedData) else {
return nil
}
return decodedData
}
private func encodeAndDecode(data: [AnyCodable]) -> [AnyCodable]? {
guard let encodedData = try? encoder.encode(data) else {
return nil
}
guard let decodedData = try? decoder.decode([AnyCodable].self, from: encodedData) else {
return nil
}
return decodedData
}
private func encodeAndDecode(data: [String: AnyCodable]) -> [String: AnyCodable]? {
guard let encodedData = try? encoder.encode(data) else {
return nil
}
guard let decodedData = try? decoder.decode([String: AnyCodable].self, from: encodedData) else {
return nil
}
return decodedData
}
}
// MARK: Init tests
extension AnyCodableTests {
func testInitBoolLiteral() {
let data = true
let codableData = AnyCodable(booleanLiteral: data)
XCTAssertEqual(codableData.value as? Bool, data)
}
func testInitFloatLiteral() {
let data = Double(123.456)
let codableData = AnyCodable(floatLiteral: data)
XCTAssertEqual(codableData.value as? Double, data)
}
func testInitIntLiteral() {
let data = Int(123)
let codableData = AnyCodable(integerLiteral: data)
XCTAssertEqual(codableData.value as? Int, data)
}
func testInitStringLiteral() {
let data = String("abc")
let codableData = AnyCodable(stringLiteral: data)
XCTAssertEqual(codableData.value as? String, data)
}
func testInitArrayLiteral() {
let codableData = AnyCodable(arrayLiteral: "a", "b", "c")
let value = codableData.value as? [AnyCodable]
XCTAssertEqual(value?[0].value as? String, "a")
XCTAssertEqual(value?[1].value as? String, "b")
XCTAssertEqual(value?[2].value as? String, "c")
}
func testInitDictLiteral() {
let codableData = AnyCodable(dictionaryLiteral:
("a", AnyCodable(1)),
("b", AnyCodable(2)),
("c", AnyCodable(3))
)
let value = codableData.value as? [String: AnyCodable]
XCTAssertEqual(value?["a"]?.value as? Int, 1)
XCTAssertEqual(value?["b"]?.value as? Int, 2)
XCTAssertEqual(value?["c"]?.value as? Int, 3)
}
func testBoolAnyInitShouldInitialize() {
let data: Any? = true
XCTAssertNotNil(AnyCodable(data))
}
func testDoubleAnyInitShouldInitialize() {
let data: Any? = Float(123.456)
XCTAssertNotNil(AnyCodable(data))
}
func testFloatAnyInitShouldInitialize() {
let data: Any? = Float(123.456)
XCTAssertNotNil(AnyCodable(data))
}
func testIntAnyInitShouldInitialize() {
let data: Any? = Int(123)
XCTAssertNotNil(AnyCodable(data))
}
func testInt8AnyInitShouldInitialize() {
let data: Any? = Int8(123)
XCTAssertNotNil(AnyCodable(data))
}
func testInt16AnyInitShouldInitialize() {
let data: Any? = Int16(123)
XCTAssertNotNil(AnyCodable(data))
}
func testInt32AnyInitShouldInitialize() {
let data: Any? = Int32(123)
XCTAssertNotNil(AnyCodable(data))
}
func testInt64AnyInitShouldInitialize() {
let data: Any? = Int64(123)
XCTAssertNotNil(AnyCodable(data))
}
func testUIntAnyInitShouldInitialize() {
let data: Any? = UInt(123)
XCTAssertNotNil(AnyCodable(data))
}
func testUInt8AnyInitShouldInitialize() {
let data: Any? = UInt8(123)
XCTAssertNotNil(AnyCodable(data))
}
func testUInt16AnyInitShouldInitialize() {
let data: Any? = UInt16(123)
XCTAssertNotNil(AnyCodable(data))
}
func testUInt32AnyInitShouldInitialize() {
let data: Any? = UInt32(123)
XCTAssertNotNil(AnyCodable(data))
}
func testUInt64AnyInitShouldInitialize() {
let data: Any? = UInt64(123)
XCTAssertNotNil(AnyCodable(data))
}
func testStringAnyInitShouldInitialize() {
let data: Any? = String("abc")
XCTAssertNotNil(AnyCodable(data))
}
func testArrayAnyInitShouldInitialize() {
let data: Any? = [AnyCodable("a"), AnyCodable("b"), AnyCodable("c")]
XCTAssertNotNil(AnyCodable(data))
}
func testDictAnyInitShouldInitialize() {
let data: Any? = ["a": AnyCodable(1), "b": AnyCodable(2), "c": AnyCodable(3)]
XCTAssertNotNil(AnyCodable(data))
}
}
// MARK: Int cast helper method tests
extension AnyCodableTests {
func testInt64ValueShouldReturnValueIfAnyCodableIsInt64() {
let data = Int64(123)
let codableData = AnyCodable(data)
XCTAssertEqual(data, codableData.int64Value)
}
func testInt64ValueShouldReturnValueIfAnyCodableIsInt() {
let data = Int(123)
let codableData = AnyCodable(data)
XCTAssertEqual(Int64(data), codableData.int64Value)
}
func testInt64ValueShouldReturnNilIfAnyCodableIsNotInt64OrInt() {
let data = String("123")
let codableData = AnyCodable(data)
XCTAssertNil(codableData.int64Value)
}
}