@@ -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
131250class 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+
206362class Object : Mappable , Equatable {
207363 var value : Int = Int . min
208364
0 commit comments