cJSON-test.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. #include "test_common.h"
  2. TEST(cJSON, parse_print) {
  3. /* init */
  4. pikaMemInfo.heapUsedMax = 0;
  5. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  6. char testjson[] =
  7. "{\n"
  8. "\"name\": \"mculover666\",\n"
  9. "\"age\": 22,\n"
  10. "\"weight\": 55.5,\n"
  11. "\"address\":\n"
  12. "{\n"
  13. " \"country\": \"China\",\n"
  14. " \"zip-code\": 111111\n"
  15. "},\n"
  16. "\"skill\": [\"c\", \"Java\", \"Python\"],\n"
  17. "\"student\": false\n"
  18. "}\n";
  19. /* run */
  20. obj_setStr(pikaMain, "testjson", testjson);
  21. obj_run(pikaMain,
  22. "a = pika_cjson.Parse(testjson)\n"
  23. "a.print()\n");
  24. /* collect */
  25. /* assert */
  26. /* deinit */
  27. obj_deinit(pikaMain);
  28. EXPECT_EQ(pikaMemNow(), 0);
  29. }
  30. TEST(cJSON, getItem) {
  31. /* init */
  32. pikaMemInfo.heapUsedMax = 0;
  33. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  34. char testjson[] =
  35. "{\n"
  36. "\"name\": \"mculover666\",\n"
  37. "\"age\": 22,\n"
  38. "\"weight\": 55.5,\n"
  39. "\"address\":\n"
  40. "{\n"
  41. " \"country\": \"China\",\n"
  42. " \"zip-code\": 111111\n"
  43. "},\n"
  44. "\"skill\": [\"c\", \"Java\", \"Python\"],\n"
  45. "\"student\": false\n"
  46. "}\n";
  47. /* run */
  48. obj_setStr(pikaMain, "testjson", testjson);
  49. __platform_printf("BEGIN\r\n");
  50. obj_run(pikaMain,
  51. "a = pika_cjson.Parse(testjson)\n"
  52. "age = a.getObjectItem('age')\n"
  53. "age.print()\n");
  54. /* collect */
  55. /* assert */
  56. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  57. EXPECT_STREQ(log_buff[0], "'22'\r\n");
  58. /* deinit */
  59. obj_deinit(pikaMain);
  60. EXPECT_EQ(pikaMemNow(), 0);
  61. }
  62. TEST(cJSON, next) {
  63. /* init */
  64. pikaMemInfo.heapUsedMax = 0;
  65. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  66. char testjson[] =
  67. "{\n"
  68. "\"name\": \"mculover666\",\n"
  69. "\"age\": 22,\n"
  70. "\"weight\": 55.5,\n"
  71. "\"address\":\n"
  72. "{\n"
  73. " \"country\": \"China\",\n"
  74. " \"zip-code\": 111111\n"
  75. "},\n"
  76. "\"skill\": [\"c\", \"Java\", \"Python\"],\n"
  77. "\"student\": false\n"
  78. "}\n";
  79. /* run */
  80. obj_setStr(pikaMain, "testjson", testjson);
  81. __platform_printf("BEGIN\r\n");
  82. obj_run(pikaMain,
  83. "a = pika_cjson.Parse(testjson)\n"
  84. "node = a.getChild()\n"
  85. "for i in range(0, 3):\n"
  86. " node.print()\n"
  87. " node = node.getNext()\n"
  88. "\n");
  89. /* collect */
  90. EXPECT_STREQ(log_buff[3], "BEGIN\r\n");
  91. EXPECT_STREQ(log_buff[2], "'\"mculover666\"'\r\n");
  92. EXPECT_STREQ(log_buff[1], "'22'\r\n");
  93. EXPECT_STREQ(log_buff[0], "'55.5'\r\n");
  94. /* assert */
  95. /* deinit */
  96. obj_deinit(pikaMain);
  97. EXPECT_EQ(pikaMemNow(), 0);
  98. }
  99. TEST(cJSON, next_get_value) {
  100. /* init */
  101. pikaMemInfo.heapUsedMax = 0;
  102. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  103. char testjson[] =
  104. "{\n"
  105. "\"name\": \"mculover666\",\n"
  106. "\"age\": 22,\n"
  107. "\"weight\": 55.5,\n"
  108. "\"address\":\n"
  109. "{\n"
  110. " \"country\": \"China\",\n"
  111. " \"zip-code\": 111111\n"
  112. "},\n"
  113. "\"skill\": [\"c\", \"Java\", \"Python\"],\n"
  114. "\"student\": false\n"
  115. "}\n";
  116. /* run */
  117. obj_setStr(pikaMain, "testjson", testjson);
  118. __platform_printf("BEGIN\r\n");
  119. obj_run(pikaMain,
  120. "a = pika_cjson.Parse(testjson)\n"
  121. "node = a.getChild()\n"
  122. "val = PikaStdData.List()\n"
  123. "for i in range(0, 3):\n"
  124. " val.append(node.getValue())\n"
  125. " node = node.getNext()\n"
  126. "for item in val:\n"
  127. " print(item)\n"
  128. "\n");
  129. /* collect */
  130. /* assert */
  131. EXPECT_STREQ(log_buff[3], "BEGIN\r\n");
  132. EXPECT_STREQ(log_buff[2], "mculover666\r\n");
  133. EXPECT_STREQ(log_buff[1], "22.000000\r\n");
  134. EXPECT_STREQ(log_buff[0], "55.500000\r\n");
  135. /* deinit */
  136. obj_deinit(pikaMain);
  137. EXPECT_EQ(pikaMemNow(), 0);
  138. }
  139. TEST(cJSON, item) {
  140. /* init */
  141. pikaMemInfo.heapUsedMax = 0;
  142. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  143. /* run */
  144. __platform_printf("BEGIN\r\n");
  145. obj_run(pikaMain,
  146. "a1 = pika_cjson.Null()\n"
  147. "a2 = pika_cjson.True_()\n"
  148. "a3 = pika_cjson.False_()\n"
  149. "a4 = pika_cjson.Bool(True)\n"
  150. "a5 = pika_cjson.Number(23)\n"
  151. "a6 = pika_cjson.String('test')\n"
  152. "a7 = pika_cjson.Raw('qqq')\n"
  153. "a8 = pika_cjson.Array()\n"
  154. "a9 = pika_cjson.Object()\n"
  155. "\n"
  156. "a1.print()\n"
  157. "a2.print()\n"
  158. "a3.print()\n"
  159. "a4.print()\n"
  160. "a5.print()\n"
  161. "a6.print()\n"
  162. "a7.print()\n"
  163. "a8.print()\n"
  164. "a9.print()\n"
  165. "\n");
  166. /* collect */
  167. /* assert */
  168. EXPECT_STREQ(log_buff[9], "BEGIN\r\n");
  169. EXPECT_STREQ(log_buff[8], "'null'\r\n");
  170. EXPECT_STREQ(log_buff[7], "'true'\r\n");
  171. EXPECT_STREQ(log_buff[6], "'false'\r\n");
  172. EXPECT_STREQ(log_buff[5], "'true'\r\n");
  173. EXPECT_STREQ(log_buff[4], "'23'\r\n");
  174. EXPECT_STREQ(log_buff[3], "'\"test\"'\r\n");
  175. EXPECT_STREQ(log_buff[2], "'qqq'\r\n");
  176. EXPECT_STREQ(log_buff[1], "'[]'\r\n");
  177. EXPECT_STREQ(log_buff[0], "'{\n}'\r\n");
  178. /* deinit */
  179. obj_deinit(pikaMain);
  180. EXPECT_EQ(pikaMemNow(), 0);
  181. }
  182. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  183. TEST(cJSON, construct) {
  184. /* init */
  185. pikaMemInfo.heapUsedMax = 0;
  186. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  187. /* run */
  188. __platform_printf("BEGIN\r\n");
  189. obj_run(pikaMain,
  190. "import pika_cjson as cjson\n"
  191. "root = cjson.Object()\n"
  192. "root.addItemToObject('name', cjson.String('mculover666'))\n"
  193. "root.addItemToObject('age', cjson.Number(22))\n"
  194. "root.addItemToObject('weight', cjson.Number(55.5))\n"
  195. "address = cjson.Object()\n"
  196. "address.addItemToObject('country', cjson.String('China'))\n"
  197. "address.addItemToObject('zip-code', cjson.String('111111'))\n"
  198. "root.addItemToObject('address', address)\n"
  199. "skill = cjson.Array()\n"
  200. "skill.addItemToArray(cjson.String('c'))\n"
  201. "skill.addItemToArray(cjson.String('Java'))\n"
  202. "skill.addItemToArray(cjson.String('Python'))\n"
  203. "root.addItemToObject('skill', skill)\n"
  204. "root.addItemToObject('student', cjson.False_())\n"
  205. "root.print()\n");
  206. /* collect */
  207. /* assert */
  208. EXPECT_STREQ(
  209. log_buff[0],
  210. "'{\n\t\"name\":\t\"mculover666\",\n\t\"age\":\t22,\n\t\"weight\":\t55."
  211. "5,\n\t\"address\":\t{\n\t\t\"country\":\t\"China\",\n\t\t\"zip-code\":"
  212. "\t\"111111\"\n\t},\n\t\"skill\":\t[\"c\", \"Java\", "
  213. "\"Python\"],\n\t\"student\":\tfalse\n}'\r\n");
  214. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  215. /* deinit */
  216. obj_deinit(pikaMain);
  217. EXPECT_EQ(pikaMemNow(), 0);
  218. }
  219. #endif
  220. TEST(cJSON, test1) {
  221. /* init */
  222. pikaMemInfo.heapUsedMax = 0;
  223. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  224. /* run */
  225. __platform_printf("BEGIN\r\n");
  226. pikaVM_runSingleFile(pikaMain, "../../examples/cJSON/test1.py");
  227. /* collect */
  228. /* assert */
  229. EXPECT_STREQ(log_buff[0],
  230. "'{\n\t\"data\":\t{\n\t\t\"validTime\":\t28800,\n\t\t\"token\":"
  231. "\t\"3E6EA1D907B9CFEB6AB1DECB5667E4A7\"\n\t},\n\t\"success\":"
  232. "\ttrue,\n\t\"resultCode\":\t\"0000\"\n}'\r\n");
  233. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  234. /* deinit */
  235. obj_deinit(pikaMain);
  236. EXPECT_EQ(pikaMemNow(), 0);
  237. }
  238. TEST(cJSON, test2) {
  239. /* init */
  240. pikaMemInfo.heapUsedMax = 0;
  241. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  242. /* run */
  243. __platform_printf("BEGIN\r\n");
  244. pikaVM_runSingleFile(pikaMain, "../../examples/cJSON/test2.py");
  245. /* collect */
  246. /* assert */
  247. EXPECT_STREQ(log_buff[0],
  248. "'{\n\t\"data\":\t{\n\t\t\"validTime\":\t28800,\n\t\t\"token\":"
  249. "\t\"3E6EA1D907B9CFEB6AB1DECB5667E4A7\"\n\t},\n\t\"success\":"
  250. "\ttrue,\n\t\"resultCode\":\t\"0000\"\n}'\r\n");
  251. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  252. /* deinit */
  253. obj_deinit(pikaMain);
  254. EXPECT_EQ(pikaMemNow(), 0);
  255. }
  256. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  257. TEST(cJSON, test3) {
  258. /* init */
  259. pikaMemInfo.heapUsedMax = 0;
  260. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  261. /* run */
  262. __platform_printf("BEGIN\r\n");
  263. pikaVM_runSingleFile(pikaMain, "../../examples/cJSON/test3.py");
  264. /* collect */
  265. /* assert */
  266. EXPECT_STREQ(
  267. log_buff[0],
  268. "'{\n\t\"name\":\t\"mculover666\",\n\t\"age\":\t22,\n\t\"weight\":\t55."
  269. "5,\n\t\"address\":\t{\n\t\t\"country\":\t\"China\",\n\t\t\"zip-code\":"
  270. "\t\"111111\"\n\t},\n\t\"skill\":\t[\"c\", \"Java\", "
  271. "\"Python\"],\n\t\"student\":\tfalse\n}'\r\n");
  272. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  273. /* deinit */
  274. obj_deinit(pikaMain);
  275. EXPECT_EQ(pikaMemNow(), 0);
  276. }
  277. #endif
  278. TEST(cJSON, test4) {
  279. /* init */
  280. pikaMemInfo.heapUsedMax = 0;
  281. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  282. /* run */
  283. __platform_printf("BEGIN\r\n");
  284. pikaVM_runSingleFile(pikaMain, "../../examples/cJSON/test4.py");
  285. /* collect */
  286. /* assert */
  287. EXPECT_STREQ(
  288. log_buff[0],
  289. "'{\n\t\"data\":\t{\n\t\t\"requestSocialInsuranceFromYangCheng\":\t\"\","
  290. "\n\t\t\"authenticationComparison\":\t\"no\",\n\t\t\"startupLogo\":"
  291. "\t\"4\",\n\t\t\"cardType\":\t\"00,01,02,03,04\",\n\t\t\"synfromhis\":"
  292. "\t\"no\",\n\t\t\"alarmThresholdValue\":\t\"37.2\","
  293. "\n\t\t\"hospitalName\":\t\"jell\",\n\t\t\"facediscernMode\":\t\"01\","
  294. "\n\t\t\"hospitalCode\":\t\"102\"\n\t},\n\t\"success\":\ttrue,"
  295. "\n\t\"resultCode\":\t\"0000\",\n\t\"time\":\t\"2022-05-20 "
  296. "14:10:27\",\n\t\"message\":\t\"ok\"\n}'\r\n");
  297. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  298. /* deinit */
  299. obj_deinit(pikaMain);
  300. EXPECT_EQ(pikaMemNow(), 0);
  301. }
  302. TEST(cJSON, test5) {
  303. /* init */
  304. pikaMemInfo.heapUsedMax = 0;
  305. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  306. /* run */
  307. __platform_printf("BEGIN\r\n");
  308. pikaVM_runSingleFile(pikaMain, "../../examples/cJSON/test5.py");
  309. /* collect */
  310. /* assert */
  311. EXPECT_STREQ(
  312. log_buff[0],
  313. "'{\n\t\"data\":\t{\n\t\t\"requestSocialInsuranceFromYangCheng\":\t\"\","
  314. "\n\t\t\"authenticationComparison\":\t\"no\",\n\t\t\"startupLogo\":"
  315. "\t\"4\",\n\t\t\"cardType\":\t\"00,01,02,03,04\",\n\t\t\"synfromhis\":"
  316. "\t\"no\",\n\t\t\"alarmThresholdValue\":\t\"37.2\","
  317. "\n\t\t\"hospitalName\":"
  318. "\t\"\344\275\231\346\235\255\345\206\234\350\264\270\345\270\202\345"
  319. "\234\272\",\n\t\t\"facediscernMode\":\t\"01\",\n\t\t\"hospitalCode\":"
  320. "\t\"102\"\n\t},\n\t\"success\":\ttrue,\n\t\"resultCode\":\t\"0000\","
  321. "\n\t\"time\":\t\"2022-05-20 "
  322. "14:10:27\",\n\t\"message\":"
  323. "\t\"\346\223\215\344\275\234\346\210\220\345\212\237\"\n}'\r\n");
  324. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  325. /* deinit */
  326. obj_deinit(pikaMain);
  327. EXPECT_EQ(pikaMemNow(), 0);
  328. }
  329. TEST(cJSON, test6) {
  330. /* init */
  331. pikaMemInfo.heapUsedMax = 0;
  332. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  333. /* run */
  334. __platform_printf("BEGIN\r\n");
  335. pikaVM_runSingleFile(pikaMain, "../../examples/cJSON/test6.py");
  336. /* collect */
  337. /* assert */
  338. EXPECT_STREQ(
  339. log_buff[0],
  340. "'{\n\t\"array33\":\t[\"c\", \"Java\", "
  341. "\"Python\"],\n\t\"data\":\t{"
  342. "\n\t\t\"requestSocialInsuranceFromYangCheng\":\t\"\","
  343. "\n\t\t\"authenticationComparison\":\t\"no\",\n\t\t\"startupLogo\":"
  344. "\t\"4\",\n\t\t\"cardType\":\t\"00,01,02,03,04\",\n\t\t\"synfromhis\":"
  345. "\t\"no\",\n\t\t\"alarmThresholdValue\":\t\"37.2\","
  346. "\n\t\t\"hospitalName\":"
  347. "\t\"\344\275\231\346\235\255\345\206\234\350\264\270\345\270\202\345"
  348. "\234\272\",\n\t\t\"facediscernMode\":\t\"02\",\n\t\t\"hospitalCode\":"
  349. "\t\"102\"\n\t},\n\t\"success\":\ttrue,\n\t\"resultCode\":\t\"0000\","
  350. "\n\t\"time\":\t\"2022-05-20 "
  351. "14:10:27\",\n\t\"message\":"
  352. "\t\"\346\223\215\344\275\234\346\210\220\345\212\237\"\n}'\r\n");
  353. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  354. /* deinit */
  355. obj_deinit(pikaMain);
  356. EXPECT_EQ(pikaMemNow(), 0);
  357. }
  358. TEST(cJSON, parse_faild) {
  359. /* init */
  360. pikaMemInfo.heapUsedMax = 0;
  361. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  362. char testjson[] =
  363. "{{\n"
  364. "\"name\": \"mculover666\",\n"
  365. "\"age\": 22,\n"
  366. "\"weight\": 55.5,\n"
  367. "\"address\":\n"
  368. "{\n"
  369. " \"country\": \"China\",\n"
  370. " \"zip-code\": 111111\n"
  371. "},\n"
  372. "\"skill\": [\"c\", \"Java\", \"Python\"],\n"
  373. "\"student\": false\n"
  374. "}\n";
  375. /* run */
  376. obj_setStr(pikaMain, "testjson", testjson);
  377. obj_run(pikaMain,
  378. "a = pika_cjson.Parse(testjson)\n"
  379. "b = pika_cjson.Parse('3')\n"
  380. "if None == a:\n"
  381. " res = True\n"
  382. "else:\n"
  383. " res = False\n"
  384. "if None == b:\n"
  385. " res2 = True\n"
  386. "else:\n"
  387. " res2 = False\n"
  388. "\n");
  389. /* collect */
  390. /* assert */
  391. /* deinit */
  392. obj_deinit(pikaMain);
  393. EXPECT_EQ(pikaMemNow(), 0);
  394. }
  395. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  396. TEST(cJSON, test7) {
  397. /* init */
  398. pikaMemInfo.heapUsedMax = 0;
  399. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  400. /* run */
  401. __platform_printf("BEGIN\r\n");
  402. pikaVM_runSingleFile(pikaMain, "../../examples/cJSON/test7.py");
  403. /* collect */
  404. /* assert */
  405. EXPECT_STREQ(log_buff[0], "shopping\r\n");
  406. /* deinit */
  407. obj_deinit(pikaMain);
  408. EXPECT_EQ(pikaMemNow(), 0);
  409. }
  410. #endif
  411. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  412. TEST(cJSON, module) {
  413. /* init */
  414. pikaMemInfo.heapUsedMax = 0;
  415. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  416. extern unsigned char pikaModules_py_a[];
  417. obj_linkLibrary(pikaMain, pikaModules_py_a);
  418. /* run */
  419. __platform_printf("BEGIN\r\n");
  420. pikaVM_run(pikaMain,
  421. "import cjson_test as ctest\n"
  422. "ctest.test_start()\n");
  423. /* collect */
  424. /* assert */
  425. EXPECT_STREQ(log_buff[0], "shopping\r\n");
  426. /* deinit */
  427. obj_deinit(pikaMain);
  428. EXPECT_EQ(pikaMemNow(), 0);
  429. }
  430. #endif