added first working option parser for short options
This commit is contained in:
@@ -21,7 +21,52 @@ extern "C" {
|
||||
static uint32_t write_callCnt = 0u;
|
||||
static char write_data[1024];
|
||||
static uint32_t write_length;
|
||||
static uint32_t cntA = 0u;
|
||||
static uint32_t cntB = 0u;
|
||||
static uint32_t cntC = 0u;
|
||||
static uint32_t cntD = 0u;
|
||||
static uint32_t cntE = 0u;
|
||||
static uint32_t cntF = 0u;
|
||||
static uint32_t cntDef = 0u;
|
||||
static char *argA = NULL;
|
||||
static char *argB = NULL;
|
||||
static char *argC = NULL;
|
||||
static char *argD = NULL;
|
||||
static char *argE = NULL;
|
||||
static char *argF = NULL;
|
||||
static char *argDef = NULL;
|
||||
static uint32_t lenA = 0u;
|
||||
static uint32_t lenB = 0u;
|
||||
static uint32_t lenC = 0u;
|
||||
static uint32_t lenD = 0u;
|
||||
static uint32_t lenE = 0u;
|
||||
static uint32_t lenF = 0u;
|
||||
static uint32_t lenDef = 0u;
|
||||
|
||||
static void initTestcase(void)
|
||||
{
|
||||
cntA = 0u;
|
||||
cntB = 0u;
|
||||
cntC = 0u;
|
||||
cntD = 0u;
|
||||
cntE = 0u;
|
||||
cntF = 0u;
|
||||
cntDef = 0u;
|
||||
argA = NULL;
|
||||
argB = NULL;
|
||||
argC = NULL;
|
||||
argD = NULL;
|
||||
argE = NULL;
|
||||
argF = NULL;
|
||||
argDef = NULL;
|
||||
lenA = 0u;
|
||||
lenB = 0u;
|
||||
lenC = 0u;
|
||||
lenD = 0u;
|
||||
lenE = 0u;
|
||||
lenF = 0u;
|
||||
lenDef = 0u;
|
||||
}
|
||||
|
||||
static shellmatta_retCode_t writeFct(const char* data, uint32_t length)
|
||||
{
|
||||
@@ -44,28 +89,53 @@ static shellmatta_retCode_t parseOpts(shellmatta_handle_t handle, const char *ar
|
||||
char option;
|
||||
char *argumentString;
|
||||
uint32_t argumentLength;
|
||||
uint32_t optionCount = 0u;
|
||||
|
||||
while(SHELLMATTA_OK == shellmatta_opt(handle, (char*)"abcde:f::", &option, &argumentString, &argumentLength))
|
||||
{
|
||||
optionCount ++;
|
||||
switch(option)
|
||||
{
|
||||
case 'a':
|
||||
cntA ++;
|
||||
argA = argumentString;
|
||||
lenA = argumentLength;
|
||||
break;
|
||||
case 'b':
|
||||
cntB ++;
|
||||
argB = argumentString;
|
||||
lenB = argumentLength;
|
||||
break;
|
||||
case 'c':
|
||||
cntC ++;
|
||||
argC = argumentString;
|
||||
lenC = argumentLength;
|
||||
break;
|
||||
case 'd':
|
||||
cntD ++;
|
||||
argD = argumentString;
|
||||
lenD = argumentLength;
|
||||
break;
|
||||
case 'e':
|
||||
cntE ++;
|
||||
argE = argumentString;
|
||||
lenE = argumentLength;
|
||||
break;
|
||||
case 'f':
|
||||
cntF ++;
|
||||
argF = argumentString;
|
||||
lenF = argumentLength;
|
||||
break;
|
||||
default:
|
||||
cntDef ++;
|
||||
argDef = argumentString;
|
||||
lenDef = argumentLength;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
shellmatta_printf(handle, "parseOpts - cnt: %u\r\n", optionCount);
|
||||
|
||||
return SHELLMATTA_OK;
|
||||
}
|
||||
shellmatta_cmd_t parseOptsCmd = {(char*)"parseOpts", (char*)"opt", NULL, NULL, parseOpts, NULL};
|
||||
@@ -83,7 +153,7 @@ TEST_CASE( "shellmatta option parser 1" ) {
|
||||
shellmatta_handle_t handle;
|
||||
char buffer[1024];
|
||||
char historyBuffer[1024];
|
||||
//char *dummyData = (char*)"\r\nshellmatta->";
|
||||
char *dummyData = (char*)"parseOpts -a -e meow\r\nparseOpts - cnt: 2\r\n\r\nshellmatta->";
|
||||
|
||||
shellmatta_doInit( &inst,
|
||||
&handle,
|
||||
@@ -95,13 +165,22 @@ TEST_CASE( "shellmatta option parser 1" ) {
|
||||
NULL,
|
||||
writeFct);
|
||||
|
||||
initTestcase();
|
||||
write_callCnt = 0u;
|
||||
memset(write_data, 0, sizeof(write_data));
|
||||
write_length = 0u;
|
||||
|
||||
shellmatta_processData(handle, (char*)"parseOpts -a -e meow\r", 1);
|
||||
shellmatta_addCmd(handle, &parseOptsCmd);
|
||||
|
||||
// CHECK( write_length == 14u);
|
||||
// REQUIRE( strcmp(dummyData, write_data) == 0);
|
||||
REQUIRE( 1 == 1 );
|
||||
shellmatta_processData(handle, (char*)"parseOpts -a -e meow\r", 21);
|
||||
|
||||
CHECK( cntA == 1u );
|
||||
CHECK( NULL == argA);
|
||||
CHECK( 0u == lenA );
|
||||
CHECK( cntE == 1u );
|
||||
CHECK(((NULL != argE) && (0u == memcmp(argE, "meow", 4))));
|
||||
CHECK( lenE == 4u );
|
||||
CHECK( (cntB == 0u && cntC == 0u && cntD == 0u && cntF == 0u && cntDef == 0u) );
|
||||
CHECK( write_length == 56u);
|
||||
REQUIRE( strcmp(dummyData, write_data) == 0);
|
||||
}
|
||||
|
162
test/unittest/shellmatta_opt/test_opt_findNextHunk.cpp
Normal file
162
test/unittest/shellmatta_opt/test_opt_findNextHunk.cpp
Normal file
@@ -0,0 +1,162 @@
|
||||
#include "test/framework/catch.hpp"
|
||||
#include "src/shellmatta_opt.c"
|
||||
#include <string.h>
|
||||
|
||||
|
||||
TEST_CASE( "shellmatta_opt findNextHunk easy" ) {
|
||||
|
||||
shellmatta_retCode_t ret = SHELLMATTA_OK;
|
||||
shellmatta_instance_t inst;
|
||||
char *dummyData = (char*) "This is Sparta";
|
||||
char buffer[1024u];
|
||||
|
||||
memcpy(buffer, dummyData, strlen(dummyData));
|
||||
|
||||
inst.buffer = buffer;
|
||||
inst.bufferSize = sizeof(buffer);
|
||||
inst.inputCount = 14;
|
||||
inst.optionParser.nextOffset = 4u;
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 5u);
|
||||
CHECK( inst.optionParser.len == 2u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 8u);
|
||||
CHECK( inst.optionParser.len == 6u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
REQUIRE( ret == SHELLMATTA_ERROR );
|
||||
}
|
||||
|
||||
TEST_CASE( "shellmatta_opt findNextHunk quotation 1" ) {
|
||||
|
||||
shellmatta_retCode_t ret = SHELLMATTA_OK;
|
||||
shellmatta_instance_t inst;
|
||||
char *dummyData = (char*) "This is Sparta \"argument with spaces\"";
|
||||
char buffer[1024u];
|
||||
|
||||
memcpy(buffer, dummyData, strlen(dummyData));
|
||||
|
||||
inst.buffer = buffer;
|
||||
inst.bufferSize = sizeof(buffer);
|
||||
inst.inputCount = strlen(dummyData);
|
||||
inst.optionParser.nextOffset = 4u;
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 5u);
|
||||
CHECK( inst.optionParser.len == 2u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 8u);
|
||||
CHECK( inst.optionParser.len == 6u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 15u);
|
||||
CHECK( inst.optionParser.len == 20u);
|
||||
CHECK( 0 == memcmp(&(inst.buffer[inst.optionParser.offset]), "argument with spaces", 20));
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
REQUIRE( ret == SHELLMATTA_ERROR );
|
||||
}
|
||||
|
||||
TEST_CASE( "shellmatta_opt findNextHunk quotation 2" ) {
|
||||
|
||||
shellmatta_retCode_t ret = SHELLMATTA_OK;
|
||||
shellmatta_instance_t inst;
|
||||
char *dummyData = (char*) "This is Sparta 'argument with spaces'";
|
||||
char buffer[1024u];
|
||||
|
||||
memcpy(buffer, dummyData, strlen(dummyData));
|
||||
|
||||
inst.buffer = buffer;
|
||||
inst.bufferSize = sizeof(buffer);
|
||||
inst.inputCount = strlen(dummyData);
|
||||
inst.optionParser.nextOffset = 4u;
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 5u);
|
||||
CHECK( inst.optionParser.len == 2u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 8u);
|
||||
CHECK( inst.optionParser.len == 6u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 15u);
|
||||
CHECK( inst.optionParser.len == 20u);
|
||||
CHECK( 0 == memcmp(&(inst.buffer[inst.optionParser.offset]), "argument with spaces", 20));
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
REQUIRE( ret == SHELLMATTA_ERROR );
|
||||
}
|
||||
|
||||
TEST_CASE( "shellmatta_opt findNextHunk quotation escaped" ) {
|
||||
|
||||
shellmatta_retCode_t ret = SHELLMATTA_OK;
|
||||
shellmatta_instance_t inst;
|
||||
char *dummyData = (char*) "This is Sparta \"argument with \\\"spaces\"";
|
||||
char buffer[1024u];
|
||||
|
||||
memcpy(buffer, dummyData, strlen(dummyData));
|
||||
|
||||
inst.buffer = buffer;
|
||||
inst.bufferSize = sizeof(buffer);
|
||||
inst.inputCount = strlen(dummyData);
|
||||
inst.optionParser.nextOffset = 4u;
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 5u);
|
||||
CHECK( inst.optionParser.len == 2u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 8u);
|
||||
CHECK( inst.optionParser.len == 6u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 15u);
|
||||
CHECK( inst.optionParser.len == 21u);
|
||||
CHECK( 0 == memcmp(&(inst.buffer[inst.optionParser.offset]), "argument with \"spaces", 21));
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
REQUIRE( ret == SHELLMATTA_ERROR );
|
||||
}
|
||||
|
||||
TEST_CASE( "shellmatta_opt findNextHunk quotation missing closing quotation" ) {
|
||||
|
||||
shellmatta_retCode_t ret = SHELLMATTA_OK;
|
||||
shellmatta_instance_t inst;
|
||||
char *dummyData = (char*) "This is Sparta \"argument with \\\"spaces";
|
||||
char buffer[1024u];
|
||||
|
||||
memcpy(buffer, dummyData, strlen(dummyData));
|
||||
|
||||
inst.buffer = buffer;
|
||||
inst.bufferSize = sizeof(buffer);
|
||||
inst.inputCount = strlen(dummyData);
|
||||
inst.optionParser.nextOffset = 4u;
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 5u);
|
||||
CHECK( inst.optionParser.len == 2u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
CHECK( ret == SHELLMATTA_OK );
|
||||
CHECK( inst.optionParser.offset == 8u);
|
||||
CHECK( inst.optionParser.len == 6u);
|
||||
|
||||
ret = findNextHunk(&inst);
|
||||
REQUIRE( ret == SHELLMATTA_ERROR );
|
||||
}
|
@@ -19,6 +19,7 @@ TEST_CASE( "shellmatta_insertChars normal call" ) {
|
||||
shellmatta_instance_t inst;
|
||||
char buffer[20] = "abcdefghij\0\0\0\0\0\0\0\0\0";
|
||||
|
||||
memset(&inst, 0, sizeof(inst));
|
||||
inst.buffer = buffer;
|
||||
inst.bufferSize = 20;
|
||||
inst.cursor = 8;
|
||||
@@ -45,6 +46,7 @@ TEST_CASE( "shellmatta_insertChars overwrite" ) {
|
||||
shellmatta_instance_t inst;
|
||||
char buffer[20] = "abcdefghij\0\0\0\0\0\0\0\0\0";
|
||||
|
||||
memset(&inst, 0, sizeof(inst));
|
||||
inst.buffer = buffer;
|
||||
inst.bufferSize = 20;
|
||||
inst.cursor = 8;
|
||||
@@ -72,6 +74,7 @@ TEST_CASE( "shellmatta_insertChars append" ) {
|
||||
shellmatta_instance_t inst;
|
||||
char buffer[20] = "abcdefghij\0\0\0\0\0\0\0\0\0";
|
||||
|
||||
memset(&inst, 0, sizeof(inst));
|
||||
inst.buffer = buffer;
|
||||
inst.bufferSize = 20;
|
||||
inst.cursor = 10;
|
||||
@@ -99,6 +102,7 @@ TEST_CASE( "shellmatta_insertChars 0 length" ) {
|
||||
shellmatta_instance_t inst;
|
||||
char buffer[20] = "abcdefghij\0\0\0\0\0\0\0\0\0";
|
||||
|
||||
memset(&inst, 0, sizeof(inst));
|
||||
inst.buffer = buffer;
|
||||
inst.bufferSize = 20;
|
||||
inst.cursor = 8;
|
||||
|
Reference in New Issue
Block a user