Skip to content

Commit b0cee1b

Browse files
authored
Fix regression in beAnInstanceOf (#1174)
beAnInstanceOf was not correctly matching when an exact type as was expected was given. This fixes that by emulating the previous typing of beAnInstanceOf while still working when used as a submatcher
1 parent 0e445aa commit b0cee1b

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

Sources/Nimble/Matchers/BeAnInstanceOf.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public func beAnInstanceOf<T, U>(_ expectedType: T.Type) -> Matcher<U> {
55
let errorMessage = "be an instance of \(String(describing: expectedType))"
66
return Matcher.define { actualExpression in
77
let instance = try actualExpression.evaluate()
8-
guard let validInstance = instance else {
8+
guard let validInstance: Any = instance else {
99
return MatcherResult(
1010
status: .doesNotMatch,
1111
message: .expectedActualValueTo(errorMessage)

Tests/NimbleTests/Matchers/BeAKindOfTest.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,25 @@ final class BeAKindOfSwiftTest: XCTestCase {
2828
expect(testProtocolClass).to(beAKindOf(TestProtocol.self))
2929
expect(testProtocolClass).toNot(beAKindOf(TestStructConformingToProtocol.self))
3030

31+
expect(testProtocolClass as TestProtocol).to(beAKindOf(TestClassConformingToProtocol.self))
32+
expect(testProtocolClass as TestProtocol).to(beAKindOf(TestProtocol.self))
33+
expect(testProtocolClass as TestProtocol).toNot(beAKindOf(TestStructConformingToProtocol.self))
34+
3135
let testProtocolStruct = TestStructConformingToProtocol()
3236
expect(testProtocolStruct).to(beAKindOf(TestStructConformingToProtocol.self))
3337
expect(testProtocolStruct).to(beAKindOf(TestProtocol.self))
3438
expect(testProtocolStruct).toNot(beAKindOf(TestClassConformingToProtocol.self))
39+
40+
expect(testProtocolStruct as TestProtocol).to(beAKindOf(TestStructConformingToProtocol.self))
41+
expect(testProtocolStruct as TestProtocol).to(beAKindOf(TestProtocol.self))
42+
expect(testProtocolStruct as TestProtocol).toNot(beAKindOf(TestClassConformingToProtocol.self))
3543
}
3644

3745
func testNestedMatchers() {
3846
// This test is successful if it even compiles.
39-
let result: Result<Int, Error> = .success(1)
40-
expect(result).to(beSuccess(beAKindOf(Int.self)))
47+
expect(Result<Int, Error>.success(1)).to(beSuccess(beAKindOf(Int.self)))
48+
expect(Result<TestProtocol, Error>.success(TestClassConformingToProtocol())).to(beSuccess(beAKindOf(TestClassConformingToProtocol.self)))
49+
expect(Result<TestProtocol, Error>.success(TestClassConformingToProtocol())).to(beSuccess(beAKindOf(TestProtocol.self)))
4150
}
4251

4352
func testFailureMessages() {

Tests/NimbleTests/Matchers/BeAnInstanceOfTest.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,25 @@ final class BeAnInstanceOfTest: XCTestCase {
3030
expect(testProtocolClass).toNot(beAnInstanceOf(TestProtocol.self))
3131
expect(testProtocolClass).toNot(beAnInstanceOf(TestStructConformingToProtocol.self))
3232

33+
expect(testProtocolClass as TestProtocol).to(beAnInstanceOf(TestClassConformingToProtocol.self))
34+
expect(testProtocolClass as TestProtocol).toNot(beAnInstanceOf(TestProtocol.self))
35+
expect(testProtocolClass as TestProtocol).toNot(beAnInstanceOf(TestStructConformingToProtocol.self))
36+
3337
let testProtocolStruct = TestStructConformingToProtocol()
3438
expect(testProtocolStruct).to(beAnInstanceOf(TestStructConformingToProtocol.self))
3539
expect(testProtocolStruct).toNot(beAnInstanceOf(TestProtocol.self))
3640
expect(testProtocolStruct).toNot(beAnInstanceOf(TestClassConformingToProtocol.self))
41+
42+
expect(testProtocolStruct as TestProtocol).to(beAnInstanceOf(TestStructConformingToProtocol.self))
43+
expect(testProtocolStruct as TestProtocol).toNot(beAnInstanceOf(TestProtocol.self))
44+
expect(testProtocolStruct as TestProtocol).toNot(beAnInstanceOf(TestClassConformingToProtocol.self))
3745
}
3846

3947
func testNestedMatchers() {
4048
// This test is successful if it even compiles.
41-
let result: Result<Int, Error> = .success(1)
42-
expect(result).to(beSuccess(beAnInstanceOf(Int.self)))
49+
expect(Result<Int, Error>.success(1)).to(beSuccess(beAnInstanceOf(Int.self)))
50+
expect(Result<TestProtocol, Error>.success(TestClassConformingToProtocol())).to(beSuccess(beAnInstanceOf(TestClassConformingToProtocol.self)))
51+
expect(Result<TestProtocol, Error>.success(TestClassConformingToProtocol())).toNot(beSuccess(beAnInstanceOf(TestProtocol.self)))
4352
}
4453

4554
func testFailureMessages() {

0 commit comments

Comments
 (0)