Merge branch 'feature/#31-make-unneeded-command-parameters-optional' of shimatta/shellmatta into develop
fix #31
This commit is contained in:
commit
b1b16b1f0d
21
.vscode/launch.json
vendored
21
.vscode/launch.json
vendored
@ -24,6 +24,27 @@
|
||||
],
|
||||
"preLaunchTask": "make test",
|
||||
"miDebuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
{
|
||||
"name": "debug integrationtest",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/output/test/integrationtest/integrationtest",
|
||||
"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 integrationtest",
|
||||
"miDebuggerPath": "/usr/bin/gdb"
|
||||
}
|
||||
]
|
||||
}
|
16
.vscode/tasks.json
vendored
16
.vscode/tasks.json
vendored
@ -28,6 +28,22 @@
|
||||
"label": "make unittest",
|
||||
"type": "shell",
|
||||
"command": "make unittest",
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "make integrationtest",
|
||||
"type": "shell",
|
||||
"command": "make integrationtest",
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "make test",
|
||||
"type": "shell",
|
||||
"command": "make test",
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
],
|
||||
|
@ -125,13 +125,17 @@ shellmatta_retCode_t shellmatta_doInit( shellmatta_instance_t *inst,
|
||||
const char *prompt,
|
||||
const shellmatta_cmd_t *cmdList,
|
||||
shellmatta_write_t writeFct);
|
||||
|
||||
shellmatta_retCode_t shellmatta_addCmd( shellmatta_handle_t handle,
|
||||
shellmatta_cmd_t *cmd);
|
||||
|
||||
shellmatta_retCode_t shellmatta_removeCmd( shellmatta_handle_t handle,
|
||||
shellmatta_cmd_t *cmd);
|
||||
|
||||
shellmatta_retCode_t shellmatta_processData(shellmatta_handle_t handle,
|
||||
char *data,
|
||||
uint32_t size);
|
||||
|
||||
shellmatta_retCode_t shellmatta_write( shellmatta_handle_t handle,
|
||||
char *data,
|
||||
uint32_t length);
|
||||
|
@ -85,6 +85,17 @@ static shellmatta_retCode_t quit(shellmatta_handle_t handle, const char *argumen
|
||||
}
|
||||
shellmatta_cmd_t quitCommand = {"quit", "q", "Function quits the shell", "", quit, NULL};
|
||||
|
||||
static shellmatta_retCode_t empty(shellmatta_handle_t handle, const char *arguments, uint32_t length)
|
||||
{
|
||||
(void)arguments;
|
||||
(void)length;
|
||||
|
||||
shellmatta_printf(handle, "empty function called\r\n");
|
||||
|
||||
return SHELLMATTA_OK;
|
||||
}
|
||||
shellmatta_cmd_t emptyCommand = {"empty", NULL, NULL, NULL, empty, NULL};
|
||||
|
||||
|
||||
shellmatta_retCode_t writeFct(const char* data, uint32_t length)
|
||||
{
|
||||
@ -128,6 +139,7 @@ int main(int argc, char **argv)
|
||||
shellmatta_addCmd(handle, &doSomeCmd);
|
||||
shellmatta_addCmd(handle, &quitCommand);
|
||||
shellmatta_addCmd(handle, &removeCommand);
|
||||
shellmatta_addCmd(handle, &emptyCommand);
|
||||
|
||||
while(exitRequest == false)
|
||||
{
|
||||
|
@ -118,6 +118,9 @@ shellmatta_retCode_t shellmatta_doInit(
|
||||
* @return errorcode #SHELLMATTA_OK
|
||||
* #SHELLMATTA_USE_FAULT (param err)
|
||||
* SHELLMATTA_DUPLICATE
|
||||
*
|
||||
* The cmd name is mandatory, the rest of the command parameters (alias, helpText and usageText) are optional
|
||||
* and can be set to NULL if not used.
|
||||
*/
|
||||
shellmatta_retCode_t shellmatta_addCmd(shellmatta_handle_t handle, shellmatta_cmd_t *cmd)
|
||||
{
|
||||
@ -132,7 +135,9 @@ shellmatta_retCode_t shellmatta_addCmd(shellmatta_handle_t handle, shellmatta_cm
|
||||
/** -# check parameters for plausibility */
|
||||
if( (NULL != inst)
|
||||
&& (SHELLMATTA_MAGIC == inst->magic)
|
||||
&& (false == inst->cmdListIsConst))
|
||||
&& (false == inst->cmdListIsConst)
|
||||
&& (NULL != cmd)
|
||||
&& (NULL != cmd->cmd))
|
||||
{
|
||||
tempCmd = inst->cmdList;
|
||||
prevCmd = &inst->cmdList;
|
||||
@ -148,7 +153,15 @@ shellmatta_retCode_t shellmatta_addCmd(shellmatta_handle_t handle, shellmatta_cm
|
||||
while ((false == cmdPlaced) && (SHELLMATTA_OK == ret))
|
||||
{
|
||||
cmdDiff = strcmp(tempCmd->cmd, cmd->cmd);
|
||||
if(NULL != cmd->cmdAlias)
|
||||
{
|
||||
aliasDiff = strcmp(tempCmd->cmdAlias, cmd->cmdAlias);
|
||||
}
|
||||
else
|
||||
{
|
||||
aliasDiff = 1;
|
||||
}
|
||||
|
||||
/** -# check for a duplicate command */
|
||||
if((0u == cmdDiff) || (0u == aliasDiff))
|
||||
{
|
||||
@ -200,7 +213,9 @@ shellmatta_retCode_t shellmatta_removeCmd(shellmatta_handle_t handle, shellmatta
|
||||
/** -# check parameters for plausibility */
|
||||
if( (NULL != inst)
|
||||
&& (SHELLMATTA_MAGIC == inst->magic)
|
||||
&& (false == inst->cmdListIsConst))
|
||||
&& (false == inst->cmdListIsConst)
|
||||
&& (NULL != cmd)
|
||||
&& (NULL != cmd->cmd))
|
||||
{
|
||||
tempCmd = inst->cmdList;
|
||||
prevCmd = NULL;
|
||||
@ -406,11 +421,20 @@ shellmatta_retCode_t shellmatta_processData(shellmatta_handle_t handle,
|
||||
while (NULL != cmd)
|
||||
{
|
||||
/** -# compare command string and length */
|
||||
if ( ((0 == strncmp( argumentString,
|
||||
if ((0 == strncmp( argumentString,
|
||||
cmd->cmd,
|
||||
cmdLen))
|
||||
&& (cmdLen == strlen(cmd->cmd)))
|
||||
|| ((0 == strncmp( argumentString,
|
||||
{
|
||||
inst->write("\r\n", 2u);
|
||||
|
||||
cmdExecuted = 1u;
|
||||
cmd->cmdFct(inst, argumentString, argumentLength);
|
||||
cmd = NULL;
|
||||
}
|
||||
/** -# compare command alias if any and length */
|
||||
else if((NULL != cmd->cmdAlias)
|
||||
&& ((0 == strncmp( argumentString,
|
||||
cmd->cmdAlias,
|
||||
cmdLen))
|
||||
&& (cmdLen == strlen(cmd->cmdAlias))))
|
||||
|
@ -65,7 +65,8 @@ void autocomplete_run(shellmatta_instance_t *inst)
|
||||
printedLen += 4u;
|
||||
}
|
||||
/** -# check if command alias matches the input */
|
||||
if( (strlen(cmd->cmdAlias) >= inst->cursor)
|
||||
if( (NULL != cmd->cmdAlias)
|
||||
&& (strlen(cmd->cmdAlias) >= inst->cursor)
|
||||
&& (0u == memcmp(cmd->cmdAlias, inst->buffer, inst->cursor)))
|
||||
{
|
||||
/** -# add newline on first find */
|
||||
@ -123,7 +124,8 @@ void autocomplete_run(shellmatta_instance_t *inst)
|
||||
}
|
||||
|
||||
/** -# check if command Alias matches the input */
|
||||
if( (strlen(cmd->cmdAlias) >= inst->cursor)
|
||||
if( (NULL != cmd->cmdAlias)
|
||||
&& (strlen(cmd->cmdAlias) >= inst->cursor)
|
||||
&& (0u == memcmp(cmd->cmdAlias, inst->buffer, inst->cursor)))
|
||||
{
|
||||
/** -# store first match */
|
||||
|
@ -290,8 +290,14 @@ static shellmatta_retCode_t helpCmdFct(shellmatta_handle_t handle, const char *a
|
||||
while(NULL != cmd)
|
||||
{
|
||||
maxCmdLen = SHELLMATTA_MAX(maxCmdLen, strlen(cmd->cmd));
|
||||
if(NULL != cmd->cmdAlias)
|
||||
{
|
||||
maxCmdAliasLen = SHELLMATTA_MAX(maxCmdAliasLen, strlen(cmd->cmdAlias));
|
||||
}
|
||||
if(NULL != cmd->helpText)
|
||||
{
|
||||
maxCmdHelpLen = SHELLMATTA_MAX(maxCmdHelpLen, strlen(cmd->helpText));
|
||||
}
|
||||
cmd = cmd->next;
|
||||
}
|
||||
|
||||
@ -301,22 +307,31 @@ static shellmatta_retCode_t helpCmdFct(shellmatta_handle_t handle, const char *a
|
||||
{
|
||||
/** -# determine the length of each field to add padding */
|
||||
cmdLen = strlen(cmd->cmd);
|
||||
cmdAliasLen = strlen(cmd->cmdAlias);
|
||||
cmdHelpLen = strlen(cmd->helpText);
|
||||
cmdAliasLen = (NULL != cmd->cmdAlias) ? strlen(cmd->cmdAlias) : 0u;
|
||||
cmdHelpLen = (NULL != cmd->helpText) ? strlen(cmd->helpText) : 0u;
|
||||
|
||||
inst->write(cmd->cmd, strlen(cmd->cmd));
|
||||
tabCnt = (maxCmdLen - cmdLen) + 2u;
|
||||
SHELLMATTA_PRINT_BUFFER(tabBuffer, tabCnt, inst->write);
|
||||
|
||||
inst->write(cmd->cmdAlias, strlen(cmd->cmdAlias));
|
||||
if(NULL != cmd->cmdAlias)
|
||||
{
|
||||
inst->write(cmd->cmdAlias, cmdAliasLen);
|
||||
}
|
||||
tabCnt = (maxCmdAliasLen - cmdAliasLen) + 2u;
|
||||
SHELLMATTA_PRINT_BUFFER(tabBuffer, tabCnt, inst->write);
|
||||
|
||||
inst->write(cmd->helpText, strlen(cmd->helpText));
|
||||
if(NULL != cmd->helpText)
|
||||
{
|
||||
inst->write(cmd->helpText, cmdHelpLen);
|
||||
}
|
||||
tabCnt = (maxCmdHelpLen - cmdHelpLen) + 2u;
|
||||
SHELLMATTA_PRINT_BUFFER(tabBuffer, tabCnt, inst->write);
|
||||
|
||||
if(NULL != cmd->usageText)
|
||||
{
|
||||
inst->write(cmd->usageText, strlen(cmd->usageText));
|
||||
}
|
||||
inst->write("\r\n", 2u);
|
||||
|
||||
cmd = cmd->next;
|
||||
|
@ -33,6 +33,12 @@ static shellmatta_retCode_t doSomething(shellmatta_handle_t handle, const char *
|
||||
}
|
||||
shellmatta_cmd_t doSomethingCmd = {(char*)"doSomething", (char*)"do", (char*)"Function does something", (char*)"use me, please", doSomething, NULL};
|
||||
|
||||
static shellmatta_retCode_t empty(shellmatta_handle_t handle, const char *arguments, uint32_t length)
|
||||
{
|
||||
shellmatta_printf(handle, "empty - %s - length: %u", arguments, length);
|
||||
return SHELLMATTA_OK;
|
||||
}
|
||||
shellmatta_cmd_t emptyCmd = {(char*)"empty", NULL, NULL, NULL, empty, NULL};
|
||||
|
||||
TEST_CASE( "shellmatta empty function" ) {
|
||||
|
||||
@ -69,9 +75,9 @@ TEST_CASE( "shellmatta help function" ) {
|
||||
shellmatta_handle_t handle;
|
||||
char buffer[1024];
|
||||
char historyBuffer[1024];
|
||||
char *dummyData = (char*)"h\r\n"
|
||||
char *dummyData = (char*)"?\r\n"
|
||||
"doSomething do Function does something use me, please\r\n"
|
||||
"help h Print this help text help\r\n"
|
||||
"help ? Print this help text help\r\n"
|
||||
"\r\nshellmatta->";
|
||||
|
||||
shellmatta_doInit( &inst,
|
||||
@ -89,24 +95,26 @@ TEST_CASE( "shellmatta help function" ) {
|
||||
memset(write_data, 0, sizeof(write_data));
|
||||
write_length = 0u;
|
||||
|
||||
shellmatta_processData(handle, (char*)"h\r", 2);
|
||||
shellmatta_processData(handle, (char*)"?\r", 2);
|
||||
|
||||
CHECK( write_length == 123u);
|
||||
CHECK( strcmp(dummyData, write_data) == 0);
|
||||
|
||||
shellmatta_addCmd(handle, &emptyCmd);
|
||||
|
||||
write_callCnt = 0u;
|
||||
memset(write_data, 0, sizeof(write_data));
|
||||
write_length = 0u;
|
||||
|
||||
dummyData = (char*)"h 564 321 56 465 46\r\n"
|
||||
dummyData = (char*)"? 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"
|
||||
"empty \r\n"
|
||||
"help ? Print this help text help\r\n"
|
||||
"\r\nshellmatta->";
|
||||
|
||||
shellmatta_processData(handle, (char*)"h 564 321 56 465 46\r", 20);
|
||||
shellmatta_processData(handle, (char*)"? 564 321 56 465 46\r", 20);
|
||||
|
||||
CHECK( write_length == 141u);
|
||||
CHECK( write_length == strlen(dummyData));
|
||||
CHECK( strcmp(dummyData, write_data) == 0);
|
||||
|
||||
|
||||
@ -114,11 +122,11 @@ TEST_CASE( "shellmatta help function" ) {
|
||||
memset(write_data, 0, sizeof(write_data));
|
||||
write_length = 0u;
|
||||
|
||||
dummyData = (char*)"hr\r\n"
|
||||
"Command: hr not found"
|
||||
dummyData = (char*)"?r\r\n"
|
||||
"Command: ?r not found"
|
||||
"\r\nshellmatta->";
|
||||
|
||||
shellmatta_processData(handle, (char*)"hr\r", 3);
|
||||
shellmatta_processData(handle, (char*)"?r\r", 3);
|
||||
|
||||
CHECK( write_length == 39u);
|
||||
REQUIRE( strcmp(dummyData, write_data) == 0);
|
||||
@ -169,9 +177,9 @@ TEST_CASE( "shellmatta remove function" ) {
|
||||
shellmatta_handle_t handle;
|
||||
char buffer[1024];
|
||||
char historyBuffer[1024];
|
||||
char *dummyData = (char*)"h\r\n"
|
||||
char *dummyData = (char*)"?\r\n"
|
||||
"doSomething do Function does something use me, please\r\n"
|
||||
"help h Print this help text help\r\n"
|
||||
"help ? Print this help text help\r\n"
|
||||
"\r\nshellmatta->";
|
||||
|
||||
shellmatta_doInit( &inst,
|
||||
@ -189,7 +197,7 @@ TEST_CASE( "shellmatta remove function" ) {
|
||||
memset(write_data, 0, sizeof(write_data));
|
||||
write_length = 0u;
|
||||
|
||||
shellmatta_processData(handle, (char*)"h\r", 2);
|
||||
shellmatta_processData(handle, (char*)"?\r", 2);
|
||||
|
||||
CHECK( write_length == 123u);
|
||||
CHECK( strcmp(dummyData, write_data) == 0);
|
||||
@ -199,12 +207,12 @@ TEST_CASE( "shellmatta remove function" ) {
|
||||
memset(write_data, 0, sizeof(write_data));
|
||||
write_length = 0u;
|
||||
|
||||
dummyData = (char*)"h 564 321 56 465 46\r\n"
|
||||
dummyData = (char*)"? 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"
|
||||
"help ? Print this help text help\r\n"
|
||||
"\r\nshellmatta->";
|
||||
|
||||
shellmatta_processData(handle, (char*)"h 564 321 56 465 46\r", 20);
|
||||
shellmatta_processData(handle, (char*)"? 564 321 56 465 46\r", 20);
|
||||
|
||||
CHECK( write_length == 141u);
|
||||
CHECK( strcmp(dummyData, write_data) == 0);
|
||||
@ -214,10 +222,10 @@ TEST_CASE( "shellmatta remove function" ) {
|
||||
write_length = 0u;
|
||||
|
||||
shellmatta_removeCmd(handle, &doSomethingCmd);
|
||||
shellmatta_processData(handle, (char*)"h 564 321 56 465 46\r", 20);
|
||||
shellmatta_processData(handle, (char*)"? 564 321 56 465 46\r", 20);
|
||||
|
||||
dummyData = (char*)"h 564 321 56 465 46\r\n"
|
||||
"help h Print this help text help\r\n"
|
||||
dummyData = (char*)"? 564 321 56 465 46\r\n"
|
||||
"help ? Print this help text help\r\n"
|
||||
"\r\nshellmatta->";
|
||||
|
||||
printf("sdfsd sdf sdf sdf sdf sd fds\n%s", write_data);
|
||||
|
Loading…
Reference in New Issue
Block a user