66//
77
88import XCTest
9+ import JSONCodable
910
1011class IntBasedTests : XCTestCase {
1112
12- let encodedCompanies : [ String : Any ] = [
13+ let encodedIntBasedModel : [ String : Any ] = [
1314 " companies " : [
1415 0 : [ " name " : " Apple " ,
1516 " address " : " 1 Infinite Loop, Cupertino, CA "
@@ -23,13 +24,116 @@ class IntBasedTests: XCTestCase {
2324 let decodedCompany0 = Company ( name: " Apple " , address: " 1 Infinite Loop, Cupertino, CA " )
2425 let decodedCompany1 = Company ( name: " Propeller " , address: " 1212 broadway, Oakland, CA " )
2526
26- func testDecoding( ) {
27- guard let companies = try ? Companies ( object: encodedCompanies) else {
27+ lazy var decodedIntBasedModel : IntBasedModel = {
28+ IntBasedModel ( companies: [
29+ 0 : decodedCompany0,
30+ 1 : decodedCompany1
31+ ] )
32+ } ( )
33+
34+ let encodedComplexIntBasedModel : [ String : Any ] = [
35+ " users_by_likes " : [
36+ 1000 : [
37+ [ " id " : 27 , " likes " : 1000 , " full_name " : " Bob Jefferson " , " friends " : [ ] , ] ,
38+ [ " id " : 29 , " likes " : 1000 , " full_name " : " Jen Jackson " , " friends " : [ ] , ] ,
39+ ] ,
40+ 9000 : [
41+ [ " id " : 36 , " likes " : 9000 , " full_name " : " Grace Ferguson " , " friends " : [ ] , ] ,
42+ ]
43+ ]
44+ ]
45+
46+ let decodedUser1000_0 = User (
47+ id: 27 ,
48+ likes: 1000 ,
49+ name: " Bob Jefferson " ,
50+ email: nil ,
51+ company: nil ,
52+ friends: [ ] ,
53+ friendsLookup: nil
54+ )
55+
56+ let decodedUser1000_1 = User (
57+ id: 29 ,
58+ likes: 1000 ,
59+ name: " Jen Jackson " ,
60+ email: nil ,
61+ company: nil ,
62+ friends: [ ] ,
63+ friendsLookup: nil
64+ )
65+
66+ let decodedUser9000_0 = User (
67+ id: 36 ,
68+ likes: 9000 ,
69+ name: " Grace Ferguson " ,
70+ email: nil ,
71+ company: nil ,
72+ friends: [ ] ,
73+ friendsLookup: nil
74+ )
75+
76+ lazy var decodedComplexIntBasedModel : ComplexIntBasedModel = {
77+ ComplexIntBasedModel ( usersByLikes: [
78+ 1000 : [ decodedUser1000_0, decodedUser1000_1] ,
79+ 9000 : [ decodedUser9000_0]
80+ ] )
81+ } ( )
82+
83+ func testIntBasedDecoding( ) {
84+ guard let decoded = try ? IntBasedModel ( object: encodedIntBasedModel) else {
2885 XCTFail ( )
2986 return
3087 }
31- XCTAssertEqual ( companies. companies [ 0 ] , decodedCompany0)
32- XCTAssertEqual ( companies. companies [ 1 ] , decodedCompany1)
88+ XCTAssertEqual ( decoded. companies [ 0 ] , decodedCompany0)
89+ XCTAssertEqual ( decoded. companies [ 1 ] , decodedCompany1)
90+ }
91+
92+ func testIntBasedEncoding( ) {
93+ do {
94+ guard
95+ let json = try decodedIntBasedModel. toJSON ( ) as? JSONObject
96+ else { XCTFail ( ) ; return }
97+
98+ let decoded = try IntBasedModel ( object: json)
99+
100+ XCTAssertEqual ( decoded. companies. count, decodedIntBasedModel. companies. count)
101+ XCTAssertEqual ( decoded. companies [ 0 ] , decodedIntBasedModel. companies [ 0 ] )
102+ XCTAssertEqual ( decoded. companies [ 1 ] , decodedIntBasedModel. companies [ 1 ] )
103+ } catch {
104+ print ( " \( error. localizedDescription) " )
105+ XCTFail ( )
106+ }
107+ }
108+
109+ func testComplexIntBasedDecoding( ) {
110+ guard let decoded = try ? ComplexIntBasedModel ( object: encodedComplexIntBasedModel) else {
111+ XCTFail ( )
112+ return
113+ }
114+ XCTAssertEqual ( decoded. usersByLikes [ 1000 ] ? [ 0 ] , decodedUser1000_0)
115+ XCTAssertEqual ( decoded. usersByLikes [ 1000 ] ? [ 1 ] , decodedUser1000_1)
116+ XCTAssertEqual ( decoded. usersByLikes [ 9000 ] ? [ 0 ] , decodedUser9000_0)
117+ }
118+
119+ func testComplexIntBasedEncoding( ) {
120+ do {
121+ guard
122+ let json = try decodedComplexIntBasedModel. toJSON ( ) as? JSONObject
123+ else { XCTFail ( ) ; return }
124+
125+ let decoded = try ComplexIntBasedModel ( object: json)
126+
127+ XCTAssertEqual ( decoded. usersByLikes. count, 2 )
128+ XCTAssertEqual ( decoded. usersByLikes [ 1000 ] ? . count, 2 )
129+ XCTAssertEqual ( decoded. usersByLikes [ 1000 ] ? [ 0 ] , decodedUser1000_0)
130+ XCTAssertEqual ( decoded. usersByLikes [ 1000 ] ? [ 1 ] , decodedUser1000_1)
131+ XCTAssertEqual ( decoded. usersByLikes [ 9000 ] ? . count, 1 )
132+ XCTAssertEqual ( decoded. usersByLikes [ 9000 ] ? [ 0 ] , decodedUser9000_0)
133+ } catch {
134+ print ( " \( error. localizedDescription) " )
135+ XCTFail ( )
136+ }
33137 }
34138
35139}
0 commit comments