From fbd3fbba93628b8e747a53d49ad55e8436ad201d Mon Sep 17 00:00:00 2001 From: Bruno Haible <bruno@clisp.org> Date: Wed, 13 Sep 2023 16:31:56 +0200 Subject: [PATCH] mbfile: Add tests. * tests/test-mbfile.sh: New file. * tests/test-mbfile.c: New file. * modules/mbfile-tests: New file. --- ChangeLog | 5 ++++ modules/mbfile-tests | 14 ++++++++++ tests/test-mbfile.c | 66 ++++++++++++++++++++++++++++++++++++++++++++ tests/test-mbfile.sh | 3 ++ 4 files changed, 88 insertions(+) create mode 100644 modules/mbfile-tests create mode 100644 tests/test-mbfile.c create mode 100755 tests/test-mbfile.sh diff --git a/ChangeLog b/ChangeLog index 10be2e2aad..1761f7a9bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-09-13 Bruno Haible <bruno@clisp.org> + mbfile: Add tests. + * tests/test-mbfile.sh: New file. + * tests/test-mbfile.c: New file. + * modules/mbfile-tests: New file. + mbfile: Fix major bug (regression 2023-07-04). Reported by Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org> in <https://lists.gnu.org/archive/html/bug-gnulib/2023-09/msg00088.html>. diff --git a/modules/mbfile-tests b/modules/mbfile-tests new file mode 100644 index 0000000000..246702fc04 --- /dev/null +++ b/modules/mbfile-tests @@ -0,0 +1,14 @@ +Files: +tests/test-mbfile.sh +tests/test-mbfile.c +tests/macros.h + +Depends-on: +setlocale + +configure.ac: + +Makefile.am: +TESTS += test-mbfile.sh +check_PROGRAMS += test-mbfile +test_mbfile_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) diff --git a/tests/test-mbfile.c b/tests/test-mbfile.c new file mode 100644 index 0000000000..0462390454 --- /dev/null +++ b/tests/test-mbfile.c @@ -0,0 +1,66 @@ +/* Test of multibyte character I/O. + 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 <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023. */ + +#include <config.h> + +#include "mbfile.h" + +#include <locale.h> + +#include "macros.h" + +int +main () +{ + if (setlocale (LC_ALL, "en_US.UTF-8") == NULL) + { + fprintf (stderr, "Skipping test: English Unicode locale is not installed\n"); + return 77; + } + + mb_file_t mbstdin; + mbf_init (mbstdin, stdin); + /* The input consists of 4 UTF-8 characters: + '$', U+00A5, U+20AC, U+0001F403. */ + mbf_char_t next; + + mbf_getc (next, mbstdin); + ASSERT (!mb_iseof (next)); + ASSERT (mb_len (next) == 1); + ASSERT (mb_iseq (next, 0x0024)); + + mbf_getc (next, mbstdin); + ASSERT (!mb_iseof (next)); + ASSERT (mb_len (next) == 2); + ASSERT (mb_iseq (next, 0x00A5)); + + mbf_getc (next, mbstdin); + ASSERT (!mb_iseof (next)); + ASSERT (mb_len (next) == 3); + ASSERT (mb_iseq (next, 0x20AC)); + + mbf_getc (next, mbstdin); + ASSERT (!mb_iseof (next)); + ASSERT (mb_len (next) == 4); + ASSERT (mb_iseq (next, 0x1F403)); + + mbf_getc (next, mbstdin); + ASSERT (mb_iseof (next)); + + return 0; +} diff --git a/tests/test-mbfile.sh b/tests/test-mbfile.sh new file mode 100755 index 0000000000..f2fa91239b --- /dev/null +++ b/tests/test-mbfile.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +printf '$\302\245\342\202\254\360\237\220\203' | ${CHECKER} ./test-mbfile${EXEEXT} -- 2.39.5