1+ import XCTest
2+ import TidyJSON
3+
4+ class ValueTests : XCTestCase {
5+
6+ var allTests : [ ( String , ( ) throws -> ( ) ) ] {
7+ return [
8+ ( " testNull " , testNull) ,
9+ ( " testTrue " , testTrue) ,
10+ ( " testFalse " , testFalse) ,
11+ ( " testNumber " , testNumber) ,
12+ ( " testString " , testString) ,
13+ ( " 1DArrayGetter " , testSingleDimensionalArraysGetter) ,
14+ ( " 2DArrayGetter " , testTwoDimensionalArraysGetter) ,
15+ ( " testObjectGetter " , testObjectGetter)
16+ ]
17+ }
18+
19+ func testNull( ) {
20+ let json : JSON = nil
21+ let json1 : JSON = [ nil , nil ]
22+ let json2 : JSON = [ " key " : nil ]
23+ XCTAssertTrue ( json. isNull)
24+ XCTAssertTrue ( json1 [ 0 ] . isNull)
25+ XCTAssertTrue ( json2 [ " key " ] . isNull)
26+ }
27+
28+ func testTrue( ) {
29+ let json : JSON = true
30+ let json1 : JSON = [ true , true ]
31+ let json2 : JSON = [ " key " : true ]
32+ XCTAssertTrue ( json. bool!)
33+ XCTAssertTrue ( json1 [ 0 ] . bool!)
34+ XCTAssertTrue ( json1 [ 1 ] . bool!)
35+
36+ XCTAssertTrue ( json2 [ " key " ] . bool!)
37+ }
38+
39+ func testFalse( ) {
40+ let json : JSON = false
41+ let json1 : JSON = [ false , false ]
42+ let json2 : JSON = [ " key " : false ]
43+ XCTAssertFalse ( json. bool!)
44+ XCTAssertFalse ( json1 [ 0 ] . bool!)
45+ XCTAssertFalse ( json1 [ 1 ] . bool!)
46+
47+ XCTAssertFalse ( json2 [ " key " ] . bool!)
48+ }
49+
50+ func testNumber( ) {
51+ let json : JSON = 1
52+ let json1 : JSON = 1.0
53+ let json2 : JSON = 1.23e2
54+ let json3 : JSON = 66662882838882382838823828832823.0
55+ let json4 : JSON = 3.0e-2
56+ XCTAssertEqual ( json. double!, 1.0 )
57+ XCTAssertEqual ( json. float!, 1.0 )
58+ XCTAssertEqual ( json. int!, 1 )
59+ XCTAssertEqual ( json1. double!, 1.0 )
60+ XCTAssertEqual ( json1. int!, 1 )
61+ XCTAssertEqual ( json2. float!, 1.23e2 )
62+ XCTAssertEqual ( json2. double!, 1.23e2 )
63+ XCTAssertEqual ( json3. double!, 66662882838882382838823828832823.0 )
64+ XCTAssertEqual ( json4. double!, 3.0e-2 )
65+ }
66+
67+ func testString( ) {
68+ let json : JSON = " "
69+ let json1 : JSON = " hello "
70+ let json2 : JSON = " he \r \n llo "
71+ let json3 : JSON = " hello \t \" world \" "
72+
73+ XCTAssertEqual ( json. string!, " " )
74+ XCTAssertEqual ( json1. string!, " hello " )
75+ XCTAssertEqual ( json2. string!, " he \r \n llo " )
76+ XCTAssertEqual ( json3. string!, " hello \t \" world \" " )
77+ }
78+
79+ func testSingleDimensionalArraysGetter( ) {
80+ let json : JSON = [ " 1 " , " 2 " , " a " , " B " , " D " ]
81+ XCTAssertEqual ( json [ 0 ] . string!, " 1 " )
82+ XCTAssertEqual ( json [ 1 ] . string!, " 2 " )
83+ XCTAssertEqual ( json [ 2 ] . string!, " a " )
84+ XCTAssertEqual ( json [ 3 ] . string!, " B " )
85+ XCTAssertEqual ( json [ 4 ] . string!, " D " )
86+ }
87+
88+ func testTwoDimensionalArraysGetter( ) {
89+ let json : JSON = [ " 1 " , [ 1 , 2 , 2.0 ] , true ]
90+ XCTAssertEqual ( json [ 0 ] . string!, " 1 " )
91+ XCTAssertEqual ( json [ 1 ] [ 0 ] . int!, 1 )
92+ XCTAssertEqual ( json [ 1 ] [ 1 ] . int!, 2 )
93+ XCTAssertEqual ( json [ 1 ] [ 2 ] . float!, 2.0 )
94+ XCTAssertEqual ( json [ 2 ] . bool!, true )
95+ }
96+
97+ func testObjectGetter( ) {
98+ let json : JSON = [ " key " : false , " key2 " : true , " key3 " : [ 1 , " hello " , 3 , " world " , [ " key4 " : nil , " key5 " : 12.03 , " key6 " : 12E-2 , " key7 " : - 12e-2 ] ] ]
99+ XCTAssertEqual ( json [ " key " ] . bool!, false )
100+ XCTAssertEqual ( json [ " key2 " ] . bool!, true )
101+ XCTAssertNotNil ( json [ " key3 " ] . array)
102+ XCTAssertNotNil ( json [ " key3 " ] [ 4 ] . object)
103+ XCTAssertEqual ( json [ " key3 " ] [ 4 ] [ " key4 " ] . isNull, true )
104+ XCTAssertEqual ( json [ " key3 " ] [ 4 ] [ " key5 " ] . float!, 12.03 )
105+ }
106+ }
107+
108+
109+ class ParserTests : XCTestCase {
110+
111+ var allTests : [ ( String , ( ) throws -> ( ) ) ] {
112+ return [
113+ ( " testParseNull " , testParseNull) ,
114+ ( " testParseString " , testParseString) ,
115+ ( " testParseTrue " , testParseTrue) ,
116+ ( " testParseFalse " , testParseFalse) ,
117+ ( " testParseNumber " , testParseNumber) ,
118+ ( " testParseArray " , testParseArray) ,
119+ ( " testParseObject " , testParseObject)
120+ ]
121+ }
122+
123+ func testParseNull( ) {
124+ let ( json, error) = JSON . parse ( " null " )
125+ XCTAssertTrue ( json!. isNull)
126+ XCTAssertTrue ( error == nil )
127+ let ( json1, error1) = JSON . parse ( " nu " )
128+ XCTAssertTrue ( json1 == nil )
129+ XCTAssertNotNil ( error1)
130+ let ( json2, error2) = JSON . parse ( " nil " )
131+ XCTAssertTrue ( json2 == nil )
132+ XCTAssertNotNil ( error2)
133+ }
134+
135+ func testParseString( ) {
136+ let ( json, _) = JSON . parse ( " \" hello \" " )
137+ let ( json1, _) = JSON . parse ( " \" \\ u0041pple \" " )
138+ let ( json2, _) = JSON . parse ( " \" \\ \\ line1 \\ n tab \\ t \\ r \\ / \" " )
139+ XCTAssertEqual ( json!. string!, " hello " )
140+ XCTAssertEqual ( json1!. string!, " Apple " )
141+ XCTAssertEqual ( json2!. string!, " \\ line1 \n tab \t \r / " )
142+
143+ let ( json3, error3) = JSON . parse ( " hello \" " )
144+ XCTAssertTrue ( json3 == nil )
145+ XCTAssertNotNil ( error3)
146+
147+ let ( json4, error4) = JSON . parse ( " \" hello " )
148+ XCTAssertTrue ( json4 == nil )
149+ XCTAssertNotNil ( error4)
150+ }
151+
152+ func testParseTrue( ) {
153+ let ( json, _) = JSON . parse ( " true " )
154+
155+ XCTAssertEqual ( json!. bool!, true )
156+
157+ let ( json1, error1) = JSON . parse ( " tru " )
158+ XCTAssertTrue ( json1 == nil )
159+ XCTAssertNotNil ( error1)
160+ }
161+
162+ func testParseFalse( ) {
163+ let ( json, _) = JSON . parse ( " false " )
164+
165+ XCTAssertEqual ( json!. bool!, false )
166+
167+ let ( json1, error1) = JSON . parse ( " fa " )
168+ XCTAssertTrue ( json1 == nil )
169+ XCTAssertNotNil ( error1)
170+ }
171+
172+ func testParseNumber( ) {
173+ let ( json, _) = JSON . parse ( " -120003e-1 " )
174+ XCTAssertEqual ( json!. double!, - 120003e-1 )
175+
176+ let ( json1, _) = JSON . parse ( " 2.3E12 " )
177+ XCTAssertEqual ( json1!. double!, 2.3E12 )
178+
179+ let ( json2, _) = JSON . parse ( " 7.450580596923828e-9 " )
180+ XCTAssertEqual ( json2!. double!, 7.450580596923828e-9 )
181+ }
182+
183+ func testParseArray( ) {
184+ let ( json, _) = JSON . parse ( " [] " )
185+ XCTAssertNotNil ( json!. array)
186+ XCTAssertEqual ( json!. count, 0 )
187+ let ( json1, _) = JSON . parse ( " [1,2,3 " )
188+ XCTAssertTrue ( json1 == nil )
189+
190+ let ( json2, _) = JSON . parse ( " ] " )
191+ XCTAssertTrue ( json2 == nil )
192+
193+ let ( json3, _) = JSON . parse ( " [1,2,hello] " )
194+ XCTAssertTrue ( json3 == nil )
195+
196+ let ( json4, _) = JSON . parse ( " [ \" hello] \" , 12, false, true, null] " )
197+ XCTAssertEqual ( json4!. count, 5 )
198+
199+ let ( json5, _) = JSON . parse ( " [,] " )
200+ XCTAssertTrue ( json5 == nil )
201+ }
202+
203+ func testParseObject( ) {
204+ let ( json, _) = JSON . parse ( " {} " )
205+ XCTAssertNotNil ( json!. object)
206+ XCTAssertEqual ( json!. count, 0 )
207+ let ( json1, _) = JSON . parse ( " { \" key \" :12} " )
208+ XCTAssertTrue ( json1 != nil )
209+
210+ let ( json2, _) = JSON . parse ( " { \" key \" , 123 " )
211+ XCTAssertTrue ( json2 == nil )
212+
213+ let ( json3, _) = JSON . parse ( " { \" key \" : \" hello \" } " )
214+ XCTAssertTrue ( json3![ " key " ] . string! == " hello " )
215+ }
216+ }
217+
218+ class DumpTests : XCTestCase {
219+ var allTests : [ ( String , ( ) throws -> ( ) ) ] {
220+ return [
221+ ( " testDumpDataValue " , testDumpDataValue) ,
222+ ( " testDumpArray " , testDumpArray) ,
223+ ( " testDumpObject " , testDumpObject)
224+ ]
225+ }
226+
227+ func testDumpDataValue( ) {
228+ let json : JSON = nil
229+ XCTAssertEqual ( json. dump ( ) , " null " )
230+
231+ let json1 : JSON = " 1.02 "
232+ XCTAssertEqual ( json1. dump ( ) , " \" 1.02 \" " )
233+
234+ let json2 : JSON = true
235+ XCTAssertEqual ( json2. dump ( ) , " true " )
236+
237+ let json3 : JSON = false
238+ XCTAssertEqual ( json3. dump ( ) , " false " )
239+
240+ let json4 : JSON = 1.23
241+ XCTAssertEqual ( json4. dump ( ) , " 1.23 " )
242+
243+ let json5 : JSON = " hello \n world. \r \\ yes /hello "
244+ XCTAssertEqual ( json5. dump ( ) , " \" hello \\ n world. \\ r \\ \\ yes \\ /hello \" " )
245+ }
246+
247+ func testDumpArray( ) {
248+ let json : JSON = [ " v " , 0.3 , true , false , nil , [ ] , [ " key " : false ] ]
249+ XCTAssertEqual ( json. dump ( ) , " [ \" v \" ,0.3,true,false,null,[],{ \" key \" :false}] " )
250+
251+ let s = " [ \" hello] \" ,12.0,false,true,null] "
252+ let ( json1, _) = JSON . parse ( s)
253+ XCTAssertEqual ( json1!. dump ( ) , s)
254+ }
255+
256+ func testDumpObject( ) {
257+ let json : JSON = [ " key2 " : [ false , true , 2.0 , [ ] , " hello " ] ]
258+ XCTAssertEqual ( json. dump ( ) , " { \" key2 \" :[false,true,2.0,[], \" hello \" ]} " )
259+
260+ let ( json1, _) = JSON . parse ( " { \" key \" : \" hello \" } " )
261+ XCTAssertEqual ( json1!. dump ( ) , " { \" key \" : \" hello \" } " )
262+ }
263+ }
264+
265+ XCTMain ( [ ValueTests ( ) , ParserTests ( ) , DumpTests ( ) ] )
0 commit comments