From: Bruno Haible <bruno@clisp.org>
Date: Thu, 23 May 2024 21:58:06 +0000 (+0200)
Subject: mbrtoc32: Strengthen tests.
X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=765ab42d8baeb2bf9b6ff242809df4c064a576bf;p=gnulib.git

mbrtoc32: Strengthen tests.

* tests/test-mbrtoc32.c (main): Add tests for one-by-one input in the
UTF-8 and GB18030 encodings.
---

diff --git a/ChangeLog b/ChangeLog
index cfe2da79ae..25e150a59a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2024-05-23  Bruno Haible  <bruno@clisp.org>
 
+	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;
       }