Prechádzať zdrojové kódy

use new backspace algream

lyon 3 rokov pred
rodič
commit
1bf5663ecb
2 zmenil súbory, kde vykonal 21 pridanie a 4 odobranie
  1. 2 4
      src/PikaObj.c
  2. 19 0
      test/pikaMain-test.cpp

+ 2 - 4
src/PikaObj.c

@@ -876,15 +876,13 @@ enum shell_state _do_obj_runChar(PikaObj* self,
         goto exit;
     }
     if ((inputChar == '\b') || (inputChar == 127)) {
-        uint32_t size = strGetSize(rxBuff);
-        if (size == 0) {
+        if (cfg->lineBuff_i == 0) {
             __platform_printf(" ");
             state = SHELL_STATE_CONTINUE;
             goto exit;
         }
         __platform_printf(" \b");
-        rxBuff[size - 1] = 0;
-        cfg->lineBuff_i--;
+        rxBuff[--cfg->lineBuff_i] = 0;
         state = SHELL_STATE_CONTINUE;
         goto exit;
     }

+ 19 - 0
test/pikaMain-test.cpp

@@ -2736,3 +2736,22 @@ TEST(pikaMain, REPL_backspace) {
     obj_deinit(pikaMain);
     EXPECT_EQ(pikaMemNow(), 0);
 }
+
+TEST(pikaMain, REPL_backspace_issue_1) {
+    char* lines =
+        "print('test'\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'a'\r\n";
+    /* init */
+    pikaMemInfo.heapUsedMax = 0;
+    PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
+    /* run */
+    __platform_printf("BEGIN\r\n");
+    for (size_t i = 0; i < strGetSize(lines); i++) {
+        obj_runChar(pikaMain, lines[i]);
+    }
+    /* collect */
+    /* assert */
+    EXPECT_STREQ(log_buff[1], "'a'\r\n");
+    /* deinit */
+    obj_deinit(pikaMain);
+    EXPECT_EQ(pikaMemNow(), 0);
+}