Skip to content

Commit 6ee8288

Browse files
committed
Add test cases for beSuccess/beFailure
1 parent beff303 commit 6ee8288

File tree

2 files changed

+65
-8
lines changed

2 files changed

+65
-8
lines changed

Sources/Nimble/Matchers/BeResult.swift

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@ import Foundation
77
public func beSuccess<Success, Failure>(
88
test: ((Success) -> Void)? = nil
99
) -> Predicate<Result<Success, Failure>> {
10-
return Predicate.define("be <success(\(Success.self))>") { expression, message in
10+
return Predicate.define { expression in
11+
var rawMessage = "be <success(\(Success.self))>"
12+
if test != nil {
13+
rawMessage += " that satisfies block"
14+
}
15+
let message = ExpectationMessage.expectedActualValueTo(rawMessage)
16+
1117
guard case let .success(value)? = try expression.evaluate() else {
1218
return PredicateResult(status: .doesNotMatch, message: message)
1319
}
@@ -34,7 +40,13 @@ public func beSuccess<Success, Failure>(
3440
public func beFailure<Success, Failure>(
3541
test: ((Failure) -> Void)? = nil
3642
) -> Predicate<Result<Success, Failure>> {
37-
return Predicate.define("be <failure(\(Failure.self))>") { expression, message in
43+
return Predicate.define { expression in
44+
var rawMessage = "be <failure(\(Failure.self))>"
45+
if test != nil {
46+
rawMessage += " that satisfies block"
47+
}
48+
let message = ExpectationMessage.expectedActualValueTo(rawMessage)
49+
3850
guard case let .failure(error)? = try expression.evaluate() else {
3951
return PredicateResult(status: .doesNotMatch, message: message)
4052
}

Tests/NimbleTests/Matchers/BeResultTest.swift

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,54 @@ private struct StubError: Error, CustomDebugStringConvertible {
55
let debugDescription = "StubError"
66
}
77

8+
enum TestError: Error, Equatable, CustomDebugStringConvertible {
9+
case foo, bar
10+
11+
var debugDescription: String {
12+
switch self {
13+
case .foo:
14+
return "TestError.foo"
15+
case .bar:
16+
return "TestError.bar"
17+
}
18+
}
19+
}
20+
821
final class BeSuccessTest: XCTestCase {
922
func testPositiveMatch() {
1023
let result: Result<Int, Error> = .success(1)
1124
expect(result).to(beSuccess())
1225
}
1326

14-
func testPositiveMatchWithValueTesting() {
27+
func testPositiveMatchWithClosure() {
1528
let stubValue = 1
1629
let result: Result<Int, Error> = .success(stubValue)
1730
expect(result).to(beSuccess { value in
1831
expect(value).to(equal(stubValue))
1932
})
2033
}
2134

22-
func testNegativeMatch() {
35+
func testPositiveNegatedMatch() {
2336
let result: Result<Int, Error> = .failure(StubError())
2437
expect(result).toNot(beSuccess())
2538
}
2639

27-
func testExpectationFailureMessage() {
40+
func testNegativeMatches() {
2841
failsWithErrorMessage("expected to be <success(Int)>, got <failure(StubError)>") {
2942
let result: Result<Int, Error> = .failure(StubError())
3043
expect(result).to(beSuccess())
3144
}
45+
failsWithErrorMessage("expected to not be <success(Int)>, got <success(1)>") {
46+
let result: Result<Int, Error> = .success(1)
47+
expect(result).toNot(beSuccess())
48+
}
49+
50+
failsWithErrorMessage("expected to be <success(Int)> that satisfies block, got <success(1)>") {
51+
let result: Result<Int, Error> = .success(1)
52+
expect(result).to(beSuccess { _ in
53+
fail()
54+
})
55+
}
3256
}
3357
}
3458

@@ -38,22 +62,43 @@ final class BeFailureTest: XCTestCase {
3862
expect(result).to(beFailure())
3963
}
4064

41-
func testPositiveMatchWithValueTesting() {
65+
func testPositiveMatchWithClosure() {
4266
let result: Result<Int, Error> = .failure(StubError())
4367
expect(result).to(beFailure { error in
4468
expect(error).to(matchError(StubError.self))
4569
})
70+
71+
expect(Result<Int, TestError>.failure(.foo)).to(beFailure { error in
72+
expect(error).to(equal(.foo))
73+
})
4674
}
4775

48-
func testNegativeMatch() {
76+
func testPositiveNegatedMatch() {
4977
let result: Result<Int, Error> = .success(1)
5078
expect(result).toNot(beFailure())
5179
}
5280

53-
func testExpectationFailureMessage() {
81+
func testNegativeMatches() {
5482
failsWithErrorMessage("expected to be <failure(Error)>, got <success(1)>") {
5583
let result: Result<Int, Error> = .success(1)
5684
expect(result).to(beFailure())
5785
}
86+
failsWithErrorMessage("expected to not be <failure(Error)>, got <failure(StubError)>") {
87+
let result: Result<Int, Error> = .failure(StubError())
88+
expect(result).toNot(beFailure())
89+
}
90+
91+
failsWithErrorMessage("expected to be <failure(Error)> that satisfies block, got <failure(StubError)>") {
92+
let result: Result<Int, Error> = .failure(StubError())
93+
expect(result).to(beFailure { _ in
94+
fail()
95+
})
96+
}
97+
failsWithErrorMessage("expected to be <failure(TestError)> that satisfies block, got <failure(TestError.foo)>") {
98+
let result: Result<Int, TestError> = .failure(.foo)
99+
expect(result).to(beFailure { error in
100+
expect(error).to(equal(.bar))
101+
})
102+
}
58103
}
59104
}

0 commit comments

Comments
 (0)