You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by vn...@apache.org on 2019/01/07 00:43:33 UTC

[2/7] guacamole-server git commit: GUACAMOLE-662: Add utility script for automatically generating CUnit test runners.

GUACAMOLE-662: Add utility script for automatically generating CUnit test runners.


Project: http://git-wip-us.apache.org/repos/asf/guacamole-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/guacamole-server/commit/d7118fda
Tree: http://git-wip-us.apache.org/repos/asf/guacamole-server/tree/d7118fda
Diff: http://git-wip-us.apache.org/repos/asf/guacamole-server/diff/d7118fda

Branch: refs/heads/master
Commit: d7118fda707cf888eede291d547aee5aa5e293c1
Parents: 2827af3
Author: Michael Jumper <mj...@apache.org>
Authored: Tue Nov 13 13:24:23 2018 -0800
Committer: Michael Jumper <mj...@apache.org>
Committed: Fri Nov 16 22:23:55 2018 -0800

----------------------------------------------------------------------
 Makefile.am                  |  19 ++---
 util/generate-test-runner.pl | 146 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 156 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/guacamole-server/blob/d7118fda/Makefile.am
----------------------------------------------------------------------
diff --git a/Makefile.am b/Makefile.am
index 6926474..cbfea85 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -91,13 +91,14 @@ if ENABLE_GUACLOG
 SUBDIRS += src/guaclog
 endif
 
-EXTRA_DIST =         \
-    .dockerignore    \
-    CONTRIBUTING     \
-    Dockerfile       \
-    LICENSE          \
-    NOTICE           \
-    bin/guacctl      \
-    doc/Doxyfile.in  \
-    src/guacd-docker
+EXTRA_DIST =                     \
+    .dockerignore                \
+    CONTRIBUTING                 \
+    Dockerfile                   \
+    LICENSE                      \
+    NOTICE                       \
+    bin/guacctl                  \
+    doc/Doxyfile.in              \
+    src/guacd-docker             \
+    util/generate-test-runner.pl
 

http://git-wip-us.apache.org/repos/asf/guacamole-server/blob/d7118fda/util/generate-test-runner.pl
----------------------------------------------------------------------
diff --git a/util/generate-test-runner.pl b/util/generate-test-runner.pl
new file mode 100755
index 0000000..c32ec0c
--- /dev/null
+++ b/util/generate-test-runner.pl
@@ -0,0 +1,146 @@
+#!/usr/bin/perl
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+#
+# generate-test-runner.pl
+#
+# Generates a test runner for the .c files given on the command line. Each .c
+# file may declare any number of tests so long as each test uses CUnit and is
+# declared with the following convention:
+#
+# void test_SUITENAME__TESTNAME() {
+#     ...
+# }
+#
+# where TESTNAME is the arbitrary name of the test and SUITENAME is the
+# arbitrary name of the test suite that this test belongs to.
+#
+# Absolutely all tests MUST follow the above convention if they are to be
+# picked up by this script. Functions which are not tests MUST NOT follow
+# the above convention.
+#
+
+use strict;
+
+# Parse all test declarations from given file
+my %test_suites = ();
+while (<>) {
+    if ((my $suite_name, my $test_name) = m/^void\s+test_(\w+)__(\w+)/) {
+        $test_suites{$suite_name} //= ();
+        push @{$test_suites{$suite_name}}, $test_name;
+    }
+}
+
+#
+# Common test runner header
+#
+
+print <<'END';
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <stdlib.h>
+#include <CUnit/Basic.h>
+END
+
+#
+# Prototypes for all test functions
+#
+
+while ((my $suite_name, my $test_names) = each (%test_suites)) {
+    print "\n/* Automatically-generated prototypes for the $suite_name suite */\n";
+    foreach my $test_name (@{ $test_names }) {
+        print "void test_${suite_name}__${test_name}();\n";
+    }
+}
+
+#
+# Beginning of main() function body for test runner
+#
+
+print <<"END";
+
+/* Automatically-generated test runner */
+int main() {
+
+    /* Init CUnit test registry */
+    if (CU_initialize_registry() != CUE_SUCCESS)
+        return CU_get_error();
+END
+
+#
+# Within main(), register each test and its corresponding test suite
+#
+
+while ((my $suite_name, my $test_names) = each (%test_suites)) {
+
+    print <<"    END";
+
+    /* Create and register all tests for the $suite_name suite */
+    CU_pSuite $suite_name = CU_add_suite("$suite_name", NULL, NULL);
+    if ($suite_name == NULL
+    END
+
+    foreach my $test_name (@{ $test_names }) {
+        print <<"        END";
+        || CU_add_test($suite_name, "$test_name", test_${suite_name}__${test_name}) == NULL
+        END
+    }
+
+    print <<"    END";
+    ) goto cleanup;
+    END
+
+}
+
+#
+# End of main() function
+#
+
+print <<"END";
+
+    /* Run all tests in all suites */
+    CU_basic_set_mode(CU_BRM_VERBOSE);
+    CU_basic_run_tests();
+
+cleanup:
+    /* Tests complete */
+    CU_cleanup_registry();
+    return CU_get_error();
+
+}
+END
+