@@ -49,6 +49,16 @@ private enum _XCTAssertion {
49
49
private enum _XCTAssertionResult {
50
50
case Success
51
51
case ExpectedFailure( String ? )
52
+ case UnexpectedFailure( ErrorType )
53
+
54
+ var expected : Bool {
55
+ switch ( self ) {
56
+ case . UnexpectedFailure( _) :
57
+ return false
58
+ default :
59
+ return true
60
+ }
61
+ }
52
62
53
63
func failureDescription( assertion: _XCTAssertion ) -> String {
54
64
let explanation : String
@@ -59,6 +69,8 @@ private enum _XCTAssertionResult {
59
69
explanation = " failed: \( details) "
60
70
case . ExpectedFailure( _) :
61
71
explanation = " failed "
72
+ case . UnexpectedFailure( let error) :
73
+ explanation = " threw error \" \( error) \" "
62
74
}
63
75
64
76
if let name = assertion. name {
@@ -69,16 +81,21 @@ private enum _XCTAssertionResult {
69
81
}
70
82
}
71
83
72
- private func _XCTEvaluateAssertion( assertion: _XCTAssertion , @autoclosure message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__, @noescape expression: ( ) -> _XCTAssertionResult ) {
73
- let result = expression ( )
84
+ private func _XCTEvaluateAssertion( assertion: _XCTAssertion , @autoclosure message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__, @noescape expression: ( ) throws -> _XCTAssertionResult ) {
85
+ let result : _XCTAssertionResult
86
+ do {
87
+ result = try expression ( )
88
+ } catch {
89
+ result = . UnexpectedFailure( error)
90
+ }
74
91
75
92
switch result {
76
93
case . Success:
77
94
return
78
95
79
96
default :
80
97
if let handler = XCTFailureHandler {
81
- handler ( XCTFailure ( message: message ( ) , failureDescription: result. failureDescription ( assertion) , expected: true , file: file, line: line) )
98
+ handler ( XCTFailure ( message: message ( ) , failureDescription: result. failureDescription ( assertion) , expected: result . expected , file: file, line: line) )
82
99
}
83
100
}
84
101
}
@@ -138,13 +155,13 @@ private func _XCTEvaluateAssertion(assertion: _XCTAssertion, @autoclosure messag
138
155
///
139
156
/// Now calling failures in `AssertEmpty` will be reported in the file and on
140
157
/// the line that the assert function is *called*, not where it is defined.
141
- public func XCTAssert( @autoclosure expression: ( ) -> BooleanType , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
158
+ public func XCTAssert( @autoclosure expression: ( ) throws -> BooleanType , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
142
159
XCTAssertTrue ( expression, message, file: file, line: line)
143
160
}
144
161
145
- public func XCTAssertEqual< T : Equatable > ( @autoclosure expression1: ( ) -> T ? , @autoclosure _ expression2: ( ) -> T ? , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
162
+ public func XCTAssertEqual< T : Equatable > ( @autoclosure expression1: ( ) throws -> T ? , @autoclosure _ expression2: ( ) throws -> T ? , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
146
163
_XCTEvaluateAssertion ( . Equal, message: message, file: file, line: line) {
147
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
164
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
148
165
if value1 == value2 {
149
166
return . Success
150
167
} else {
@@ -153,9 +170,9 @@ public func XCTAssertEqual<T : Equatable>(@autoclosure expression1: () -> T?, @a
153
170
}
154
171
}
155
172
156
- public func XCTAssertEqual< T : Equatable > ( @autoclosure expression1: ( ) -> ArraySlice < T > , @autoclosure _ expression2: ( ) -> ArraySlice < T > , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
173
+ public func XCTAssertEqual< T : Equatable > ( @autoclosure expression1: ( ) throws -> ArraySlice < T > , @autoclosure _ expression2: ( ) throws -> ArraySlice < T > , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
157
174
_XCTEvaluateAssertion ( . Equal, message: message, file: file, line: line) {
158
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
175
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
159
176
if value1 == value2 {
160
177
return . Success
161
178
} else {
@@ -164,9 +181,9 @@ public func XCTAssertEqual<T : Equatable>(@autoclosure expression1: () -> ArrayS
164
181
}
165
182
}
166
183
167
- public func XCTAssertEqual< T : Equatable > ( @autoclosure expression1: ( ) -> ContiguousArray < T > , @autoclosure _ expression2: ( ) -> ContiguousArray < T > , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
184
+ public func XCTAssertEqual< T : Equatable > ( @autoclosure expression1: ( ) throws -> ContiguousArray < T > , @autoclosure _ expression2: ( ) throws -> ContiguousArray < T > , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
168
185
_XCTEvaluateAssertion ( . Equal, message: message, file: file, line: line) {
169
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
186
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
170
187
if value1 == value2 {
171
188
return . Success
172
189
} else {
@@ -175,9 +192,9 @@ public func XCTAssertEqual<T : Equatable>(@autoclosure expression1: () -> Contig
175
192
}
176
193
}
177
194
178
- public func XCTAssertEqual< T : Equatable > ( @autoclosure expression1: ( ) -> [ T ] , @autoclosure _ expression2: ( ) -> [ T ] , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
195
+ public func XCTAssertEqual< T : Equatable > ( @autoclosure expression1: ( ) throws -> [ T ] , @autoclosure _ expression2: ( ) throws -> [ T ] , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
179
196
_XCTEvaluateAssertion ( . Equal, message: message, file: file, line: line) {
180
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
197
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
181
198
if value1 == value2 {
182
199
return . Success
183
200
} else {
@@ -186,9 +203,9 @@ public func XCTAssertEqual<T : Equatable>(@autoclosure expression1: () -> [T], @
186
203
}
187
204
}
188
205
189
- public func XCTAssertEqual< T, U : Equatable > ( @autoclosure expression1: ( ) -> [ T : U ] , @autoclosure _ expression2: ( ) -> [ T : U ] , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
206
+ public func XCTAssertEqual< T, U : Equatable > ( @autoclosure expression1: ( ) throws -> [ T : U ] , @autoclosure _ expression2: ( ) throws -> [ T : U ] , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
190
207
_XCTEvaluateAssertion ( . Equal, message: message, file: file, line: line) {
191
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
208
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
192
209
if value1 == value2 {
193
210
return . Success
194
211
} else {
@@ -197,9 +214,9 @@ public func XCTAssertEqual<T, U : Equatable>(@autoclosure expression1: () -> [T
197
214
}
198
215
}
199
216
200
- public func XCTAssertEqualWithAccuracy< T : FloatingPointType > ( @autoclosure expression1: ( ) -> T , @autoclosure _ expression2: ( ) -> T , accuracy: T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
217
+ public func XCTAssertEqualWithAccuracy< T : FloatingPointType > ( @autoclosure expression1: ( ) throws -> T , @autoclosure _ expression2: ( ) throws -> T , accuracy: T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
201
218
_XCTEvaluateAssertion ( . EqualWithAccuracy, message: message, file: file, line: line) {
202
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
219
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
203
220
if abs ( value1. distanceTo ( value2) ) <= abs ( accuracy. distanceTo ( T ( 0 ) ) ) {
204
221
return . Success
205
222
} else {
@@ -208,9 +225,9 @@ public func XCTAssertEqualWithAccuracy<T : FloatingPointType>(@autoclosure expre
208
225
}
209
226
}
210
227
211
- public func XCTAssertFalse( @autoclosure expression: ( ) -> BooleanType , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
228
+ public func XCTAssertFalse( @autoclosure expression: ( ) throws -> BooleanType , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
212
229
_XCTEvaluateAssertion ( . False, message: message, file: file, line: line) {
213
- let value = expression ( )
230
+ let value = try expression ( )
214
231
if !value. boolValue {
215
232
return . Success
216
233
} else {
@@ -219,9 +236,9 @@ public func XCTAssertFalse(@autoclosure expression: () -> BooleanType, @autoclos
219
236
}
220
237
}
221
238
222
- public func XCTAssertGreaterThan< T : Comparable > ( @autoclosure expression1: ( ) -> T , @autoclosure _ expression2: ( ) -> T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
239
+ public func XCTAssertGreaterThan< T : Comparable > ( @autoclosure expression1: ( ) throws -> T , @autoclosure _ expression2: ( ) throws -> T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
223
240
_XCTEvaluateAssertion ( . GreaterThan, message: message, file: file, line: line) {
224
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
241
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
225
242
if value1 > value2 {
226
243
return . Success
227
244
} else {
@@ -230,9 +247,9 @@ public func XCTAssertGreaterThan<T : Comparable>(@autoclosure expression1: () ->
230
247
}
231
248
}
232
249
233
- public func XCTAssertGreaterThanOrEqual< T : Comparable > ( @autoclosure expression1: ( ) -> T , @autoclosure _ expression2: ( ) -> T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
250
+ public func XCTAssertGreaterThanOrEqual< T : Comparable > ( @autoclosure expression1: ( ) throws -> T , @autoclosure _ expression2: ( ) throws -> T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
234
251
_XCTEvaluateAssertion ( . GreaterThanOrEqual, message: message, file: file, line: line) {
235
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
252
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
236
253
if value1 >= value2 {
237
254
return . Success
238
255
} else {
@@ -241,9 +258,9 @@ public func XCTAssertGreaterThanOrEqual<T : Comparable>(@autoclosure expression1
241
258
}
242
259
}
243
260
244
- public func XCTAssertLessThan< T : Comparable > ( @autoclosure expression1: ( ) -> T , @autoclosure _ expression2: ( ) -> T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
261
+ public func XCTAssertLessThan< T : Comparable > ( @autoclosure expression1: ( ) throws -> T , @autoclosure _ expression2: ( ) throws -> T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
245
262
_XCTEvaluateAssertion ( . LessThan, message: message, file: file, line: line) {
246
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
263
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
247
264
if value1 < value2 {
248
265
return . Success
249
266
} else {
@@ -252,9 +269,9 @@ public func XCTAssertLessThan<T : Comparable>(@autoclosure expression1: () -> T,
252
269
}
253
270
}
254
271
255
- public func XCTAssertLessThanOrEqual< T : Comparable > ( @autoclosure expression1: ( ) -> T , @autoclosure _ expression2: ( ) -> T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
272
+ public func XCTAssertLessThanOrEqual< T : Comparable > ( @autoclosure expression1: ( ) throws -> T , @autoclosure _ expression2: ( ) throws -> T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
256
273
_XCTEvaluateAssertion ( . LessThanOrEqual, message: message, file: file, line: line) {
257
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
274
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
258
275
if value1 <= value2 {
259
276
return . Success
260
277
} else {
@@ -263,9 +280,9 @@ public func XCTAssertLessThanOrEqual<T : Comparable>(@autoclosure expression1: (
263
280
}
264
281
}
265
282
266
- public func XCTAssertNil( @autoclosure expression: ( ) -> Any ? , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
283
+ public func XCTAssertNil( @autoclosure expression: ( ) throws -> Any ? , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
267
284
_XCTEvaluateAssertion ( . Nil, message: message, file: file, line: line) {
268
- let value = expression ( )
285
+ let value = try expression ( )
269
286
if value == nil {
270
287
return . Success
271
288
} else {
@@ -274,9 +291,9 @@ public func XCTAssertNil(@autoclosure expression: () -> Any?, @autoclosure _ mes
274
291
}
275
292
}
276
293
277
- public func XCTAssertNotEqual< T : Equatable > ( @autoclosure expression1: ( ) -> T ? , @autoclosure _ expression2: ( ) -> T ? , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
294
+ public func XCTAssertNotEqual< T : Equatable > ( @autoclosure expression1: ( ) throws -> T ? , @autoclosure _ expression2: ( ) throws -> T ? , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
278
295
_XCTEvaluateAssertion ( . NotEqual, message: message, file: file, line: line) {
279
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
296
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
280
297
if value1 != value2 {
281
298
return . Success
282
299
} else {
@@ -285,9 +302,9 @@ public func XCTAssertNotEqual<T : Equatable>(@autoclosure expression1: () -> T?,
285
302
}
286
303
}
287
304
288
- public func XCTAssertNotEqual< T : Equatable > ( @autoclosure expression1: ( ) -> ContiguousArray < T > , @autoclosure _ expression2: ( ) -> ContiguousArray < T > , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
305
+ public func XCTAssertNotEqual< T : Equatable > ( @autoclosure expression1: ( ) throws -> ContiguousArray < T > , @autoclosure _ expression2: ( ) throws -> ContiguousArray < T > , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
289
306
_XCTEvaluateAssertion ( . NotEqual, message: message, file: file, line: line) {
290
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
307
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
291
308
if value1 != value2 {
292
309
return . Success
293
310
} else {
@@ -296,9 +313,9 @@ public func XCTAssertNotEqual<T : Equatable>(@autoclosure expression1: () -> Con
296
313
}
297
314
}
298
315
299
- public func XCTAssertNotEqual< T : Equatable > ( @autoclosure expression1: ( ) -> ArraySlice < T > , @autoclosure _ expression2: ( ) -> ArraySlice < T > , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
316
+ public func XCTAssertNotEqual< T : Equatable > ( @autoclosure expression1: ( ) throws -> ArraySlice < T > , @autoclosure _ expression2: ( ) throws -> ArraySlice < T > , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
300
317
_XCTEvaluateAssertion ( . NotEqual, message: message, file: file, line: line) {
301
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
318
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
302
319
if value1 != value2 {
303
320
return . Success
304
321
} else {
@@ -307,9 +324,9 @@ public func XCTAssertNotEqual<T : Equatable>(@autoclosure expression1: () -> Arr
307
324
}
308
325
}
309
326
310
- public func XCTAssertNotEqual< T : Equatable > ( @autoclosure expression1: ( ) -> [ T ] , @autoclosure _ expression2: ( ) -> [ T ] , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
327
+ public func XCTAssertNotEqual< T : Equatable > ( @autoclosure expression1: ( ) throws -> [ T ] , @autoclosure _ expression2: ( ) throws -> [ T ] , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
311
328
_XCTEvaluateAssertion ( . NotEqual, message: message, file: file, line: line) {
312
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
329
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
313
330
if value1 != value2 {
314
331
return . Success
315
332
} else {
@@ -318,9 +335,9 @@ public func XCTAssertNotEqual<T : Equatable>(@autoclosure expression1: () -> [T]
318
335
}
319
336
}
320
337
321
- public func XCTAssertNotEqual< T, U : Equatable > ( @autoclosure expression1: ( ) -> [ T : U ] , @autoclosure _ expression2: ( ) -> [ T : U ] , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
338
+ public func XCTAssertNotEqual< T, U : Equatable > ( @autoclosure expression1: ( ) throws -> [ T : U ] , @autoclosure _ expression2: ( ) throws -> [ T : U ] , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
322
339
_XCTEvaluateAssertion ( . NotEqual, message: message, file: file, line: line) {
323
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
340
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
324
341
if value1 != value2 {
325
342
return . Success
326
343
} else {
@@ -329,9 +346,9 @@ public func XCTAssertNotEqual<T, U : Equatable>(@autoclosure expression1: () ->
329
346
}
330
347
}
331
348
332
- public func XCTAssertNotEqualWithAccuracy< T : FloatingPointType > ( @autoclosure expression1: ( ) -> T , @autoclosure _ expression2: ( ) -> T , _ accuracy: T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
349
+ public func XCTAssertNotEqualWithAccuracy< T : FloatingPointType > ( @autoclosure expression1: ( ) throws -> T , @autoclosure _ expression2: ( ) throws -> T , _ accuracy: T , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
333
350
_XCTEvaluateAssertion ( . NotEqualWithAccuracy, message: message, file: file, line: line) {
334
- let ( value1, value2) = ( expression1 ( ) , expression2 ( ) )
351
+ let ( value1, value2) = ( try expression1 ( ) , try expression2 ( ) )
335
352
if abs ( value1. distanceTo ( value2) ) > abs ( accuracy. distanceTo ( T ( 0 ) ) ) {
336
353
return . Success
337
354
} else {
@@ -340,9 +357,9 @@ public func XCTAssertNotEqualWithAccuracy<T : FloatingPointType>(@autoclosure ex
340
357
}
341
358
}
342
359
343
- public func XCTAssertNotNil( @autoclosure expression: ( ) -> Any ? , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
360
+ public func XCTAssertNotNil( @autoclosure expression: ( ) throws -> Any ? , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
344
361
_XCTEvaluateAssertion ( . Nil, message: message, file: file, line: line) {
345
- let value = expression ( )
362
+ let value = try expression ( )
346
363
if value != nil {
347
364
return . Success
348
365
} else {
@@ -351,9 +368,9 @@ public func XCTAssertNotNil(@autoclosure expression: () -> Any?, @autoclosure _
351
368
}
352
369
}
353
370
354
- public func XCTAssertTrue( @autoclosure expression: ( ) -> BooleanType , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
371
+ public func XCTAssertTrue( @autoclosure expression: ( ) throws -> BooleanType , @autoclosure _ message: ( ) -> String = " " , file: StaticString = __FILE__, line: UInt = __LINE__) {
355
372
_XCTEvaluateAssertion ( . True, message: message, file: file, line: line) {
356
- let value = expression ( )
373
+ let value = try expression ( )
357
374
if value. boolValue {
358
375
return . Success
359
376
} else {
0 commit comments