Skip to content

Commit c708e5e

Browse files
authored
Merge pull request libgit2#5541 from libgit2/ethomson/clar_tap
clar: add tap output option
2 parents b429051 + cad7a1b commit c708e5e

File tree

25 files changed

+336
-170
lines changed

25 files changed

+336
-170
lines changed

tests/checkout/crlf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static int compare_file(void *payload, git_buf *actual_path)
108108
git_buf details = GIT_BUF_INIT;
109109
git_buf_printf(&details, "filename=%s, system=%s, autocrlf=%s, attrs={%s}",
110110
git_path_basename(actual_path->ptr), systype, cd->autocrlf, cd->attrs);
111-
clar__fail(__FILE__, __LINE__,
111+
clar__fail(__FILE__, __func__, __LINE__,
112112
"checked out contents did not match expected", details.ptr, 0);
113113
git_buf_dispose(&details);
114114
}

tests/clar.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ fixture_path(const char *base, const char *fixture_name);
9696

9797
struct clar_error {
9898
const char *file;
99+
const char *function;
99100
size_t line_number;
100101
const char *error_msg;
101102
char *description;
@@ -140,6 +141,8 @@ static struct {
140141
int tests_ran;
141142
int suites_ran;
142143

144+
enum cl_output_format output_format;
145+
143146
int report_errors_only;
144147
int exit_on_error;
145148
int report_suite_names;
@@ -370,6 +373,7 @@ clar_usage(const char *arg)
370373
printf(" -v Increase verbosity (show suite names)\n");
371374
printf(" -q Only report tests that had an error\n");
372375
printf(" -Q Quit as soon as a test fails\n");
376+
printf(" -t Display results in tap format\n");
373377
printf(" -l Print suite names\n");
374378
printf(" -r[filename] Write summary file (to the optional filename)\n");
375379
exit(-1);
@@ -385,7 +389,7 @@ clar_parse_args(int argc, char **argv)
385389
char *argument = argv[i];
386390

387391
if (argument[0] != '-' || argument[1] == '\0'
388-
|| strchr("sixvqQlr", argument[1]) == NULL) {
392+
|| strchr("sixvqQtlr", argument[1]) == NULL) {
389393
clar_usage(argv[0]);
390394
}
391395
}
@@ -468,6 +472,10 @@ clar_parse_args(int argc, char **argv)
468472
_clar.exit_on_error = 1;
469473
break;
470474

475+
case 't':
476+
_clar.output_format = CL_OUTPUT_TAP;
477+
break;
478+
471479
case 'l': {
472480
size_t j;
473481
printf("Test suites (use -s<name> to run just one):\n");
@@ -496,6 +504,9 @@ clar_parse_args(int argc, char **argv)
496504
void
497505
clar_test_init(int argc, char **argv)
498506
{
507+
if (argc > 1)
508+
clar_parse_args(argc, argv);
509+
499510
clar_print_init(
500511
(int)_clar_callback_count,
501512
(int)_clar_suite_count,
@@ -507,9 +518,6 @@ clar_test_init(int argc, char **argv)
507518
_clar.summary_filename = strdup(_clar.summary_filename);
508519
}
509520

510-
if (argc > 1)
511-
clar_parse_args(argc, argv);
512-
513521
if (_clar.write_summary &&
514522
!(_clar.summary = clar_summary_init(_clar.summary_filename))) {
515523
clar_print_onabort("Failed to open the summary file\n");
@@ -605,6 +613,7 @@ void clar__skip(void)
605613

606614
void clar__fail(
607615
const char *file,
616+
const char *function,
608617
size_t line,
609618
const char *error_msg,
610619
const char *description,
@@ -621,6 +630,7 @@ void clar__fail(
621630
_clar.last_report->last_error = error;
622631

623632
error->file = file;
633+
error->function = function;
624634
error->line_number = line;
625635
error->error_msg = error_msg;
626636

@@ -637,6 +647,7 @@ void clar__fail(
637647
void clar__assert(
638648
int condition,
639649
const char *file,
650+
const char *function,
640651
size_t line,
641652
const char *error_msg,
642653
const char *description,
@@ -645,11 +656,12 @@ void clar__assert(
645656
if (condition)
646657
return;
647658

648-
clar__fail(file, line, error_msg, description, should_abort);
659+
clar__fail(file, function, line, error_msg, description, should_abort);
649660
}
650661

651662
void clar__assert_equal(
652663
const char *file,
664+
const char *function,
653665
size_t line,
654666
const char *err,
655667
int should_abort,
@@ -760,7 +772,7 @@ void clar__assert_equal(
760772
va_end(args);
761773

762774
if (!is_equal)
763-
clar__fail(file, line, err, buf, should_abort);
775+
clar__fail(file, function, line, err, buf, should_abort);
764776
}
765777

766778
void cl_set_cleanup(void (*cleanup)(void *), void *opaque)

tests/clar.h

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ enum cl_test_status {
1616
CL_TEST_NOTRUN,
1717
};
1818

19+
enum cl_output_format {
20+
CL_OUTPUT_CLAP,
21+
CL_OUTPUT_TAP,
22+
};
23+
1924
/** Setup clar environment */
2025
void clar_test_init(int argc, char *argv[]);
2126
int clar_test_run(void);
@@ -81,16 +86,16 @@ const char *cl_fixture_basename(const char *fixture_name);
8186
/**
8287
* Assertion macros with explicit error message
8388
*/
84-
#define cl_must_pass_(expr, desc) clar__assert((expr) >= 0, __FILE__, __LINE__, "Function call failed: " #expr, desc, 1)
85-
#define cl_must_fail_(expr, desc) clar__assert((expr) < 0, __FILE__, __LINE__, "Expected function call to fail: " #expr, desc, 1)
86-
#define cl_assert_(expr, desc) clar__assert((expr) != 0, __FILE__, __LINE__, "Expression is not true: " #expr, desc, 1)
89+
#define cl_must_pass_(expr, desc) clar__assert((expr) >= 0, __FILE__, __func__, __LINE__, "Function call failed: " #expr, desc, 1)
90+
#define cl_must_fail_(expr, desc) clar__assert((expr) < 0, __FILE__, __func__, __LINE__, "Expected function call to fail: " #expr, desc, 1)
91+
#define cl_assert_(expr, desc) clar__assert((expr) != 0, __FILE__, __func__, __LINE__, "Expression is not true: " #expr, desc, 1)
8792

8893
/**
8994
* Check macros with explicit error message
9095
*/
91-
#define cl_check_pass_(expr, desc) clar__assert((expr) >= 0, __FILE__, __LINE__, "Function call failed: " #expr, desc, 0)
92-
#define cl_check_fail_(expr, desc) clar__assert((expr) < 0, __FILE__, __LINE__, "Expected function call to fail: " #expr, desc, 0)
93-
#define cl_check_(expr, desc) clar__assert((expr) != 0, __FILE__, __LINE__, "Expression is not true: " #expr, desc, 0)
96+
#define cl_check_pass_(expr, desc) clar__assert((expr) >= 0, __FILE__, __func__, __LINE__, "Function call failed: " #expr, desc, 0)
97+
#define cl_check_fail_(expr, desc) clar__assert((expr) < 0, __FILE__, __func__, __LINE__, "Expected function call to fail: " #expr, desc, 0)
98+
#define cl_check_(expr, desc) clar__assert((expr) != 0, __FILE__, __func__, __LINE__, "Expression is not true: " #expr, desc, 0)
9499

95100
/**
96101
* Assertion macros with no error message
@@ -109,38 +114,39 @@ const char *cl_fixture_basename(const char *fixture_name);
109114
/**
110115
* Forced failure/warning
111116
*/
112-
#define cl_fail(desc) clar__fail(__FILE__, __LINE__, "Test failed.", desc, 1)
113-
#define cl_warning(desc) clar__fail(__FILE__, __LINE__, "Warning during test execution:", desc, 0)
117+
#define cl_fail(desc) clar__fail(__FILE__, __func__, __LINE__, "Test failed.", desc, 1)
118+
#define cl_warning(desc) clar__fail(__FILE__, __func__, __LINE__, "Warning during test execution:", desc, 0)
114119

115120
#define cl_skip() clar__skip()
116121

117122
/**
118123
* Typed assertion macros
119124
*/
120-
#define cl_assert_equal_s(s1,s2) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #s1 " != " #s2, 1, "%s", (s1), (s2))
121-
#define cl_assert_equal_s_(s1,s2,note) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #s1 " != " #s2 " (" #note ")", 1, "%s", (s1), (s2))
125+
#define cl_assert_equal_s(s1,s2) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #s1 " != " #s2, 1, "%s", (s1), (s2))
126+
#define cl_assert_equal_s_(s1,s2,note) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #s1 " != " #s2 " (" #note ")", 1, "%s", (s1), (s2))
122127

123-
#define cl_assert_equal_wcs(wcs1,wcs2) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2, 1, "%ls", (wcs1), (wcs2))
124-
#define cl_assert_equal_wcs_(wcs1,wcs2,note) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%ls", (wcs1), (wcs2))
128+
#define cl_assert_equal_wcs(wcs1,wcs2) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2, 1, "%ls", (wcs1), (wcs2))
129+
#define cl_assert_equal_wcs_(wcs1,wcs2,note) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%ls", (wcs1), (wcs2))
125130

126-
#define cl_assert_equal_strn(s1,s2,len) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #s1 " != " #s2, 1, "%.*s", (s1), (s2), (int)(len))
127-
#define cl_assert_equal_strn_(s1,s2,len,note) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #s1 " != " #s2 " (" #note ")", 1, "%.*s", (s1), (s2), (int)(len))
131+
#define cl_assert_equal_strn(s1,s2,len) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #s1 " != " #s2, 1, "%.*s", (s1), (s2), (int)(len))
132+
#define cl_assert_equal_strn_(s1,s2,len,note) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #s1 " != " #s2 " (" #note ")", 1, "%.*s", (s1), (s2), (int)(len))
128133

129-
#define cl_assert_equal_wcsn(wcs1,wcs2,len) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2, 1, "%.*ls", (wcs1), (wcs2), (int)(len))
130-
#define cl_assert_equal_wcsn_(wcs1,wcs2,len,note) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%.*ls", (wcs1), (wcs2), (int)(len))
134+
#define cl_assert_equal_wcsn(wcs1,wcs2,len) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2, 1, "%.*ls", (wcs1), (wcs2), (int)(len))
135+
#define cl_assert_equal_wcsn_(wcs1,wcs2,len,note) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%.*ls", (wcs1), (wcs2), (int)(len))
131136

132-
#define cl_assert_equal_i(i1,i2) clar__assert_equal(__FILE__,__LINE__,#i1 " != " #i2, 1, "%d", (int)(i1), (int)(i2))
133-
#define cl_assert_equal_i_(i1,i2,note) clar__assert_equal(__FILE__,__LINE__,#i1 " != " #i2 " (" #note ")", 1, "%d", (i1), (i2))
134-
#define cl_assert_equal_i_fmt(i1,i2,fmt) clar__assert_equal(__FILE__,__LINE__,#i1 " != " #i2, 1, (fmt), (int)(i1), (int)(i2))
137+
#define cl_assert_equal_i(i1,i2) clar__assert_equal(__FILE__,__func__,__LINE__,#i1 " != " #i2, 1, "%d", (int)(i1), (int)(i2))
138+
#define cl_assert_equal_i_(i1,i2,note) clar__assert_equal(__FILE__,__func__,__LINE__,#i1 " != " #i2 " (" #note ")", 1, "%d", (i1), (i2))
139+
#define cl_assert_equal_i_fmt(i1,i2,fmt) clar__assert_equal(__FILE__,__func__,__LINE__,#i1 " != " #i2, 1, (fmt), (int)(i1), (int)(i2))
135140

136-
#define cl_assert_equal_b(b1,b2) clar__assert_equal(__FILE__,__LINE__,#b1 " != " #b2, 1, "%d", (int)((b1) != 0),(int)((b2) != 0))
141+
#define cl_assert_equal_b(b1,b2) clar__assert_equal(__FILE__,__func__,__LINE__,#b1 " != " #b2, 1, "%d", (int)((b1) != 0),(int)((b2) != 0))
137142

138-
#define cl_assert_equal_p(p1,p2) clar__assert_equal(__FILE__,__LINE__,"Pointer mismatch: " #p1 " != " #p2, 1, "%p", (p1), (p2))
143+
#define cl_assert_equal_p(p1,p2) clar__assert_equal(__FILE__,__func__,__LINE__,"Pointer mismatch: " #p1 " != " #p2, 1, "%p", (p1), (p2))
139144

140145
void clar__skip(void);
141146

142147
void clar__fail(
143148
const char *file,
149+
const char *func,
144150
size_t line,
145151
const char *error,
146152
const char *description,
@@ -149,13 +155,15 @@ void clar__fail(
149155
void clar__assert(
150156
int condition,
151157
const char *file,
158+
const char *func,
152159
size_t line,
153160
const char *error,
154161
const char *description,
155162
int should_abort);
156163

157164
void clar__assert_equal(
158165
const char *file,
166+
const char *func,
159167
size_t line,
160168
const char *err,
161169
int should_abort,

0 commit comments

Comments
 (0)