forked from CoreOffice/XMLCoder
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AttributedIntrinsicTest.swift
102 lines (85 loc) · 2.7 KB
/
AttributedIntrinsicTest.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
// AttributedIntrinsicTest.swift
// XMLCoderTests
//
// Created by Joseph Mattiello on 1/23/19.
//
import Foundation
import XCTest
@testable import XMLCoder
let fooXML = """
<?xml version="1.0" encoding="UTF-8"?>
<foo id="123">456</foo>
""".data(using: .utf8)!
private struct Foo: Codable, DynamicNodeEncoding {
let id: String
let value: String
enum CodingKeys: String, CodingKey {
case id
case value
}
static func nodeEncoding(forKey key: CodingKey) -> XMLEncoder.NodeEncoding {
switch key {
case CodingKeys.id:
return .attribute
default:
return .element
}
}
}
private struct FooEmptyKeyed: Codable, DynamicNodeEncoding {
let id: String
let unkeyedValue: Int
enum CodingKeys: String, CodingKey {
case id
case unkeyedValue = ""
}
static func nodeEncoding(forKey key: CodingKey) -> XMLEncoder.NodeEncoding {
switch key {
case CodingKeys.id:
return .attribute
default:
return .element
}
}
}
final class AttributedIntrinsicTest: XCTestCase {
func testEncode() {
let encoder = XMLEncoder()
encoder.outputFormatting = []
let foo1 = FooEmptyKeyed(id: "123", unkeyedValue: 456)
let header = XMLHeader(version: 1.0, encoding: "UTF-8")
do {
let encoded = try encoder.encode(foo1, withRootKey: "foo", header: header)
let xmlString = String(data: encoded, encoding: .utf8)
XCTAssertNotNil(xmlString)
print(xmlString!)
// Test string equivlancy
let encodedXML = xmlString!.trimmingCharacters(in: .whitespacesAndNewlines)
let originalXML = String(data: fooXML, encoding: .utf8)!.trimmingCharacters(in: .whitespacesAndNewlines)
XCTAssertEqual(encodedXML, originalXML)
} catch {
print("Test threw error: " + error.localizedDescription)
XCTFail(error.localizedDescription)
}
}
func testDecode() {
do {
let decoder = XMLDecoder()
decoder.errorContextLength = 10
let foo1 = try decoder.decode(Foo.self, from: fooXML)
XCTAssertEqual(foo1.id, "123")
XCTAssertEqual(foo1.value, "456")
let foo2 = try decoder.decode(FooEmptyKeyed.self, from: fooXML)
XCTAssertEqual(foo2.id, "123")
XCTAssertEqual(foo2.unkeyedValue, 456)
} catch {
print("Test threw error: " + error.localizedDescription)
XCTFail(error.localizedDescription)
}
}
static var allTests = [
("testEncode", testEncode),
("testDecode", testDecode),
]
}