/KSJSONTests/KSJSONTests.m

https://github.com/kstenerud/KSJSON · Objective C · 1112 lines · 996 code · 83 blank · 33 comment · 6 complexity · 076afd1e2877de8999302c1702238718 MD5 · raw file

  1. //
  2. // KSJSONTests.m
  3. // KSJSONTests
  4. //
  5. // Created by Karl Stenerud on 10/29/11.
  6. // Copyright (c) 2011 Karl Stenerud. All rights reserved.
  7. //
  8. // Permission is hereby granted, free of charge, to any person obtaining a copy
  9. // of this software and associated documentation files (the "Software"), to deal
  10. // in the Software without restriction, including without limitation the rights
  11. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  12. // copies of the Software, and to permit persons to whom the Software is
  13. // furnished to do so, subject to the following conditions:
  14. //
  15. // The above copyright notice and this permission notice shall remain in place
  16. // in this source code.
  17. //
  18. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  22. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  23. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  24. // THE SOFTWARE.
  25. //
  26. #import <SenTestingKit/SenTestingKit.h>
  27. #import "KSJSON.h"
  28. @interface KSJSONTests : SenTestCase {} @end
  29. @implementation KSJSONTests
  30. - (void)testSerializeDeserializeArrayEmpty
  31. {
  32. NSError* error = (NSError*)self;
  33. NSString* expected = @"[]";
  34. id original = [NSArray array];
  35. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  36. STAssertNotNil(jsonString, @"");
  37. STAssertNil(error, @"");
  38. STAssertEqualObjects(jsonString, expected, @"");
  39. id result = [KSJSON deserializeString:jsonString error:&error];
  40. STAssertNotNil(result, @"");
  41. STAssertNil(error, @"");
  42. STAssertEqualObjects(result, original, @"");
  43. }
  44. - (void) testSerializeDeserializeArrayNull
  45. {
  46. NSError* error = (NSError*)self;
  47. NSString* expected = @"[null]";
  48. id original = [NSArray arrayWithObjects:
  49. [NSNull null],
  50. nil];
  51. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  52. STAssertNotNil(jsonString, @"");
  53. STAssertNil(error, @"");
  54. STAssertEqualObjects(jsonString, expected, @"");
  55. id result = [KSJSON deserializeString:jsonString error:&error];
  56. STAssertNotNil(result, @"");
  57. STAssertNil(error, @"");
  58. STAssertEqualObjects(result, original, @"");
  59. }
  60. - (void) testSerializeDeserializeArrayBoolTrue
  61. {
  62. NSError* error = (NSError*)self;
  63. NSString* expected = @"[true]";
  64. id original = [NSArray arrayWithObjects:
  65. [NSNumber numberWithBool:YES],
  66. nil];
  67. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  68. STAssertNotNil(jsonString, @"");
  69. STAssertNil(error, @"");
  70. STAssertEqualObjects(jsonString, expected, @"");
  71. id result = [KSJSON deserializeString:jsonString error:&error];
  72. STAssertNotNil(result, @"");
  73. STAssertNil(error, @"");
  74. STAssertEqualObjects(result, original, @"");
  75. }
  76. - (void) testSerializeDeserializeArrayBoolFalse
  77. {
  78. NSError* error = (NSError*)self;
  79. NSString* expected = @"[false]";
  80. id original = [NSArray arrayWithObjects:
  81. [NSNumber numberWithBool:NO],
  82. nil];
  83. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  84. STAssertNotNil(jsonString, @"");
  85. STAssertNil(error, @"");
  86. STAssertEqualObjects(jsonString, expected, @"");
  87. id result = [KSJSON deserializeString:jsonString error:&error];
  88. STAssertNotNil(result, @"");
  89. STAssertNil(error, @"");
  90. STAssertEqualObjects(result, original, @"");
  91. }
  92. - (void) testSerializeDeserializeArrayInteger
  93. {
  94. NSError* error = (NSError*)self;
  95. NSString* expected = @"[1]";
  96. id original = [NSArray arrayWithObjects:
  97. [NSNumber numberWithInt:1],
  98. nil];
  99. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  100. STAssertNotNil(jsonString, @"");
  101. STAssertNil(error, @"");
  102. STAssertEqualObjects(jsonString, expected, @"");
  103. id result = [KSJSON deserializeString:jsonString error:&error];
  104. STAssertNotNil(result, @"");
  105. STAssertNil(error, @"");
  106. STAssertEqualObjects(result, original, @"");
  107. }
  108. - (void) testSerializeDeserializeArrayFloat
  109. {
  110. NSError* error = (NSError*)self;
  111. NSString* expected = @"[-0.2]";
  112. id original = [NSArray arrayWithObjects:
  113. [NSNumber numberWithFloat:-0.2f],
  114. nil];
  115. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  116. STAssertNotNil(jsonString, @"");
  117. STAssertNil(error, @"");
  118. STAssertEqualObjects(jsonString, expected, @"");
  119. id result = [KSJSON deserializeString:jsonString error:&error];
  120. STAssertNotNil(result, @"");
  121. STAssertNil(error, @"");
  122. STAssertEquals([[result objectAtIndex:0] floatValue], -0.2f, @"");
  123. // This always fails on NSNumber filled with float.
  124. //STAssertEqualObjects(result, original, @"");
  125. }
  126. - (void) testSerializeDeserializeArrayFloat2
  127. {
  128. NSError* error = (NSError*)self;
  129. NSString* expected = @"[-2e-15]";
  130. id original = [NSArray arrayWithObjects:
  131. [NSNumber numberWithFloat:-2e-15f],
  132. nil];
  133. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  134. STAssertNotNil(jsonString, @"");
  135. STAssertNil(error, @"");
  136. STAssertEqualObjects(jsonString, expected, @"");
  137. id result = [KSJSON deserializeString:jsonString error:&error];
  138. STAssertNotNil(result, @"");
  139. STAssertNil(error, @"");
  140. STAssertEquals([[result objectAtIndex:0] floatValue], -2e-15f, @"");
  141. // This always fails on NSNumber filled with float.
  142. //STAssertEqualObjects(result, original, @"");
  143. }
  144. - (void)testSerializeDeserializeArrayString
  145. {
  146. NSError* error = (NSError*)self;
  147. NSString* expected = @"[\"One\"]";
  148. id original = [NSArray arrayWithObjects:
  149. @"One",
  150. nil];
  151. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  152. STAssertNotNil(jsonString, @"");
  153. STAssertNil(error, @"");
  154. STAssertEqualObjects(jsonString, expected, @"");
  155. id result = [KSJSON deserializeString:jsonString error:&error];
  156. STAssertNotNil(result, @"");
  157. STAssertNil(error, @"");
  158. STAssertEqualObjects(result, original, @"");
  159. }
  160. - (void)testSerializeDeserializeArrayMultipleEntries
  161. {
  162. NSError* error = (NSError*)self;
  163. NSString* expected = @"[\"One\",1000,true]";
  164. id original = [NSArray arrayWithObjects:
  165. @"One",
  166. [NSNumber numberWithInt:1000],
  167. [NSNumber numberWithBool:YES],
  168. nil];
  169. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  170. STAssertNotNil(jsonString, @"");
  171. STAssertNil(error, @"");
  172. STAssertEqualObjects(jsonString, expected, @"");
  173. id result = [KSJSON deserializeString:jsonString error:&error];
  174. STAssertNotNil(result, @"");
  175. STAssertNil(error, @"");
  176. STAssertEqualObjects(result, original, @"");
  177. }
  178. - (void)testSerializeDeserializeArrayWithArray
  179. {
  180. NSError* error = (NSError*)self;
  181. NSString* expected = @"[[]]";
  182. id original = [NSArray arrayWithObjects:
  183. [NSArray array],
  184. nil];
  185. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  186. STAssertNotNil(jsonString, @"");
  187. STAssertNil(error, @"");
  188. STAssertEqualObjects(jsonString, expected, @"");
  189. id result = [KSJSON deserializeString:jsonString error:&error];
  190. STAssertNotNil(result, @"");
  191. STAssertNil(error, @"");
  192. STAssertEqualObjects(result, original, @"");
  193. }
  194. - (void)testSerializeDeserializeArrayWithArray2
  195. {
  196. NSError* error = (NSError*)self;
  197. NSString* expected = @"[[\"Blah\"]]";
  198. id original = [NSArray arrayWithObjects:
  199. [NSArray arrayWithObjects:@"Blah", nil],
  200. nil];
  201. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  202. STAssertNotNil(jsonString, @"");
  203. STAssertNil(error, @"");
  204. STAssertEqualObjects(jsonString, expected, @"");
  205. id result = [KSJSON deserializeString:jsonString error:&error];
  206. STAssertNotNil(result, @"");
  207. STAssertNil(error, @"");
  208. STAssertEqualObjects(result, original, @"");
  209. }
  210. - (void)testSerializeDeserializeArrayWithDictionary
  211. {
  212. NSError* error = (NSError*)self;
  213. NSString* expected = @"[{}]";
  214. id original = [NSArray arrayWithObjects:
  215. [NSDictionary dictionary],
  216. nil];
  217. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  218. STAssertNotNil(jsonString, @"");
  219. STAssertNil(error, @"");
  220. STAssertEqualObjects(jsonString, expected, @"");
  221. id result = [KSJSON deserializeString:jsonString error:&error];
  222. STAssertNotNil(result, @"");
  223. STAssertNil(error, @"");
  224. STAssertEqualObjects(result, original, @"");
  225. }
  226. - (void)testSerializeDeserializeArrayWithDictionary2
  227. {
  228. NSError* error = (NSError*)self;
  229. NSString* expected = @"[{\"Blah\":true}]";
  230. id original = [NSArray arrayWithObjects:
  231. [NSDictionary dictionaryWithObjectsAndKeys:
  232. [NSNumber numberWithBool:YES], @"Blah",
  233. nil],
  234. nil];
  235. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  236. STAssertNotNil(jsonString, @"");
  237. STAssertNil(error, @"");
  238. STAssertEqualObjects(jsonString, expected, @"");
  239. id result = [KSJSON deserializeString:jsonString error:&error];
  240. STAssertNotNil(result, @"");
  241. STAssertNil(error, @"");
  242. STAssertEqualObjects(result, original, @"");
  243. }
  244. - (void)testSerializeDeserializeDictionaryEmpty
  245. {
  246. NSError* error = (NSError*)self;
  247. NSString* expected = @"{}";
  248. id original = [NSDictionary dictionary];
  249. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  250. STAssertNotNil(jsonString, @"");
  251. STAssertNil(error, @"");
  252. STAssertEqualObjects(jsonString, expected, @"");
  253. id result = [KSJSON deserializeString:jsonString error:&error];
  254. STAssertNotNil(result, @"");
  255. STAssertNil(error, @"");
  256. STAssertEqualObjects(result, original, @"");
  257. }
  258. - (void) testSerializeDeserializeDictionaryNull
  259. {
  260. NSError* error = (NSError*)self;
  261. NSString* expected = @"{\"One\":null}";
  262. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  263. [NSNull null], @"One",
  264. nil];
  265. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  266. STAssertNotNil(jsonString, @"");
  267. STAssertNil(error, @"");
  268. STAssertEqualObjects(jsonString, expected, @"");
  269. id result = [KSJSON deserializeString:jsonString error:&error];
  270. STAssertNotNil(result, @"");
  271. STAssertNil(error, @"");
  272. STAssertEqualObjects(result, original, @"");
  273. }
  274. - (void) testSerializeDeserializeDictionaryBoolTrue
  275. {
  276. NSError* error = (NSError*)self;
  277. NSString* expected = @"{\"One\":true}";
  278. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  279. [NSNumber numberWithBool:YES], @"One",
  280. nil];
  281. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  282. STAssertNotNil(jsonString, @"");
  283. STAssertNil(error, @"");
  284. STAssertEqualObjects(jsonString, expected, @"");
  285. id result = [KSJSON deserializeString:jsonString error:&error];
  286. STAssertNotNil(result, @"");
  287. STAssertNil(error, @"");
  288. STAssertEqualObjects(result, original, @"");
  289. }
  290. - (void) testSerializeDeserializeDictionaryBoolFalse
  291. {
  292. NSError* error = (NSError*)self;
  293. NSString* expected = @"{\"One\":false}";
  294. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  295. [NSNumber numberWithBool:NO], @"One",
  296. nil];
  297. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  298. STAssertNotNil(jsonString, @"");
  299. STAssertNil(error, @"");
  300. STAssertEqualObjects(jsonString, expected, @"");
  301. id result = [KSJSON deserializeString:jsonString error:&error];
  302. STAssertNotNil(result, @"");
  303. STAssertNil(error, @"");
  304. STAssertEqualObjects(result, original, @"");
  305. }
  306. - (void) testSerializeDeserializeDictionaryInteger
  307. {
  308. NSError* error = (NSError*)self;
  309. NSString* expected = @"{\"One\":1}";
  310. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  311. [NSNumber numberWithInt:1], @"One",
  312. nil];
  313. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  314. STAssertNotNil(jsonString, @"");
  315. STAssertNil(error, @"");
  316. STAssertEqualObjects(jsonString, expected, @"");
  317. id result = [KSJSON deserializeString:jsonString error:&error];
  318. STAssertNotNil(result, @"");
  319. STAssertNil(error, @"");
  320. STAssertEqualObjects(result, original, @"");
  321. }
  322. - (void) testSerializeDeserializeDictionaryFloat
  323. {
  324. NSError* error = (NSError*)self;
  325. NSString* expected = @"{\"One\":54.918}";
  326. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  327. [NSNumber numberWithFloat:54.918f], @"One",
  328. nil];
  329. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  330. STAssertNotNil(jsonString, @"");
  331. STAssertNil(error, @"");
  332. STAssertEqualObjects(jsonString, expected, @"");
  333. id result = [KSJSON deserializeString:jsonString error:&error];
  334. STAssertNotNil(result, @"");
  335. STAssertNil(error, @"");
  336. STAssertEquals([[result objectForKey:@"One"] floatValue], 54.918f, @"");
  337. // This always fails on NSNumber filled with float.
  338. //STAssertEqualObjects(result, original, @"");
  339. }
  340. - (void) testSerializeDeserializeDictionaryFloat2
  341. {
  342. NSError* error = (NSError*)self;
  343. NSString* expected = @"{\"One\":5e+20}";
  344. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  345. [NSNumber numberWithFloat:5e20f], @"One",
  346. nil];
  347. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  348. STAssertNotNil(jsonString, @"");
  349. STAssertNil(error, @"");
  350. STAssertEqualObjects(jsonString, expected, @"");
  351. id result = [KSJSON deserializeString:jsonString error:&error];
  352. STAssertNotNil(result, @"");
  353. STAssertNil(error, @"");
  354. STAssertEquals([[result objectForKey:@"One"] floatValue], 5e20f, @"");
  355. // This always fails on NSNumber filled with float.
  356. //STAssertEqualObjects(result, original, @"");
  357. }
  358. - (void)testSerializeDeserializeDictionaryString
  359. {
  360. NSError* error = (NSError*)self;
  361. NSString* expected = @"{\"One\":\"Value\"}";
  362. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  363. @"Value", @"One",
  364. nil];
  365. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  366. STAssertNotNil(jsonString, @"");
  367. STAssertNil(error, @"");
  368. STAssertEqualObjects(jsonString, expected, @"");
  369. id result = [KSJSON deserializeString:jsonString error:&error];
  370. STAssertNotNil(result, @"");
  371. STAssertNil(error, @"");
  372. STAssertEqualObjects(result, original, @"");
  373. }
  374. - (void)testSerializeDeserializeDictionaryMultipleEntries
  375. {
  376. NSError* error = (NSError*)self;
  377. NSString* expected = @"{\"One\":\"Value\",\"Two\":1000,\"Three\":true}";
  378. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  379. @"Value", @"One",
  380. [NSNumber numberWithInt:1000], @"Two",
  381. [NSNumber numberWithBool:YES], @"Three",
  382. nil];
  383. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  384. STAssertNotNil(jsonString, @"");
  385. STAssertNil(error, @"");
  386. STAssertEqualObjects(jsonString, expected, @"");
  387. id result = [KSJSON deserializeString:jsonString error:&error];
  388. STAssertNotNil(result, @"");
  389. STAssertNil(error, @"");
  390. STAssertEqualObjects(result, original, @"");
  391. }
  392. - (void)testSerializeDeserializeDictionaryWithDictionary
  393. {
  394. NSError* error = (NSError*)self;
  395. NSString* expected = @"{\"One\":{}}";
  396. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  397. [NSDictionary dictionary], @"One",
  398. nil];
  399. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  400. STAssertNotNil(jsonString, @"");
  401. STAssertNil(error, @"");
  402. STAssertEqualObjects(jsonString, expected, @"");
  403. id result = [KSJSON deserializeString:jsonString error:&error];
  404. STAssertNotNil(result, @"");
  405. STAssertNil(error, @"");
  406. STAssertEqualObjects(result, original, @"");
  407. }
  408. - (void)testSerializeDeserializeDictionaryWithDictionary2
  409. {
  410. NSError* error = (NSError*)self;
  411. NSString* expected = @"{\"One\":{\"Blah\":1}}";
  412. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  413. [NSDictionary dictionaryWithObjectsAndKeys:
  414. [NSNumber numberWithInt:1], @"Blah",
  415. nil], @"One",
  416. nil];
  417. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  418. STAssertNotNil(jsonString, @"");
  419. STAssertNil(error, @"");
  420. STAssertEqualObjects(jsonString, expected, @"");
  421. id result = [KSJSON deserializeString:jsonString error:&error];
  422. STAssertNotNil(result, @"");
  423. STAssertNil(error, @"");
  424. STAssertEqualObjects(result, original, @"");
  425. }
  426. - (void)testSerializeDeserializeDictionaryWithArray
  427. {
  428. NSError* error = (NSError*)self;
  429. NSString* expected = @"{\"Key\":[]}";
  430. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  431. [NSArray array], @"Key",
  432. nil];
  433. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  434. STAssertNotNil(jsonString, @"");
  435. STAssertNil(error, @"");
  436. STAssertEqualObjects(jsonString, expected, @"");
  437. id result = [KSJSON deserializeString:jsonString error:&error];
  438. STAssertNotNil(result, @"");
  439. STAssertNil(error, @"");
  440. STAssertEqualObjects(result, original, @"");
  441. }
  442. - (void)testSerializeDeserializeDictionaryWithArray2
  443. {
  444. NSError* error = (NSError*)self;
  445. NSString* expected = @"{\"Blah\":[true]}";
  446. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  447. [NSArray arrayWithObject:[NSNumber numberWithBool:YES]], @"Blah",
  448. nil];
  449. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  450. STAssertNotNil(jsonString, @"");
  451. STAssertNil(error, @"");
  452. STAssertEqualObjects(jsonString, expected, @"");
  453. id result = [KSJSON deserializeString:jsonString error:&error];
  454. STAssertNotNil(result, @"");
  455. STAssertNil(error, @"");
  456. STAssertEqualObjects(result, original, @"");
  457. }
  458. - (void)testSerializeDeserializeBigDictionary
  459. {
  460. NSError* error = (NSError*)self;
  461. id original = [NSDictionary dictionaryWithObjectsAndKeys:
  462. @"0", @"0",
  463. @"1", @"1",
  464. @"2", @"2",
  465. @"3", @"3",
  466. @"4", @"4",
  467. @"5", @"5",
  468. @"6", @"6",
  469. @"7", @"7",
  470. @"8", @"8",
  471. @"9", @"9",
  472. @"10", @"10",
  473. @"11", @"11",
  474. @"12", @"12",
  475. @"13", @"13",
  476. @"14", @"14",
  477. @"15", @"15",
  478. @"16", @"16",
  479. @"17", @"17",
  480. @"18", @"18",
  481. @"19", @"19",
  482. @"20", @"20",
  483. @"21", @"21",
  484. @"22", @"22",
  485. @"23", @"23",
  486. @"24", @"24",
  487. @"25", @"25",
  488. @"26", @"26",
  489. @"27", @"27",
  490. @"28", @"28",
  491. @"29", @"29",
  492. @"30", @"30",
  493. @"31", @"31",
  494. @"32", @"32",
  495. @"33", @"33",
  496. @"34", @"34",
  497. @"35", @"35",
  498. @"36", @"36",
  499. @"37", @"37",
  500. @"38", @"38",
  501. @"39", @"39",
  502. @"40", @"40",
  503. @"41", @"41",
  504. @"42", @"42",
  505. @"43", @"43",
  506. @"44", @"44",
  507. @"45", @"45",
  508. @"46", @"46",
  509. @"47", @"47",
  510. @"48", @"48",
  511. @"49", @"49",
  512. @"50", @"50",
  513. @"51", @"51",
  514. @"52", @"52",
  515. @"53", @"53",
  516. @"54", @"54",
  517. @"55", @"55",
  518. @"56", @"56",
  519. @"57", @"57",
  520. @"58", @"58",
  521. @"59", @"59",
  522. nil];
  523. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  524. STAssertNotNil(jsonString, @"");
  525. STAssertNil(error, @"");
  526. id result = [KSJSON deserializeString:jsonString error:&error];
  527. STAssertNotNil(result, @"");
  528. STAssertNil(error, @"");
  529. STAssertEqualObjects(result, original, @"");
  530. }
  531. - (void) testDeserializeUnicode
  532. {
  533. NSError* error = (NSError*)self;
  534. NSString* json = @"[\"\\u00dcOne\"]";
  535. NSString* expected = @"\u00dcOne";
  536. NSArray* result = [KSJSON deserializeString:json error:&error];
  537. STAssertNotNil(result, @"");
  538. STAssertNil(error, @"");
  539. NSString* value = [result objectAtIndex:0];
  540. STAssertEqualObjects(value, expected, @"");
  541. }
  542. - (void) testDeserializeUnicode2
  543. {
  544. NSError* error = (NSError*)self;
  545. NSString* json = @"[\"\\u827e\\u5c0f\\u8587\"]";
  546. NSString* expected = @"\u827e\u5c0f\u8587";
  547. NSArray* result = [KSJSON deserializeString:json error:&error];
  548. STAssertNotNil(result, @"");
  549. STAssertNil(error, @"");
  550. NSString* value = [result objectAtIndex:0];
  551. STAssertEqualObjects(value, expected, @"");
  552. }
  553. - (void) testDeserializeControlChars
  554. {
  555. NSError* error = (NSError*)self;
  556. NSString* json = @"[\"\\b\\f\\n\\r\\t\"]";
  557. NSString* expected = @"\b\f\n\r\t";
  558. NSArray* result = [KSJSON deserializeString:json error:&error];
  559. STAssertNotNil(result, @"");
  560. STAssertNil(error, @"");
  561. NSString* value = [result objectAtIndex:0];
  562. STAssertEqualObjects(value, expected, @"");
  563. }
  564. - (void) testSerializeDeserializeControlChars2
  565. {
  566. NSError* error = (NSError*)self;
  567. NSString* expected = @"[\"\\b\\f\\n\\r\\t\"]";
  568. id original = [NSArray arrayWithObjects:
  569. @"\b\f\n\r\t",
  570. nil];
  571. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  572. STAssertNotNil(jsonString, @"");
  573. STAssertNil(error, @"");
  574. STAssertEqualObjects(jsonString, expected, @"");
  575. id result = [KSJSON deserializeString:jsonString error:&error];
  576. STAssertNotNil(result, @"");
  577. STAssertNil(error, @"");
  578. STAssertEqualObjects(result, original, @"");
  579. }
  580. - (void) testSerializeDeserializeEscapedChars
  581. {
  582. NSError* error = (NSError*)self;
  583. NSString* expected = @"[\"\\\"\\\\\"]";
  584. id original = [NSArray arrayWithObjects:
  585. @"\"\\",
  586. nil];
  587. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  588. STAssertNotNil(jsonString, @"");
  589. STAssertNil(error, @"");
  590. STAssertEqualObjects(jsonString, expected, @"");
  591. id result = [KSJSON deserializeString:jsonString error:&error];
  592. STAssertNotNil(result, @"");
  593. STAssertNil(error, @"");
  594. STAssertEqualObjects(result, original, @"");
  595. }
  596. - (void) testSerializeDeserializeFloat
  597. {
  598. NSError* error = (NSError*)self;
  599. NSString* expected = @"[1.2]";
  600. id original = [NSArray arrayWithObjects:
  601. [NSNumber numberWithFloat:1.2f],
  602. nil];
  603. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  604. STAssertNotNil(jsonString, @"");
  605. STAssertNil(error, @"");
  606. STAssertEqualObjects(jsonString, expected, @"");
  607. id result = [KSJSON deserializeString:jsonString error:&error];
  608. STAssertNotNil(result, @"");
  609. STAssertNil(error, @"");
  610. STAssertTrue([[result objectAtIndex:0] floatValue] == [[original objectAtIndex:0] floatValue], @"");
  611. }
  612. - (void) testSerializeDeserializeDouble
  613. {
  614. NSError* error = (NSError*)self;
  615. NSString* expected = @"[1.2]";
  616. id original = [NSArray arrayWithObjects:
  617. [NSNumber numberWithDouble:1.2f],
  618. nil];
  619. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  620. STAssertNotNil(jsonString, @"");
  621. STAssertNil(error, @"");
  622. STAssertEqualObjects(jsonString, expected, @"");
  623. id result = [KSJSON deserializeString:jsonString error:&error];
  624. STAssertNotNil(result, @"");
  625. STAssertNil(error, @"");
  626. STAssertTrue([[result objectAtIndex:0] floatValue] == [[original objectAtIndex:0] floatValue], @"");
  627. }
  628. - (void) testSerializeDeserializeChar
  629. {
  630. NSError* error = (NSError*)self;
  631. NSString* expected = @"[20]";
  632. id original = [NSArray arrayWithObjects:
  633. [NSNumber numberWithChar:20],
  634. nil];
  635. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  636. STAssertNotNil(jsonString, @"");
  637. STAssertNil(error, @"");
  638. STAssertEqualObjects(jsonString, expected, @"");
  639. id result = [KSJSON deserializeString:jsonString error:&error];
  640. STAssertNotNil(result, @"");
  641. STAssertNil(error, @"");
  642. STAssertEqualObjects(result, original, @"");
  643. }
  644. - (void) testSerializeDeserializeShort
  645. {
  646. NSError* error = (NSError*)self;
  647. NSString* expected = @"[2000]";
  648. id original = [NSArray arrayWithObjects:
  649. [NSNumber numberWithShort:2000],
  650. nil];
  651. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  652. STAssertNotNil(jsonString, @"");
  653. STAssertNil(error, @"");
  654. STAssertEqualObjects(jsonString, expected, @"");
  655. id result = [KSJSON deserializeString:jsonString error:&error];
  656. STAssertNotNil(result, @"");
  657. STAssertNil(error, @"");
  658. STAssertEqualObjects(result, original, @"");
  659. }
  660. - (void) testSerializeDeserializeLong
  661. {
  662. NSError* error = (NSError*)self;
  663. NSString* expected = @"[2000000000]";
  664. id original = [NSArray arrayWithObjects:
  665. [NSNumber numberWithLong:2000000000],
  666. nil];
  667. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  668. STAssertNotNil(jsonString, @"");
  669. STAssertNil(error, @"");
  670. STAssertEqualObjects(jsonString, expected, @"");
  671. id result = [KSJSON deserializeString:jsonString error:&error];
  672. STAssertNotNil(result, @"");
  673. STAssertNil(error, @"");
  674. STAssertEqualObjects(result, original, @"");
  675. }
  676. - (void) testSerializeDeserializeLongLong
  677. {
  678. NSError* error = (NSError*)self;
  679. NSString* expected = @"[200000000000]";
  680. id original = [NSArray arrayWithObjects:
  681. [NSNumber numberWithLongLong:200000000000],
  682. nil];
  683. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  684. STAssertNotNil(jsonString, @"");
  685. STAssertNil(error, @"");
  686. STAssertEqualObjects(jsonString, expected, @"");
  687. id result = [KSJSON deserializeString:jsonString error:&error];
  688. STAssertNotNil(result, @"");
  689. STAssertNil(error, @"");
  690. STAssertEqualObjects(result, original, @"");
  691. }
  692. - (void) testSerializeDeserializeNegative
  693. {
  694. NSError* error = (NSError*)self;
  695. NSString* expected = @"[-2000]";
  696. id original = [NSArray arrayWithObjects:
  697. [NSNumber numberWithInt:-2000],
  698. nil];
  699. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  700. STAssertNotNil(jsonString, @"");
  701. STAssertNil(error, @"");
  702. STAssertEqualObjects(jsonString, expected, @"");
  703. id result = [KSJSON deserializeString:jsonString error:&error];
  704. STAssertNotNil(result, @"");
  705. STAssertNil(error, @"");
  706. STAssertEqualObjects(result, original, @"");
  707. }
  708. - (void) testSerializeDeserialize0
  709. {
  710. NSError* error = (NSError*)self;
  711. NSString* expected = @"[0]";
  712. id original = [NSArray arrayWithObjects:
  713. [NSNumber numberWithInt:0],
  714. nil];
  715. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  716. STAssertNotNil(jsonString, @"");
  717. STAssertNil(error, @"");
  718. STAssertEqualObjects(jsonString, expected, @"");
  719. id result = [KSJSON deserializeString:jsonString error:&error];
  720. STAssertNotNil(result, @"");
  721. STAssertNil(error, @"");
  722. STAssertEqualObjects(result, original, @"");
  723. }
  724. - (void) testSerializeDeserializeEmptyString
  725. {
  726. NSError* error = (NSError*)self;
  727. NSString* string = @"";
  728. NSString* expected = @"[\"\"]";
  729. id original = [NSArray arrayWithObjects:
  730. string,
  731. nil];
  732. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  733. STAssertNotNil(jsonString, @"");
  734. STAssertNil(error, @"");
  735. STAssertEqualObjects(jsonString, expected, @"");
  736. id result = [KSJSON deserializeString:jsonString error:&error];
  737. STAssertNotNil(result, @"");
  738. STAssertNil(error, @"");
  739. STAssertEqualObjects(result, original, @"");
  740. }
  741. - (void) testSerializeDeserializeBigString
  742. {
  743. NSError* error = (NSError*)self;
  744. unsigned int length = 500;
  745. NSMutableString* string = [NSMutableString stringWithCapacity:length];
  746. for(unsigned int i = 0; i < length; i++)
  747. {
  748. [string appendFormat:@"%d", i%10];
  749. }
  750. NSString* expected = [NSString stringWithFormat:@"[\"%@\"]", string];
  751. id original = [NSArray arrayWithObjects:
  752. string,
  753. nil];
  754. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  755. STAssertNotNil(jsonString, @"");
  756. STAssertNil(error, @"");
  757. STAssertEqualObjects(jsonString, expected, @"");
  758. id result = [KSJSON deserializeString:jsonString error:&error];
  759. STAssertNotNil(result, @"");
  760. STAssertNil(error, @"");
  761. STAssertEqualObjects(result, original, @"");
  762. }
  763. - (void) testSerializeDeserializeHugeString
  764. {
  765. NSError* error = (NSError*)self;
  766. char buff[100000];
  767. memset(buff, '2', sizeof(buff));
  768. buff[sizeof(buff)-1] = 0;
  769. NSString* string = [NSString stringWithCString:buff encoding:NSUTF8StringEncoding];
  770. id original = [NSArray arrayWithObjects:
  771. string,
  772. nil];
  773. NSString* jsonString = [KSJSON serializeObject:original error:&error];
  774. STAssertNotNil(jsonString, @"");
  775. STAssertNil(error, @"");
  776. id result = [KSJSON deserializeString:jsonString error:&error];
  777. STAssertNotNil(result, @"");
  778. STAssertNil(error, @"");
  779. STAssertEqualObjects(result, original, @"");
  780. }
  781. - (void) testSerializeDeserializeLargeArray
  782. {
  783. NSError* error = (NSError*)self;
  784. unsigned int numEntries = 2000;
  785. NSMutableString* jsonString = [NSMutableString string];
  786. [jsonString appendString:@"["];
  787. for(unsigned int i = 0; i < numEntries; i++)
  788. {
  789. [jsonString appendFormat:@"%d,", i%10];
  790. }
  791. [jsonString deleteCharactersInRange:NSMakeRange([jsonString length]-1, 1)];
  792. [jsonString appendString:@"]"];
  793. id deserialized = [KSJSON deserializeString:jsonString error:&error];
  794. STAssertNotNil(deserialized, @"");
  795. STAssertNil(error, @"");
  796. STAssertEquals([deserialized count], numEntries, @"");
  797. NSString* serialized = [KSJSON serializeObject:deserialized error:&error];
  798. STAssertNotNil(serialized, @"");
  799. STAssertNil(error, @"");
  800. STAssertEqualObjects(serialized, jsonString, @"");
  801. int value = [[deserialized objectAtIndex:1] intValue];
  802. STAssertEquals(value, 1, @"");
  803. value = [[deserialized objectAtIndex:9] intValue];
  804. STAssertEquals(value, 9, @"");
  805. }
  806. - (void) testSerializeDeserializeLargeDictionary
  807. {
  808. NSError* error = (NSError*)self;
  809. unsigned int numEntries = 2000;
  810. NSMutableString* jsonString = [NSMutableString string];
  811. [jsonString appendString:@"{"];
  812. for(unsigned int i = 0; i < numEntries; i++)
  813. {
  814. [jsonString appendFormat:@"\"%d\":%d,", i, i];
  815. }
  816. [jsonString deleteCharactersInRange:NSMakeRange([jsonString length]-1, 1)];
  817. [jsonString appendString:@"}"];
  818. id deserialized = [KSJSON deserializeString:jsonString error:&error];
  819. STAssertNotNil(deserialized, @"");
  820. STAssertNil(error, @"");
  821. STAssertEquals([deserialized count], numEntries, @"");
  822. int value = [[deserialized objectForKey:@"1"] intValue];
  823. STAssertEquals(value, 1, @"");
  824. NSString* serialized = [KSJSON serializeObject:deserialized error:&error];
  825. STAssertNotNil(serialized, @"");
  826. STAssertNil(error, @"");
  827. STAssertTrue([serialized length] == [jsonString length], @"");
  828. }
  829. - (void) testDeserializeArrayMissingTerminator
  830. {
  831. NSError* error = (NSError*)self;
  832. NSString* json = @"[\"blah\"";
  833. NSArray* result = [KSJSON deserializeString:json error:&error];
  834. STAssertNil(result, @"");
  835. STAssertNotNil(error, @"");
  836. }
  837. - (void) testSerializeBadTopLevelType
  838. {
  839. NSError* error = (NSError*)self;
  840. id source = @"Blah";
  841. NSString* result = [KSJSON serializeObject:source error:&error];
  842. STAssertNil(result, @"");
  843. STAssertNotNil(error, @"");
  844. }
  845. - (void) testSerializeArrayBadType
  846. {
  847. NSError* error = (NSError*)self;
  848. id source = [NSArray arrayWithObject:[NSValue valueWithPointer:NULL]];
  849. NSString* result = [KSJSON serializeObject:source error:&error];
  850. STAssertNil(result, @"");
  851. STAssertNotNil(error, @"");
  852. }
  853. - (void) testSerializeDictionaryBadType
  854. {
  855. NSError* error = (NSError*)self;
  856. id source = [NSDictionary dictionaryWithObject:[NSValue valueWithPointer:NULL] forKey:@"blah"];
  857. NSString* result = [KSJSON serializeObject:source error:&error];
  858. STAssertNil(result, @"");
  859. STAssertNotNil(error, @"");
  860. }
  861. - (void) testSerializeDictionaryBadCharacter
  862. {
  863. NSError* error = (NSError*)self;
  864. id source = [NSDictionary dictionaryWithObject:@"blah" forKey:@"blah\x01blah"];
  865. NSString* result = [KSJSON serializeObject:source error:&error];
  866. STAssertNil(result, @"");
  867. STAssertNotNil(error, @"");
  868. }
  869. - (void) testSerializeArrayBadCharacter
  870. {
  871. NSError* error = (NSError*)self;
  872. id source = [NSArray arrayWithObject:@"test\x01ing"];
  873. NSString* result = [KSJSON serializeObject:source error:&error];
  874. STAssertNil(result, @"");
  875. STAssertNotNil(error, @"");
  876. }
  877. - (void)testDeserializeArrayInvalidUnicodeSequence
  878. {
  879. NSError* error = (NSError*)self;
  880. NSString* jsonString = @"[\"One\\ubarfTwo\"]";
  881. id result = [KSJSON deserializeString:jsonString error:&error];
  882. STAssertNil(result, @"");
  883. STAssertNotNil(error, @"");
  884. }
  885. - (void)testDeserializeArrayUnterminatedEscape
  886. {
  887. NSError* error = (NSError*)self;
  888. NSString* jsonString = @"[\"One\\u123\"]";
  889. id result = [KSJSON deserializeString:jsonString error:&error];
  890. STAssertNil(result, @"");
  891. STAssertNotNil(error, @"");
  892. }
  893. - (void)testDeserializeArrayUnterminatedEscape2
  894. {
  895. NSError* error = (NSError*)self;
  896. NSString* jsonString = @"[\"One\\\"]";
  897. id result = [KSJSON deserializeString:jsonString error:&error];
  898. STAssertNil(result, @"");
  899. STAssertNotNil(error, @"");
  900. }
  901. - (void)testDeserializeArrayUnterminatedEscape3
  902. {
  903. NSError* error = (NSError*)self;
  904. NSString* jsonString = @"[\"One\\u\"]";
  905. id result = [KSJSON deserializeString:jsonString error:&error];
  906. STAssertNil(result, @"");
  907. STAssertNotNil(error, @"");
  908. }
  909. - (void)testDeserializeArrayInvalidEscape
  910. {
  911. NSError* error = (NSError*)self;
  912. NSString* jsonString = @"[\"One\\qTwo\"]";
  913. id result = [KSJSON deserializeString:jsonString error:&error];
  914. STAssertNil(result, @"");
  915. STAssertNotNil(error, @"");
  916. }
  917. - (void)testDeserializeArrayUnterminatedString
  918. {
  919. NSError* error = (NSError*)self;
  920. NSString* jsonString = @"[\"One]";
  921. id result = [KSJSON deserializeString:jsonString error:&error];
  922. STAssertNil(result, @"");
  923. STAssertNotNil(error, @"");
  924. }
  925. - (void)testDeserializeArrayTruncatedFalse
  926. {
  927. NSError* error = (NSError*)self;
  928. NSString* jsonString = @"[f]";
  929. id result = [KSJSON deserializeString:jsonString error:&error];
  930. STAssertNil(result, @"");
  931. STAssertNotNil(error, @"");
  932. }
  933. - (void)testDeserializeArrayInvalidFalse
  934. {
  935. NSError* error = (NSError*)self;
  936. NSString* jsonString = @"[falst]";
  937. id result = [KSJSON deserializeString:jsonString error:&error];
  938. STAssertNil(result, @"");
  939. STAssertNotNil(error, @"");
  940. }
  941. - (void)testDeserializeArrayTruncatedTrue
  942. {
  943. NSError* error = (NSError*)self;
  944. NSString* jsonString = @"[t]";
  945. id result = [KSJSON deserializeString:jsonString error:&error];
  946. STAssertNil(result, @"");
  947. STAssertNotNil(error, @"");
  948. }
  949. - (void)testDeserializeArrayInvalidTrue
  950. {
  951. NSError* error = (NSError*)self;
  952. NSString* jsonString = @"[ture]";
  953. id result = [KSJSON deserializeString:jsonString error:&error];
  954. STAssertNil(result, @"");
  955. STAssertNotNil(error, @"");
  956. }
  957. - (void)testDeserializeArrayTruncatedNull
  958. {
  959. NSError* error = (NSError*)self;
  960. NSString* jsonString = @"[n]";
  961. id result = [KSJSON deserializeString:jsonString error:&error];
  962. STAssertNil(result, @"");
  963. STAssertNotNil(error, @"");
  964. }
  965. - (void)testDeserializeArrayInvalidNull
  966. {
  967. NSError* error = (NSError*)self;
  968. NSString* jsonString = @"[nlll]";
  969. id result = [KSJSON deserializeString:jsonString error:&error];
  970. STAssertNil(result, @"");
  971. STAssertNotNil(error, @"");
  972. }
  973. - (void)testDeserializeArrayInvalidElement
  974. {
  975. NSError* error = (NSError*)self;
  976. NSString* jsonString = @"[-blah]";
  977. id result = [KSJSON deserializeString:jsonString error:&error];
  978. STAssertNil(result, @"");
  979. STAssertNotNil(error, @"");
  980. }
  981. - (void)testDeserializeArrayNumberOverflow
  982. {
  983. NSError* error = (NSError*)self;
  984. NSString* jsonString = @"[123456789012345678901234567890]";
  985. id result = [KSJSON deserializeString:jsonString error:&error];
  986. STAssertNotNil(result, @"");
  987. STAssertNil(error, @"");
  988. }
  989. - (void)testDeserializeDictionaryInvalidKey
  990. {
  991. NSError* error = (NSError*)self;
  992. NSString* jsonString = @"{blah:\"blah\"}";
  993. id result = [KSJSON deserializeString:jsonString error:&error];
  994. STAssertNil(result, @"");
  995. STAssertNotNil(error, @"");
  996. }
  997. - (void)testDeserializeDictionaryMissingSeparator
  998. {
  999. NSError* error = (NSError*)self;
  1000. NSString* jsonString = @"{\"blah\"\"blah\"}";
  1001. id result = [KSJSON deserializeString:jsonString error:&error];
  1002. STAssertNil(result, @"");
  1003. STAssertNotNil(error, @"");
  1004. }
  1005. - (void)testDeserializeDictionaryBadElement
  1006. {
  1007. NSError* error = (NSError*)self;
  1008. NSString* jsonString = @"{\"blah\":blah\"}";
  1009. id result = [KSJSON deserializeString:jsonString error:&error];
  1010. STAssertNil(result, @"");
  1011. STAssertNotNil(error, @"");
  1012. }
  1013. - (void)testDeserializeDictionaryUnterminated
  1014. {
  1015. NSError* error = (NSError*)self;
  1016. NSString* jsonString = @"{\"blah\":\"blah\"";
  1017. id result = [KSJSON deserializeString:jsonString error:&error];
  1018. STAssertNil(result, @"");
  1019. STAssertNotNil(error, @"");
  1020. }
  1021. - (void)testDeserializeInvalidData
  1022. {
  1023. NSError* error = (NSError*)self;
  1024. NSString* jsonString = @"X{\"blah\":\"blah\"}";
  1025. id result = [KSJSON deserializeString:jsonString error:&error];
  1026. STAssertNil(result, @"");
  1027. STAssertNotNil(error, @"");
  1028. }
  1029. @end