diff options
Diffstat (limited to 'share/cmake-3.18/Templates/TestDriver.cxx.in')
-rw-r--r-- | share/cmake-3.18/Templates/TestDriver.cxx.in | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/share/cmake-3.18/Templates/TestDriver.cxx.in b/share/cmake-3.18/Templates/TestDriver.cxx.in new file mode 100644 index 0000000..053f1ee --- /dev/null +++ b/share/cmake-3.18/Templates/TestDriver.cxx.in @@ -0,0 +1,146 @@ +#include <ctype.h> /* NOLINT */ +#include <stdio.h> /* NOLINT */ +#include <stdlib.h> /* NOLINT */ +#include <string.h> /* NOLINT */ + +#if defined(_MSC_VER) +#pragma warning(disable : 4996) /* deprecation */ +#endif + +@CMAKE_TESTDRIVER_EXTRA_INCLUDES@ + +/* Forward declare test functions. */ +@CMAKE_FORWARD_DECLARE_TESTS@ + +#ifdef __cplusplus +# define CM_CAST(TYPE, EXPR) static_cast<TYPE>(EXPR) +# if __cplusplus >= 201103L +# define CM_NULL nullptr +# else +# define CM_NULL NULL +# endif +#else +# define CM_CAST(TYPE, EXPR) (TYPE)(EXPR) +# define CM_NULL NULL +#endif + +/* Create map. */ + +typedef int (*MainFuncPointer)(int, char* []); /* NOLINT */ +typedef struct /* NOLINT */ +{ + const char* name; + MainFuncPointer func; +} functionMapEntry; + +static functionMapEntry cmakeGeneratedFunctionMapEntries[] = { + @CMAKE_FUNCTION_TABLE_ENTIRES@ + { CM_NULL, CM_NULL } /* NOLINT */ +}; + +static const int NumTests = CM_CAST(int, + sizeof(cmakeGeneratedFunctionMapEntries) / sizeof(functionMapEntry)) - 1; + +/* Allocate and create a lowercased copy of string + (note that it has to be free'd manually) */ +static char* lowercase(const char* string) +{ + char *new_string; + char *p; + size_t stringSize; + + stringSize = CM_CAST(size_t, strlen(string) + 1); + new_string = CM_CAST(char*, malloc(sizeof(char) * stringSize)); + + if (new_string == CM_NULL) { /* NOLINT */ + return CM_NULL; /* NOLINT */ + } + strcpy(new_string, string); /* NOLINT */ + for (p = new_string; *p != 0; ++p) { + *p = CM_CAST(char, tolower(*p)); + } + return new_string; +} + +int main(int ac, char* av[]) +{ + int i; + int testNum = 0; + int partial_match; + char *arg; + int testToRun = -1; + + @CMAKE_TESTDRIVER_ARGVC_FUNCTION@ + + /* If no test name was given */ + /* process command line with user function. */ + if (ac < 2) { + /* Ask for a test. */ + printf("Available tests:\n"); + for (i = 0; i < NumTests; ++i) { + printf("%3d. %s\n", i, cmakeGeneratedFunctionMapEntries[i].name); + } + printf("To run a test, enter the test number: "); + fflush(stdout); + if (scanf("%d", &testNum) != 1) { + printf("Couldn't parse that input as a number\n"); + return -1; + } + if (testNum >= NumTests) { + printf("%3d is an invalid test number.\n", testNum); + return -1; + } + testToRun = testNum; + ac--; + av++; + } + partial_match = 0; + arg = CM_NULL; /* NOLINT */ + /* If partial match is requested. */ + if (testToRun == -1 && ac > 1) { + partial_match = (strcmp(av[1], "-R") == 0) ? 1 : 0; + } + if (partial_match != 0 && ac < 3) { + printf("-R needs an additional parameter.\n"); + return -1; + } + if (testToRun == -1) { + arg = lowercase(av[1 + partial_match]); + } + for (i = 0; i < NumTests && testToRun == -1; ++i) { + char *test_name = lowercase(cmakeGeneratedFunctionMapEntries[i].name); + if (partial_match != 0 && strstr(test_name, arg) != CM_NULL) { /* NOLINT */ + testToRun = i; + ac -= 2; + av += 2; + } else if (partial_match == 0 && strcmp(test_name, arg) == 0) { + testToRun = i; + ac--; + av++; + } + free(test_name); + } + free(arg); + if (testToRun != -1) { + int result; +@CMAKE_TESTDRIVER_BEFORE_TESTMAIN@ + if (testToRun < 0 || testToRun >= NumTests) { + printf("testToRun was modified by TestDriver code to an invalid value: " + "%3d.\n", + testNum); + return -1; + } + result = (*cmakeGeneratedFunctionMapEntries[testToRun].func)(ac, av); +@CMAKE_TESTDRIVER_AFTER_TESTMAIN@ + return result; + } + + /* Nothing was run, display the test names. */ + printf("Available tests:\n"); + for (i = 0; i < NumTests; ++i) { + printf("%3d. %s\n", i, cmakeGeneratedFunctionMapEntries[i].name); + } + printf("Failed: %s is an invalid test name.\n", av[1]); + + return -1; +} |