strs-test.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include "test_common.h"
  2. TEST_START
  3. extern PikaMemInfo pikaMemInfo;
  4. /* the log_buff of printf */
  5. extern char log_buff[LOG_BUFF_MAX][LOG_SIZE];
  6. static void printInfo(const char* argName, char* argVal) {
  7. printf("\t\t[info] %s: \"%s\"\r\n", argName, argVal);
  8. }
  9. static int mem;
  10. TEST(strs, append) {
  11. Args* buffs = New_strBuff();
  12. char* res = strsAppend(buffs, "a", "b");
  13. EXPECT_STREQ("ab", res);
  14. args_deinit(buffs);
  15. EXPECT_EQ(pikaMemNow(), 0);
  16. }
  17. TEST(strs, formatInt) {
  18. Args* buffs = New_strBuff();
  19. char* res = strsFormat(buffs, 32, "test: %d", 3);
  20. EXPECT_STREQ("test: 3", res);
  21. args_deinit(buffs);
  22. EXPECT_EQ(pikaMemNow(), 0);
  23. }
  24. TEST(strs, analizeDef) {
  25. mem = pikaMemNow();
  26. Args* buffs = New_args(NULL);
  27. char currentClassName[] = "Compiler";
  28. char line[] = " def analizeFile(pythonApiPath: str):";
  29. printInfo("currentClassName", currentClassName);
  30. char* defSentenceWithBlock = strsRemovePrefix(buffs, line, " def ");
  31. char* defSentence = strsDeleteChar(buffs, defSentenceWithBlock, ' ');
  32. printInfo("defSentence", defSentence);
  33. char* methodName = strsGetFirstToken(buffs, defSentence, '(');
  34. printInfo("methodName", methodName);
  35. char* methodObjPath =
  36. strsAppend(buffs, strsAppend(buffs, currentClassName, "."), methodName);
  37. printInfo("methodObjPath", methodObjPath);
  38. char* returnType = strsCut(buffs, defSentence, '>', ':');
  39. printInfo("returnType", returnType);
  40. char* typeList = strsCut(buffs, defSentence, '(', ')');
  41. printInfo("typeList", typeList);
  42. if (0 != strGetSize(typeList)) {
  43. int argNum = strCountSign(typeList, ',') + 1;
  44. char* typeListBuff = strsCopy(buffs, typeList);
  45. for (int i = 0; i < argNum; i++) {
  46. char* typeDeclareation = strsPopToken(buffs, &typeListBuff, ',');
  47. printInfo("typeDeclareation", typeDeclareation);
  48. char* argName = strsGetFirstToken(buffs, typeDeclareation, ':');
  49. printInfo("argName", argName);
  50. char* argType = strPointToLastToken(typeDeclareation, ':');
  51. printInfo("argType", argType);
  52. }
  53. }
  54. args_deinit(buffs);
  55. return;
  56. }
  57. TEST(strs, format) {
  58. Args* buffs = New_args(NULL);
  59. char* fmt = strsFormat(buffs, 128, "test int: %d, float %f", 1, 34.2);
  60. EXPECT_TRUE(strEqu("test int: 1, float 34.200000", fmt));
  61. args_deinit(buffs);
  62. }
  63. TEST(strs, mem) {
  64. EXPECT_EQ(pikaMemNow(), mem);
  65. }
  66. TEST(strs, arg_strAppend) {
  67. Arg* str_arg = arg_newStr("a");
  68. str_arg = arg_strAppend(str_arg, "b");
  69. EXPECT_STREQ(arg_getStr(str_arg), "ab");
  70. arg_deinit(str_arg);
  71. EXPECT_EQ(pikaMemNow(), 0);
  72. }
  73. TEST(strs, strsReplace) {
  74. Args* buffs = New_strBuff();
  75. char* res = strsReplace(buffs, "abcdefg", "cd", "47");
  76. EXPECT_STREQ(res, "ab47efg");
  77. args_deinit(buffs);
  78. EXPECT_EQ(pikaMemNow(), 0);
  79. }
  80. TEST(strs, cut_) {
  81. Args* buffs = New_strBuff();
  82. char* res = strsCut(buffs, "print('test,test')", '(', ')');
  83. EXPECT_STREQ(res, "'test,test'");
  84. args_deinit(buffs);
  85. EXPECT_EQ(pikaMemNow(), 0);
  86. }
  87. TEST(str, strPointToLastToken) {
  88. char* tokens = "abc.efg";
  89. char* last_token = strPointToLastToken(tokens, '.');
  90. EXPECT_STREQ(last_token, "efg");
  91. }
  92. TEST(str, transfer) {
  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. /* run */
  99. __platform_printf("BEGIN\r\n");
  100. pikaVM_run(pikaMain, "'\\r\\n'\n");
  101. /* collect */
  102. /* assert */
  103. EXPECT_STREQ(log_buff[0], "'\r\n'\r\n");
  104. /* deinit */
  105. obj_deinit(pikaMain);
  106. EXPECT_EQ(pikaMemNow(), 0);
  107. }
  108. TEST(str, transfer_issue_jfo4i) {
  109. /* init */
  110. pikaMemInfo.heapUsedMax = 0;
  111. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  112. extern unsigned char pikaModules_py_a[];
  113. obj_linkLibrary(pikaMain, pikaModules_py_a);
  114. /* run */
  115. __platform_printf("BEGIN\r\n");
  116. pikaVM_run(pikaMain, "'\\\\replace'");
  117. pikaVM_run(pikaMain, "'\\\\non'");
  118. pikaVM_run(pikaMain, "'\\\\title'");
  119. /* collect */
  120. /* assert */
  121. EXPECT_STREQ(log_buff[2], "'\\replace'\r\n");
  122. EXPECT_STREQ(log_buff[1], "'\\non'\r\n");
  123. EXPECT_STREQ(log_buff[0], "'\\title'\r\n");
  124. /* deinit */
  125. obj_deinit(pikaMain);
  126. EXPECT_EQ(pikaMemNow(), 0);
  127. }
  128. TEST_END