cJSON-test.cpp 15 KB

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