From 4075224f74751ac3317d99564dc3ce7832dc0c15 Mon Sep 17 00:00:00 2001 From: Yann Ylavic Date: Fri, 24 Jun 2022 12:09:34 +0000 Subject: Make test work with thread support disabled. Added support for recording skipped test cases. testfile: silence -Wstring-plus-int warnings. Merge r1877439, r1877441, r1877442 from trunk. Submitted by: brane git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.8.x@1902230 13f79535-47bb-0310-9956-ffa450edef68 --- test/abts.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++------ test/abts.h | 9 ++++++++ test/testdir.c | 6 ++++++ test/testfile.c | 4 ++-- 4 files changed, 77 insertions(+), 9 deletions(-) diff --git a/test/abts.c b/test/abts.c index a4df871ab..e03ccc461 100644 --- a/test/abts.c +++ b/test/abts.c @@ -76,6 +76,10 @@ static void end_suite(abts_suite *suite) fprintf(stdout, "\b"); fflush(stdout); } + if (last->skipped > 0) { + fprintf(stdout, "SKIPPED %d of %d\n", last->skipped, last->num_test); + fflush(stdout); + } if (last->failed == 0) { fprintf(stdout, "SUCCESS\n"); fflush(stdout); @@ -102,6 +106,7 @@ abts_suite *abts_add_suite(abts_suite *suite, const char *suite_name_full) subsuite = malloc(sizeof(*subsuite)); subsuite->num_test = 0; subsuite->failed = 0; + subsuite->skipped = 0; subsuite->next = NULL; /* suite_name_full may be an absolute path depending on __FILE__ * expansion */ @@ -178,6 +183,7 @@ void abts_run_test(abts_suite *ts, test_func f, void *value) ss = ts->tail; tc.failed = 0; + tc.skipped = 0; tc.suite = ss; ss->num_test++; @@ -188,11 +194,25 @@ void abts_run_test(abts_suite *ts, test_func f, void *value) if (tc.failed) { ss->failed++; } + + if (tc.skipped) { + ss->skipped++; + } +} + +static void report_summary(const char *kind_header, + const char *name_header, + const char *percent_header) +{ + fprintf(stdout, "%-15s\t\tTotal\t%s\t%s\n", + kind_header, name_header, percent_header); + fprintf(stdout, "===================================================\n"); } static int report(abts_suite *suite) { - int count = 0; + int failed_count = 0; + int skipped_count = 0; sub_suite *dptr; if (suite && suite->tail &&!suite->tail->not_run) { @@ -200,25 +220,46 @@ static int report(abts_suite *suite) } for (dptr = suite->head; dptr; dptr = dptr->next) { - count += dptr->failed; + failed_count += dptr->failed; + } + + for (dptr = suite->head; dptr; dptr = dptr->next) { + skipped_count += dptr->skipped; } if (list_tests) { return 0; } - if (count == 0) { + /* Report skipped tests */ + if (skipped_count > 0) { + dptr = suite->head; + report_summary("Skipped Tests", "Skip", "Skipped %"); + while (dptr != NULL) { + if (dptr->skipped != 0) { + float percent = ((float)dptr->skipped / (float)dptr->num_test); + fprintf(stdout, "%-15s\t\t%5d\t%4d\t%8.2f%%\n", dptr->name, + dptr->num_test, dptr->skipped, percent * 100); + } + dptr = dptr->next; + } + } + + if (failed_count == 0) { printf("All tests passed.\n"); return 0; } + /* Report failed tests */ dptr = suite->head; - fprintf(stdout, "%-15s\t\tTotal\tFail\tFailed %%\n", "Failed Tests"); - fprintf(stdout, "===================================================\n"); + if (skipped_count > 0) { + fprintf(stdout, "\n"); + } + report_summary("Failed Tests", "Fail", " Failed %"); while (dptr != NULL) { if (dptr->failed != 0) { float percent = ((float)dptr->failed / (float)dptr->num_test); - fprintf(stdout, "%-15s\t\t%5d\t%4d\t%6.2f%%\n", dptr->name, + fprintf(stdout, "%-15s\t\t%5d\t%4d\t%8.2f%%\n", dptr->name, dptr->num_test, dptr->failed, percent * 100); } dptr = dptr->next; @@ -358,7 +399,19 @@ void abts_fail(abts_case *tc, const char *message, int lineno) fflush(stderr); } } - + +void abts_skip(abts_case *tc, const char *message, int lineno) +{ + update_status(); + if (tc->skipped) return; + + tc->skipped = TRUE; + if (verbose) { + fprintf(stderr, "\bSKIP: Line %d: %s\n", lineno, message); + fflush(stderr); + } +} + void abts_assert(abts_case *tc, const char *message, int condition, int lineno) { update_status(); diff --git a/test/abts.h b/test/abts.h index 4ce6cf544..9c39e84af 100644 --- a/test/abts.h +++ b/test/abts.h @@ -42,6 +42,7 @@ struct sub_suite { char *name; int num_test; int failed; + int skipped; int not_run; int not_impl; struct sub_suite *next; @@ -56,6 +57,7 @@ typedef struct abts_suite abts_suite; struct abts_case { int failed; + int skipped; sub_suite *suite; }; typedef struct abts_case abts_case; @@ -99,6 +101,7 @@ void abts_ptr_notnull(abts_case *tc, const void *ptr, int lineno); void abts_ptr_equal(abts_case *tc, const void *expected, const void *actual, int lineno); void abts_true(abts_case *tc, int condition, int lineno); void abts_fail(abts_case *tc, const char *message, int lineno); +void abts_skip(abts_case *tc, const char *message, int lineno); void abts_not_impl(abts_case *tc, const char *message, int lineno); void abts_assert(abts_case *tc, const char *message, int condition, int lineno); @@ -126,6 +129,12 @@ void abts_assert(abts_case *tc, const char *message, int condition, int lineno); #define ABTS_NOT_IMPL(a, b) abts_not_impl(a, b, __LINE__); #define ABTS_ASSERT(a, b, c) abts_assert(a, b, c, __LINE__); +/* When skipping tests, make a reference to the test data parameter + to avoid unused variable warnings. */ +#define ABTS_SKIP(tc, data, msg) do { \ + ((void)(data)); \ + abts_skip((tc), (msg), __LINE__); \ + } while (0) abts_suite *run_tests(abts_suite *suite); abts_suite *run_tests1(abts_suite *suite); diff --git a/test/testdir.c b/test/testdir.c index ac1bcfae6..cc42ed900 100644 --- a/test/testdir.c +++ b/test/testdir.c @@ -60,6 +60,7 @@ static void test_mkdir_recurs(abts_case *tc, void *data) ABTS_INT_EQUAL(tc, APR_DIR, finfo.filetype); } +#if APR_HAS_THREADS struct thread_data { abts_case *tc; @@ -94,9 +95,11 @@ static void *APR_THREAD_FUNC thread_mkdir_func(apr_thread_t *thd, void *data) ABTS_INT_EQUAL(td->tc, APR_SUCCESS, s5); return NULL; } +#endif /* APR_HAS_THREADS */ static void test_mkdir_recurs_parallel(abts_case *tc, void *data) { +#if APR_HAS_THREADS struct thread_data td1, td2, td3, td4; apr_thread_t *t1, *t2, *t3, *t4; apr_status_t s1, s2, s3, s4; @@ -125,6 +128,9 @@ static void test_mkdir_recurs_parallel(abts_case *tc, void *data) ABTS_INT_EQUAL(tc, APR_SUCCESS, s2); ABTS_INT_EQUAL(tc, APR_SUCCESS, s3); ABTS_INT_EQUAL(tc, APR_SUCCESS, s4); +#else + ABTS_SKIP(tc, data, "This test requires APR thread support."); +#endif /* APR_HAS_THREADS */ } static void test_remove(abts_case *tc, void *data) diff --git a/test/testfile.c b/test/testfile.c index b817d1a05..0b95dad4b 100644 --- a/test/testfile.c +++ b/test/testfile.c @@ -260,7 +260,7 @@ static void test_seek(abts_case *tc, void *data) rv = apr_file_read(filetest, str, &nbytes); ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); ABTS_SIZE_EQUAL(tc, strlen(TESTSTR) - 5, nbytes); - ABTS_STR_EQUAL(tc, TESTSTR + 5, str); + ABTS_STR_EQUAL(tc, &TESTSTR[5], str); apr_file_close(filetest); @@ -281,7 +281,7 @@ static void test_seek(abts_case *tc, void *data) rv = apr_file_read(filetest, str, &nbytes); ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); ABTS_SIZE_EQUAL(tc, 5, nbytes); - ABTS_STR_EQUAL(tc, TESTSTR + strlen(TESTSTR) - 5, str); + ABTS_STR_EQUAL(tc, &TESTSTR[strlen(TESTSTR) - 5], str); apr_file_close(filetest); } -- cgit v1.2.1