except-test.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. #include "test_common.h"
  2. TEST_START
  3. #if PIKA_SYNTAX_EXCEPTION_ENABLE
  4. TEST(except, try1) {
  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. "try:\n"
  12. " print('before raise')\n"
  13. " raise \n"
  14. " print('after raise')\n"
  15. "except:\n"
  16. " print('in except')\n"
  17. "\n");
  18. /* collect */
  19. EXPECT_STREQ("BEGIN\r\n", log_buff[2]);
  20. EXPECT_STREQ("before raise\r\n", log_buff[1]);
  21. EXPECT_STREQ("in except\r\n", log_buff[0]);
  22. /* assert */
  23. /* deinit */
  24. obj_deinit(pikaMain);
  25. EXPECT_EQ(pikaMemNow(), 0);
  26. }
  27. TEST(except, def_none) {
  28. /* init */
  29. g_PikaMemInfo.heapUsedMax = 0;
  30. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  31. __platform_printf("BEGIN\r\n");
  32. /* run */
  33. obj_run(pikaMain,
  34. "import pika_cjson\n"
  35. "b = pika_cjson.Parse('')\n"
  36. "if None == b:\n"
  37. " print('None')\n"
  38. "\n");
  39. /* collect */
  40. EXPECT_STREQ("None\r\n", log_buff[0]);
  41. /* assert */
  42. /* deinit */
  43. obj_deinit(pikaMain);
  44. EXPECT_EQ(pikaMemNow(), 0);
  45. }
  46. TEST(except, trydef1) {
  47. /* init */
  48. g_PikaMemInfo.heapUsedMax = 0;
  49. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  50. __platform_printf("BEGIN\r\n");
  51. /* run */
  52. pikaVM_runSingleFile(pikaMain, "../../examples/Exception/trydef1.py");
  53. /* collect */
  54. /* assert */
  55. EXPECT_STREQ("BEGIN\r\n", log_buff[2]);
  56. EXPECT_STREQ("a:1\r\n", log_buff[1]);
  57. EXPECT_STREQ("in except\r\n", log_buff[0]);
  58. /* deinit */
  59. obj_deinit(pikaMain);
  60. EXPECT_EQ(pikaMemNow(), 0);
  61. }
  62. TEST(except, try1file) {
  63. /* init */
  64. g_PikaMemInfo.heapUsedMax = 0;
  65. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  66. __platform_printf("BEGIN\r\n");
  67. /* run */
  68. pikaVM_runSingleFile(pikaMain, "../../examples/Exception/try1.py");
  69. /* collect */
  70. EXPECT_STREQ("BEGIN\r\n", log_buff[2]);
  71. EXPECT_STREQ("before raise\r\n", log_buff[1]);
  72. EXPECT_STREQ("in except\r\n", log_buff[0]);
  73. /* assert */
  74. /* deinit */
  75. obj_deinit(pikaMain);
  76. EXPECT_EQ(pikaMemNow(), 0);
  77. }
  78. TEST(except, for_loop) {
  79. /* init */
  80. g_PikaMemInfo.heapUsedMax = 0;
  81. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  82. __platform_printf("BEGIN\r\n");
  83. /* run */
  84. obj_run(pikaMain,
  85. "sum = 0\n"
  86. "for i in range(0, 10):\n"
  87. " try:\n"
  88. " if i == 3:\n"
  89. " raise\n"
  90. " print(i)\n"
  91. " sum += i\n"
  92. " except:\n"
  93. " print('in except')\n"
  94. "\n");
  95. /* collect */
  96. int sum = obj_getInt(pikaMain, "sum");
  97. /* assert */
  98. EXPECT_EQ(sum, 42);
  99. /* deinit */
  100. obj_deinit(pikaMain);
  101. EXPECT_EQ(pikaMemNow(), 0);
  102. }
  103. TEST(except, dict) {
  104. /* init */
  105. g_PikaMemInfo.heapUsedMax = 0;
  106. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  107. __platform_printf("BEGIN\r\n");
  108. /* run */
  109. pikaVM_runSingleFile(pikaMain, "../../examples/Exception/trydict.py");
  110. /* collect */
  111. int res = obj_getInt(pikaMain, "res");
  112. EXPECT_EQ(res, 5);
  113. /* assert */
  114. /* deinit */
  115. obj_deinit(pikaMain);
  116. EXPECT_EQ(pikaMemNow(), 0);
  117. }
  118. TEST(except, len) {
  119. /* init */
  120. g_PikaMemInfo.heapUsedMax = 0;
  121. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  122. __platform_printf("BEGIN\r\n");
  123. /* run */
  124. pikaVM_runSingleFile(pikaMain, "../../examples/Exception/trylen.py");
  125. /* collect */
  126. int res = obj_getInt(pikaMain, "res");
  127. EXPECT_EQ(res, 5);
  128. /* assert */
  129. /* deinit */
  130. obj_deinit(pikaMain);
  131. EXPECT_EQ(pikaMemNow(), 0);
  132. }
  133. TEST(except, trycmodule1) {
  134. /* init */
  135. g_PikaMemInfo.heapUsedMax = 0;
  136. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  137. __platform_printf("BEGIN\r\n");
  138. /* run */
  139. obj_run(pikaMain,
  140. "import GTestTask\n"
  141. "try:\n"
  142. " GTestTask.test_raise()\n"
  143. " print('after failed')\n"
  144. "except:\n"
  145. " print('parse failed')\n"
  146. "\n");
  147. /* collect */
  148. EXPECT_STREQ("BEGIN\r\n", log_buff[1]);
  149. EXPECT_STREQ("parse failed\r\n", log_buff[0]);
  150. /* assert */
  151. /* deinit */
  152. obj_deinit(pikaMain);
  153. EXPECT_EQ(pikaMemNow(), 0);
  154. }
  155. TEST(except, except_break) {
  156. /* init */
  157. g_PikaMemInfo.heapUsedMax = 0;
  158. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  159. __platform_printf("BEGIN\r\n");
  160. /* run */
  161. obj_run(pikaMain,
  162. "l = [1,2,3]\n"
  163. "sum = 0\n"
  164. "for i in range(10):\n"
  165. " try:\n"
  166. " sum += l[i]\n"
  167. " except Exception:\n"
  168. " print('in excepton')\n"
  169. " break\n"
  170. "print(sum)\n"
  171. "\n"
  172. );
  173. /* collect */
  174. /* assert */
  175. EXPECT_EQ(obj_getInt(pikaMain, "sum"), 6);
  176. /* deinit */
  177. obj_deinit(pikaMain);
  178. EXPECT_EQ(pikaMemNow(), 0);
  179. }
  180. TEST(except, while_try_while) {
  181. /* init */
  182. g_PikaMemInfo.heapUsedMax = 0;
  183. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  184. __platform_printf("BEGIN\r\n");
  185. /* run */
  186. pikaVM_runSingleFile(pikaMain, "test/python/except/while_try_while.py");
  187. /* collect */
  188. /* assert */
  189. EXPECT_STREQ(log_buff[2], "before try\r\n");
  190. EXPECT_STREQ(log_buff[1], "after try\r\n");
  191. EXPECT_STREQ(log_buff[0], "after while\r\n");
  192. /* deinit */
  193. obj_deinit(pikaMain);
  194. EXPECT_EQ(pikaMemNow(), 0);
  195. }
  196. #endif
  197. TEST_END