diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..11e0982 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,29 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "debug unittest", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/output/test/unittest/unittest", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + "preLaunchTask": "make test", + "miDebuggerPath": "/usr/bin/gdb" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..30e372f --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,40 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "make example", + "type": "shell", + "command": "make example", + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "make clean", + "type": "shell", + "command": "make clean", + "problemMatcher": [ + "$gcc" + ], + "group": "build" + }, + { + "label": "make unittest", + "type": "shell", + "command": "make unittest", + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "test", + "isDefault": true + } + } + ] +} \ No newline at end of file diff --git a/settings/doxygen/doxyfile b/cfg/doxygen/doxyfile similarity index 100% rename from settings/doxygen/doxyfile rename to cfg/doxygen/doxyfile diff --git a/makefile b/makefile index 73ee68f..8e014f9 100644 --- a/makefile +++ b/makefile @@ -17,19 +17,24 @@ SOURCES := src/shellmatta.c \ src/shellmatta_history.c \ src/shellmatta_utils.c \ src/shellmatta_escape.c - + INCLUDES := api . -UNITTEST_SOURCES := test/unittest/test_main.cpp \ - test/unittest/shellmatta_utils/test_utils_writeEcho.cpp \ - test/unittest/shellmatta_utils/test_utils_shellItoa.cpp \ - test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp \ - test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp \ - test/unittest/shellmatta_utils/test_utils_eraseLine.cpp \ - test/unittest/shellmatta_utils/test_utils_rewindCursor.cpp \ - test/unittest/shellmatta_utils/test_utils_forwardCursor.cpp \ - test/unittest/shellmatta_utils/test_utils_clearInput.cpp \ - test/unittest/shellmatta_utils/test_utils_insertChars.cpp +UNITTEST_SOURCES := test/unittest/test_main.cpp \ + test/unittest/shellmatta_utils/test_utils_writeEcho.cpp \ + test/unittest/shellmatta_utils/test_utils_shellItoa.cpp \ + test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp \ + test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp \ + test/unittest/shellmatta_utils/test_utils_eraseLine.cpp \ + test/unittest/shellmatta_utils/test_utils_rewindCursor.cpp \ + test/unittest/shellmatta_utils/test_utils_forwardCursor.cpp \ + test/unittest/shellmatta_utils/test_utils_clearInput.cpp \ + test/unittest/shellmatta_utils/test_utils_insertChars.cpp \ + test/unittest/shellmatta_utils/test_utils_terminateInput.cpp \ + test/unittest/shellmatta_autocomplete/test_autocomplete_run.cpp \ + test/unittest/shellmatta_escape/test_escape_processArrowKeys.cpp \ + test/unittest/shellmatta_history/test_appendHistoryByte.cpp \ + test/unittest/shellmatta/test_shellmatta_doInit.cpp INTEGRATIONTEST_SOURCES := test/integrationtest/test_main.cpp \ test/integrationtest/test_integration.cpp @@ -38,12 +43,12 @@ UNITTEST_CPPOBJ := $(patsubst %.cpp,$(OBJ_DIR)%.o,$(UNITTEST_SOURCES)) INTEGRATIONTEST_CPPOBJ := $(patsubst %.cpp,$(OBJ_DIR)%.o,$(INTEGRATIONTEST_SOURCES)) -CFLAGS := $(INCLUDES:%=-I%) -g -TESTFLAGS := $(INCLUDES:%=-I%) -g -fprofile-arcs -ftest-coverage +CFLAGS := $(INCLUDES:%=-I%) -g -Wall -Werror +TESTFLAGS := $(INCLUDES:%=-I%) -g -Wall -Werror -fprofile-arcs -ftest-coverage TESTLFLAGS := -fprofile-arcs -Wl,--allow-multiple-definition DEPEND = -MT $@ -MF "$(@:%.o=%.d)" -MG -MM - + COBJ := $(patsubst %.c,$(OBJ_DIR)%.o,$(SOURCES)) EXAMPLE_SOURCES := example/main.c @@ -69,20 +74,31 @@ help: test: unittest integrationtest +cppcheck: + - @mkdir -p output/cppcheck/html + cppcheck --addon=/usr/bin/misra.py --enable=all --template=gcc --cppcheck-build-dir=output/cppcheck $(SOURCES) + cppcheck --addon=/usr/bin/misra.py --enable=all --template=gcc --cppcheck-build-dir=output/cppcheck $(SOURCES) --xml 2>output/cppcheck/cppcheck.xml + cppcheck-htmlreport --file=output/cppcheck/cppcheck.xml --title="Shellmatta" --report-dir=output/cppcheck/html + unittest: $(UNITTEST_TARGET) - @mkdir -p output/test/unittest/report @echo running test: + @# remove coverage from former run + @-find . -name "*.gcda" -type f -delete -$(UNITTEST_TARGET) - #gcov -o output/test $(TEST_CPPOBJ) -r + @#gcov -o output/test/unittest $(UNITTEST_CPPOBJ) -r src + + @# remove report from former run + -rm -rf $(OBJ_DIR)test/unittest/report/* gcovr --html-details --output $(OBJ_DIR)test/unittest/report/report.html output/test/unittest -f src -f api - #-rm *.gcov + @#-rm *.gcov integrationtest: $(INTEGRATIONTEST_TARGET) - @mkdir -p output/test/integrationtest/report @echo running test: -$(INTEGRATIONTEST_TARGET) #gcov -o output/test $(TEST_CPPOBJ) -r - gcovr --html-details --output $(OBJ_DIR)test/integrationtest/report/report.html output/test/integrationtest -f src -f api + gcovr --html-details --output $(OBJ_DIR)test/integrationtest/report/report.html output/src -f src -f api #-rm *.gcov example: $(EXAMPLE_TARGET) @@ -91,7 +107,7 @@ example: $(EXAMPLE_TARGET) doc: - @mkdir -p output/doc/html - @mkdir -p output/doc/latex - doxygen settings/doxygen/doxyfile + doxygen cfg/doxygen/doxyfile clean: - rm -rf $(OBJ_DIR) diff --git a/src/shellmatta_utils.c b/src/shellmatta_utils.c index 9993e0f..2009f0c 100644 --- a/src/shellmatta_utils.c +++ b/src/shellmatta_utils.c @@ -69,7 +69,7 @@ uint32_t utils_shellItoa(int32_t value, char *buffer, uint32_t base) do { digitValue = (char) (value % base); - tempBuffer[i] = (digitValue < 10u) ? ('0' + digitValue) : (('A' - 10) + digitValue); + tempBuffer[i] = (digitValue < 10) ? ('0' + digitValue) : (('A' - 10) + digitValue); value /= base; i ++; }while(value > 0); @@ -327,7 +327,7 @@ static shellmatta_retCode_t helpCmdFct(shellmatta_handle_t handle, const char *a return ret; } -shellmatta_cmd_t helpCmd = {"help", "h", "Print this help text", "help", helpCmdFct, NULL}; +shellmatta_cmd_t helpCmd = {(char*)"help", (char*)"h", (char*)"Print this help text", (char*)"help", helpCmdFct, NULL}; /** * @brief terminates an input and prints the prompt again diff --git a/test/integrationtest/test_integration.cpp b/test/integrationtest/test_integration.cpp index 2d19751..7874c7e 100644 --- a/test/integrationtest/test_integration.cpp +++ b/test/integrationtest/test_integration.cpp @@ -7,6 +7,8 @@ extern "C" { static uint32_t write_callCnt = 0u; static char write_data[1024]; static uint32_t write_length; +static const char *doSomethingArguments; +static uint32_t doSomethingLength; static shellmatta_retCode_t writeFct(const char* data, uint32_t length) { @@ -24,10 +26,12 @@ static shellmatta_retCode_t writeFct(const char* data, uint32_t length) static shellmatta_retCode_t doSomething(shellmatta_handle_t handle, const char *arguments, uint32_t length) { - + doSomethingArguments = arguments; + doSomethingLength = length; + shellmatta_printf(handle, "%s - length: %u", arguments, length); return SHELLMATTA_OK; } -shellmatta_cmd_t doSomethingCmd = {"doSomething", "do", "Function does something", "use me, please", doSomething, NULL}; +shellmatta_cmd_t doSomethingCmd = {(char*)"doSomething", (char*)"do", (char*)"Function does something", (char*)"use me, please", doSomething, NULL}; TEST_CASE( "shellmatta empty function" ) { @@ -36,7 +40,7 @@ TEST_CASE( "shellmatta empty function" ) { shellmatta_handle_t handle; char buffer[1024]; char historyBuffer[1024]; - char *dummyData = "\r\nshellmatta->"; + char *dummyData = (char*)"\r\nshellmatta->"; shellmatta_doInit( &inst, &handle, @@ -52,7 +56,7 @@ TEST_CASE( "shellmatta empty function" ) { memset(write_data, 0, sizeof(write_data)); write_length = 0u; - shellmatta_processData(handle, "\r", 1); + shellmatta_processData(handle, (char*)"\r", 1); CHECK( write_length == 14u); REQUIRE( strcmp(dummyData, write_data) == 0); @@ -65,7 +69,7 @@ TEST_CASE( "shellmatta help function" ) { shellmatta_handle_t handle; char buffer[1024]; char historyBuffer[1024]; - char *dummyData = "h\r\n" + char *dummyData = (char*)"h\r\n" "doSomething do Function does something use me, please\r\n" "help h Print this help text help\r\n" "\r\nshellmatta->"; @@ -85,7 +89,7 @@ TEST_CASE( "shellmatta help function" ) { memset(write_data, 0, sizeof(write_data)); write_length = 0u; - shellmatta_processData(handle, "h\r", 2); + shellmatta_processData(handle, (char*)"h\r", 2); CHECK( write_length == 123u); CHECK( strcmp(dummyData, write_data) == 0); @@ -95,12 +99,12 @@ TEST_CASE( "shellmatta help function" ) { memset(write_data, 0, sizeof(write_data)); write_length = 0u; - dummyData = "h 564 321 56 465 46\r\n" + dummyData = (char*)"h 564 321 56 465 46\r\n" "doSomething do Function does something use me, please\r\n" "help h Print this help text help\r\n" "\r\nshellmatta->"; - shellmatta_processData(handle, "h 564 321 56 465 46\r", 20); + shellmatta_processData(handle, (char*)"h 564 321 56 465 46\r", 20); CHECK( write_length == 141u); CHECK( strcmp(dummyData, write_data) == 0); @@ -110,13 +114,50 @@ TEST_CASE( "shellmatta help function" ) { memset(write_data, 0, sizeof(write_data)); write_length = 0u; - dummyData = "hr\r\n" + dummyData = (char*)"hr\r\n" "Command: hr not found" "\r\nshellmatta->"; - shellmatta_processData(handle, "hr\r", 3); + shellmatta_processData(handle, (char*)"hr\r", 3); CHECK( write_length == 39u); REQUIRE( strcmp(dummyData, write_data) == 0); } + + +TEST_CASE( "shellmatta heredoc test" ) { + + shellmatta_instance_t inst; + shellmatta_handle_t handle; + char buffer[1024]; + char historyBuffer[1024]; + char *dummyData = (char*)"do this \r\n" + "asdf\r\n" + "1234"; + + shellmatta_doInit( &inst, + &handle, + buffer, + sizeof(buffer), + historyBuffer, + sizeof(historyBuffer), + "shellmatta->", + NULL, + writeFct); + shellmatta_addCmd(handle, &doSomethingCmd); + + doSomethingArguments = NULL; + doSomethingLength = 0u; + + shellmatta_processData(handle, (char*)"do this << EOF\r\n" + "asdf\r\n" + "1234\r\n" + "EOF\r\n" + , 34); + + + + CHECK( doSomethingLength == 20u); + REQUIRE( strcmp(dummyData, doSomethingArguments) == 0); +} diff --git a/test/unittest/shellmatta/test_shellmatta_doInit.cpp b/test/unittest/shellmatta/test_shellmatta_doInit.cpp new file mode 100644 index 0000000..cf680be --- /dev/null +++ b/test/unittest/shellmatta/test_shellmatta_doInit.cpp @@ -0,0 +1,14 @@ +#include "test/framework/catch.hpp" +#include "src/shellmatta.c" +#include + +TEST_CASE( "shellmatta dummy" ) { + + shellmatta_instance_t inst; + //shellmatta_handle_t handle; + inst.inputCount = 0u; + + //shellmatta_doInit(&inst, &handle, ) + + REQUIRE( inst.inputCount == 0u); +} diff --git a/test/unittest/shellmatta_autocomplete/test_autocomplete_run.cpp b/test/unittest/shellmatta_autocomplete/test_autocomplete_run.cpp new file mode 100644 index 0000000..a114c80 --- /dev/null +++ b/test/unittest/shellmatta_autocomplete/test_autocomplete_run.cpp @@ -0,0 +1,13 @@ +#include "test/framework/catch.hpp" +#include "src/shellmatta_autocomplete.c" +#include + +TEST_CASE( "shellmatta_autocomplete_run dummy" ) { + + shellmatta_instance_t inst; + inst.inputCount = 0u; + + autocomplete_run(&inst); + + REQUIRE( inst.inputCount == 0u); +} diff --git a/test/unittest/shellmatta_escape/test_escape_processArrowKeys.cpp b/test/unittest/shellmatta_escape/test_escape_processArrowKeys.cpp new file mode 100644 index 0000000..1373147 --- /dev/null +++ b/test/unittest/shellmatta_escape/test_escape_processArrowKeys.cpp @@ -0,0 +1,13 @@ +#include "test/framework/catch.hpp" +#include "src/shellmatta_escape.c" +#include + +TEST_CASE( "shellmatta_escape dummy" ) { + + shellmatta_instance_t inst; + inst.inputCount = 0u; + + escape_processArrowKeys(&inst); + + REQUIRE( inst.inputCount == 0u); +} diff --git a/test/unittest/shellmatta_history/test_appendHistoryByte.cpp b/test/unittest/shellmatta_history/test_appendHistoryByte.cpp new file mode 100644 index 0000000..4fc3fe2 --- /dev/null +++ b/test/unittest/shellmatta_history/test_appendHistoryByte.cpp @@ -0,0 +1,13 @@ +#include "test/framework/catch.hpp" +#include "src/shellmatta_history.c" +#include + +TEST_CASE( "shellmatta_history dummy" ) { + + shellmatta_instance_t inst; + inst.inputCount = 0u; + + //appendHistoryByte(&inst, 'a'); + + REQUIRE( inst.inputCount == 0u); +} diff --git a/test/unittest/shellmatta_utils/test_utils_clearInput.cpp b/test/unittest/shellmatta_utils/test_utils_clearInput.cpp index fc1c0cb..0c730cc 100644 --- a/test/unittest/shellmatta_utils/test_utils_clearInput.cpp +++ b/test/unittest/shellmatta_utils/test_utils_clearInput.cpp @@ -2,7 +2,7 @@ #include "src/shellmatta_utils.c" #include -shellmatta_retCode_t writeFct(const char* data, uint32_t length) +static shellmatta_retCode_t writeFct(const char* data, uint32_t length) { return SHELLMATTA_OK; } diff --git a/test/unittest/shellmatta_utils/test_utils_eraseLine.cpp b/test/unittest/shellmatta_utils/test_utils_eraseLine.cpp index a4c4543..b5a93c1 100644 --- a/test/unittest/shellmatta_utils/test_utils_eraseLine.cpp +++ b/test/unittest/shellmatta_utils/test_utils_eraseLine.cpp @@ -19,7 +19,6 @@ TEST_CASE( "shellmatta_utils_eraseLine" ) { shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; diff --git a/test/unittest/shellmatta_utils/test_utils_forwardCursor.cpp b/test/unittest/shellmatta_utils/test_utils_forwardCursor.cpp index 31d0672..49a7f2b 100644 --- a/test/unittest/shellmatta_utils/test_utils_forwardCursor.cpp +++ b/test/unittest/shellmatta_utils/test_utils_forwardCursor.cpp @@ -19,7 +19,6 @@ TEST_CASE( "shellmatta_utils_forwardCursor normal" ) { shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; @@ -44,7 +43,6 @@ TEST_CASE( "shellmatta_utils_forwardCursor normal echo off" ) { shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; @@ -70,7 +68,6 @@ TEST_CASE( "shellmatta_utils_forwardCursor forward by 12 with cursor at 5 and in shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; @@ -95,7 +92,6 @@ TEST_CASE( "shellmatta_utils_forwardCursor forward by 0" ) { shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; diff --git a/test/unittest/shellmatta_utils/test_utils_insertChars.cpp b/test/unittest/shellmatta_utils/test_utils_insertChars.cpp index 30345d6..91aa3f4 100644 --- a/test/unittest/shellmatta_utils/test_utils_insertChars.cpp +++ b/test/unittest/shellmatta_utils/test_utils_insertChars.cpp @@ -2,26 +2,120 @@ #include "src/shellmatta_utils.c" #include -shellmatta_retCode_t writeFct(const char* data, uint32_t length) +static uint32_t write_callCnt = 0u; +static char write_data[20]; +static uint32_t write_idx; + +static shellmatta_retCode_t writeFct(const char* data, uint32_t length) { + write_callCnt ++; + strncpy(&write_data[write_idx], data, length); + write_idx += length; return SHELLMATTA_OK; } TEST_CASE( "shellmatta_insertChars normal call" ) { shellmatta_instance_t inst; - char buffer[20]; + char buffer[20] = "abcdefghij\0\0\0\0\0\0\0\0\0"; inst.buffer = buffer; inst.bufferSize = 20; inst.cursor = 8; inst.inputCount = 10; + inst.echoEnabled = true; inst.write = writeFct; - utils_insertChars(&inst, "blksdflsd kfjlk", 4); + write_callCnt = 0u; + memset(write_data, 0, sizeof(write_data)); + write_idx = 0u; + + utils_insertChars(&inst, (char*)"blksdflsd kfjlk", 4u); CHECK( inst.cursor == 12); - REQUIRE( inst.inputCount == 14); + CHECK( inst.inputCount == 14); + CHECK( write_callCnt == 5u ); + CHECK( strncmp("blks\e[K\e[sij\e[u", write_data, 15u) == 0); + REQUIRE( strncmp("abcdefghblksij\0\0\0\0\0\0\0", buffer, sizeof(buffer)) == 0); } +TEST_CASE( "shellmatta_insertChars overwrite" ) { + + shellmatta_instance_t inst; + char buffer[20] = "abcdefghij\0\0\0\0\0\0\0\0\0"; + + inst.buffer = buffer; + inst.bufferSize = 20; + inst.cursor = 8; + inst.inputCount = 10; + inst.echoEnabled = true; + inst.mode = SHELLMATTA_MODE_OVERWRITE; + + inst.write = writeFct; + + write_callCnt = 0u; + memset(write_data, 0, sizeof(write_data)); + write_idx = 0u; + + utils_insertChars(&inst, (char*)"blksdflsd kfjlk", 4u); + + CHECK( inst.cursor == 12); + CHECK( inst.inputCount == 14); + CHECK( write_callCnt == 1u ); + CHECK( strncmp("blks", write_data, 5u) == 0); + REQUIRE( strncmp("abcdefghblks\0\0\0\0\0\0\0\0\0", buffer, sizeof(buffer)) == 0); +} + +TEST_CASE( "shellmatta_insertChars append" ) { + + shellmatta_instance_t inst; + char buffer[20] = "abcdefghij\0\0\0\0\0\0\0\0\0"; + + inst.buffer = buffer; + inst.bufferSize = 20; + inst.cursor = 10; + inst.inputCount = 10; + inst.echoEnabled = true; + inst.mode = SHELLMATTA_MODE_INSERT; + + inst.write = writeFct; + + write_callCnt = 0u; + memset(write_data, 0, sizeof(write_data)); + write_idx = 0u; + + utils_insertChars(&inst, (char*)"blksdflsd kfjlk", 4u); + + CHECK( inst.cursor == 14); + CHECK( inst.inputCount == 14); + CHECK( write_callCnt == 1u ); + CHECK( strncmp("blks", write_data, 5u) == 0); + REQUIRE( strncmp("abcdefghijblks\0\0\0\0\0\0\0", buffer, sizeof(buffer)) == 0); +} + +TEST_CASE( "shellmatta_insertChars 0 length" ) { + + shellmatta_instance_t inst; + char buffer[20] = "abcdefghij\0\0\0\0\0\0\0\0\0"; + + inst.buffer = buffer; + inst.bufferSize = 20; + inst.cursor = 8; + inst.inputCount = 10; + inst.echoEnabled = true; + + inst.write = writeFct; + + write_callCnt = 0u; + memset(write_data, 0, sizeof(write_data)); + write_idx = 0u; + + utils_insertChars(&inst, (char*)"blksdflsd kfjlk", 0u); + + CHECK( inst.cursor == 8u ); + CHECK( inst.inputCount == 10u ); + CHECK( write_callCnt == 0u ); + CHECK( memcmp("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", write_data, sizeof(write_data) ) == 0u ); + REQUIRE( memcmp("abcdefghij\0\0\0\0\0\0\0\0\0", buffer, sizeof(buffer)) == 0); +} diff --git a/test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp b/test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp index e16f428..de32df5 100644 --- a/test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp +++ b/test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp @@ -19,7 +19,6 @@ TEST_CASE( "shellmatta_utils_restoreCursorPos" ) { shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; diff --git a/test/unittest/shellmatta_utils/test_utils_rewindCursor.cpp b/test/unittest/shellmatta_utils/test_utils_rewindCursor.cpp index 2d46a2b..4629142 100644 --- a/test/unittest/shellmatta_utils/test_utils_rewindCursor.cpp +++ b/test/unittest/shellmatta_utils/test_utils_rewindCursor.cpp @@ -19,7 +19,6 @@ TEST_CASE( "shellmatta_utils_rewindCursor normal" ) { shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; @@ -45,7 +44,6 @@ TEST_CASE( "shellmatta_utils_rewindCursor rewind by 12 with cursor at 10" ) { shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; @@ -70,7 +68,6 @@ TEST_CASE( "shellmatta_utils_rewindCursor rewind by 0" ) { shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; diff --git a/test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp b/test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp index 83d0f8d..214cd88 100644 --- a/test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp +++ b/test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp @@ -19,7 +19,6 @@ TEST_CASE( "shellmatta_utils_saveCursorPos" ) { shellmatta_instance_t inst; char buffer[20]; - char dummyData[29]; inst.buffer = buffer; inst.bufferSize = 20; diff --git a/test/unittest/shellmatta_utils/test_utils_terminateInput.cpp b/test/unittest/shellmatta_utils/test_utils_terminateInput.cpp new file mode 100644 index 0000000..04211cc --- /dev/null +++ b/test/unittest/shellmatta_utils/test_utils_terminateInput.cpp @@ -0,0 +1,43 @@ +#include "test/framework/catch.hpp" +#include "src/shellmatta_utils.c" +#include + +static uint32_t write_callCnt = 0u; +static char write_data[10]; +static uint32_t write_idx; + +static shellmatta_retCode_t writeFct(const char* data, uint32_t length) +{ + write_callCnt ++; + strncpy(&write_data[write_idx], data, length); + write_idx += length; + return SHELLMATTA_OK; +} + + +TEST_CASE( "shellmatta_utils_terminateInput" ) { + + shellmatta_instance_t inst; + char buffer[20]; + + inst.buffer = buffer; + inst.bufferSize = 20; + inst.cursor = 10; + inst.inputCount = 10; + inst.echoEnabled = true; + inst.prompt = "->"; + + inst.write = writeFct; + + write_callCnt = 0u; + memset(write_data, 0, sizeof(write_data)); + write_idx = 0u; + + utils_terminateInput(&inst); + + CHECK( inst.cursor == 0u ); + CHECK( inst.inputCount == 0u ); + CHECK( write_callCnt == 2u ); + CHECK( write_idx == 4u ); + REQUIRE( strncmp("\r\n->", write_data, 4u) == 0); +}