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
+