]> Savannah Git Hosting - gnulib.git/commitdiff
localename: Avoid test failure on some glibc systems.
authorBruno Haible <bruno@clisp.org>
Sun, 16 Dec 2018 20:31:15 +0000 (21:31 +0100)
committerBruno Haible <bruno@clisp.org>
Sun, 16 Dec 2018 20:31:15 +0000 (21:31 +0100)
* tests/test-localename.c (test_locale_name, test_locale_name_posix):
Unset environment variables that might disturb the first setlocale call,
and verify that this setlocale call succeeds.

ChangeLog
tests/test-localename.c

index 1f612a463d52272efd22011777e3477ca3121861..9cf2c275a31b754b7e98fdb7075464d27a53f0c7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2018-12-16  Bruno Haible  <bruno@clisp.org>
+
+       localename: Avoid test failure on some glibc systems.
+       * tests/test-localename.c (test_locale_name, test_locale_name_posix):
+       Unset environment variables that might disturb the first setlocale call,
+       and verify that this setlocale call succeeds.
+
 2018-12-16  Assaf Gordon  <assafgordon@gmail.com>
 
        random: Fix build error on native Windows (regression from 2018-06-21).
index 8c3c4254b0796c47ce6078fc25cb27e09547ad1b..2b91782f71c2d99fe04f1aa8657a03648262e4e9 100644 (file)
@@ -67,6 +67,7 @@ static struct { int cat; int mask; const char *string; } const categories[] =
 static void
 test_locale_name (void)
 {
+  const char *ret;
   const char *name;
 
   /* Check that gl_locale_name returns non-NULL.  */
@@ -85,7 +86,21 @@ test_locale_name (void)
   unsetenv ("LC_MESSAGES");
   unsetenv ("LC_NUMERIC");
   unsetenv ("LANG");
-  setlocale (LC_ALL, "");
+  /* Need also to unset all environment variables that specify standard or
+     non-standard locale categories.  Otherwise, on glibc systems, when some
+     of these variables are set and reference a nonexistent locale, the
+     setlocale (LC_ALL, "") call below would fail.  */
+  unsetenv ("LC_COLLATE");
+  unsetenv ("LC_MONETARY");
+  unsetenv ("LC_TIME");
+  unsetenv ("LC_ADDRESS");
+  unsetenv ("LC_IDENTIFICATION");
+  unsetenv ("LC_MEASUREMENT");
+  unsetenv ("LC_NAME");
+  unsetenv ("LC_PAPER");
+  unsetenv ("LC_TELEPHONE");
+  ret = setlocale (LC_ALL, "");
+  ASSERT (ret != NULL);
   ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
                   gl_locale_name_default ()) == 0);
   ASSERT (strcmp (gl_locale_name (LC_NUMERIC, "LC_NUMERIC"),
@@ -496,6 +511,7 @@ test_locale_name_thread (void)
 static void
 test_locale_name_posix (void)
 {
+  const char *ret;
   const char *name;
 
   /* Get into a defined state,  */
@@ -511,7 +527,21 @@ test_locale_name_posix (void)
   unsetenv ("LC_MESSAGES");
   unsetenv ("LC_NUMERIC");
   unsetenv ("LANG");
-  setlocale (LC_ALL, "");
+  /* Need also to unset all environment variables that specify standard or
+     non-standard locale categories.  Otherwise, on glibc systems, when some
+     of these variables are set and reference a nonexistent locale, the
+     setlocale (LC_ALL, "") call below would fail.  */
+  unsetenv ("LC_COLLATE");
+  unsetenv ("LC_MONETARY");
+  unsetenv ("LC_TIME");
+  unsetenv ("LC_ADDRESS");
+  unsetenv ("LC_IDENTIFICATION");
+  unsetenv ("LC_MEASUREMENT");
+  unsetenv ("LC_NAME");
+  unsetenv ("LC_PAPER");
+  unsetenv ("LC_TELEPHONE");
+  ret = setlocale (LC_ALL, "");
+  ASSERT (ret != NULL);
   name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
   ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
   name = gl_locale_name_posix (LC_NUMERIC, "LC_NUMERIC");