Skip to content

Commit 9053227

Browse files
authored
Fix merge arrays with new value (#502)
1 parent d3d6e23 commit 9053227

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

LeanplumSDK/LeanplumSDK/ClassesSwift/ContentMerger.swift

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,15 @@ import Foundation
9191

9292
let newValue = diffDict[keyStr] ?? NSNull()
9393
// Value index is bigger than default array count
94-
// the value is a new one, append it to the array
95-
if merged.count <= i {
96-
merged.append(merge(vars: merged[i], diff: newValue))
97-
} else {
98-
// The new value overrides existing value at index
99-
merged[i] = merge(vars: merged[i], diff: newValue)
94+
// Fill the array with null values
95+
if i >= merged.count {
96+
while i >= merged.count {
97+
merged.append(NSNull())
98+
}
10099
}
100+
101+
// Override the default value at index
102+
merged[i] = merge(vars: merged[i], diff: newValue)
101103
}
102104
}
103105
return merged

LeanplumSDKApp/LeanplumSDKTests/Classes/ContentMergerTest.swift

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,30 @@ class ContentMergerTest: XCTestCase {
3636
XCTAssertEqual(arrMixed, result)
3737
}
3838

39-
func testMergeArraysWithDict() {
39+
func testMergeArrayWithDict() {
4040
let arr: [AnyHashable] = [1, 2, 3, 4]
4141
let arrDiff: AnyDictionary = ["[0]": 5, "[3]": 6]
4242
let expected: [AnyHashable] = [5, 2, 3, 6]
4343
let result = ContentMerger.merge(vars: arr, diff: arrDiff) as! [AnyHashable]
4444
XCTAssertEqual(expected, result)
4545
}
4646

47+
func testMergeArrayWithDictAdditionalValue() {
48+
let arr: [AnyHashable] = [1, 2, 3, 4]
49+
let arrDiff: AnyDictionary = ["[4]": 5]
50+
let expected: [AnyHashable] = [1, 2, 3, 4, 5]
51+
let result = ContentMerger.merge(vars: arr, diff: arrDiff) as! [AnyHashable]
52+
XCTAssertEqual(expected, result)
53+
}
54+
55+
func testMergeEmptyArrayWithDict() {
56+
let arr: [AnyHashable] = []
57+
let arrDiff: AnyDictionary = ["[4]": 5]
58+
let expected: [AnyHashable] = [NSNull(), NSNull(), NSNull(), NSNull(), 5]
59+
let result = ContentMerger.merge(vars: arr, diff: arrDiff) as! [AnyHashable]
60+
XCTAssertEqual(expected, result)
61+
}
62+
4763
func testMergeArraysMixed() {
4864
let arr: [AnyHashable] = [1, 2, "value", 4, NSNull()]
4965
let arrDiff: AnyDictionary = ["[0]": 6, "[2]": "newValue", "[4]": "anotherValue"]

0 commit comments

Comments
 (0)