except-test.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include "test_common.h"
  2. #if PIKA_SYNTAX_EXCEPTION_ENABLE
  3. TEST(except, try1) {
  4. /* init */
  5. pikaMemInfo.heapUsedMax = 0;
  6. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  7. __platform_printf("BEGIN\r\n");
  8. /* run */
  9. obj_run(pikaMain,
  10. "try:\n"
  11. " print('before raise')\n"
  12. " raise \n"
  13. " print('after raise')\n"
  14. "except:\n"
  15. " print('in except')\n"
  16. "\n");
  17. /* collect */
  18. EXPECT_STREQ("BEGIN\r\n", log_buff[2]);
  19. EXPECT_STREQ("before raise\r\n", log_buff[1]);
  20. EXPECT_STREQ("in except\r\n", log_buff[0]);
  21. /* assert */
  22. /* deinit */
  23. obj_deinit(pikaMain);
  24. EXPECT_EQ(pikaMemNow(), 0);
  25. }
  26. TEST(except, trycmodule1) {
  27. /* init */
  28. pikaMemInfo.heapUsedMax = 0;
  29. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  30. __platform_printf("BEGIN\r\n");
  31. /* run */
  32. obj_run(pikaMain,
  33. "import pika_cjson\n"
  34. "try:\n"
  35. " b = pika_cjson.Parse('')\n"
  36. " print('after failed')\n"
  37. "except:\n"
  38. " print('parse failed')\n"
  39. "\n");
  40. /* collect */
  41. EXPECT_STREQ("BEGIN\r\n", log_buff[2]);
  42. EXPECT_STREQ("parse failed\r\n", log_buff[0]);
  43. /* assert */
  44. /* deinit */
  45. obj_deinit(pikaMain);
  46. EXPECT_EQ(pikaMemNow(), 0);
  47. }
  48. TEST(except, trydef1) {
  49. /* init */
  50. pikaMemInfo.heapUsedMax = 0;
  51. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  52. __platform_printf("BEGIN\r\n");
  53. /* run */
  54. pikaVM_runSingleFile(pikaMain, "../../examples/Exception/trydef1.py");
  55. /* collect */
  56. /* assert */
  57. EXPECT_STREQ("BEGIN\r\n", log_buff[2]);
  58. EXPECT_STREQ("a:1\r\n", log_buff[1]);
  59. EXPECT_STREQ("in except\r\n", log_buff[0]);
  60. /* deinit */
  61. obj_deinit(pikaMain);
  62. EXPECT_EQ(pikaMemNow(), 0);
  63. }
  64. TEST(except, try1file) {
  65. /* init */
  66. pikaMemInfo.heapUsedMax = 0;
  67. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  68. __platform_printf("BEGIN\r\n");
  69. /* run */
  70. pikaVM_runSingleFile(pikaMain, "../../examples/Exception/try1.py");
  71. /* collect */
  72. EXPECT_STREQ("BEGIN\r\n", log_buff[2]);
  73. EXPECT_STREQ("before raise\r\n", log_buff[1]);
  74. EXPECT_STREQ("in except\r\n", log_buff[0]);
  75. /* assert */
  76. /* deinit */
  77. obj_deinit(pikaMain);
  78. EXPECT_EQ(pikaMemNow(), 0);
  79. }
  80. TEST(except, for_loop) {
  81. /* init */
  82. pikaMemInfo.heapUsedMax = 0;
  83. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  84. __platform_printf("BEGIN\r\n");
  85. /* run */
  86. obj_run(pikaMain,
  87. "sum = 0\n"
  88. "for i in range(0, 10):\n"
  89. " try:\n"
  90. " if i == 3:\n"
  91. " raise\n"
  92. " print(i)\n"
  93. " sum += i\n"
  94. " except:\n"
  95. " print('in except')\n"
  96. "\n");
  97. /* collect */
  98. int sum = obj_getInt(pikaMain, "sum");
  99. /* assert */
  100. EXPECT_EQ(sum, 42);
  101. /* deinit */
  102. obj_deinit(pikaMain);
  103. EXPECT_EQ(pikaMemNow(), 0);
  104. }
  105. TEST(except, dict) {
  106. /* init */
  107. pikaMemInfo.heapUsedMax = 0;
  108. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  109. __platform_printf("BEGIN\r\n");
  110. /* run */
  111. pikaVM_runSingleFile(pikaMain, "../../examples/Exception/trydict.py");
  112. /* collect */
  113. int res = obj_getInt(pikaMain, "res");
  114. EXPECT_EQ(res, 5);
  115. /* assert */
  116. /* deinit */
  117. obj_deinit(pikaMain);
  118. EXPECT_EQ(pikaMemNow(), 0);
  119. }
  120. TEST(except, len) {
  121. /* init */
  122. pikaMemInfo.heapUsedMax = 0;
  123. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  124. __platform_printf("BEGIN\r\n");
  125. /* run */
  126. pikaVM_runSingleFile(pikaMain, "../../examples/Exception/trylen.py");
  127. /* collect */
  128. int res = obj_getInt(pikaMain, "res");
  129. EXPECT_EQ(res, 5);
  130. /* assert */
  131. /* deinit */
  132. obj_deinit(pikaMain);
  133. EXPECT_EQ(pikaMemNow(), 0);
  134. }
  135. #endif