ENH: Adding test for non-trivial custom command line arguments. This is for bug#3786.

This commit is contained in:
Brad King 2006-09-21 16:11:25 -04:00
parent b9fc06735d
commit ca22f0f14b
2 changed files with 71 additions and 0 deletions

View File

@ -164,3 +164,42 @@ TARGET_LINK_LIBRARIES(CustomCommand GeneratedHeader)
# the CustomCommand executable really needs doc1.h # the CustomCommand executable really needs doc1.h
ADD_DEPENDENCIES(CustomCommand TDocument) ADD_DEPENDENCIES(CustomCommand TDocument)
##############################################################################
# Test non-trivial command line arguments in custom commands.
SET(EXPECTED_ARGUMENTS)
SET(CHECK_ARGS
c:/posix/path
c:\\windows\\path
'single-quotes'
single'quote
\"double-quotes\"
double\"quote
"\\;semi-colons\\;"
"semi\\;colon"
"c:/posix/path/with space"
"c:\\windows\\path\\with space"
"'single quotes with space'"
"single'quote with space"
"\"double-quotes with space\""
"double\"quote with space"
"\\;semi-colons with space\\;"
"semi\\;colon with space"
)
FOREACH(arg ${CHECK_ARGS})
SET(ARG "${arg}")
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARG "${ARG}")
STRING(REGEX REPLACE "\"" "\\\\\"" ARG "${ARG}")
SET(EXPECTED_ARGUMENTS
"${EXPECTED_ARGUMENTS} \"${ARG}\",
")
ENDFOREACH(arg)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/check_command_line.c.in
${CMAKE_CURRENT_BINARY_DIR}/check_command_line.c
@ONLY IMMEDIATE)
ADD_EXECUTABLE(check_command_line
${CMAKE_CURRENT_BINARY_DIR}/check_command_line.c)
ADD_CUSTOM_TARGET(do_check_command_line ALL
COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/check_command_line
${CHECK_ARGS}
)
ADD_DEPENDENCIES(do_check_command_line check_command_line)

View File

@ -0,0 +1,32 @@
#include <stdio.h>
const char* expected_arguments[] =
{
@EXPECTED_ARGUMENTS@ 0
};
int main(int argc, const char* argv[])
{
const char** a = argv+1;
const char** e = expected_arguments;
(void)argc;
for(;*a && *e; ++a, ++e)
{
if(strcmp(*a, *e) != 0)
{
fprintf(stderr, "Argument [%s] does not match expected [%s].\n",
*a, *e);
return 1;
}
else
{
printf("[%s]\n", *a);
}
}
if(*a || *e)
{
fprintf(stderr, "Number of arguments does not match expected.\n");
return 1;
}
return 0;
}