Skip to content

Commit a80e48a

Browse files
committed
Add tests for nested key mapping with delimiters
1 parent cfeb203 commit a80e48a

File tree

1 file changed

+156
-0
lines changed

1 file changed

+156
-0
lines changed

Tests/NestedKeysTests.swift

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,125 @@ class NestedKeysTests: XCTestCase {
126126
XCTAssertEqual(value.objectDict, valueFromParsedJSON.objectDict)
127127
}
128128

129+
func testNestedKeysWithDelimiter() {
130+
let JSON: [String: Any] = [
131+
"non.nested->key": "string",
132+
"com.hearst.ObjectMapper.nested": [
133+
"com.hearst.ObjectMapper.int64": NSNumber(value: INT64_MAX),
134+
"com.hearst.ObjectMapper.bool": true,
135+
"com.hearst.ObjectMapper.int": 255,
136+
"com.hearst.ObjectMapper.double": 100.0 as Double,
137+
"com.hearst.ObjectMapper.float": 50.0 as Float,
138+
"com.hearst.ObjectMapper.string": "String!",
139+
140+
"com.hearst.ObjectMapper.nested": [
141+
"int64Array": [NSNumber(value: INT64_MAX), NSNumber(value: INT64_MAX - 1), NSNumber(value: INT64_MAX - 10)],
142+
"boolArray": [false, true, false],
143+
"intArray": [1, 2, 3],
144+
"doubleArray": [1.0, 2.0, 3.0],
145+
"floatArray": [1.0 as Float, 2.0 as Float, 3.0 as Float],
146+
"stringArray": ["123", "ABC"],
147+
148+
"int64Dict": ["1": NSNumber(value: INT64_MAX)],
149+
"boolDict": ["2": true],
150+
"intDict": ["3": 999],
151+
"doubleDict": ["4": 999.999],
152+
"floatDict": ["5": 123.456 as Float],
153+
"stringDict": ["6": "InDict"],
154+
155+
"int64Enum": 1000,
156+
"intEnum": 255,
157+
"doubleEnum": 100.0,
158+
"floatEnum": 100.0,
159+
"stringEnum": "String B",
160+
161+
"com.hearst.ObjectMapper.nested": [
162+
"object": ["value": 987],
163+
"objectArray": [ ["value": 123], ["value": 456] ],
164+
"objectDict": ["key": ["value": 999]]
165+
]
166+
]
167+
]
168+
]
169+
170+
let mapper = Mapper<DelimiterNestedKeys>()
171+
172+
let value: DelimiterNestedKeys! = mapper.map(JSONObject: JSON)
173+
XCTAssertNotNil(value)
174+
175+
XCTAssertEqual(value.nonNestedString, "string")
176+
177+
XCTAssertEqual(value.int64, NSNumber(value: INT64_MAX))
178+
XCTAssertEqual(value.bool, true)
179+
XCTAssertEqual(value.int, 255)
180+
XCTAssertEqual(value.double, 100.0 as Double)
181+
XCTAssertEqual(value.float, 50.0 as Float)
182+
XCTAssertEqual(value.string, "String!")
183+
184+
let int64Array = [NSNumber(value: INT64_MAX), NSNumber(value: INT64_MAX - 1), NSNumber(value: INT64_MAX - 10)]
185+
XCTAssertEqual(value.int64Array, int64Array)
186+
XCTAssertEqual(value.boolArray, [false, true, false])
187+
XCTAssertEqual(value.intArray, [1, 2, 3])
188+
XCTAssertEqual(value.doubleArray, [1.0, 2.0, 3.0])
189+
XCTAssertEqual(value.floatArray, [1.0 as Float, 2.0 as Float, 3.0 as Float])
190+
XCTAssertEqual(value.stringArray, ["123", "ABC"])
191+
192+
XCTAssertEqual(value.int64Dict, ["1": NSNumber(value: INT64_MAX)])
193+
XCTAssertEqual(value.boolDict, ["2": true])
194+
XCTAssertEqual(value.intDict, ["3": 999])
195+
XCTAssertEqual(value.doubleDict, ["4": 999.999])
196+
XCTAssertEqual(value.floatDict, ["5": 123.456 as Float])
197+
XCTAssertEqual(value.stringDict, ["6": "InDict"])
198+
199+
XCTAssertEqual(value.int64Enum, Int64Enum.b)
200+
XCTAssertEqual(value.intEnum, IntEnum.b)
201+
// Skip tests due to float issue - #591
202+
// XCTAssertEqual(value.doubleEnum, DoubleEnum.b)
203+
// XCTAssertEqual(value.floatEnum, FloatEnum.b)
204+
XCTAssertEqual(value.stringEnum, StringEnum.B)
205+
206+
XCTAssertEqual(value.object?.value, 987)
207+
XCTAssertEqual(value.objectArray.map { $0.value }, [123, 456])
208+
XCTAssertEqual(value.objectDict["key"]?.value, 999)
209+
210+
let JSONFromValue = mapper.toJSON(value)
211+
let valueFromParsedJSON: DelimiterNestedKeys! = mapper.map(JSON: JSONFromValue)
212+
XCTAssertNotNil(valueFromParsedJSON)
213+
214+
XCTAssertEqual(value.nonNestedString, valueFromParsedJSON.nonNestedString)
215+
216+
XCTAssertEqual(value.int64, valueFromParsedJSON.int64)
217+
XCTAssertEqual(value.bool, valueFromParsedJSON.bool)
218+
XCTAssertEqual(value.int, valueFromParsedJSON.int)
219+
XCTAssertEqual(value.double, valueFromParsedJSON.double)
220+
XCTAssertEqual(value.float, valueFromParsedJSON.float)
221+
XCTAssertEqual(value.string, valueFromParsedJSON.string)
222+
223+
XCTAssertEqual(value.int64Array, valueFromParsedJSON.int64Array)
224+
XCTAssertEqual(value.boolArray, valueFromParsedJSON.boolArray)
225+
XCTAssertEqual(value.intArray, valueFromParsedJSON.intArray)
226+
XCTAssertEqual(value.doubleArray, valueFromParsedJSON.doubleArray)
227+
XCTAssertEqual(value.floatArray, valueFromParsedJSON.floatArray)
228+
XCTAssertEqual(value.stringArray, valueFromParsedJSON.stringArray)
229+
230+
XCTAssertEqual(value.int64Dict, valueFromParsedJSON.int64Dict)
231+
XCTAssertEqual(value.boolDict, valueFromParsedJSON.boolDict)
232+
XCTAssertEqual(value.intDict, valueFromParsedJSON.intDict)
233+
XCTAssertEqual(value.doubleDict, valueFromParsedJSON.doubleDict)
234+
XCTAssertEqual(value.floatDict, valueFromParsedJSON.floatDict)
235+
XCTAssertEqual(value.stringDict, valueFromParsedJSON.stringDict)
236+
237+
XCTAssertEqual(value.int64Enum, valueFromParsedJSON.int64Enum)
238+
XCTAssertEqual(value.intEnum, valueFromParsedJSON.intEnum)
239+
XCTAssertEqual(value.doubleEnum, valueFromParsedJSON.doubleEnum)
240+
XCTAssertEqual(value.floatEnum, valueFromParsedJSON.floatEnum)
241+
XCTAssertEqual(value.stringEnum, valueFromParsedJSON.stringEnum)
242+
243+
XCTAssertEqual(value.object, valueFromParsedJSON.object)
244+
XCTAssertEqual(value.objectArray, valueFromParsedJSON.objectArray)
245+
XCTAssertEqual(value.objectDict, valueFromParsedJSON.objectDict)
246+
}
247+
129248
}
130249

131250
class NestedKeys: Mappable {
@@ -203,6 +322,43 @@ class NestedKeys: Mappable {
203322
}
204323
}
205324

325+
class DelimiterNestedKeys: NestedKeys {
326+
override func mapping(map: Map) {
327+
nonNestedString <- map["non.nested->key", nested: false, delimiter: "->"]
328+
329+
int64 <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.int64", delimiter: "->"]
330+
bool <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.bool", delimiter: "->"]
331+
int <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.int", delimiter: "->"]
332+
double <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.double", delimiter: "->"]
333+
float <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.float", delimiter: "->"]
334+
string <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.string", delimiter: "->"]
335+
336+
int64Array <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->int64Array", delimiter: "->"]
337+
boolArray <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->boolArray", delimiter: "->"]
338+
intArray <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->intArray", delimiter: "->"]
339+
doubleArray <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->doubleArray", delimiter: "->"]
340+
floatArray <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->floatArray", delimiter: "->"]
341+
stringArray <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->stringArray", delimiter: "->"]
342+
343+
int64Dict <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->int64Dict", delimiter: "->"]
344+
boolDict <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->boolDict", delimiter: "->"]
345+
intDict <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->intDict", delimiter: "->"]
346+
doubleDict <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->doubleDict", delimiter: "->"]
347+
floatDict <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->floatDict", delimiter: "->"]
348+
stringDict <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->stringDict", delimiter: "->"]
349+
350+
int64Enum <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->int64Enum", delimiter: "->"]
351+
intEnum <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->intEnum", delimiter: "->"]
352+
doubleEnum <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->doubleEnum", delimiter: "->"]
353+
floatEnum <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->floatEnum", delimiter: "->"]
354+
stringEnum <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->stringEnum", delimiter: "->"]
355+
356+
object <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->object", delimiter: "->"]
357+
objectArray <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->objectArray", delimiter: "->"]
358+
objectDict <- map["com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->com.hearst.ObjectMapper.nested->objectDict", delimiter: "->"]
359+
}
360+
}
361+
206362
class Object: Mappable, Equatable {
207363
var value: Int = Int.min
208364

0 commit comments

Comments
 (0)