GUACAMOLE-662: Log test output in TAP format.

This commit is contained in:
Michael Jumper 2018-11-13 19:55:06 -08:00
parent d7118fda70
commit ca4009c982

View File

@ -39,15 +39,23 @@
use strict; use strict;
# Parse all test declarations from given file my $num_tests = 0;
my %test_suites = (); my %test_suites = ();
# Parse all test declarations from given file
while (<>) { while (<>) {
if ((my $suite_name, my $test_name) = m/^void\s+test_(\w+)__(\w+)/) { if ((my $suite_name, my $test_name) = m/^void\s+test_(\w+)__(\w+)/) {
$num_tests++;
$test_suites{$suite_name} //= (); $test_suites{$suite_name} //= ();
push @{$test_suites{$suite_name}}, $test_name; push @{$test_suites{$suite_name}}, $test_name;
} }
} }
# Bail out if there's nothing to write
if ($num_tests == 0) {
die "No unit tests... :(\n";
}
# #
# Common test runner header # Common test runner header
# #
@ -73,7 +81,44 @@ print <<'END';
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <CUnit/Basic.h> #include <CUnit/TestRun.h>
/**
* The current test number, as required by the TAP format. This value is
* automatically incremented by tap_log_test_completed() after each test is
* run.
*/
int tap_test_number = 1;
/**
* Logs the status of a CUnit test which just completed. This implementation
* logs test completion in TAP format.
*
* @param test
* The CUnit test which just completed.
*
* @param suite
* The CUnit test suite associated with the test.
*
* @param failure
* The head element of the test failure list, or NULL if the test passed.
*/
static void tap_log_test_completed(const CU_pTest test,
const CU_pSuite suite, const CU_pFailureRecord failure) {
/* Log success/failure in TAP format */
if (failure == NULL)
printf("ok %i - [%s] %s: OK\n",
tap_test_number, suite->pName, test->pName);
else
printf("not ok %i - [%s] %s: Assertion failed on %s:%i: %s\n",
tap_test_number, suite->pName, test->pName,
failure->strFileName, failure->uiLineNumber,
failure->strCondition);
tap_test_number++;
}
END END
# #
@ -132,9 +177,12 @@ while ((my $suite_name, my $test_names) = each (%test_suites)) {
print <<"END"; print <<"END";
/* Write TAP header */
printf("1..$num_tests\\n");
/* Run all tests in all suites */ /* Run all tests in all suites */
CU_basic_set_mode(CU_BRM_VERBOSE); CU_set_test_complete_handler(tap_log_test_completed);
CU_basic_run_tests(); CU_run_all_tests();
cleanup: cleanup:
/* Tests complete */ /* Tests complete */