Skip to content

Commit f627d00

Browse files
fix: tweak logic for handling C bridged enums, closes #34
1 parent a00856a commit f627d00

2 files changed

Lines changed: 29 additions & 2 deletions

File tree

Sources/Difference.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ private struct Differ {
6767
let receivedMirror = Mirror(reflecting: received)
6868

6969
guard expectedMirror.children.count != 0, receivedMirror.children.count != 0 else {
70-
if String(dumping: received) != String(dumping: expected) {
70+
let receivedDump = String(dumping: received)
71+
if receivedDump != String(dumping: expected) {
7172
return handleChildless(expected, expectedMirror, received, receivedMirror, level)
72-
} else if expectedMirror.displayStyle == .enum {
73+
} else if expectedMirror.displayStyle == .enum, receivedDump.hasPrefix("__C.") { // enum and C bridged
7374
let expectedValue = enumIntValue(for: expected)
7475
let receivedValue = enumIntValue(for: received)
7576
if expectedValue != receivedValue {

Tests/DifferenceTests/DifferenceTests.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,17 @@ private enum State {
9292
case loadedWithNoArguments
9393
}
9494

95+
fileprivate struct ChartValue: Hashable {
96+
enum MetricState: Hashable {
97+
case positive
98+
case warning
99+
case neutral
100+
}
101+
102+
let values: [Double]
103+
let state: MetricState
104+
}
105+
95106
extension String {
96107
func adjustingFor(indentationType: IndentationType) -> String {
97108
switch indentationType {
@@ -297,6 +308,12 @@ class DifferenceTests: XCTestCase {
297308
received: ByteCountFormatter.CountStyle.decimal,
298309
expectedResults: ["Received: 2\nExpected: 3\n"]
299310
)
311+
312+
runTest(
313+
expected: Formatter.Context.beginningOfSentence,
314+
received: Formatter.Context.dynamic,
315+
expectedResults: ["Received: 1\nExpected: 4\n"]
316+
)
300317
}
301318

302319
func test_canFindObjCEnumDifferenceInArrayOfEnums() {
@@ -348,6 +365,14 @@ class DifferenceTests: XCTestCase {
348365
)
349366
}
350367

368+
func test_cannotFindDifferenceWithSameSwiftEnumEmbeededInObjects() {
369+
runTest(
370+
expected: ChartValue(values: [1, 2], state: .positive),
371+
received: ChartValue(values: [1, 2], state: .positive),
372+
expectedResults: [""]
373+
)
374+
}
375+
351376
func test_cannotFindDifferenceWithSameObjects() {
352377
runTest(expected: truth, received: truth, expectedResults: [""])
353378
}
@@ -378,6 +403,7 @@ extension DifferenceTests {
378403
("test_cannotFindDifferenceWithSameSwiftEnum", test_cannotFindDifferenceWithSameSwiftEnum),
379404
("test_cannotFindDifferenceWithSameObjects", test_cannotFindDifferenceWithSameObjects),
380405
("test_canFindObjCEnumDifferenceInArrayOfEnums", test_canFindObjCEnumDifferenceInArrayOfEnums),
406+
("test_cannotFindDifferenceWithSameSwiftEnumEmbeededInObjects", test_cannotFindDifferenceWithSameSwiftEnumEmbeededInObjects),
381407
("test_canFindObjCEnumDifferenceInArrayOfStructures", test_canFindObjCEnumDifferenceInArrayOfStructures),
382408
]
383409
}

0 commit comments

Comments
 (0)