72 lines
2.0 KiB
Swift
72 lines
2.0 KiB
Swift
//
|
|
// JSONEncoderTests.swift
|
|
//
|
|
//
|
|
// Created by Sergej Jaskiewicz on 10.12.2019.
|
|
//
|
|
|
|
#if !WASI // TEST_DISCOVERY_CONDITION
|
|
|
|
import Foundation
|
|
import XCTest
|
|
|
|
#if OPENCOMBINE_COMPATIBILITY_TEST
|
|
import Combine
|
|
#else
|
|
import OpenCombine
|
|
import OpenCombineFoundation
|
|
#endif
|
|
|
|
@available(macOS 10.15, iOS 13.0, *)
|
|
final class JSONEncoderTests: XCTestCase {
|
|
|
|
func testSuccessfullyEncode() {
|
|
let encoder = JSONEncoder()
|
|
let input = [Subscribers.Completion<TestingError>.finished]
|
|
var actualOutput: String?
|
|
var actualCompletion: Subscribers.Completion<Error>?
|
|
|
|
let cancellable = Just(input)
|
|
.encode(encoder: encoder)
|
|
.map { String(decoding: $0, as: UTF8.self) }
|
|
.sink(receiveCompletion: { actualCompletion = $0 },
|
|
receiveValue: { actualOutput = $0 })
|
|
|
|
switch actualCompletion {
|
|
case .finished?:
|
|
XCTAssertEqual(actualOutput, #"[{"success":true}]"#)
|
|
case .failure(let error)?:
|
|
XCTFail("Unexpected failure received: \(error)")
|
|
case nil:
|
|
XCTFail("Expected completion")
|
|
}
|
|
cancellable.cancel()
|
|
}
|
|
|
|
func testEncodingFailure() {
|
|
let encoder = JSONEncoder()
|
|
let input = Double.nan
|
|
var actualOutput: String?
|
|
var actualCompletion: Subscribers.Completion<Error>?
|
|
let cancellable = Just(input)
|
|
.encode(encoder: encoder)
|
|
.map { String(decoding: $0, as: UTF8.self) }
|
|
.sink(receiveCompletion: { actualCompletion = $0 },
|
|
receiveValue: { actualOutput = $0 })
|
|
|
|
switch actualCompletion {
|
|
case .finished?:
|
|
XCTFail("Unexpected success")
|
|
case .failure(EncodingError.invalidValue)?:
|
|
XCTAssertNil(actualOutput)
|
|
case .failure(let error)?:
|
|
XCTFail("Unexpected failure received: \(error)")
|
|
case nil:
|
|
XCTFail("Expected completion")
|
|
}
|
|
cancellable.cancel()
|
|
}
|
|
}
|
|
|
|
#endif // !WASI
|