@@ -78,7 +78,10 @@ final class Test_URIParser: Test_Runtime {
78
78
simpleUnexplode: . custom( " red,green,blue " , value: [ " " : [ " red " , " green " , " blue " ] ] ) ,
79
79
formDataExplode: " list=red&list=green&list=blue " ,
80
80
formDataUnexplode: " list=red,green,blue " ,
81
- deepObjectExplode: . custom( " object%5Blist%5D=red&object%5Blist%5D=green&object%5Blist%5D=blue " , value: [ : ] )
81
+ deepObjectExplode: . custom(
82
+ " object%5Blist%5D=red&object%5Blist%5D=green&object%5Blist%5D=blue " ,
83
+ expectedError: . malformedKeyValuePair( " list " )
84
+ )
82
85
) ,
83
86
value: [ " list " : [ " red " , " green " , " blue " ] ]
84
87
) ,
@@ -107,14 +110,26 @@ final class Test_URIParser: Test_Runtime {
107
110
for testCase in cases {
108
111
func testVariant( _ variant: Case . Variant , _ input: Case . Variants . Input ) throws {
109
112
var parser = URIParser ( configuration: variant. config, data: input. string [ ... ] )
110
- let parsedNode = try parser. parseRoot ( )
111
- XCTAssertEqual (
112
- parsedNode,
113
- input. valueOverride ?? testCase. value,
114
- " Failed for config: \( variant. name) " ,
115
- file: testCase. file,
116
- line: testCase. line
117
- )
113
+ do {
114
+ let parsedNode = try parser. parseRoot ( )
115
+ XCTAssertEqual (
116
+ parsedNode,
117
+ input. valueOverride ?? testCase. value,
118
+ " Failed for config: \( variant. name) " ,
119
+ file: testCase. file,
120
+ line: testCase. line
121
+ )
122
+ } catch {
123
+ guard let expectedError = input. expectedError,
124
+ let serializationError = error as? ParsingError else { throw error }
125
+ XCTAssertEqual (
126
+ expectedError,
127
+ serializationError,
128
+ " Failed for config: \( variant. name) " ,
129
+ file: testCase. file,
130
+ line: testCase. line
131
+ )
132
+ }
118
133
}
119
134
let variants = testCase. variants
120
135
try testVariant ( . formExplode, variants. formExplode)
@@ -147,19 +162,26 @@ extension Test_URIParser {
147
162
struct Input : ExpressibleByStringLiteral {
148
163
var string : String
149
164
var valueOverride : URIParsedNode ?
165
+ var expectedError : ParsingError ?
150
166
151
- init ( string: String , valueOverride: URIParsedNode ? = nil ) {
167
+ init ( string: String , valueOverride: URIParsedNode ? = nil , expectedError : ParsingError ? = nil ) {
152
168
self . string = string
153
169
self . valueOverride = valueOverride
170
+ self . expectedError = expectedError
154
171
}
155
172
156
173
static func custom( _ string: String , value: URIParsedNode ) -> Self {
157
- . init( string: string, valueOverride: value)
174
+ . init( string: string, valueOverride: value, expectedError: nil )
175
+ }
176
+
177
+ static func custom( _ string: String , expectedError: ParsingError ) -> Self {
178
+ . init( string: string, valueOverride: nil , expectedError: expectedError)
158
179
}
159
180
160
181
init ( stringLiteral value: String ) {
161
182
self . string = value
162
183
self . valueOverride = nil
184
+ self . expectedError = nil
163
185
}
164
186
}
165
187
0 commit comments