1 /* Test of gl_locale_name function and its variants.
2 Copyright (C) 2007-2009 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 /* Written by Bruno Haible <bruno@clisp.org>, 2007. */
21 #include "localename.h"
28 #define ASSERT(expr) \
33 fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
40 /* Test the gl_locale_name() function. */
42 test_locale_name (void)
46 /* Check that gl_locale_name returns non-NULL. */
47 ASSERT (gl_locale_name (LC_MESSAGES, "LC_MESSAGES") != NULL);
49 /* Get into a defined state, */
50 setlocale (LC_ALL, "en_US.UTF-8");
52 uselocale (LC_GLOBAL_LOCALE);
55 /* Check that when all environment variables are unset,
56 gl_locale_name returns the default locale. */
58 unsetenv ("LC_CTYPE");
59 unsetenv ("LC_MESSAGES");
60 unsetenv ("LC_NUMERIC");
62 setlocale (LC_ALL, "");
63 ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
64 gl_locale_name_default ()) == 0);
65 ASSERT (strcmp (gl_locale_name (LC_NUMERIC, "LC_NUMERIC"),
66 gl_locale_name_default ()) == 0);
68 /* Check that an empty environment variable is treated like an unset
69 environment variable. */
71 setenv ("LC_ALL", "", 1);
72 unsetenv ("LC_CTYPE");
73 unsetenv ("LC_MESSAGES");
75 setlocale (LC_ALL, "");
76 ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
77 gl_locale_name_default ()) == 0);
80 setenv ("LC_CTYPE", "", 1);
81 unsetenv ("LC_MESSAGES");
83 setlocale (LC_ALL, "");
84 ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
85 gl_locale_name_default ()) == 0);
88 unsetenv ("LC_CTYPE");
89 setenv ("LC_MESSAGES", "", 1);
91 setlocale (LC_ALL, "");
92 ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
93 gl_locale_name_default ()) == 0);
96 unsetenv ("LC_CTYPE");
97 unsetenv ("LC_MESSAGES");
98 setenv ("LANG", "", 1);
99 setlocale (LC_ALL, "");
100 ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
101 gl_locale_name_default ()) == 0);
103 /* Check that LC_ALL overrides the others, and LANG is overridden by the
106 setenv ("LC_ALL", "C", 1);
107 unsetenv ("LC_CTYPE");
108 unsetenv ("LC_MESSAGES");
110 setlocale (LC_ALL, "");
111 ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0);
114 setenv ("LC_CTYPE", "C", 1);
115 setenv ("LC_MESSAGES", "C", 1);
117 setlocale (LC_ALL, "");
118 ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0);
121 unsetenv ("LC_CTYPE");
122 unsetenv ("LC_MESSAGES");
123 setenv ("LANG", "C", 1);
124 setlocale (LC_ALL, "");
125 ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0);
127 /* Check mixed situations. */
130 unsetenv ("LC_CTYPE");
131 setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
132 setenv ("LANG", "de_DE.UTF-8", 1);
133 if (setlocale (LC_ALL, "") != NULL)
135 name = gl_locale_name (LC_CTYPE, "LC_CTYPE");
136 ASSERT (strcmp (name, "de_DE.UTF-8") == 0);
137 name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES");
138 ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
142 unsetenv ("LC_CTYPE");
143 setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
145 if (setlocale (LC_ALL, "") != NULL)
147 name = gl_locale_name (LC_CTYPE, "LC_CTYPE");
148 ASSERT (strcmp (name, gl_locale_name_default ()) == 0);
149 name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES");
150 ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
154 /* Test the gl_locale_name_posix() function. */
156 test_locale_name_posix (void)
160 /* Get into a defined state, */
161 setlocale (LC_ALL, "en_US.UTF-8");
163 uselocale (LC_GLOBAL_LOCALE);
166 /* Check that when all environment variables are unset,
167 gl_locale_name_posix returns either NULL or the default locale. */
169 unsetenv ("LC_CTYPE");
170 unsetenv ("LC_MESSAGES");
171 unsetenv ("LC_NUMERIC");
173 setlocale (LC_ALL, "");
174 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
175 ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
176 name = gl_locale_name_posix (LC_NUMERIC, "LC_NUMERIC");
177 ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
179 /* Check that an empty environment variable is treated like an unset
180 environment variable. */
182 setenv ("LC_ALL", "", 1);
183 unsetenv ("LC_CTYPE");
184 unsetenv ("LC_MESSAGES");
186 setlocale (LC_ALL, "");
187 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
188 ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
191 setenv ("LC_CTYPE", "", 1);
192 unsetenv ("LC_MESSAGES");
194 setlocale (LC_ALL, "");
195 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
196 ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
199 unsetenv ("LC_CTYPE");
200 setenv ("LC_MESSAGES", "", 1);
202 setlocale (LC_ALL, "");
203 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
204 ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
207 unsetenv ("LC_CTYPE");
208 unsetenv ("LC_MESSAGES");
209 setenv ("LANG", "", 1);
210 setlocale (LC_ALL, "");
211 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
212 ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
214 /* Check that LC_ALL overrides the others, and LANG is overridden by the
217 setenv ("LC_ALL", "C", 1);
218 unsetenv ("LC_CTYPE");
219 unsetenv ("LC_MESSAGES");
221 setlocale (LC_ALL, "");
222 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
223 ASSERT (strcmp (name, "C") == 0);
226 setenv ("LC_CTYPE", "C", 1);
227 setenv ("LC_MESSAGES", "C", 1);
229 setlocale (LC_ALL, "");
230 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
231 ASSERT (strcmp (name, "C") == 0);
234 unsetenv ("LC_CTYPE");
235 unsetenv ("LC_MESSAGES");
236 setenv ("LANG", "C", 1);
237 setlocale (LC_ALL, "");
238 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
239 ASSERT (strcmp (name, "C") == 0);
241 /* Check mixed situations. */
244 unsetenv ("LC_CTYPE");
245 setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
246 setenv ("LANG", "de_DE.UTF-8", 1);
247 if (setlocale (LC_ALL, "") != NULL)
249 name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE");
250 ASSERT (strcmp (name, "de_DE.UTF-8") == 0);
251 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
252 ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
256 unsetenv ("LC_CTYPE");
257 setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
259 if (setlocale (LC_ALL, "") != NULL)
261 name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE");
262 ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
263 name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
264 ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
268 /* Test the gl_locale_name_environ() function. */
270 test_locale_name_environ (void)
274 /* Get into a defined state, */
275 setlocale (LC_ALL, "en_US.UTF-8");
277 uselocale (LC_GLOBAL_LOCALE);
280 /* Check that when all environment variables are unset,
281 gl_locale_name_environ returns NULL. */
283 unsetenv ("LC_CTYPE");
284 unsetenv ("LC_MESSAGES");
285 unsetenv ("LC_NUMERIC");
287 ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
288 ASSERT (gl_locale_name_environ (LC_NUMERIC, "LC_NUMERIC") == NULL);
290 /* Check that an empty environment variable is treated like an unset
291 environment variable. */
293 setenv ("LC_ALL", "", 1);
294 unsetenv ("LC_CTYPE");
295 unsetenv ("LC_MESSAGES");
297 ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
300 setenv ("LC_CTYPE", "", 1);
301 unsetenv ("LC_MESSAGES");
303 ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
306 unsetenv ("LC_CTYPE");
307 setenv ("LC_MESSAGES", "", 1);
309 ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
312 unsetenv ("LC_CTYPE");
313 unsetenv ("LC_MESSAGES");
314 setenv ("LANG", "", 1);
315 ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
317 /* Check that LC_ALL overrides the others, and LANG is overridden by the
320 setenv ("LC_ALL", "C", 1);
321 unsetenv ("LC_CTYPE");
322 unsetenv ("LC_MESSAGES");
324 name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
325 ASSERT (strcmp (name, "C") == 0);
328 setenv ("LC_CTYPE", "C", 1);
329 setenv ("LC_MESSAGES", "C", 1);
331 name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
332 ASSERT (strcmp (name, "C") == 0);
335 unsetenv ("LC_CTYPE");
336 unsetenv ("LC_MESSAGES");
337 setenv ("LANG", "C", 1);
338 name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
339 ASSERT (strcmp (name, "C") == 0);
341 /* Check mixed situations. */
344 unsetenv ("LC_CTYPE");
345 setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
346 setenv ("LANG", "de_DE.UTF-8", 1);
347 name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE");
348 ASSERT (strcmp (name, "de_DE.UTF-8") == 0);
349 name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
350 ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
353 unsetenv ("LC_CTYPE");
354 setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
356 name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE");
357 ASSERT (name == NULL);
358 name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
359 ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
362 /* Test the gl_locale_name_default() function. */
364 test_locale_name_default (void)
366 const char *name = gl_locale_name_default ();
368 ASSERT (name != NULL);
370 /* Only MacOS X and Windows have a facility for the user to set the default
372 #if !((defined __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __WIN32__ || defined __CYGWIN__))
373 ASSERT (strcmp (name, "C") == 0);
381 test_locale_name_posix ();
382 test_locale_name_environ ();
383 test_locale_name_default ();