Skip to content

Commit f8b42f4

Browse files
committed
🚨 Fix deep Array comparison in tests
1 parent 213e057 commit f8b42f4

File tree

5 files changed

+74
-45
lines changed

5 files changed

+74
-45
lines changed

‎Sources/JSExpression.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,6 @@ extension JSExpression {
185185
return
186186
}
187187

188-
do {
189-
let typeError: ReturnType = try decoder.decode(value)
190-
} catch {
191-
dump(error)
192-
}
193-
194188
guard let decodedValue: ReturnType = try? decoder.decode(value) else {
195189
let typeError = JSErrorDomain.invalidReturnType(value: value)
196190
completeEvaluation(completionHandler, .failure(typeError))

‎Tests/JavaScriptKit/CodableModels.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,19 @@ class EmptyObject: Codable {
2525
// MARK: - User
2626

2727
/// A simple structure
28-
struct User: Codable, Equatable {
28+
struct User: Codable, Hashable {
29+
2930
let displayName: String
3031
let handle: String
3132

33+
var hashValue: Int {
34+
return displayName.hashValue & handle.hashValue
35+
}
36+
3237
static func == (lhs: User, rhs: User) -> Bool {
3338
return (lhs.displayName == rhs.displayName) && (lhs.handle == rhs.handle)
3439
}
40+
3541
}
3642

3743
// MARK: - Person

‎Tests/JavaScriptKit/Decoding/UnkeyedDecodingTests.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,7 @@ class UnkeyedDecoderTests: XCTestCase {
3030
let decoder = JavaScriptDecoder()
3131
let decodedArray: [[String]] = try decoder.decode(array)
3232

33-
XCTAssertEqual(decodedArray.count, array.count)
34-
35-
for (decoded, base) in zip(decodedArray, array) {
36-
XCTAssertEqual(decoded, base)
37-
}
33+
XCTAssertDeepEqual(decodedArray, array)
3834

3935
}
4036

@@ -66,11 +62,7 @@ class UnkeyedDecoderTests: XCTestCase {
6662
]
6763
]
6864

69-
XCTAssertEqual(decodedArray.count, expectedUsers.count)
70-
71-
for (decoded, expected) in zip(decodedArray, expectedUsers) {
72-
XCTAssertEqual(decoded, expected)
73-
}
65+
XCTAssertDeepEqual(decodedArray, expectedUsers)
7466

7567
}
7668

‎Tests/JavaScriptKit/Encoding/KeyedEncodingTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class KeyedEncodingTests: XCTestCase {
122122
]
123123
]
124124

125-
XCTAssertEqual(jsonObjectGraph, expectedGraph)
125+
XCTAssertDeepEqual(jsonObjectGraph, expectedGraph)
126126

127127
}
128128

@@ -156,7 +156,7 @@ class KeyedEncodingTests: XCTestCase {
156156
let encoder = JavaScriptEncoder()
157157
let encodedGraph = try encoder.encode([apple, google, facebook]).data(using: .utf8)!
158158

159-
guard let jsonObjectList = try JSONSerialization.jsonObject(with: encodedGraph, options: []) as? NSArray else {
159+
guard let jsonObjectList = try JSONSerialization.jsonObject(with: encodedGraph, options: []) as? [Any] else {
160160
XCTFail("Encoded didn't encode a valid JSON array literal for the object graph.")
161161
return
162162
}
@@ -194,7 +194,7 @@ class KeyedEncodingTests: XCTestCase {
194194
],
195195
]
196196

197-
XCTAssertTrue(jsonObjectList.isEqual(to: expectedList))
197+
XCTAssertDeepEqual(jsonObjectList, expectedList)
198198

199199
}
200200

Lines changed: 62 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import XCTest
22
import Foundation
33

4-
func XCTAssertEqual(_ dictionary: [String: Any], _ expected: [String: Any]) {
4+
/// Checks if two dictionaries are equal.
5+
func XCTAssertDeepEqual(_ dictionary: [String: Any], _ expected: [String: Any]) {
56

67
for (key, value) in dictionary {
78

@@ -10,48 +11,84 @@ func XCTAssertEqual(_ dictionary: [String: Any], _ expected: [String: Any]) {
1011
break
1112
}
1213

13-
if let hashable = value as? AnyHashable, let expectedHashable = expectedValue as? AnyHashable {
14-
XCTAssertEqual(hashable, expectedHashable)
15-
continue
16-
}
14+
let didCompare = XCTDeepCompare(value, expectedValue)
1715

18-
if let array = value as? [AnyHashable], let expectedArray = expectedValue as? [AnyHashable] {
19-
XCTAssertEqual(array, expectedArray)
20-
continue
16+
guard didCompare == true else {
17+
XCTFail("Could not compare values for key \(key)")
18+
return
2119
}
2220

23-
if let arrayArray = value as? [[AnyHashable]], let expectedArrayArray = expectedValue as? [[AnyHashable]] {
21+
}
22+
23+
}
24+
25+
/// Checks if two arrays are equal.
26+
func XCTAssertDeepEqual(_ array: [Any], _ expected: [Any]) {
27+
28+
guard array.count == expected.count else {
29+
XCTFail("Array does not have the expected number of items.")
30+
return
31+
}
32+
33+
var idx = 0
2434

25-
XCTAssertEqual(arrayArray.count, expectedArrayArray.count)
35+
for (value, expectedValue) in zip(array, expected) {
2636

27-
for (arr, expectedArr) in zip(arrayArray, expectedArrayArray) {
28-
XCTAssertEqual(arr, expectedArr)
29-
}
37+
let didCompare = XCTDeepCompare(value, expectedValue)
3038

31-
continue
32-
39+
guard didCompare == true else {
40+
XCTFail("Could not compare values at index \(idx).")
41+
return
3342
}
3443

44+
idx += 1
45+
46+
}
47+
48+
}
49+
50+
private func XCTDeepCompare(_ value: Any, _ expectedValue: Any) -> Bool {
51+
52+
if let hashable = value as? AnyHashable, let expectedHashable = expectedValue as? AnyHashable {
53+
XCTAssertEqual(hashable, expectedHashable)
54+
return true
55+
}
56+
57+
if let array = value as? [AnyHashable], let expectedArray = expectedValue as? [AnyHashable] {
58+
XCTAssertEqual(array, expectedArray)
59+
return true
60+
}
61+
62+
if let arrayArray = value as? [[AnyHashable]], let expectedArrayArray = expectedValue as? [[AnyHashable]] {
3563

36-
if let dictionary = value as? [String: Any], let expectedDictionary = expectedValue as? [String: Any] {
37-
XCTAssertEqual(dictionary, expectedDictionary)
38-
continue
64+
XCTAssertEqual(arrayArray.count, expectedArrayArray.count)
65+
66+
for (arr, expectedArr) in zip(arrayArray, expectedArrayArray) {
67+
XCTAssertEqual(arr, expectedArr)
3968
}
4069

41-
if let dictionaryArray = value as? [[String: Any]], let expectedDictionaryArray = expectedValue as? [[String: Any]] {
70+
return true
71+
72+
}
73+
4274

43-
XCTAssertEqual(dictionaryArray.count, expectedDictionaryArray.count)
75+
if let dictionary = value as? [String: Any], let expectedDictionary = expectedValue as? [String: Any] {
76+
XCTAssertDeepEqual(dictionary, expectedDictionary)
77+
return true
78+
}
4479

45-
for (dict, expectedDict) in zip(dictionaryArray, expectedDictionaryArray) {
46-
XCTAssertEqual(dict, expectedDict)
47-
}
80+
if let dictionaryArray = value as? [[String: Any]], let expectedDictionaryArray = expectedValue as? [[String: Any]] {
4881

49-
continue
82+
XCTAssertEqual(dictionaryArray.count, expectedDictionaryArray.count)
5083

84+
for (dict, expectedDict) in zip(dictionaryArray, expectedDictionaryArray) {
85+
XCTAssertDeepEqual(dict, expectedDict)
5186
}
5287

53-
XCTFail("Could not compare values for key \(key)")
88+
return true
5489

5590
}
5691

92+
return false
93+
5794
}

0 commit comments

Comments
 (0)