diff options
author | 2021-02-09 05:12:49 +0200 | |
---|---|---|
committer | 2021-02-09 05:12:49 +0200 | |
commit | a5336d82eaee1ea72053a7d24c841f631fc48892 (patch) | |
tree | 1b84a796f230e5d7229b05c1ab74b97b1e1853ad /test/diagnostic.c | |
parent | b23b285aba5c9482fbd8e4dc46df7ddf3b306df4 (diff) | |
download | librin-a5336d82eaee1ea72053a7d24c841f631fc48892.tar.gz librin-a5336d82eaee1ea72053a7d24c841f631fc48892.tar.bz2 librin-a5336d82eaee1ea72053a7d24c841f631fc48892.zip |
diagnostic: now with line numbers and filenames!
Signed-off-by: Gediminas Jakutis <gediminas@varciai.lt>
Diffstat (limited to 'test/diagnostic.c')
-rw-r--r-- | test/diagnostic.c | 72 |
1 files changed, 42 insertions, 30 deletions
diff --git a/test/diagnostic.c b/test/diagnostic.c index 866f9f2..0a5a9b1 100644 --- a/test/diagnostic.c +++ b/test/diagnostic.c @@ -28,13 +28,23 @@ #include "rin/diagnostic.h" #include "rin/compat.h" +struct static_args { + const char * const func_name; + int line_num; + const char * const file_name; + enum rin_diag_outstream chan; +}; + static int err_test(void); static int warn_test(void); static int fixme_test(void); static int info_test(void); static int format_test(void); static char *visible_newlines(const char * const in); -static int test_default_channels(const char * const in, const char * const expected, size_t i, const char *func_name, enum rin_diag_outstream chan); +static int test_default_channels(const char * const in, const char * const expected, size_t i, struct static_args args); + +static const int default_line_num = 911; +static const char default_file_name[] = "good_time.c"; int diagnostic_test(char *testname) { @@ -60,11 +70,12 @@ static int err_test(void) size_t i; int ret; + static const struct static_args args = {__func__, default_line_num, default_file_name, rin_diag_err}; static const char *in[] = {"", "test", "test number is %zu", "%zu tests ran"}; - static const char *expected[] = {"error:err_test:\n", "error:err_test:test\n", "error:err_test:test number is 3\n", "error:err_test:4 tests ran\n"}; + static const char *expected[] = {"error:good_time.c:err_test:911:\n", "error:good_time.c:err_test:911:test\n", "error:good_time.c:err_test:911:test number is 3\n", "error:good_time.c:err_test:911:4 tests ran\n"}; for (i = 0; i < arrlen(in); ++i) { - ret = test_default_channels(in[i], expected[i], i, __func__, rin_diag_err); + ret = test_default_channels(in[i], expected[i], i, args); } return ret; @@ -75,11 +86,12 @@ static int warn_test(void) size_t i; int ret; + static const struct static_args args = {__func__, default_line_num, default_file_name, rin_diag_warn}; static const char *in[] = {"", "test", "test number is %zu", "%zu tests ran"}; - static const char *expected[] = {"warning:warn_test:\n", "warning:warn_test:test\n", "warning:warn_test:test number is 3\n", "warning:warn_test:4 tests ran\n"}; + static const char *expected[] = {"warning:good_time.c:warn_test:911:\n", "warning:good_time.c:warn_test:911:test\n", "warning:good_time.c:warn_test:911:test number is 3\n", "warning:good_time.c:warn_test:911:4 tests ran\n"}; for (i = 0; i < arrlen(in); ++i) { - ret = test_default_channels(in[i], expected[i], i, __func__, rin_diag_warn); + ret = test_default_channels(in[i], expected[i], i, args); } return ret; @@ -90,11 +102,12 @@ static int fixme_test(void) size_t i; int ret; + static const struct static_args args = {__func__, default_line_num, default_file_name, rin_diag_fixme}; static const char *in[] = {"", "test", "test number is %zu", "%zu tests ran"}; - static const char *expected[] = {"fixme:fixme_test:\n", "fixme:fixme_test:test\n", "fixme:fixme_test:test number is 3\n", "fixme:fixme_test:4 tests ran\n"}; + static const char *expected[] = {"fixme:good_time.c:fixme_test:911:\n", "fixme:good_time.c:fixme_test:911:test\n", "fixme:good_time.c:fixme_test:911:test number is 3\n", "fixme:good_time.c:fixme_test:911:4 tests ran\n"}; for (i = 0; i < arrlen(in); ++i) { - ret = test_default_channels(in[i], expected[i], i, __func__, rin_diag_fixme); + ret = test_default_channels(in[i], expected[i], i, args); } return ret; @@ -105,11 +118,12 @@ static int info_test(void) size_t i; int ret; + static const struct static_args args = {__func__, default_line_num, default_file_name, rin_diag_info}; static const char *in[] = {"", "test", "test number is %zu", "%zu tests ran"}; - static const char *expected[] = {"info:info_test:\n", "info:info_test:test\n", "info:info_test:test number is 3\n", "info:info_test:4 tests ran\n"}; + static const char *expected[] = {"info:good_time.c:info_test:911:\n", "info:good_time.c:info_test:911:test\n", "info:good_time.c:info_test:911:test number is 3\n", "info:good_time.c:info_test:911:4 tests ran\n"}; for (i = 0; i < arrlen(in); ++i) { - ret = test_default_channels(in[i], expected[i], i, __func__, rin_diag_info); + ret = test_default_channels(in[i], expected[i], i, args); } return ret; @@ -119,30 +133,28 @@ static int format_test(void) { char expbuf[64]; size_t i; + enum rin_diag_outstream j; int ret; static const char *format[] = {NULL, "", "C:F:t:mn", "CCCC"}; - static const char *expected_err[] = {"error:format_test:\n", "", "error:format_test:%08lx:message is 3\n", "errorerrorerrorerror"}; - static const char *expected_warn[] = {"warning:format_test:\n", "", "warning:format_test:%08lx:message is 3\n", "warningwarningwarningwarning"}; - static const char *expected_fixme[] = {"fixme:format_test:\n", "", "fixme:format_test:%08lx:message is 3\n", "fixmefixmefixmefixme"}; - static const char *expected_info[] = {"info:format_test:\n", "", "info:format_test:%08lx:message is 3\n", "infoinfoinfoinfo"}; + static const char *expected[][4] = { + {"error:good_time.c:format_test:911:\n", "", "error:format_test:%08lx:message is 3\n", "errorerrorerrorerror"}, + {"warning:good_time.c:format_test:911:\n", "", "warning:format_test:%08lx:message is 3\n", "warningwarningwarningwarning"}, + {"fixme:good_time.c:format_test:911:\n", "", "fixme:format_test:%08lx:message is 3\n", "fixmefixmefixmefixme"}, + {"info:good_time.c:format_test:911:\n", "", "info:format_test:%08lx:message is 3\n", "infoinfoinfoinfo"} }; static const char *msg[] = {"", "", "message is %zu", ""}; + struct static_args args = {__func__, default_line_num, default_file_name, 0}; + /* `ninja test` seems to be intercepting stdout, so we cannot test the default outstream */ - for (i = 0; i < arrlen(format); ++i) { - rin_diag_format(rin_diag_err, format[i]); - rin_diag_format(rin_diag_warn, format[i]); - rin_diag_format(rin_diag_fixme, format[i]); - rin_diag_format(rin_diag_info, format[i]); - snprintf(expbuf, sizeof(expbuf), expected_err[i], (long int) gettid()); - ret = test_default_channels(msg[i], expbuf, i, __func__, rin_diag_err); - snprintf(expbuf, sizeof(expbuf), expected_warn[i], (long int) gettid()); - ret = test_default_channels(msg[i], expbuf, i, __func__, rin_diag_warn); - snprintf(expbuf, sizeof(expbuf), expected_fixme[i], (long int) gettid()); - ret = test_default_channels(msg[i], expbuf, i, __func__, rin_diag_fixme); - snprintf(expbuf, sizeof(expbuf), expected_info[i], (long int) gettid()); - ret = test_default_channels(msg[i], expbuf, i, __func__, rin_diag_info); + for (j = rin_diag_err; j <= rin_diag_info; ++j) { + args.chan = j; + for (i = 0; i < arrlen(format); ++i) { + rin_diag_format(j, format[i]); + snprintf(expbuf, sizeof(expbuf), expected[j][i], (long int) gettid()); + ret = test_default_channels(msg[i], expbuf, i, args); + } } return ret; @@ -177,11 +189,11 @@ static char *visible_newlines(const char * const in) return ret; } -static int test_default_channels(const char * const in, const char * const expected, size_t i, const char *func_name, enum rin_diag_outstream chan) +static int test_default_channels(const char * const in, const char * const expected, size_t i, struct static_args args) { char buf[64] = {0}; int ret = 0; - void (*func[])(const char *, const char *, ...) = {__rin_err, __rin_warn, __rin_fixme, __rin_info}; + void (*func[])(const char * const, int, const char * const, const char *format, ...) = {__rin_err, __rin_warn, __rin_fixme, __rin_info}; FILE *capstream; if (!(capstream = tmpfile())) { @@ -189,8 +201,8 @@ static int test_default_channels(const char * const in, const char * const expec goto fail; } - rin_diag_set_outstream(chan, capstream); - func[chan](func_name, in, i + 1); + rin_diag_set_outstream(args.chan, capstream); + func[args.chan](args.func_name, args.line_num, args.file_name, in, i + 1); rewind(capstream); if (!(fgets(buf, sizeof(buf), capstream)) && strlen(expected)) { |