From c621f9452f0a4a16a52295ee867cae2b0461b949 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 12 Jan 2023 12:34:43 +0100 Subject: [PATCH 2/2] verror: Add tests. * tests/test-verror.sh: New file, based on tests/test-error.sh. * tests/test-verror.c: New file, based on tests/test-error.c. * modules/verror-tests: New file. --- ChangeLog | 7 +++ modules/verror-tests | 12 ++++ tests/test-verror.c | 127 +++++++++++++++++++++++++++++++++++++++++++ tests/test-verror.sh | 36 ++++++++++++ 4 files changed, 182 insertions(+) create mode 100644 modules/verror-tests create mode 100644 tests/test-verror.c create mode 100755 tests/test-verror.sh diff --git a/ChangeLog b/ChangeLog index 841d6e818e..07f525af08 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2023-01-12 Bruno Haible + + verror: Add tests. + * tests/test-verror.sh: New file, based on tests/test-error.sh. + * tests/test-verror.c: New file, based on tests/test-error.c. + * modules/verror-tests: New file. + 2023-01-12 Bruno Haible error: Add tests. diff --git a/modules/verror-tests b/modules/verror-tests new file mode 100644 index 0000000000..e02309658a --- /dev/null +++ b/modules/verror-tests @@ -0,0 +1,12 @@ +Files: +tests/test-verror.sh +tests/test-verror.c +tests/macros.h + +Depends-on: + +configure.ac: + +Makefile.am: +TESTS += test-verror.sh +check_PROGRAMS += test-verror diff --git a/tests/test-verror.c b/tests/test-verror.c new file mode 100644 index 0000000000..c5a62cddec --- /dev/null +++ b/tests/test-verror.c @@ -0,0 +1,127 @@ +/* Test of verror.h functions. + Copyright (C) 2023 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2023. */ + +#include + +#include "verror.h" + +#include +#include + +#include "error.h" +#include "macros.h" + +/* Custom function to not show the program name in error messages. */ +static void +print_no_progname (void) +{ +} + +static void +test_zero (const char *format, ...) +{ + va_list args; + + va_start (args, format); + verror (0, 0, format, args); + va_end (args); +} + +static void +test_zero_at_line (const char *filename, unsigned int lineno, + const char *format, ...) +{ + va_list args; + + va_start (args, format); + verror_at_line (0, 0, filename, lineno, format, args); + va_end (args); +} + +static void +test_errnum (const char *format, ...) +{ + va_list args; + + va_start (args, format); + verror (0, EACCES, format, args); + va_end (args); +} + +static void +test_fatal (const char *format, ...) +{ + va_list args; + + va_start (args, format); + verror (4, 0, format, args); + va_end (args); +} + +int +main (int argc, char *argv[]) +{ + /* Test verror() function with zero STATUS and zero ERRNUM. */ + test_zero ("bummer"); + /* With format string arguments. */ + errno = EINVAL; /* should be ignored */ + test_zero ("Zonk %d%d%d is too large", 1, 2, 3); + /* With non-ASCII characters. */ + test_zero ("Pokémon started"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 3); + + /* Test verror_at_line() function with zero STATUS and zero ERRNUM. */ + test_zero_at_line ("d1/foo.c", 10, "invalid blub"); + test_zero_at_line ("d1/foo.c", 10, "invalid blarn"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 5); + + /* Test error_one_per_line. */ + error_one_per_line = 1; + test_zero_at_line ("d1/foo.c", 10, "unsupported glink"); + /* Another line number. */ + test_zero_at_line ("d1/foo.c", 13, "invalid brump"); + /* Another file name. */ + test_zero_at_line ("d2/foo.c", 13, "unsupported flinge"); + /* Same file name and same line number => message not shown. */ + test_zero_at_line ("d2/foo.c", 13, "invalid bark"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 8); + error_one_per_line = 0; + + /* Test error_print_progname. */ + error_print_progname = print_no_progname; + test_zero ("hammer"); + test_zero ("boing %d%d%d is too large", 1, 2, 3); + test_zero_at_line ("d2/bar.c", 11, "bark too loud"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 11); + error_print_progname = NULL; + + /* Test verror() function with nonzero ERRNUM. */ + errno = EINVAL; /* should be ignored */ + test_errnum ("can't steal"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 12); + + /* Test verror() function with nonzero STATUS. */ + test_fatal ("fatal error"); + + return 0; +} diff --git a/tests/test-verror.sh b/tests/test-verror.sh new file mode 100755 index 0000000000..3652437e94 --- /dev/null +++ b/tests/test-verror.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# Test of the 'verror' module. + +. "${srcdir=.}/init.sh"; path_prepend_ . + +${CHECKER} test-verror${EXEEXT} > out 2> err +# Verify the exit code. +case $? in + 4) ;; + *) Exit 1;; +esac + +# Normalize the stderr output on Windows platforms. +tr -d '\015' < err | sed 's,.*test-verror[.ex]*:,test-verror:,' > err2 || Exit 1 + +# Verify the stderr output. +compare - err2 <<\EOF || Exit 1 +test-verror: bummer +test-verror: Zonk 123 is too large +test-verror: Pokémon started +test-verror:d1/foo.c:10: invalid blub +test-verror:d1/foo.c:10: invalid blarn +test-verror:d1/foo.c:10: unsupported glink +test-verror:d1/foo.c:13: invalid brump +test-verror:d2/foo.c:13: unsupported flinge +hammer +boing 123 is too large +d2/bar.c:11: bark too loud +test-verror: can't steal: Permission denied +test-verror: fatal error +EOF + +# Verify the stdout output. +test -s out && Exit 1 + +Exit 0 -- 2.34.1