From 765ab42d8baeb2bf9b6ff242809df4c064a576bf Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 23 May 2024 23:58:06 +0200 Subject: [PATCH] mbrtoc32: Strengthen tests. * tests/test-mbrtoc32.c (main): Add tests for one-by-one input in the UTF-8 and GB18030 encodings. --- ChangeLog | 4 ++++ tests/test-mbrtoc32.c | 54 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/ChangeLog b/ChangeLog index cfe2da79ae..25e150a59a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2024-05-23 Bruno Haible + mbrtoc32: Strengthen tests. + * tests/test-mbrtoc32.c (main): Add tests for one-by-one input in the + UTF-8 and GB18030 encodings. + mbrtoc32: Work around bug in Cygwin 3.5.3. * m4/mbrtoc32.m4 (gl_MBRTOC32_UTF8_LOCALE): New macro. (gl_FUNC_MBRTOC32): Invoke it. If mbrtoc32 has this bug, define diff --git a/tests/test-mbrtoc32.c b/tests/test-mbrtoc32.c index 83312ee4f7..68c601e2e5 100644 --- a/tests/test-mbrtoc32.c +++ b/tests/test-mbrtoc32.c @@ -291,6 +291,33 @@ main (int argc, char *argv[]) ASSERT (wc == '!'); ASSERT (mbsinit (&state)); } + { /* \360\237\220\203 = U+0001F403 */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\360", 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\237", 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\220", 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\203", 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 0x0001F403); + ASSERT (mbsinit (&state)); + } return test_exit_status; case '4': @@ -434,6 +461,33 @@ main (int argc, char *argv[]) ASSERT (wc == '!'); ASSERT (mbsinit (&state)); } + { /* \224\071\311\067 = U+0001F403 */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\224", 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\071", 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\311", 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (char32_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, "\067", 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 0x0001F403); + ASSERT (mbsinit (&state)); + } return test_exit_status; } -- 2.39.5