From 4545825d5a650954c4885460b719e0978f8a214d Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 12 Jan 2023 11:48:27 +0100 Subject: [PATCH 1/2] error: Add tests. * tests/test-error.sh: New file. * tests/test-error.c: New file. * modules/error-tests: New file. --- ChangeLog | 7 ++++ modules/error-tests | 12 +++++++ tests/test-error.c | 84 +++++++++++++++++++++++++++++++++++++++++++++ tests/test-error.sh | 36 +++++++++++++++++++ 4 files changed, 139 insertions(+) create mode 100644 modules/error-tests create mode 100644 tests/test-error.c create mode 100755 tests/test-error.sh diff --git a/ChangeLog b/ChangeLog index da069889d2..841d6e818e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2023-01-12 Bruno Haible + + error: Add tests. + * tests/test-error.sh: New file. + * tests/test-error.c: New file. + * modules/error-tests: New file. + 2023-01-11 Bruno Haible xstrtol-error: Improve comments. diff --git a/modules/error-tests b/modules/error-tests new file mode 100644 index 0000000000..c0cef0f9b6 --- /dev/null +++ b/modules/error-tests @@ -0,0 +1,12 @@ +Files: +tests/test-error.sh +tests/test-error.c +tests/macros.h + +Depends-on: + +configure.ac: + +Makefile.am: +TESTS += test-error.sh +check_PROGRAMS += test-error diff --git a/tests/test-error.c b/tests/test-error.c new file mode 100644 index 0000000000..67600d34f9 --- /dev/null +++ b/tests/test-error.c @@ -0,0 +1,84 @@ +/* Test of error.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 "error.h" + +#include + +#include "macros.h" + +/* Custom function to not show the program name in error messages. */ +static void +print_no_progname (void) +{ +} + +int +main (int argc, char *argv[]) +{ + /* Test error() function with zero STATUS and zero ERRNUM. */ + error (0, 0, "bummer"); + /* With format string arguments. */ + errno = EINVAL; /* should be ignored */ + error (0, 0, "Zonk %d%d%d is too large", 1, 2, 3); + /* With non-ASCII characters. */ + error (0, 0, "Pokémon started"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 3); + + /* Test error_at_line() function with zero STATUS and zero ERRNUM. */ + error_at_line (0, 0, "d1/foo.c", 10, "invalid blub"); + error_at_line (0, 0, "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; + error_at_line (0, 0, "d1/foo.c", 10, "unsupported glink"); + /* Another line number. */ + error_at_line (0, 0, "d1/foo.c", 13, "invalid brump"); + /* Another file name. */ + error_at_line (0, 0, "d2/foo.c", 13, "unsupported flinge"); + /* Same file name and same line number => message not shown. */ + error_at_line (0, 0, "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; + error (0, 0, "hammer"); + error (0, 0, "boing %d%d%d is too large", 1, 2, 3); + error_at_line (0, 0, "d2/bar.c", 11, "bark too loud"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 11); + error_print_progname = NULL; + + /* Test error() function with nonzero ERRNUM. */ + errno = EINVAL; /* should be ignored */ + error (0, EACCES, "can't steal"); + /* Verify error_message_count. */ + ASSERT (error_message_count == 12); + + /* Test error() function with nonzero STATUS. */ + error (4, 0, "fatal error"); + + return 0; +} diff --git a/tests/test-error.sh b/tests/test-error.sh new file mode 100755 index 0000000000..d173e183f4 --- /dev/null +++ b/tests/test-error.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# Test of the 'error' module. + +. "${srcdir=.}/init.sh"; path_prepend_ . + +${CHECKER} test-error${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-error[.ex]*:,test-error:,' > err2 || Exit 1 + +# Verify the stderr output. +compare - err2 <<\EOF || Exit 1 +test-error: bummer +test-error: Zonk 123 is too large +test-error: Pokémon started +test-error:d1/foo.c:10: invalid blub +test-error:d1/foo.c:10: invalid blarn +test-error:d1/foo.c:10: unsupported glink +test-error:d1/foo.c:13: invalid brump +test-error:d2/foo.c:13: unsupported flinge +hammer +boing 123 is too large +d2/bar.c:11: bark too loud +test-error: can't steal: Permission denied +test-error: fatal error +EOF + +# Verify the stdout output. +test -s out && Exit 1 + +Exit 0 -- 2.34.1