+2024-08-25 Bruno Haible <bruno@clisp.org>
+
+ nstrftime tests: Test in the UTF-8 environment on native Windows.
+ Prompted by <https://debbugs.gnu.org/79296>.
+ * tests/test-nstrftime-w32utf8.sh: New file.
+ * tests/test-nstrftime-w32utf8.c: New file.
+ * modules/nstrftime-tests (Files): Add them. Add windows-utf8.rc,
+ windows-utf8.manifest, m4/windows-rc.m4.
+ (configure.ac): Invoke gl_WINDOWS_RC.
+ (Makeile.am): Arrange to build test-nstrftime-w32utf8 and
+ run test-nstrftime-w32utf8.sh.
+
2024-08-23 Bruno Haible <bruno@clisp.org>
gen-uni-tables: Update a comment.
tests/test-nstrftime-TH.c
tests/test-nstrftime-IR.c
tests/test-nstrftime-ET.c
+tests/test-nstrftime-w32utf8.sh
+tests/test-nstrftime-w32utf8.c
+tests/windows-utf8.rc
+tests/windows-utf8.manifest
tests/macros.h
m4/locale-fr.m4
m4/codeset.m4
m4/musl.m4
+m4/windows-rc.m4
Depends-on:
atoll
gt_LOCALE_FR
gt_LOCALE_FR_UTF8
gl_MUSL_LIBC
+gl_WINDOWS_RC
Makefile.am:
TESTS += \
test_nstrftime_TH_LDADD = $(LDADD) $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD)
test_nstrftime_IR_LDADD = $(LDADD) $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD)
test_nstrftime_ET_LDADD = $(LDADD) $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD)
+
+if OS_IS_NATIVE_WINDOWS
+TESTS += test-nstrftime-w32utf8.sh
+noinst_PROGRAMS += test-nstrftime-w32utf8
+test_nstrftime_w32utf8_LDADD = $(LDADD) test-nstrftime-windows-utf8.res $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD)
+test-nstrftime-windows-utf8.res : $(srcdir)/windows-utf8.rc
+ $(WINDRES) -i $(srcdir)/windows-utf8.rc -o test-nstrftime-windows-utf8.res --output-format=coff
+MOSTLYCLEANFILES += test-nstrftime-windows-utf8.res
+endif
--- /dev/null
+/* Test of nstrftime on native Windows in the UTF-8 environment.
+ Copyright (C) 2025 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>, 2025. */
+
+#include <config.h>
+
+/* Specification. */
+#include "strftime.h"
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "macros.h"
+
+int
+main (int argc, char *argv[])
+{
+#ifdef _UCRT
+ if (setlocale (LC_ALL, "") == NULL)
+ return 1;
+
+ /* Test that MB_CUR_MAX works as expected in a UTF-8 locale. */
+ ASSERT (MB_CUR_MAX >= 4);
+
+ time_t t = 1738750272; /* 2025-02-05 10:11:12 */
+ struct tm *tm = gmtime (&t);
+ int ns = 123456789;
+ char buf[100];
+
+ if (strcmp (argv[1], "1") == 0)
+ {
+ /* Test a non-ASCII French month name. */
+ size_t n = nstrftime (buf, sizeof (buf), "%B", tm, NULL, ns);
+ ASSERT (n > 0);
+ printf ("buf = |%s|\n", buf);
+ fflush (stdout);
+ ASSERT (STREQ (buf, "f\303\251vrier")); /* "février" */
+
+ return test_exit_status;
+ }
+
+ if (strcmp (argv[1], "2") == 0)
+ {
+ /* Test a non-ASCII Japanese weekday name. */
+ size_t n = nstrftime (buf, sizeof (buf), "%A", tm, NULL, ns);
+ ASSERT (n > 0);
+ printf ("buf = |%s|\n", buf);
+ fflush (stdout);
+ ASSERT (STREQ (buf, "\346\260\264\346\233\234\346\227\245")); /* "水曜日" */
+
+ return test_exit_status;
+ }
+
+ return test_exit_status + 2;
+#else
+ fputs ("Skipping test: not using the UCRT runtime\n", stderr);
+ return 77;
+#endif
+}