Skip to content

Commit

Permalink
fix: tweak logic for handling C bridged enums, closes #34
Browse files Browse the repository at this point in the history
  • Loading branch information
krzysztofzablocki committed Oct 11, 2022
1 parent a00856a commit f627d00
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
5 changes: 3 additions & 2 deletions Sources/Difference.swift
Expand Up @@ -67,9 +67,10 @@ private struct Differ {
let receivedMirror = Mirror(reflecting: received)

guard expectedMirror.children.count != 0, receivedMirror.children.count != 0 else {
if String(dumping: received) != String(dumping: expected) {
let receivedDump = String(dumping: received)
if receivedDump != String(dumping: expected) {
return handleChildless(expected, expectedMirror, received, receivedMirror, level)
} else if expectedMirror.displayStyle == .enum {
} else if expectedMirror.displayStyle == .enum, receivedDump.hasPrefix("__C.") { // enum and C bridged
let expectedValue = enumIntValue(for: expected)
let receivedValue = enumIntValue(for: received)
if expectedValue != receivedValue {
Expand Down
26 changes: 26 additions & 0 deletions Tests/DifferenceTests/DifferenceTests.swift
Expand Up @@ -92,6 +92,17 @@ private enum State {
case loadedWithNoArguments
}

fileprivate struct ChartValue: Hashable {
enum MetricState: Hashable {
case positive
case warning
case neutral
}

let values: [Double]
let state: MetricState
}

extension String {
func adjustingFor(indentationType: IndentationType) -> String {
switch indentationType {
Expand Down Expand Up @@ -297,6 +308,12 @@ class DifferenceTests: XCTestCase {
received: ByteCountFormatter.CountStyle.decimal,
expectedResults: ["Received: 2\nExpected: 3\n"]
)

runTest(
expected: Formatter.Context.beginningOfSentence,
received: Formatter.Context.dynamic,
expectedResults: ["Received: 1\nExpected: 4\n"]
)
}

func test_canFindObjCEnumDifferenceInArrayOfEnums() {
Expand Down Expand Up @@ -348,6 +365,14 @@ class DifferenceTests: XCTestCase {
)
}

func test_cannotFindDifferenceWithSameSwiftEnumEmbeededInObjects() {
runTest(
expected: ChartValue(values: [1, 2], state: .positive),
received: ChartValue(values: [1, 2], state: .positive),
expectedResults: [""]
)
}

func test_cannotFindDifferenceWithSameObjects() {
runTest(expected: truth, received: truth, expectedResults: [""])
}
Expand Down Expand Up @@ -378,6 +403,7 @@ extension DifferenceTests {
("test_cannotFindDifferenceWithSameSwiftEnum", test_cannotFindDifferenceWithSameSwiftEnum),
("test_cannotFindDifferenceWithSameObjects", test_cannotFindDifferenceWithSameObjects),
("test_canFindObjCEnumDifferenceInArrayOfEnums", test_canFindObjCEnumDifferenceInArrayOfEnums),
("test_cannotFindDifferenceWithSameSwiftEnumEmbeededInObjects", test_cannotFindDifferenceWithSameSwiftEnumEmbeededInObjects),
("test_canFindObjCEnumDifferenceInArrayOfStructures", test_canFindObjCEnumDifferenceInArrayOfStructures),
]
}

0 comments on commit f627d00

Please sign in to comment.