-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
6 changed files
with
284 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
76 changes: 76 additions & 0 deletions
76
Tests/JSONCodingTests/Encoding/JSONKeyedEncodingContainerTests.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
import XCTest | ||
@testable import PureSwiftJSONCoding | ||
@testable import PureSwiftJSONParsing | ||
|
||
class JSONKeyedEncodingContainerTests: XCTestCase { | ||
|
||
func testNestedKeyedContainer() { | ||
struct Object: Encodable { | ||
let firstName: String | ||
let surname: String | ||
|
||
func encode(to encoder: Encoder) throws { | ||
var container = encoder.container(keyedBy: CodingKeys.self) | ||
var nameContainer = container.nestedContainer(keyedBy: NameCodingKeys.self, forKey: .name) | ||
try nameContainer.encode(firstName, forKey: .firstName) | ||
|
||
var sameContainer = container.nestedContainer(keyedBy: NameCodingKeys.self, forKey: .name) | ||
try sameContainer.encode(surname, forKey: .surname) | ||
} | ||
|
||
private enum CodingKeys: String, CodingKey { | ||
case name = "name" | ||
} | ||
|
||
private enum NameCodingKeys: String, CodingKey { | ||
case firstName = "firstName" | ||
case surname = "surname" | ||
} | ||
} | ||
|
||
do { | ||
let object = Object(firstName: "Adam", surname: "Fowler") | ||
let json = try PureSwiftJSONCoding.JSONEncoder().encode(object) | ||
|
||
let parsed = try JSONParser().parse(bytes: json) | ||
XCTAssertEqual(parsed, .object(["name": .object(["firstName": .string("Adam"), "surname": .string("Fowler")])])) | ||
} | ||
catch { | ||
XCTFail("Unexpected error: \(error)") | ||
} | ||
} | ||
|
||
func testNestedUnkeyedContainer() { | ||
struct NumberStruct: Encodable { | ||
func encode(to encoder: Encoder) throws { | ||
var container = encoder.container(keyedBy: CodingKeys.self) | ||
var numbersContainer = container.nestedUnkeyedContainer(forKey: .numbers) | ||
var sameContainer = container.nestedUnkeyedContainer(forKey: .numbers) | ||
|
||
try numbersContainer.encode(1) | ||
try sameContainer.encode(2) | ||
try numbersContainer.encode(3) | ||
try sameContainer.encode(4) | ||
} | ||
|
||
private enum CodingKeys: String, CodingKey { | ||
case numbers | ||
} | ||
} | ||
|
||
do { | ||
let object = NumberStruct() | ||
let json = try PureSwiftJSONCoding.JSONEncoder().encode(object) | ||
|
||
let parsed = try JSONParser().parse(bytes: json) | ||
XCTAssertEqual(parsed, .object(["numbers": .array([.number("1"), .number("2"), .number("3"), .number("4")])])) | ||
} | ||
catch { | ||
XCTFail("Unexpected error: \(error)") | ||
} | ||
} | ||
|
||
} | ||
|
||
|
||
|
66 changes: 66 additions & 0 deletions
66
Tests/JSONCodingTests/Encoding/JSONUnkeyedEncodingContainerTests.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
import XCTest | ||
@testable import PureSwiftJSONCoding | ||
@testable import PureSwiftJSONParsing | ||
|
||
class JSONUnkeyedEncodingContainerTests: XCTestCase { | ||
|
||
func testNestedKeyedContainer() { | ||
struct ObjectInArray: Encodable { | ||
let firstName: String | ||
let surname: String | ||
|
||
func encode(to encoder: Encoder) throws { | ||
var container = encoder.unkeyedContainer() | ||
var nestedContainer = container.nestedContainer(keyedBy: NameCodingKeys.self) | ||
try nestedContainer.encode(firstName, forKey: .firstName) | ||
try nestedContainer.encode(surname, forKey: .surname) | ||
} | ||
|
||
private enum NameCodingKeys: String, CodingKey { | ||
case firstName = "firstName" | ||
case surname = "surname" | ||
} | ||
} | ||
|
||
do { | ||
let object = ObjectInArray(firstName: "Adam", surname: "Fowler") | ||
let json = try PureSwiftJSONCoding.JSONEncoder().encode(object) | ||
|
||
let parsed = try JSONParser().parse(bytes: json) | ||
XCTAssertEqual(parsed, .array([.object(["firstName": .string("Adam"), "surname": .string("Fowler")])])) | ||
} | ||
catch { | ||
XCTFail("Unexpected error: \(error)") | ||
} | ||
} | ||
|
||
func testNestedUnkeyedContainer() { | ||
struct NumbersInArray: Encodable { | ||
let numbers: [Int] | ||
|
||
func encode(to encoder: Encoder) throws { | ||
var container = encoder.unkeyedContainer() | ||
var numbersContainer = container.nestedUnkeyedContainer() | ||
try numbers.forEach() { try numbersContainer.encode($0) } | ||
} | ||
|
||
private enum CodingKeys: String, CodingKey { | ||
case numbers | ||
} | ||
} | ||
|
||
do { | ||
let object = NumbersInArray(numbers: [1, 2, 3, 4]) | ||
let json = try PureSwiftJSONCoding.JSONEncoder().encode(object) | ||
|
||
let parsed = try JSONParser().parse(bytes: json) | ||
XCTAssertEqual(parsed, .array([.array([.number("1"), .number("2"), .number("3"), .number("4")])])) | ||
} | ||
catch { | ||
XCTFail("Unexpected error: \(error)") | ||
} | ||
} | ||
} | ||
|
||
|
||
|