summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorylavic <ylavic@13f79535-47bb-0310-9956-ffa450edef68>2022-06-24 12:09:34 +0000
committerylavic <ylavic@13f79535-47bb-0310-9956-ffa450edef68>2022-06-24 12:09:34 +0000
commit70be869c12b7792da4c238b3f3682cc0f834e573 (patch)
tree2fdf68513f889e37ba5e23c8761fbf5d436ba6a2
parent2b677e998586f43d95c7b686239dba704e01b83d (diff)
downloadlibapr-70be869c12b7792da4c238b3f3682cc0f834e573.tar.gz
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
-rw-r--r--test/abts.c67
-rw-r--r--test/abts.h9
-rw-r--r--test/testdir.c6
-rw-r--r--test/testfile.c4
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);
}