summaryrefslogtreecommitdiff
path: root/share/cmake-3.18/Templates/TestDriver.cxx.in
diff options
context:
space:
mode:
Diffstat (limited to 'share/cmake-3.18/Templates/TestDriver.cxx.in')
-rw-r--r--share/cmake-3.18/Templates/TestDriver.cxx.in146
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;
+}