-
Notifications
You must be signed in to change notification settings - Fork 104
/
ErrorContextTest.swift
124 lines (110 loc) · 3.61 KB
/
ErrorContextTest.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// Copyright (c) 2018-2020 XMLCoder contributors
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
//
// Created by Matvii Hodovaniuk on 12/27/18.
//
import Foundation
import XCTest
@testable import XMLCoder
final class ErrorContextTest: XCTestCase {
struct Container: Codable {
let value: [String: Int]
}
func testErrorContextFirstLine() {
let decoder = XMLDecoder()
decoder.errorContextLength = 8
let xmlString = "<blah //>"
let xmlData = xmlString.data(using: .utf8)!
XCTAssertThrowsError(try decoder.decode(Container.self,
from: xmlData)) { error in
guard case let DecodingError.dataCorrupted(ctx) = error,
let underlying = ctx.underlyingError else {
XCTAssert(false, "wrong error type thrown")
return
}
#if os(Linux)
// XML Parser returns a different column on Linux
// https://bugs.swift.org/browse/SR-11192
XCTAssertEqual(ctx.debugDescription, """
\(underlying.localizedDescription) \
at line 1, column 7:
`ah //>`
""")
#else
XCTAssertEqual(ctx.debugDescription, """
\(underlying.localizedDescription) \
at line 1, column 2:
`<blah `
""")
#endif
}
}
func testErrorContext() {
let decoder = XMLDecoder()
decoder.errorContextLength = 8
let xmlString =
"""
<container>
test1
</blah>
<container>
test2
</container>
"""
let xmlData = xmlString.data(using: .utf8)!
XCTAssertThrowsError(try decoder.decode(Container.self,
from: xmlData)) { error in
guard case let DecodingError.dataCorrupted(ctx) = error,
let underlying = ctx.underlyingError else {
XCTAssert(false, "wrong error type thrown")
return
}
#if os(Linux)
// XML Parser returns a different column on Linux
// https://bugs.swift.org/browse/SR-11192
XCTAssertEqual(ctx.debugDescription, """
\(underlying.localizedDescription) \
at line 4, column 1:
`blah>
<c`
""")
#else
XCTAssertEqual(ctx.debugDescription, """
\(underlying.localizedDescription) \
at line 3, column 8:
`blah>
<c`
""")
#endif
}
}
func testErrorContextSizeOutsizeContent() {
let decoder = XMLDecoder()
decoder.errorContextLength = 10
let xmlString =
"""
container>
test1
</blah>
<container>
test2
</container>
"""
let xmlData = xmlString.data(using: .utf8)!
XCTAssertThrowsError(try decoder.decode(Container.self,
from: xmlData)) { error in
guard case let DecodingError.dataCorrupted(ctx) = error,
let underlying = ctx.underlyingError else {
XCTAssert(false, "wrong error type thrown")
return
}
XCTAssertEqual(ctx.debugDescription, """
\(underlying.localizedDescription) \
at line 1, column 1:
`contai`
""")
}
}
}