module-test.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. #include "test_common.h"
  2. TEST_START
  3. #if PIKA_SYNTAX_IMPORT_EX_ENABLE
  4. TEST(module, cmodule_import) {
  5. /* init */
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. #endif
  175. TEST(socket, gethostname) {
  176. /* init */
  177. pikaMemInfo.heapUsedMax = 0;
  178. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  179. extern unsigned char pikaModules_py_a[];
  180. obj_linkLibrary(pikaMain, pikaModules_py_a);
  181. /* run */
  182. __platform_printf("BEGIN\r\n");
  183. pikaVM_runSingleFile(pikaMain, "test/python/socket/gethostname.py");
  184. /* collect */
  185. /* assert */
  186. EXPECT_EQ(ARG_TYPE_STRING, args_getType(pikaMain->list, "hostname"));
  187. /* deinit */
  188. obj_deinit(pikaMain);
  189. EXPECT_EQ(pikaMemNow(), 0);
  190. }
  191. #if !PIKA_NANO_ENABLE
  192. TEST(socket, server_client) {
  193. /* init */
  194. pikaMemInfo.heapUsedMax = 0;
  195. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  196. extern unsigned char pikaModules_py_a[];
  197. obj_linkLibrary(pikaMain, pikaModules_py_a);
  198. /* run */
  199. __platform_printf("BEGIN\r\n");
  200. pikaVM_runSingleFile(pikaMain, "test/python/socket/server_client.py");
  201. /* collect */
  202. /* assert */
  203. EXPECT_STREQ(log_buff[2], "recv from client: 127.0.0.1\r\n");
  204. EXPECT_STREQ(log_buff[1], "server recv: send test from client\r\n");
  205. EXPECT_STREQ(log_buff[0], "client recv: send test from server\r\n");
  206. /* deinit */
  207. obj_deinit(pikaMain);
  208. EXPECT_EQ(pikaMemNow(), 0);
  209. }
  210. #endif
  211. #if !PIKA_NANO_ENABLE
  212. TEST(re, match) {
  213. /* init */
  214. pikaMemInfo.heapUsedMax = 0;
  215. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  216. extern unsigned char pikaModules_py_a[];
  217. obj_linkLibrary(pikaMain, pikaModules_py_a);
  218. /* run */
  219. __platform_printf("BEGIN\r\n");
  220. pikaVM_runSingleFile(pikaMain, "test/python/re/match.py");
  221. /* collect */
  222. /* assert */
  223. EXPECT_STREQ(log_buff[3], "BEGIN\r\n");
  224. EXPECT_STREQ(log_buff[2],
  225. "matchObj.group(0) : Cats are smarter than dogs\r\n");
  226. EXPECT_STREQ(log_buff[1], "matchObj.group(1) : Cats\r\n");
  227. EXPECT_STREQ(log_buff[0], "matchObj.group(2) : smarter\r\n");
  228. /* deinit */
  229. obj_deinit(pikaMain);
  230. EXPECT_EQ(pikaMemNow(), 0);
  231. }
  232. #endif
  233. #if !PIKA_NANO_ENABLE
  234. TEST(re, search) {
  235. /* init */
  236. pikaMemInfo.heapUsedMax = 0;
  237. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  238. extern unsigned char pikaModules_py_a[];
  239. obj_linkLibrary(pikaMain, pikaModules_py_a);
  240. /* run */
  241. __platform_printf("BEGIN\r\n");
  242. pikaVM_runSingleFile(pikaMain, "test/python/re/search.py");
  243. /* collect */
  244. /* assert */
  245. EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
  246. EXPECT_STREQ(log_buff[1], "(0, 3)\r\n");
  247. EXPECT_STREQ(log_buff[0], "(11, 14)\r\n");
  248. /* deinit */
  249. obj_deinit(pikaMain);
  250. EXPECT_EQ(pikaMemNow(), 0);
  251. }
  252. #endif
  253. #if !PIKA_NANO_ENABLE
  254. TEST(re, sub) {
  255. /* init */
  256. pikaMemInfo.heapUsedMax = 0;
  257. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  258. extern unsigned char pikaModules_py_a[];
  259. obj_linkLibrary(pikaMain, pikaModules_py_a);
  260. /* run */
  261. __platform_printf("BEGIN\r\n");
  262. pikaVM_runSingleFile(pikaMain, "test/python/re/sub.py");
  263. /* collect */
  264. /* assert */
  265. EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
  266. EXPECT_STREQ(log_buff[1], "the phone number is: 2004-959-559 \r\n");
  267. EXPECT_STREQ(log_buff[0], "the phone number is: 2004959559\r\n");
  268. /* deinit */
  269. obj_deinit(pikaMain);
  270. EXPECT_EQ(pikaMemNow(), 0);
  271. }
  272. #endif
  273. #if !PIKA_NANO_ENABLE
  274. TEST(re, findall) {
  275. /* init */
  276. pikaMemInfo.heapUsedMax = 0;
  277. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  278. extern unsigned char pikaModules_py_a[];
  279. obj_linkLibrary(pikaMain, pikaModules_py_a);
  280. /* run */
  281. __platform_printf("BEGIN\r\n");
  282. pikaVM_runSingleFile(pikaMain, "test/python/re/findall.py");
  283. /* collect */
  284. /* assert */
  285. EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
  286. EXPECT_STREQ(
  287. log_buff[1],
  288. "[('2020', '1', '1'), ('2022', '12', '22'), ('2018', '3', '31')]\r\n");
  289. EXPECT_STREQ(
  290. log_buff[0],
  291. "date: 2020, 2022, 2018. Wrong format: 2031-13-31, 2032-12-33 ...\r\n");
  292. /* deinit */
  293. obj_deinit(pikaMain);
  294. EXPECT_EQ(pikaMemNow(), 0);
  295. }
  296. #endif
  297. #if !PIKA_NANO_ENABLE
  298. TEST(modbus, rtu_master) {
  299. /* init */
  300. pikaMemInfo.heapUsedMax = 0;
  301. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  302. extern unsigned char pikaModules_py_a[];
  303. obj_linkLibrary(pikaMain, pikaModules_py_a);
  304. /* run */
  305. __platform_printf("BEGIN\r\n");
  306. pikaVM_runSingleFile(pikaMain, "test/python/modbus/rtu_master.py");
  307. /* collect */
  308. /* assert */
  309. EXPECT_STREQ(log_buff[3], "BEGIN\r\n");
  310. EXPECT_STREQ(log_buff[2],
  311. "b'\\x01\\x03\\x00\\x00\\x00\\x0a\\xc5\\xcd'\r\n");
  312. EXPECT_STREQ(log_buff[1], "[0, 0, 1234, 0, 0, 123, 0, 0, 0, 0]\r\n");
  313. EXPECT_STREQ(log_buff[0],
  314. "b'\\x01\\x06\\x00\\x00\\x12\\x34\\x84\\xbd'\r\n");
  315. /* deinit */
  316. obj_deinit(pikaMain);
  317. EXPECT_EQ(pikaMemNow(), 0);
  318. }
  319. TEST(proxy, test1) {
  320. /* init */
  321. pikaMemInfo.heapUsedMax = 0;
  322. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  323. extern unsigned char pikaModules_py_a[];
  324. obj_linkLibrary(pikaMain, pikaModules_py_a);
  325. /* run */
  326. __platform_printf("BEGIN\r\n");
  327. pikaVM_runSingleFile(pikaMain, "test/python/proxy/proxy1.py");
  328. /* collect */
  329. /* assert */
  330. EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
  331. EXPECT_STREQ(log_buff[0], "set value = 20\r\n");
  332. /* deinit */
  333. obj_deinit(pikaMain);
  334. EXPECT_EQ(pikaMemNow(), 0);
  335. }
  336. TEST(issue, global) {
  337. /* init */
  338. pikaMemInfo.heapUsedMax = 0;
  339. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  340. extern unsigned char pikaModules_py_a[];
  341. obj_linkLibrary(pikaMain, pikaModules_py_a);
  342. /* run */
  343. __platform_printf("BEGIN\r\n");
  344. pikaVM_runSingleFile(pikaMain, "test/python/issue/issue_global.py");
  345. /* collect */
  346. /* assert */
  347. EXPECT_EQ(obj_getInt(pikaMain, "testpara.timer2_flag"), 1);
  348. /* deinit */
  349. obj_deinit(pikaMain);
  350. EXPECT_EQ(pikaMemNow(), 0);
  351. }
  352. TEST(module, mod1_mod2_mod1) {
  353. /* init */
  354. pikaMemInfo.heapUsedMax = 0;
  355. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  356. extern unsigned char pikaModules_py_a[];
  357. obj_linkLibrary(pikaMain, pikaModules_py_a);
  358. /* run */
  359. __platform_printf("BEGIN\r\n");
  360. obj_run(pikaMain,
  361. "import test_module1\n"
  362. "test_module1.test_module2.test_module1.mytest()");
  363. /* collect */
  364. /* assert */
  365. EXPECT_STREQ(log_buff[0], "test_module_1_hello\r\n");
  366. /* deinit */
  367. obj_deinit(pikaMain);
  368. EXPECT_EQ(pikaMemNow(), 0);
  369. }
  370. TEST(module, improt_as_cmodule) {
  371. /* init */
  372. pikaMemInfo.heapUsedMax = 0;
  373. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  374. extern unsigned char pikaModules_py_a[];
  375. obj_linkLibrary(pikaMain, pikaModules_py_a);
  376. /* run */
  377. __platform_printf("BEGIN\r\n");
  378. obj_run(pikaMain, "from PikaStdData import String as string\n");
  379. /* collect */
  380. /* assert */
  381. /* deinit */
  382. obj_deinit(pikaMain);
  383. EXPECT_EQ(pikaMemNow(), 0);
  384. }
  385. extern "C" {
  386. volatile FILE* f_getchar_fp = NULL;
  387. char f_getchar(void) {
  388. char c = 0;
  389. size_t n = fread(&c, 1, 1, (FILE*)f_getchar_fp);
  390. if (n > 0) {
  391. return c;
  392. }
  393. return 0;
  394. }
  395. void pikaScriptShell_withGetchar(PikaObj* self, sh_getchar getchar_fn);
  396. }
  397. TEST(module, REPL_runbytecode) {
  398. /* init */
  399. pikaMemInfo.heapUsedMax = 0;
  400. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  401. extern unsigned char pikaModules_py_a[];
  402. obj_linkLibrary(pikaMain, pikaModules_py_a);
  403. /* run */
  404. __platform_printf("BEGIN\r\n");
  405. f_getchar_fp = fopen("package/pikascript/cjson_test.py.o", "rb");
  406. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  407. fclose((FILE*)f_getchar_fp);
  408. obj_run(pikaMain, "test_start()");
  409. /* collect */
  410. /* assert */
  411. EXPECT_STREQ(log_buff[0], "shopping\r\n");
  412. /* deinit */
  413. obj_deinit(pikaMain);
  414. EXPECT_EQ(pikaMemNow(), 0);
  415. }
  416. TEST(module, REPL_script) {
  417. /* init */
  418. 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. f_getchar_fp = fopen("test/python/UnitTest.py", "rb");
  425. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  426. fclose((FILE*)f_getchar_fp);
  427. /* collect */
  428. /* assert */
  429. EXPECT_STREQ(log_buff[4], "mem used max:\r\n");
  430. /* deinit */
  431. obj_deinit(pikaMain);
  432. EXPECT_EQ(pikaMemNow(), 0);
  433. }
  434. TEST(module, REPL_script_2) {
  435. /* init */
  436. pikaMemInfo.heapUsedMax = 0;
  437. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  438. extern unsigned char pikaModules_py_a[];
  439. obj_linkLibrary(pikaMain, pikaModules_py_a);
  440. /* run */
  441. __platform_printf("BEGIN\r\n");
  442. f_getchar_fp = fopen("test/python/UnitTest2.py", "rb");
  443. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  444. fclose((FILE*)f_getchar_fp);
  445. /* collect */
  446. /* assert */
  447. EXPECT_STREQ(log_buff[1], "mem used max:\r\n");
  448. /* deinit */
  449. obj_deinit(pikaMain);
  450. EXPECT_EQ(pikaMemNow(), 0);
  451. }
  452. TEST(module, REPL_big_script) {
  453. /* init */
  454. pikaMemInfo.heapUsedMax = 0;
  455. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  456. extern unsigned char pikaModules_py_a[];
  457. obj_linkLibrary(pikaMain, pikaModules_py_a);
  458. /* run */
  459. __platform_printf("BEGIN\r\n");
  460. f_getchar_fp = fopen("package/pikascript/cjson_test.py", "rb");
  461. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  462. fclose((FILE*)f_getchar_fp);
  463. /* collect */
  464. /* assert */
  465. EXPECT_STREQ(log_buff[0],
  466. "\r\nError: line buff overflow, please use bigger "
  467. "'PIKA_LINE_BUFF_SIZE'\r\n");
  468. /* deinit */
  469. obj_deinit(pikaMain);
  470. EXPECT_EQ(pikaMemNow(), 0);
  471. }
  472. TEST(module, REPL_stdtask) {
  473. /* init */
  474. pikaMemInfo.heapUsedMax = 0;
  475. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  476. extern unsigned char pikaModules_py_a[];
  477. obj_linkLibrary(pikaMain, pikaModules_py_a);
  478. /* run */
  479. __platform_printf("BEGIN\r\n");
  480. f_getchar_fp = fopen("test/python/std/stdtask.py", "rb");
  481. pikaScriptShell_withGetchar(pikaMain, f_getchar);
  482. fclose((FILE*)f_getchar_fp);
  483. /* collect */
  484. /* assert */
  485. /* deinit */
  486. obj_deinit(pikaMain);
  487. EXPECT_EQ(pikaMemNow(), 0);
  488. }
  489. #endif
  490. TEST_END