X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-duplocale.c;h=26d74edab1bb32813cd91e44343285adaf80779a;hb=cd56634a4a8179fd5a4419fbb3e27211b042ab1c;hp=ce0899bc46118138c6a2e93d963e5ef253a16a68;hpb=2430ab9f7ed304cbb057fd189aead807379345e3;p=gnulib.git diff --git a/tests/test-duplocale.c b/tests/test-duplocale.c index ce0899bc4..26d74edab 100644 --- a/tests/test-duplocale.c +++ b/tests/test-duplocale.c @@ -1,5 +1,5 @@ /* Test of duplicating a locale object. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2014 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 @@ -22,23 +22,15 @@ #if HAVE_DUPLOCALE +#include "signature.h" +SIGNATURE_CHECK (duplocale, locale_t, (locale_t)); + #include #include #include -#include #include -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) +#include "macros.h" struct locale_dependent_values { @@ -51,10 +43,10 @@ static void get_locale_dependent_values (struct locale_dependent_values *result) { strfmon (result->monetary, sizeof (result->monetary), - "%n", 123.75); + "%n", 123.75); /* result->monetary is usually "$123.75" */ snprintf (result->numeric, sizeof (result->numeric), - "%g", 3.5); + "%g", 3.5); /* result->numeric is usually "3,5" */ strcpy (result->time, nl_langinfo (MON_1)); /* result->time is usually "janvier" */ @@ -64,7 +56,8 @@ int main () { struct locale_dependent_values expected_results; - locale_t mixed; + locale_t mixed1; + locale_t mixed2; /* Set up a locale which is a mix between different system locales. */ setlocale (LC_ALL, "en_US.UTF-8"); @@ -73,18 +66,40 @@ main () get_locale_dependent_values (&expected_results); /* Save the locale in a locale_t object. */ - mixed = duplocale (LC_GLOBAL_LOCALE); - ASSERT (mixed != NULL); + mixed1 = duplocale (LC_GLOBAL_LOCALE); + ASSERT (mixed1 != NULL); + + /* Use a per-thread locale. */ + uselocale (newlocale (LC_ALL_MASK, "es_ES.UTF-8", NULL)); + + /* Save the locale in a locale_t object again. */ + mixed2 = duplocale (LC_GLOBAL_LOCALE); + ASSERT (mixed2 != NULL); /* Set up a default locale. */ setlocale (LC_ALL, "C"); + uselocale (LC_GLOBAL_LOCALE); { struct locale_dependent_values c_results; get_locale_dependent_values (&c_results); } - /* Now use the saved locale again. */ - uselocale (mixed); + /* Now use the saved locale mixed1 again. */ + setlocale (LC_ALL, "C"); + uselocale (LC_GLOBAL_LOCALE); + uselocale (mixed1); + { + struct locale_dependent_values results; + get_locale_dependent_values (&results); + ASSERT (strcmp (results.monetary, expected_results.monetary) == 0); + ASSERT (strcmp (results.numeric, expected_results.numeric) == 0); + ASSERT (strcmp (results.time, expected_results.time) == 0); + } + + /* Now use the saved locale mixed2 again. */ + setlocale (LC_ALL, "C"); + uselocale (LC_GLOBAL_LOCALE); + uselocale (mixed2); { struct locale_dependent_values results; get_locale_dependent_values (&results); @@ -98,9 +113,12 @@ main () #else +#include + int main () { + fprintf (stderr, "Skipping test: function duplocale not available\n"); return 77; }