- stub variable specific initialization and check

This commit is contained in:
2017-03-13 14:00:56 +00:00
parent c6231c4007
commit 6b4f3f4137
3 changed files with 89 additions and 9 deletions

View File

@@ -25,7 +25,7 @@
#define CPARS_PREFIX_STATIC_S "static" #define CPARS_PREFIX_STATIC_S "static"
#define CPARS_PREFIX_EXTERN_S "extern" #define CPARS_PREFIX_EXTERN_S "extern"
#define CPARS_EXPRESSION_BASE "^[[:blank:]]*([ _\\*[:alnum:]]* +\\**)([_\\*[:alnum:]]+)" #define CPARS_EXPRESSION_BASE "^[[:blank:]]*([ _\\*[:alnum:]]* +\\**)([_\\*[:alnum:]\\[\\]]+)"
#define FUNCTION_BASE CPARS_EXPRESSION_BASE "[[:blank:]]*\\([[:blank:]]*" #define FUNCTION_BASE CPARS_EXPRESSION_BASE "[[:blank:]]*\\([[:blank:]]*"
#define CPARS_REGEX_FUNCTION FUNCTION_BASE "(.*)\\)[[:blank:]\\{\\};]+[[:blank:]]*" #define CPARS_REGEX_FUNCTION FUNCTION_BASE "(.*)\\)[[:blank:]\\{\\};]+[[:blank:]]*"

View File

@@ -38,6 +38,71 @@ STATIC bool isDatatypeVoid(char *aType)
return true; return true;
} }
STATIC bool isDatatypeStandard(cfile_variable_t *aVariable)
{
regex_t regXvariable;
if (0 > regcomp(&regXvariable, STUB_REGEX_STD_DATATYPE, (REG_EXTENDED)))
{
perror("Error regex\n");
return false;
}
if (0 == regexec(&regXvariable, aVariable->dataType, 0, NULL, 0))
{
return true;
}
return false;
}
STATIC void createVariableSpecificInit(const char* aVariableTemplate, FILE *aFile, cfile_variable_t *aVariable)
{
if (NULL != strstr(aVariable->dataType, "const"))
{
return;
}
if (NULL != strstr(aVariable->dataType, "*"))
{
fprintf(aFile, aVariableTemplate, aVariable->name);
fprintf(aFile, " = NULL;" NEWLINES);
}
else if (isDatatypeStandard(aVariable))
{
fprintf(aFile, aVariableTemplate, aVariable->name);
fprintf(aFile, " = 0x55;" NEWLINES);
}
else
{
fprintf(aFile, "\t(void) memset(&");
fprintf(aFile, aVariableTemplate, aVariable->name);
fprintf(aFile, ",0x55,sizeof(%s)); /* %s */" NEWLINES, aVariable->name, aVariable->dataType);
}
}
STATIC void createVariableSpecificCheck(FILE *aFile, cfile_variable_t *aVariable)
{
if (NULL != strstr(aVariable->dataType, "const"))
{
return;
}
if (NULL != strstr(aVariable->dataType, "*"))
{
fprintf(aFile, "\tCU_ASSERT_PTR_EQUAL(%s, "STUBVARIABLE_EXTENDED_S1");"NEWLINES, aVariable->name, aVariable->name);
}
else if (isDatatypeStandard(aVariable))
{
fprintf(aFile, "\tCU_ASSERT_EQUAL(%s, "STUBVARIABLE_EXTENDED_S1");"NEWLINES, aVariable->name, aVariable->name);
}
else
{
fprintf(aFile, "\tCU_ASSERT_MEMORY_CHECK(\"%s\", &%s, &"STUBVARIABLE_EXTENDED_S1", sizeof(%s));"NEWLINES, aVariable->name, aVariable->name, aVariable->name,
aVariable->name);
}
}
STATIC int8_t createStubExpected(char *aNoSuffix, FILE *aFile, FILE *aHeader, cfile_variableList_t *aList) STATIC int8_t createStubExpected(char *aNoSuffix, FILE *aFile, FILE *aHeader, cfile_variableList_t *aList)
{ {
cfile_variable_t *work = NULL; cfile_variable_t *work = NULL;
@@ -46,6 +111,11 @@ STATIC int8_t createStubExpected(char *aNoSuffix, FILE *aFile, FILE *aHeader, cf
return -1; return -1;
} }
if (0 == aList->amount)
{
return 0;
}
work = aList->head; work = aList->head;
while (work) while (work)
{ {
@@ -70,8 +140,7 @@ STATIC int8_t createStubExpected(char *aNoSuffix, FILE *aFile, FILE *aHeader, cf
work = work->next; work = work->next;
continue; continue;
} }
// TODO type specific initialization createVariableSpecificInit("\t"STUBVARIABLE_EXTENDED_S1, aFile, work);
fprintf(aFile, "\t"STUBVARIABLE_EXTENDED_S1" = 0x55;"NEWLINES, work->name);
work = work->next; work = work->next;
} }
@@ -88,6 +157,11 @@ STATIC int8_t createStubGlobals(char *aNoSuffix, FILE *aFile, FILE *aHeader, cfi
return -1; return -1;
} }
if (0 == aList->amount)
{
return 0;
}
work = aList->head; work = aList->head;
while (work) while (work)
{ {
@@ -111,8 +185,7 @@ STATIC int8_t createStubGlobals(char *aNoSuffix, FILE *aFile, FILE *aHeader, cfi
work = work->next; work = work->next;
continue; continue;
} }
// TODO type specific initialization createVariableSpecificInit("\t%s", aFile, work);
fprintf(aFile, "\t%s = 0x55;"NEWLINES, work->name);
work = work->next; work = work->next;
} }
@@ -135,6 +208,11 @@ STATIC int8_t createStubCheck(char *aNoSuffix, FILE *aFile, FILE *aHeader, cfile
return -1; return -1;
} }
if (0 == aList->amount)
{
return 0;
}
fprintf(aHeader, "void "STUBFUNCTION_CHECK_S1"();"NEWLINES NEWLINES, aNoSuffix); fprintf(aHeader, "void "STUBFUNCTION_CHECK_S1"();"NEWLINES NEWLINES, aNoSuffix);
fprintf(aFile, "void "STUBFUNCTION_CHECK_S1"()"NEWLINES"{"NEWLINES, aNoSuffix); fprintf(aFile, "void "STUBFUNCTION_CHECK_S1"()"NEWLINES"{"NEWLINES, aNoSuffix);
@@ -146,8 +224,7 @@ STATIC int8_t createStubCheck(char *aNoSuffix, FILE *aFile, FILE *aHeader, cfile
work = work->next; work = work->next;
continue; continue;
} }
// TODO type specific initialization createVariableSpecificCheck(aFile, work);
fprintf(aFile, "\tCU_ASSERT_EQUAL(%s, "STUBVARIABLE_EXTENDED_S1");"NEWLINES, work->name, work->name);
work = work->next; work = work->next;
} }
@@ -403,6 +480,7 @@ STATIC int8_t createStub(char *aOutput, char *aNoSuffix, cfile_t *aCfile)
fprintf(cfile, " * @details"NEWLINES" * This is a stub for CUnit.\\n"NEWLINES); fprintf(cfile, " * @details"NEWLINES" * This is a stub for CUnit.\\n"NEWLINES);
fprintf(cfile, " * - generated by stubser -"NEWLINES" */" NEWLINES NEWLINES); fprintf(cfile, " * - generated by stubser -"NEWLINES" */" NEWLINES NEWLINES);
fprintf(cfile, "#include <CUnit/CUnit.h>"NEWLINES); fprintf(cfile, "#include <CUnit/CUnit.h>"NEWLINES);
fprintf(cfile, "#include \"xasserts.h\""NEWLINES);
fprintf(cfile, "#include \"xtypes.h\""NEWLINES); fprintf(cfile, "#include \"xtypes.h\""NEWLINES);
fprintf(cfile, "#include \"stub.h\""NEWLINES); fprintf(cfile, "#include \"stub.h\""NEWLINES);
fprintf(cfile, "#include \"stub_%s_user.h\""NEWLINES, aNoSuffix); fprintf(cfile, "#include \"stub_%s_user.h\""NEWLINES, aNoSuffix);

View File

@@ -54,4 +54,6 @@
#define STUB_CONSOLE_PARSE_OK_S1 STUB_CONSOLE_GOBACK STUB_CONSOLE_OK " %s parsing..." #define STUB_CONSOLE_PARSE_OK_S1 STUB_CONSOLE_GOBACK STUB_CONSOLE_OK " %s parsing..."
#define STUB_CONSOLE_CREATE_ERROR_S2 "...stub creation failed\n"STUB_CONSOLE_FAIL " %s creation failed (%d)\n" #define STUB_CONSOLE_CREATE_ERROR_S2 "...stub creation failed\n"STUB_CONSOLE_FAIL " %s creation failed (%d)\n"
#define STUB_CONSOLE_CREATE_OK_S1 "...stub created > %s\n" #define STUB_CONSOLE_CREATE_OK_S1 "...stub created > %s\n"
#define STUB_REGEX_STD_DATATYPE "u*int[0-9]{1,2}_t|uchar"
#endif /* STUBSER_STUBSER_LOC_H_ */ #endif /* STUBSER_STUBSER_LOC_H_ */