[glib] tests: Fix GDateTime format tests on non-English locales



commit a0c7f85437093b073b3e3b2c9cb337065b6ea896
Author: Ting-Wei Lan <lantw src gnome org>
Date:   Sun Apr 29 02:04:01 2018 +0800

    tests: Fix GDateTime format tests on non-English locales
    
    It seems that the test expects g_date_time_format to return formatted
    results in English, and there is no setlocale (LC_ALL, "") call in the
    file so the test does run in the default C locale. However, gettext
    seems to read the value of LC_MESSAGES from the environment by itself.
    Even if the value of LC_MESSAGES locale is C because of not calling
    setlocale, gettext still translates the name of the month according to
    the LC_MESSAGES environment variable, causing g_date_time_format_locale
    to fail on the "%b" test case because it cannot convert UTF-8 text
    returned by get_month_name_with_day to ASCII.
    
    To avoid the test failure, we set the LC_MESSAGES environment variable
    to C before format tests and restore it at the end of the function.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=795165

 glib/tests/gdatetime.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
---
diff --git a/glib/tests/gdatetime.c b/glib/tests/gdatetime.c
index b102205b9..79a131ab5 100644
--- a/glib/tests/gdatetime.c
+++ b/glib/tests/gdatetime.c
@@ -1324,6 +1324,7 @@ test_GDateTime_printf (void)
  * that long, and it will cause the test to fail if dst isn't big
  * enough.
  */
+  gchar *old_lc_messages;
   gchar dst[64];
   struct tm tt;
   time_t t;
@@ -1353,6 +1354,9 @@ GDateTime *__dt = g_date_time_new_local (2009, 10, 24, 0, 0, 0);\
   g_date_time_unref (dt);                                       \
   g_free (p);                                   } G_STMT_END
 
+  old_lc_messages = g_strdup (g_getenv ("LC_MESSAGES"));
+  g_setenv ("LC_MESSAGES", "C", TRUE);
+
   /*
    * This is a little helper to make sure we can compare timezones to
    * that of the generated timezone.
@@ -1420,6 +1424,12 @@ GDateTime *__dt = g_date_time_new_local (2009, 10, 24, 0, 0, 0);\
 #elif defined G_OS_WIN32
   TEST_PRINTF ("%Z", "Pacific Standard Time");
 #endif
+
+  if (old_lc_messages != NULL)
+    g_setenv ("LC_MESSAGES", old_lc_messages, TRUE);
+  else
+    g_unsetenv ("LC_MESSAGES");
+  g_free (old_lc_messages);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]