Skip to content

Commit 3ec20ed

Browse files
committed
Merge branch '7.x-branch'
# Conflicts: # Sources/Nimble/Matchers/RaisesException.swift # Tests/NimbleTests/Matchers/ThrowAssertionTest.swift # Tests/NimbleTests/SynchronousTests.swift
2 parents 8aa77bc + b144799 commit 3ec20ed

File tree

11 files changed

+119
-87
lines changed

11 files changed

+119
-87
lines changed

Sources/Nimble/Adapters/AssertionRecorder.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public func withAssertionHandler(_ tempAssertionHandler: AssertionHandler,
9292
/// assertion handler when this is true. Defaults to false.
9393
///
9494
/// @see gatherFailingExpectations
95-
public func gatherExpectations(silently: Bool = false, closure: @escaping () -> Void) -> [AssertionRecord] {
95+
public func gatherExpectations(silently: Bool = false, closure: () -> Void) -> [AssertionRecord] {
9696
let previousRecorder = NimbleEnvironment.activeInstance.assertionHandler
9797
let recorder = AssertionRecorder()
9898
let handlers: [AssertionHandler]
@@ -119,7 +119,7 @@ public func gatherExpectations(silently: Bool = false, closure: @escaping () ->
119119
///
120120
/// @see gatherExpectations
121121
/// @see raiseException source for an example use case.
122-
public func gatherFailingExpectations(silently: Bool = false, closure: @escaping () -> Void) -> [AssertionRecord] {
122+
public func gatherFailingExpectations(silently: Bool = false, closure: () -> Void) -> [AssertionRecord] {
123123
let assertions = gatherExpectations(silently: silently, closure: closure)
124124
return assertions.filter { assertion in
125125
!assertion.success

Sources/Nimble/ExpectationMessage.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,10 @@ public indirect enum ExpectationMessage {
154154
// Backwards compatibility: converts ExpectationMessage tree to FailureMessage
155155
internal func update(failureMessage: FailureMessage) {
156156
switch self {
157-
case let .fail(msg):
157+
case let .fail(msg) where !msg.isEmpty:
158158
failureMessage.stringValue = msg
159+
case .fail:
160+
break
159161
case let .expectedTo(msg):
160162
failureMessage.actualValue = nil
161163
failureMessage.postfixMessage = msg

Sources/Nimble/Matchers/HaveCount.swift

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,39 @@ import Foundation
88
/// A Nimble matcher that succeeds when the actual Collection's count equals
99
/// the expected value
1010
public func haveCount<T: Collection>(_ expectedValue: T.IndexDistance) -> Predicate<T> {
11-
return Predicate.fromDeprecatedClosure { actualExpression, failureMessage in
11+
return Predicate.define { actualExpression in
1212
if let actualValue = try actualExpression.evaluate() {
13-
// swiftlint:disable:next line_length
14-
failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))"
13+
let message = ExpectationMessage
14+
.expectedCustomValueTo(
15+
"have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))",
16+
"\(actualValue.count)"
17+
)
18+
.appended(details: "Actual Value: \(stringify(actualValue))")
19+
1520
let result = expectedValue == actualValue.count
16-
failureMessage.actualValue = "\(actualValue.count)"
17-
failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))"
18-
return result
21+
return PredicateResult(bool: result, message: message)
1922
} else {
20-
return false
23+
return PredicateResult(status: .fail, message: .fail(""))
2124
}
22-
}.requireNonNil
25+
}
2326
}
2427

2528
/// A Nimble matcher that succeeds when the actual collection's count equals
2629
/// the expected value
2730
public func haveCount(_ expectedValue: Int) -> Predicate<NMBCollection> {
28-
return Predicate.fromDeprecatedClosure { actualExpression, failureMessage in
31+
return Predicate { actualExpression in
2932
if let actualValue = try actualExpression.evaluate() {
30-
// swiftlint:disable:next line_length
31-
failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))"
33+
let message = ExpectationMessage
34+
.expectedCustomValueTo(
35+
"have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))",
36+
"\(actualValue.count)"
37+
)
38+
.appended(details: "Actual Value: \(stringify(actualValue))")
39+
3240
let result = expectedValue == actualValue.count
33-
failureMessage.actualValue = "\(actualValue.count)"
34-
failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))"
35-
return result
41+
return PredicateResult(bool: result, message: message)
3642
} else {
37-
return false
43+
return PredicateResult(status: .fail, message: .fail(""))
3844
}
3945
}
4046
}

Sources/Nimble/Matchers/PostNotification.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ public func postNotifications<T>(
4747
let collector = NotificationCollector(notificationCenter: center)
4848
collector.startObserving()
4949
var once: Bool = false
50-
return Predicate.fromDeprecatedClosure { actualExpression, failureMessage in
50+
51+
return Predicate { actualExpression in
5152
let collectorNotificationsExpression = Expression(memoizedExpression: { _ in
5253
return collector.observedNotifications
5354
}, location: actualExpression.location, withoutCaching: true)
@@ -58,12 +59,13 @@ public func postNotifications<T>(
5859
_ = try actualExpression.evaluate()
5960
}
6061

62+
let failureMessage = FailureMessage()
6163
let match = try notificationsMatcher.matches(collectorNotificationsExpression, failureMessage: failureMessage)
6264
if collector.observedNotifications.isEmpty {
6365
failureMessage.actualValue = "no notifications"
6466
} else {
6567
failureMessage.actualValue = "<\(stringify(collector.observedNotifications))>"
6668
}
67-
return match
69+
return PredicateResult(bool: match, message: failureMessage.toExpectationMessage())
6870
}
6971
}

Sources/Nimble/Matchers/RaisesException.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ public func raiseException(
1717
reason: String? = nil,
1818
userInfo: NSDictionary? = nil,
1919
closure: ((NSException) -> Void)? = nil) -> Predicate<Any> {
20-
return Predicate.fromDeprecatedClosure { actualExpression, failureMessage in
21-
20+
return Predicate { actualExpression in
2221
var exception: NSException?
2322
let capture = NMBExceptionCapture(handler: ({ e in
2423
exception = e
@@ -29,10 +28,10 @@ public func raiseException(
2928
_ = try actualExpression.evaluate()
3029
}
3130
} catch {
32-
failureMessage.stringValue = "unexpected error thrown: <\(error)>"
33-
return false
31+
return PredicateResult(status: .fail, message: .fail("unexpected error thrown: <\(error)>"))
3432
}
3533

34+
let failureMessage = FailureMessage()
3635
setFailureMessageForException(
3736
failureMessage,
3837
exception: exception,
@@ -41,13 +40,15 @@ public func raiseException(
4140
userInfo: userInfo,
4241
closure: closure
4342
)
44-
return exceptionMatchesNonNilFieldsOrClosure(
43+
44+
let matches = exceptionMatchesNonNilFieldsOrClosure(
4545
exception,
4646
named: named,
4747
reason: reason,
4848
userInfo: userInfo,
4949
closure: closure
5050
)
51+
return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage())
5152
}
5253
}
5354

Sources/Nimble/Matchers/ThrowAssertion.swift

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import Foundation
22

33
public func throwAssertion() -> Predicate<Void> {
4-
return Predicate.fromDeprecatedClosure { actualExpression, failureMessage in
4+
return Predicate { actualExpression in
55
#if arch(x86_64) && (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE
6-
failureMessage.postfixMessage = "throw an assertion"
7-
failureMessage.actualValue = nil
8-
9-
var succeeded = true
6+
let message = ExpectationMessage.expectedTo("throw an assertion")
107

8+
var actualError: Error?
119
let caughtException: BadInstructionException? = catchBadInstruction {
1210
#if os(tvOS)
1311
if !NimbleEnvironment.activeInstance.suppressTVOSAssertionWarning {
@@ -27,21 +25,19 @@ public func throwAssertion() -> Predicate<Void> {
2725
#endif
2826
do {
2927
try actualExpression.evaluate()
30-
} catch let error {
31-
succeeded = false
32-
failureMessage.postfixMessage += "; threw error instead <\(error)>"
28+
} catch {
29+
actualError = error
3330
}
3431
}
3532

36-
if !succeeded {
37-
return false
38-
}
39-
40-
if caughtException == nil {
41-
return false
33+
if let actualError = actualError {
34+
return PredicateResult(
35+
bool: false,
36+
message: message.appended(message: "; threw error instead <\(actualError)>")
37+
)
38+
} else {
39+
return PredicateResult(bool: caughtException != nil, message: message)
4240
}
43-
44-
return true
4541
#elseif SWIFT_PACKAGE
4642
fatalError("The throwAssertion Nimble matcher does not currently support Swift CLI." +
4743
" You can silence this error by placing the test case inside an #if !SWIFT_PACKAGE" +

0 commit comments

Comments
 (0)