diff options
author | Brad King <brad.king@kitware.com> | 2017-01-25 13:41:29 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2017-01-25 13:41:29 (GMT) |
commit | 014365ea97848654cc9493225399528f8b7b15b7 (patch) | |
tree | b5b6bd36c1e32f7c9b62800af9a3af87c5b0fae7 | |
parent | b4efd34d798317930d2e9af907fb3123999c450b (diff) | |
parent | eb86b4cec14df4a51cca9f178e8e758b97be11b7 (diff) | |
download | CMake-014365ea97848654cc9493225399528f8b7b15b7.zip CMake-014365ea97848654cc9493225399528f8b7b15b7.tar.gz CMake-014365ea97848654cc9493225399528f8b7b15b7.tar.bz2 |
Merge topic 'testdriver-cleanup'
eb86b4ce TestDriver: fix/silence clang-tidy warnings
178c8973 TestDriver: calc NumTests at compile time
3bb4a798 TestDriver: use for loop
60b68304 TestDriver: abstract CM_CAST macro
1731b90c TestDriver: Revise C++ coding style using clang-format
-rw-r--r-- | Templates/TestDriver.cxx.in | 146 |
1 files changed, 58 insertions, 88 deletions
diff --git a/Templates/TestDriver.cxx.in b/Templates/TestDriver.cxx.in index 3e0afa5..ecf6fa1 100644 --- a/Templates/TestDriver.cxx.in +++ b/Templates/TestDriver.cxx.in @@ -1,21 +1,26 @@ -#include <ctype.h> -#include <stdio.h> -#include <string.h> -#include <stdlib.h> +#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 */ +#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) +#else +#define CM_CAST(TYPE, EXPR) (TYPE)(EXPR) +#endif + /* Create map. */ -typedef int (*MainFuncPointer)(int , char*[]); +typedef int (*MainFuncPointer)(int, char* []); typedef struct { const char* name; @@ -24,143 +29,108 @@ typedef struct static functionMapEntry cmakeGeneratedFunctionMapEntries[] = { @CMAKE_FUNCTION_TABLE_ENTIRES@ - {0,0} + { NULL, NULL } /* NOLINT */ }; +static const int NumTests = + (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) +static char* lowercase(const char* string) { char *new_string, *p; size_t stringSize = 0; -#ifdef __cplusplus - stringSize = static_cast<size_t>(strlen(string) + 1); - new_string = static_cast<char *>(malloc(sizeof(char) * stringSize)); -#else - stringSize = (size_t)(strlen(string) + 1); - new_string = (char *)(malloc(sizeof(char) * stringSize)); -#endif + stringSize = CM_CAST(size_t, strlen(string) + 1); + new_string = CM_CAST(char*, malloc(sizeof(char) * stringSize)); - if (!new_string) - { - return 0; - } + if (new_string == NULL) { /* NOLINT */ + return NULL; /* NOLINT */ + } strncpy(new_string, string, stringSize); - p = new_string; - while (*p != 0) - { -#ifdef __cplusplus - *p = static_cast<char>(tolower(*p)); -#else - *p = (char)(tolower(*p)); -#endif - - ++p; - } + for (p = new_string; *p != 0; ++p) { + *p = CM_CAST(char, tolower(*p)); + } return new_string; } -int main(int ac, char *av[]) +int main(int ac, char* av[]) { - int i, NumTests, testNum = 0, partial_match; + int i, testNum = 0, partial_match; char *arg, *test_name; - int count; int testToRun = -1; @CMAKE_TESTDRIVER_ARGVC_FUNCTION@ - for(count =0; cmakeGeneratedFunctionMapEntries[count].name != 0; count++) - { - } - NumTests = count; /* If no test name was given */ /* process command line with user function. */ - if (ac < 2) - { + if (ac < 2) { /* Ask for a test. */ printf("Available tests:\n"); - for (i =0; i < NumTests; ++i) - { + 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 ) - { + if (scanf("%d", &testNum) != 1) { printf("Couldn't parse that input as a number\n"); return -1; - } - if (testNum >= NumTests) - { + } + if (testNum >= NumTests) { printf("%3d is an invalid test number.\n", testNum); return -1; - } + } testToRun = testNum; ac--; av++; - } + } partial_match = 0; - arg = 0; + arg = NULL; /* NOLINT */ /* If partial match is requested. */ - if(testToRun == -1 && ac > 1) - { + if (testToRun == -1 && ac > 1) { partial_match = (strcmp(av[1], "-R") == 0) ? 1 : 0; - } - if (partial_match && ac < 3) - { + } + if (partial_match != 0 && ac < 3) { printf("-R needs an additional parameter.\n"); return -1; - } - if(testToRun == -1) - { + } + if (testToRun == -1) { arg = lowercase(av[1 + partial_match]); - } - for (i =0; i < NumTests && testToRun == -1; ++i) - { + } + for (i = 0; i < NumTests && testToRun == -1; ++i) { test_name = lowercase(cmakeGeneratedFunctionMapEntries[i].name); - if (partial_match && strstr(test_name, arg) != NULL) - { + if (partial_match != 0 && strstr(test_name, arg) != NULL) { /* NOLINT */ testToRun = i; - ac -=2; + ac -= 2; av += 2; - } - else if (!partial_match && strcmp(test_name, arg) == 0) - { + } else if (partial_match == 0 && strcmp(test_name, arg) == 0) { testToRun = i; ac--; av++; - } - free(test_name); - } - if(arg) - { - free(arg); } - if(testToRun != -1) - { + 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); + 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) - { + 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; |