module-test.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634
  1. #include "test_common.h"
  2. TEST_START
  3. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  4. TEST(module, cmodule_import) {
  5. /* init */
  6. g_PikaMemInfo.heapUsedMax = 0;
  7. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  8. __platform_printf("BEGIN\r\n");
  9. /* run */
  10. obj_run(pikaMain,
  11. "from TemplateDevice import qqee\n"
  12. "mytime = qqee()\n");
  13. /* collect */
  14. /* assert */
  15. /* deinit */
  16. EXPECT_STREQ("NameError: name 'TemplateDevice.qqee' is not defined\r\n",
  17. log_buff[2]);
  18. obj_deinit(pikaMain);
  19. EXPECT_EQ(pikaMemNow(), 0);
  20. }
  21. #endif
  22. TEST(module, while_loop) {
  23. /* init */
  24. g_PikaMemInfo.heapUsedMax = 0;
  25. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  26. extern unsigned char pikaModules_py_a[];
  27. obj_linkLibrary(pikaMain, pikaModules_py_a);
  28. __platform_printf("BEGIN\r\n");
  29. /* run */
  30. obj_run(pikaMain,
  31. "import test_module1\n"
  32. "test_module1.while_loop()\n");
  33. /* collect */
  34. /* assert */
  35. EXPECT_STREQ("4\r\n", log_buff[0]);
  36. /* deinit */
  37. obj_deinit(pikaMain);
  38. EXPECT_EQ(pikaMemNow(), 0);
  39. }
  40. TEST(module, for_loop) {
  41. /* init */
  42. g_PikaMemInfo.heapUsedMax = 0;
  43. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  44. extern unsigned char pikaModules_py_a[];
  45. obj_linkLibrary(pikaMain, pikaModules_py_a);
  46. __platform_printf("BEGIN\r\n");
  47. /* run */
  48. obj_run(pikaMain,
  49. "import test_module1\n"
  50. "test_module1.for_loop()\n");
  51. /* collect */
  52. /* assert */
  53. EXPECT_STREQ("9\r\n", log_buff[0]);
  54. /* deinit */
  55. obj_deinit(pikaMain);
  56. EXPECT_EQ(pikaMemNow(), 0);
  57. }
  58. TEST(module, script) {
  59. /* init */
  60. g_PikaMemInfo.heapUsedMax = 0;
  61. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  62. extern unsigned char pikaModules_py_a[];
  63. obj_linkLibrary(pikaMain, pikaModules_py_a);
  64. __platform_printf("BEGIN\r\n");
  65. /* run */
  66. obj_run(pikaMain, "import test_module4\n");
  67. /* collect */
  68. /* assert */
  69. EXPECT_STREQ("imported test moulde4\r\n", log_buff[0]);
  70. /* deinit */
  71. obj_deinit(pikaMain);
  72. EXPECT_EQ(pikaMemNow(), 0);
  73. }
  74. TEST(module, __init__) {
  75. /* init */
  76. g_PikaMemInfo.heapUsedMax = 0;
  77. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  78. extern unsigned char pikaModules_py_a[];
  79. obj_linkLibrary(pikaMain, pikaModules_py_a);
  80. __platform_printf("BEGIN\r\n");
  81. /* run */
  82. obj_run(pikaMain, "import GTestTask\n");
  83. /* collect */
  84. /* assert */
  85. EXPECT_EQ(obj_getInt(pikaMain, "GTestTask.testval"), 8848);
  86. EXPECT_STREQ(log_buff[0], "BEGIN\r\n");
  87. /* deinit */
  88. obj_deinit(pikaMain);
  89. EXPECT_EQ(pikaMemNow(), 0);
  90. }
  91. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  92. TEST(module, __init__2) {
  93. /* init */
  94. g_PikaMemInfo.heapUsedMax = 0;
  95. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  96. extern unsigned char pikaModules_py_a[];
  97. obj_linkLibrary(pikaMain, pikaModules_py_a);
  98. __platform_printf("BEGIN\r\n");
  99. /* run */
  100. obj_run(pikaMain, "import GTestTask as task\n");
  101. /* collect */
  102. /* assert */
  103. EXPECT_EQ(obj_getInt(pikaMain, "task.testval"), 8848);
  104. EXPECT_STREQ(log_buff[0], "BEGIN\r\n");
  105. /* deinit */
  106. obj_deinit(pikaMain);
  107. EXPECT_EQ(pikaMemNow(), 0);
  108. }
  109. #endif
  110. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  111. TEST(module, import_as_issue1) {
  112. /* init */
  113. g_PikaMemInfo.heapUsedMax = 0;
  114. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  115. extern unsigned char pikaModules_py_a[];
  116. obj_linkLibrary(pikaMain, pikaModules_py_a);
  117. __platform_printf("BEGIN\r\n");
  118. /* run */
  119. obj_run(pikaMain,
  120. "import import_test as my_import\n"
  121. "print(my_import.func())\n"
  122. "print(import_test.func())\n");
  123. /* collect */
  124. /* assert */
  125. EXPECT_STREQ(log_buff[0], "hello\r\n");
  126. EXPECT_STREQ(log_buff[1], "hello\r\n");
  127. EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
  128. /* deinit */
  129. obj_deinit(pikaMain);
  130. EXPECT_EQ(pikaMemNow(), 0);
  131. }
  132. #endif
  133. #if PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL
  134. TEST(module, unittest_test1) {
  135. /* init */
  136. g_PikaMemInfo.heapUsedMax = 0;
  137. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  138. extern unsigned char pikaModules_py_a[];
  139. obj_linkLibrary(pikaMain, pikaModules_py_a);
  140. /* run */
  141. __platform_printf("BEGIN\r\n");
  142. pikaVM_runSingleFile(pikaMain, "test/python/unittest/test1.py");
  143. /* collect */
  144. int testsRun = obj_getInt(pikaMain, "res.testsRun");
  145. int errorsNum = obj_getInt(pikaMain, "res.errorsNum");
  146. /* assert */
  147. EXPECT_EQ(testsRun, 3);
  148. EXPECT_EQ(errorsNum, 0);
  149. /* deinit */
  150. obj_deinit(pikaMain);
  151. EXPECT_EQ(pikaMemNow(), 0);
  152. }
  153. #endif
  154. #if PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL
  155. TEST(module, unittest_test2) {
  156. /* init */
  157. g_PikaMemInfo.heapUsedMax = 0;
  158. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  159. extern unsigned char pikaModules_py_a[];
  160. obj_linkLibrary(pikaMain, pikaModules_py_a);
  161. /* run */
  162. __platform_printf("BEGIN\r\n");
  163. pikaVM_runSingleFile(pikaMain, "test/python/unittest/test2.py");
  164. /* collect */
  165. int testsRun = obj_getInt(pikaMain, "res.testsRun");
  166. int errorsNum = obj_getInt(pikaMain, "res.errorsNum");
  167. /* assert */
  168. EXPECT_EQ(testsRun, 4);
  169. EXPECT_EQ(errorsNum, 1);
  170. /* deinit */
  171. obj_deinit(pikaMain);
  172. EXPECT_EQ(pikaMemNow(), 0);
  173. }
  174. TEST(module, unittest_test3) {
  175. /* init */
  176. g_PikaMemInfo.heapUsedMax = 0;
  177. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  178. extern unsigned char pikaModules_py_a[];
  179. obj_linkLibrary(pikaMain, pikaModules_py_a);
  180. /* run */
  181. __platform_printf("BEGIN\r\n");
  182. pikaVM_runSingleFile(pikaMain, "test/python/unittest/test3.py");
  183. /* collect */
  184. int testsRun = obj_getInt(pikaMain, "res.testsRun");
  185. int errorsNum = obj_getInt(pikaMain, "res.errorsNum");
  186. /* assert */
  187. EXPECT_EQ(testsRun, 1);
  188. EXPECT_EQ(errorsNum, 0);
  189. /* deinit */
  190. obj_deinit(pikaMain);
  191. EXPECT_EQ(pikaMemNow(), 0);
  192. }
  193. #endif
  194. TEST(socket, gethostname) {
  195. /* init */
  196. g_PikaMemInfo.heapUsedMax = 0;
  197. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  198. extern unsigned char pikaModules_py_a[];
  199. obj_linkLibrary(pikaMain, pikaModules_py_a);
  200. /* run */
  201. __platform_printf("BEGIN\r\n");
  202. pikaVM_runSingleFile(pikaMain, "test/python/socket/gethostname.py");
  203. /* collect */
  204. /* assert */
  205. EXPECT_EQ(ARG_TYPE_STRING, args_getType(pikaMain->list, "hostname"));
  206. /* deinit */
  207. obj_deinit(pikaMain);
  208. EXPECT_EQ(pikaMemNow(), 0);
  209. }
  210. #if !PIKA_NANO_ENABLE
  211. TEST(socket, server_client) {
  212. /* init */
  213. g_PikaMemInfo.heapUsedMax = 0;
  214. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  215. extern unsigned char pikaModules_py_a[];
  216. obj_linkLibrary(pikaMain, pikaModules_py_a);
  217. /* run */
  218. __platform_printf("BEGIN\r\n");
  219. pikaVM_runSingleFile(pikaMain, "test/python/socket/server_client.py");
  220. /* collect */
  221. /* assert */
  222. EXPECT_STREQ(log_buff[2], "recv from client: 127.0.0.1\r\n");
  223. EXPECT_STREQ(log_buff[1], "server recv: send test from client\r\n");
  224. EXPECT_STREQ(log_buff[0], "client recv: send test from server\r\n");
  225. /* deinit */
  226. obj_deinit(pikaMain);
  227. EXPECT_EQ(pikaMemNow(), 0);
  228. }
  229. TEST(socket, thread) {
  230. /* init */
  231. g_PikaMemInfo.heapUsedMax = 0;
  232. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  233. extern unsigned char pikaModules_py_a[];
  234. obj_linkLibrary(pikaMain, pikaModules_py_a);
  235. /* run */
  236. __platform_printf("BEGIN\r\n");
  237. pikaVM_runSingleFile(pikaMain, "test/python/socket/socket_thread.py");
  238. /* collect */
  239. /* assert */
  240. EXPECT_STREQ(log_buff[4], "socket server accepted at 127.0.0.1\r\n");
  241. EXPECT_STREQ(log_buff[3], "socket server recv: hello\r\n");
  242. EXPECT_STREQ(log_buff[2], "client recv: hello\r\n");
  243. EXPECT_STREQ(log_buff[1], "socket server closing accept\r\n");
  244. EXPECT_STREQ(log_buff[0], "socket server closing\r\n");
  245. /* deinit */
  246. obj_deinit(pikaMain);
  247. EXPECT_EQ(pikaMemNow(), 0);
  248. }
  249. #if PIKA_FLOAT_TYPE_DOUBLE
  250. TEST(socket, json_issue) {
  251. /* init */
  252. g_PikaMemInfo.heapUsedMax = 0;
  253. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  254. extern unsigned char pikaModules_py_a[];
  255. obj_linkLibrary(pikaMain, pikaModules_py_a);
  256. /* run */
  257. __platform_printf("BEGIN\r\n");
  258. pikaVM_runSingleFile(pikaMain, "test/python/socket/socket_json.py");
  259. /* collect */
  260. /* assert */
  261. EXPECT_STREQ(log_buff[2],
  262. "client recv: "
  263. "{\n\t\"code\":\t0,\n\t\"result\":\t{\n\t\t\"a_a\":\t{"
  264. "\n\t\t\t\"desc\":\t\"A "
  265. "\347\233\270\347\224\265\346\265\201\",\n\t\t\t\"value\":\t0."
  266. "29\n\t\t}\n\t}\n}\r\n");
  267. EXPECT_STREQ(log_buff[4],
  268. "client recv: "
  269. "{\n\t\"code\":\t0,\n\t\"result\":\t{\n\t\t\"a_a\":\t{"
  270. "\n\t\t\t\"desc\":\t\"A "
  271. "\347\233\270\347\224\265\346\265\201\",\n\t\t\t\"value\":\t0."
  272. "29\n\t\t}\n\t}\n}\r\n");
  273. /* deinit */
  274. obj_deinit(pikaMain);
  275. EXPECT_EQ(pikaMemNow(), 0);
  276. }
  277. #endif
  278. TEST_RUN_SINGLE_FILE_ASSERT(socket,
  279. socket_GET,
  280. "test/python/socket/socket_GET.py",
  281. obj_getBool(pikaMain, "res") == pika_true)
  282. TEST_RUN_SINGLE_FILE_PASS(socket,
  283. socket_DNS,
  284. "test/python/socket/socket_DNS.py")
  285. #endif
  286. #if !PIKA_NANO_ENABLE
  287. TEST(re, match) {
  288. /* init */
  289. g_PikaMemInfo.heapUsedMax = 0;
  290. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  291. extern unsigned char pikaModules_py_a[];
  292. obj_linkLibrary(pikaMain, pikaModules_py_a);
  293. /* run */
  294. __platform_printf("BEGIN\r\n");
  295. pikaVM_runSingleFile(pikaMain, "test/python/re/match.py");
  296. /* collect */
  297. /* assert */
  298. EXPECT_STREQ(log_buff[3], "BEGIN\r\n");
  299. EXPECT_STREQ(log_buff[2],
  300. "matchObj.group(0) : Cats are smarter than dogs\r\n");
  301. EXPECT_STREQ(log_buff[1], "matchObj.group(1) : Cats\r\n");
  302. EXPECT_STREQ(log_buff[0], "matchObj.group(2) : smarter\r\n");
  303. /* deinit */
  304. obj_deinit(pikaMain);
  305. EXPECT_EQ(pikaMemNow(), 0);
  306. }
  307. #endif
  308. #if !PIKA_NANO_ENABLE
  309. TEST(re, search) {
  310. /* init */
  311. g_PikaMemInfo.heapUsedMax = 0;
  312. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  313. extern unsigned char pikaModules_py_a[];
  314. obj_linkLibrary(pikaMain, pikaModules_py_a);
  315. /* run */
  316. __platform_printf("BEGIN\r\n");
  317. pikaVM_runSingleFile(pikaMain, "test/python/re/search.py");
  318. /* collect */
  319. /* assert */
  320. EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
  321. EXPECT_STREQ(log_buff[1], "(0, 3)\r\n");
  322. EXPECT_STREQ(log_buff[0], "(11, 14)\r\n");
  323. /* deinit */
  324. obj_deinit(pikaMain);
  325. EXPECT_EQ(pikaMemNow(), 0);
  326. }
  327. #endif
  328. #if !PIKA_NANO_ENABLE
  329. TEST(re, sub) {
  330. /* init */
  331. g_PikaMemInfo.heapUsedMax = 0;
  332. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  333. extern unsigned char pikaModules_py_a[];
  334. obj_linkLibrary(pikaMain, pikaModules_py_a);
  335. /* run */
  336. __platform_printf("BEGIN\r\n");
  337. pikaVM_runSingleFile(pikaMain, "test/python/re/sub.py");
  338. /* collect */
  339. /* assert */
  340. EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
  341. EXPECT_STREQ(log_buff[1], "the phone number is: 2004-959-559 \r\n");
  342. EXPECT_STREQ(log_buff[0], "the phone number is: 2004959559\r\n");
  343. /* deinit */
  344. obj_deinit(pikaMain);
  345. EXPECT_EQ(pikaMemNow(), 0);
  346. }
  347. #endif
  348. #if !PIKA_NANO_ENABLE
  349. TEST(re, findall) {
  350. /* init */
  351. g_PikaMemInfo.heapUsedMax = 0;
  352. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  353. extern unsigned char pikaModules_py_a[];
  354. obj_linkLibrary(pikaMain, pikaModules_py_a);
  355. /* run */
  356. __platform_printf("BEGIN\r\n");
  357. pikaVM_runSingleFile(pikaMain, "test/python/re/findall.py");
  358. /* collect */
  359. /* assert */
  360. EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
  361. EXPECT_STREQ(
  362. log_buff[1],
  363. "[('2020', '1', '1'), ('2022', '12', '22'), ('2018', '3', '31')]\r\n");
  364. EXPECT_STREQ(
  365. log_buff[0],
  366. "date: 2020, 2022, 2018. Wrong format: 2031-13-31, 2032-12-33 ...\r\n");
  367. /* deinit */
  368. obj_deinit(pikaMain);
  369. EXPECT_EQ(pikaMemNow(), 0);
  370. }
  371. #endif
  372. #if !PIKA_NANO_ENABLE
  373. TEST(modbus, rtu_master) {
  374. /* init */
  375. g_PikaMemInfo.heapUsedMax = 0;
  376. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  377. extern unsigned char pikaModules_py_a[];
  378. obj_linkLibrary(pikaMain, pikaModules_py_a);
  379. /* run */
  380. __platform_printf("BEGIN\r\n");
  381. pikaVM_runSingleFile(pikaMain, "test/python/modbus/rtu_master.py");
  382. /* collect */
  383. /* assert */
  384. EXPECT_STREQ(log_buff[6], "BEGIN\r\n");
  385. EXPECT_STREQ(log_buff[5],
  386. "b'\\x01\\x03\\x00\\x00\\x00\\x0a\\xc5\\xcd'\r\n");
  387. EXPECT_STREQ(log_buff[4], "[0, 0, 1234, 0, 0, 123, 0, 0, 0, 0]\r\n");
  388. EXPECT_STREQ(log_buff[3],
  389. "b'\\x01\\x04\\x00\\x00\\x00\\x02\\x71\\xcb'\r\n");
  390. EXPECT_STREQ(log_buff[2], "[0, 2278]\r\n");
  391. EXPECT_STREQ(log_buff[1],
  392. "b'\\x01\\x06\\x00\\x00\\x12\\x34\\x84\\xbd'\r\n");
  393. EXPECT_STREQ(log_buff[0],
  394. "b'\\x01\\x0f\\x00\\x00\\x00\\x08\\x01\\x57\\xbf\\x6b'\r\n");
  395. /* deinit */
  396. obj_deinit(pikaMain);
  397. EXPECT_EQ(pikaMemNow(), 0);
  398. }
  399. TEST(proxy, test1) {
  400. /* init */
  401. g_PikaMemInfo.heapUsedMax = 0;
  402. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  403. extern unsigned char pikaModules_py_a[];
  404. obj_linkLibrary(pikaMain, pikaModules_py_a);
  405. /* run */
  406. __platform_printf("BEGIN\r\n");
  407. pikaVM_runSingleFile(pikaMain, "test/python/proxy/proxy1.py");
  408. /* collect */
  409. /* assert */
  410. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  411. EXPECT_STREQ(log_buff[0], "set value = 20\r\n");
  412. /* deinit */
  413. obj_deinit(pikaMain);
  414. EXPECT_EQ(pikaMemNow(), 0);
  415. }
  416. TEST(issue, global) {
  417. /* init */
  418. g_PikaMemInfo.heapUsedMax = 0;
  419. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  420. extern unsigned char pikaModules_py_a[];
  421. obj_linkLibrary(pikaMain, pikaModules_py_a);
  422. /* run */
  423. __platform_printf("BEGIN\r\n");
  424. pikaVM_runSingleFile(pikaMain, "test/python/issue/issue_global.py");
  425. /* collect */
  426. /* assert */
  427. EXPECT_EQ(obj_getInt(pikaMain, "testpara.timer2_flag"), 1);
  428. /* deinit */
  429. obj_deinit(pikaMain);
  430. EXPECT_EQ(pikaMemNow(), 0);
  431. }
  432. TEST(module, mod1_mod2_mod1) {
  433. /* init */
  434. g_PikaMemInfo.heapUsedMax = 0;
  435. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  436. extern unsigned char pikaModules_py_a[];
  437. obj_linkLibrary(pikaMain, pikaModules_py_a);
  438. /* run */
  439. __platform_printf("BEGIN\r\n");
  440. obj_run(pikaMain,
  441. "import test_module1\n"
  442. "test_module1.test_module2.test_module1.mytest()");
  443. /* collect */
  444. /* assert */
  445. EXPECT_STREQ(log_buff[0], "test_module_1_hello\r\n");
  446. /* deinit */
  447. obj_deinit(pikaMain);
  448. EXPECT_EQ(pikaMemNow(), 0);
  449. }
  450. TEST(module, improt_as_cmodule) {
  451. /* init */
  452. g_PikaMemInfo.heapUsedMax = 0;
  453. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  454. extern unsigned char pikaModules_py_a[];
  455. obj_linkLibrary(pikaMain, pikaModules_py_a);
  456. /* run */
  457. __platform_printf("BEGIN\r\n");
  458. obj_run(pikaMain, "from PikaStdData import String as string\n");
  459. /* collect */
  460. /* assert */
  461. /* deinit */
  462. obj_deinit(pikaMain);
  463. EXPECT_EQ(pikaMemNow(), 0);
  464. }
  465. extern "C" {
  466. volatile FILE* f_getchar_fp = NULL;
  467. char f_getchar(void) {
  468. char c = 0;
  469. size_t n = fread(&c, 1, 1, (FILE*)f_getchar_fp);
  470. if (n > 0) {
  471. return c;
  472. }
  473. pika_platform_printf("f_getchar error\r\n");
  474. pika_assert(0);
  475. return -1;
  476. }
  477. void pikaScriptShell_withGetchar(PikaObj* self, sh_getchar getchar_fn);
  478. }
  479. TEST(module, REPL_runbytecode) {
  480. /* init */
  481. g_PikaMemInfo.heapUsedMax = 0;
  482. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  483. extern unsigned char pikaModules_py_a[];
  484. obj_linkLibrary(pikaMain, pikaModules_py_a);
  485. /* run */
  486. __platform_printf("BEGIN\r\n");
  487. f_getchar_fp = fopen("package/pikascript/cjson_test.py.o", "rb");
  488. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  489. fclose((FILE*)f_getchar_fp);
  490. obj_run(pikaMain, "test_start()");
  491. /* collect */
  492. /* assert */
  493. EXPECT_STREQ(log_buff[0], "shopping\r\n");
  494. /* deinit */
  495. obj_deinit(pikaMain);
  496. EXPECT_EQ(pikaMemNow(), 0);
  497. }
  498. TEST(module, REPL_pya) {
  499. /* init */
  500. g_PikaMemInfo.heapUsedMax = 0;
  501. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  502. extern unsigned char pikaModules_py_a[];
  503. obj_linkLibrary(pikaMain, pikaModules_py_a);
  504. /* run */
  505. __platform_printf("BEGIN\r\n");
  506. f_getchar_fp =
  507. fopen("package/pikascript/pikascript-api/pikaModules.py.a", "rb");
  508. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  509. fclose((FILE*)f_getchar_fp);
  510. // obj_run(pikaMain, "test_start()");
  511. /* collect */
  512. /* assert */
  513. // EXPECT_STREQ(log_buff[0], "shopping\r\n");
  514. /* deinit */
  515. obj_deinit(pikaMain);
  516. EXPECT_EQ(pikaMemNow(), 0);
  517. }
  518. TEST(module, REPL_script) {
  519. /* init */
  520. g_PikaMemInfo.heapUsedMax = 0;
  521. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  522. extern unsigned char pikaModules_py_a[];
  523. obj_linkLibrary(pikaMain, pikaModules_py_a);
  524. /* run */
  525. __platform_printf("BEGIN\r\n");
  526. f_getchar_fp = fopen("test/python/UnitTest.py", "rb");
  527. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  528. fclose((FILE*)f_getchar_fp);
  529. /* collect */
  530. /* assert */
  531. EXPECT_STREQ(log_buff[4], "mem used max:\r\n");
  532. /* deinit */
  533. obj_deinit(pikaMain);
  534. EXPECT_EQ(pikaMemNow(), 0);
  535. }
  536. TEST(module, REPL_script_2) {
  537. /* init */
  538. g_PikaMemInfo.heapUsedMax = 0;
  539. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  540. extern unsigned char pikaModules_py_a[];
  541. obj_linkLibrary(pikaMain, pikaModules_py_a);
  542. /* run */
  543. __platform_printf("BEGIN\r\n");
  544. f_getchar_fp = fopen("test/python/UnitTest2.py", "rb");
  545. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  546. fclose((FILE*)f_getchar_fp);
  547. /* collect */
  548. /* assert */
  549. EXPECT_STREQ(log_buff[1], "mem used max:\r\n");
  550. /* deinit */
  551. obj_deinit(pikaMain);
  552. EXPECT_EQ(pikaMemNow(), 0);
  553. }
  554. TEST(module, REPL_big_script) {
  555. /* init */
  556. g_PikaMemInfo.heapUsedMax = 0;
  557. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  558. extern unsigned char pikaModules_py_a[];
  559. obj_linkLibrary(pikaMain, pikaModules_py_a);
  560. /* run */
  561. __platform_printf("BEGIN\r\n");
  562. f_getchar_fp = fopen("package/pikascript/cjson_test.py", "rb");
  563. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  564. fclose((FILE*)f_getchar_fp);
  565. /* collect */
  566. /* assert */
  567. EXPECT_STREQ(log_buff[0],
  568. "\r\nError: line buff overflow, please use bigger "
  569. "'PIKA_LINE_BUFF_SIZE'\r\n");
  570. /* deinit */
  571. obj_deinit(pikaMain);
  572. EXPECT_EQ(pikaMemNow(), 0);
  573. }
  574. TEST(module, REPL_stdtask) {
  575. /* init */
  576. g_PikaMemInfo.heapUsedMax = 0;
  577. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  578. extern unsigned char pikaModules_py_a[];
  579. obj_linkLibrary(pikaMain, pikaModules_py_a);
  580. /* run */
  581. __platform_printf("BEGIN\r\n");
  582. f_getchar_fp = fopen("test/python/std/stdtask.py", "rb");
  583. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  584. fclose((FILE*)f_getchar_fp);
  585. /* collect */
  586. /* assert */
  587. /* deinit */
  588. obj_deinit(pikaMain);
  589. EXPECT_EQ(pikaMemNow(), 0);
  590. }
  591. TEST_RUN_SINGLE_FILE(modbus,
  592. rtu_master_err,
  593. "test/python/modbus/rtu_master_err.py")
  594. TEST_RUN_SINGLE_FILE_PASS(proxy, proxy3, "test/python/proxy/proxy3.py")
  595. #endif
  596. TEST_END