1#!./perl
2#
3# all.t - tests for all_* routines in
4#	Locale::Country
5#	Locale::Language
6#	Locale::Currency
7#	Locale::Script
8#
9# There are four tests. We get a list of all codes, convert to
10# language/country/currency, # convert back to code,
11# and check that they're the same. Then we do the same,
12# starting with list of languages/countries/currencies.
13#
14
15use Locale::Country;
16use Locale::Language;
17use Locale::Currency;
18use Locale::Script;
19
20print "1..20\n";
21
22my $code;
23my $language;
24my $country;
25my $ok;
26my $reverse;
27my $currency;
28my $script;
29
30
31#-----------------------------------------------------------------------
32# Old API - without codeset specified, default to ALPHA_2
33#-----------------------------------------------------------------------
34$ok = 1;
35foreach $code (all_country_codes())
36{
37    $country = code2country($code);
38    if (!defined $country)
39    {
40        $ok = 0;
41        last;
42    }
43    $reverse = country2code($country);
44    if (!defined $reverse)
45    {
46        $ok = 0;
47        last;
48    }
49    if ($reverse ne $code)
50    {
51        $ok = 0;
52        last;
53    }
54}
55print ($ok ? "ok 1\n" : "not ok 1\n");
56
57#-----------------------------------------------------------------------
58# code to country, back to code, for ALPHA2
59#-----------------------------------------------------------------------
60$ok = 1;
61foreach $code (all_country_codes(LOCALE_CODE_ALPHA_2))
62{
63    $country = code2country($code, LOCALE_CODE_ALPHA_2);
64    if (!defined $country)
65    {
66        $ok = 0;
67        last;
68    }
69    $reverse = country2code($country, LOCALE_CODE_ALPHA_2);
70    if (!defined $reverse)
71    {
72        $ok = 0;
73        last;
74    }
75    if ($reverse ne $code)
76    {
77        $ok = 0;
78        last;
79    }
80}
81print ($ok ? "ok 2\n" : "not ok 2\n");
82
83#-----------------------------------------------------------------------
84# code to country, back to code, for ALPHA3
85#-----------------------------------------------------------------------
86$ok = 1;
87foreach $code (all_country_codes(LOCALE_CODE_ALPHA_3))
88{
89    $country = code2country($code, LOCALE_CODE_ALPHA_3);
90    if (!defined $country)
91    {
92        $ok = 0;
93        last;
94    }
95    $reverse = country2code($country, LOCALE_CODE_ALPHA_3);
96    if (!defined $reverse)
97    {
98        $ok = 0;
99        last;
100    }
101    if ($reverse ne $code)
102    {
103        $ok = 0;
104        last;
105    }
106}
107print ($ok ? "ok 3\n" : "not ok 3\n");
108
109#-----------------------------------------------------------------------
110# code to country, back to code, for NUMERIC
111#-----------------------------------------------------------------------
112$ok = 1;
113foreach $code (all_country_codes(LOCALE_CODE_NUMERIC))
114{
115    $country = code2country($code, LOCALE_CODE_NUMERIC);
116    if (!defined $country)
117    {
118        $ok = 0;
119        last;
120    }
121    $reverse = country2code($country, LOCALE_CODE_NUMERIC);
122    if (!defined $reverse)
123    {
124        $ok = 0;
125        last;
126    }
127    if ($reverse ne $code)
128    {
129        $ok = 0;
130        last;
131    }
132}
133print ($ok ? "ok 4\n" : "not ok 4\n");
134
135
136#-----------------------------------------------------------------------
137# Old API - country to code, back to country, using default of ALPHA_2
138#-----------------------------------------------------------------------
139$ok = 1;
140foreach $country (all_country_names())
141{
142    $code = country2code($country);
143    if (!defined $code)
144    {
145        $ok = 0;
146        last;
147    }
148    $reverse = code2country($code);
149    if (!defined $reverse)
150    {
151        $ok = 0;
152        last;
153    }
154    if ($reverse ne $country)
155    {
156        $ok = 0;
157        last;
158    }
159}
160print ($ok ? "ok 5\n" : "not ok 5\n");
161
162#-----------------------------------------------------------------------
163# country to code, back to country, using LOCALE_CODE_ALPHA_2
164#-----------------------------------------------------------------------
165$ok = 1;
166foreach $country (all_country_names())
167{
168    $code = country2code($country, LOCALE_CODE_ALPHA_2);
169    if (!defined $code)
170    {
171        $ok = 0;
172        last;
173    }
174    $reverse = code2country($code, LOCALE_CODE_ALPHA_2);
175    if (!defined $reverse)
176    {
177        $ok = 0;
178        last;
179    }
180    if ($reverse ne $country)
181    {
182        $ok = 0;
183        last;
184    }
185}
186print ($ok ? "ok 6\n" : "not ok 6\n");
187
188#-----------------------------------------------------------------------
189# country to code, back to country, using LOCALE_CODE_ALPHA_3
190#-----------------------------------------------------------------------
191$ok = 1;
192foreach $country (all_country_names())
193{
194    $code = country2code($country, LOCALE_CODE_ALPHA_3);
195    if (!defined $code)
196    {
197	next if ($country eq 'Antarctica'
198		 || $country eq 'Bouvet Island'
199		 || $country eq 'Cocos (Keeling) Islands'
200		 || $country eq 'Christmas Island'
201		 || $country eq 'France, Metropolitan'
202		 || $country eq 'South Georgia and the South Sandwich Islands'
203		 || $country eq 'Heard Island and McDonald Islands'
204		 || $country eq 'British Indian Ocean Territory'
205		 || $country eq 'French Southern Territories'
206		 || $country eq 'United States Minor Outlying Islands'
207		 || $country eq 'Mayotte'
208		 || $country eq 'Zaire');
209        $ok = 0;
210        last;
211    }
212    $reverse = code2country($code, LOCALE_CODE_ALPHA_3);
213    if (!defined $reverse)
214    {
215        $ok = 0;
216        last;
217    }
218    if ($reverse ne $country)
219    {
220        $ok = 0;
221        last;
222    }
223}
224print ($ok ? "ok 7\n" : "not ok 7\n");
225
226#-----------------------------------------------------------------------
227# country to code, back to country, using LOCALE_CODE_NUMERIC
228#-----------------------------------------------------------------------
229$ok = 1;
230foreach $country (all_country_names())
231{
232    $code = country2code($country, LOCALE_CODE_NUMERIC);
233    if (!defined $code)
234    {
235	next if ($country eq 'Antarctica'
236		 || $country eq 'Bouvet Island'
237		 || $country eq 'Cocos (Keeling) Islands'
238		 || $country eq 'Christmas Island'
239		 || $country eq 'France, Metropolitan'
240		 || $country eq 'South Georgia and the South Sandwich Islands'
241		 || $country eq 'Heard Island and McDonald Islands'
242		 || $country eq 'British Indian Ocean Territory'
243		 || $country eq 'French Southern Territories'
244		 || $country eq 'United States Minor Outlying Islands'
245		 || $country eq 'Mayotte'
246		 || $country eq 'Zaire');
247        $ok = 0;
248        last;
249    }
250    $reverse = code2country($code, LOCALE_CODE_NUMERIC);
251    if (!defined $reverse)
252    {
253        $ok = 0;
254        last;
255    }
256    if ($reverse ne $country)
257    {
258        $ok = 0;
259        last;
260    }
261}
262print ($ok ? "ok 8\n" : "not ok 8\n");
263
264
265$ok = 1;
266foreach $code (all_language_codes())
267{
268    $language = code2language($code);
269    if (!defined $language)
270    {
271        $ok = 0;
272        last;
273    }
274    $reverse = language2code($language);
275    if (!defined $reverse)
276    {
277        $ok = 0;
278        last;
279    }
280    if ($reverse ne $code)
281    {
282        $ok = 0;
283        last;
284    }
285}
286print ($ok ? "ok 9\n" : "not ok 9\n");
287
288
289$ok = 1;
290foreach $language (all_language_names())
291{
292    $code = language2code($language);
293    if (!defined $code)
294    {
295        $ok = 0;
296        last;
297    }
298    $reverse = code2language($code);
299    if (!defined $reverse)
300    {
301        $ok = 0;
302        last;
303    }
304    if ($reverse ne $language)
305    {
306        $ok = 0;
307        last;
308    }
309}
310print ($ok ? "ok 10\n" : "not ok 10\n");
311
312$ok = 1;
313foreach $code (all_currency_codes())
314{
315    $currency = code2currency($code);
316    if (!defined $currency)
317    {
318        $ok = 0;
319        last;
320    }
321    $reverse = currency2code($currency);
322    if (!defined $reverse)
323    {
324        $ok = 0;
325        last;
326    }
327    #
328    # three special cases:
329    #	The Kwacha has two codes - used in Zambia and Malawi
330    #	The Russian Ruble has two codes - rub and rur
331    #	The Belarussian Ruble has two codes - byb and byr
332    if ($reverse ne $code
333	&& $code ne 'mwk' && $code ne 'zmk'
334	&& $code ne 'byr' && $code ne 'byb'
335	&& $code ne 'rub' && $code ne 'rur')
336    {
337        $ok = 0;
338        last;
339    }
340}
341print ($ok ? "ok 11\n" : "not ok 11\n");
342
343$ok = 1;
344foreach $currency (all_currency_names())
345{
346    $code = currency2code($currency);
347    if (!defined $code)
348    {
349        $ok = 0;
350        last;
351    }
352    $reverse = code2currency($code);
353    if (!defined $reverse)
354    {
355        $ok = 0;
356        last;
357    }
358    if ($reverse ne $currency)
359    {
360        $ok = 0;
361        last;
362    }
363}
364print ($ok ? "ok 12\n" : "not ok 12\n");
365
366#=======================================================================
367#
368#	Locale::Script tests
369#
370#=======================================================================
371
372#-----------------------------------------------------------------------
373# Old API - without codeset specified, default to ALPHA_2
374#-----------------------------------------------------------------------
375$ok = 1;
376foreach $code (all_script_codes())
377{
378    $script = code2script($code);
379    if (!defined $script)
380    {
381        $ok = 0;
382        last;
383    }
384    $reverse = script2code($script);
385    if (!defined $reverse)
386    {
387        $ok = 0;
388        last;
389    }
390    if ($reverse ne $code)
391    {
392        $ok = 0;
393        last;
394    }
395}
396print ($ok ? "ok 13\n" : "not ok 13\n");
397
398#-----------------------------------------------------------------------
399# code to script, back to code, for ALPHA2
400#-----------------------------------------------------------------------
401$ok = 1;
402foreach $code (all_script_codes(LOCALE_CODE_ALPHA_2))
403{
404    $script = code2script($code, LOCALE_CODE_ALPHA_2);
405    if (!defined $script)
406    {
407        $ok = 0;
408        last;
409    }
410    $reverse = script2code($script, LOCALE_CODE_ALPHA_2);
411    if (!defined $reverse)
412    {
413        $ok = 0;
414        last;
415    }
416    if ($reverse ne $code)
417    {
418        $ok = 0;
419        last;
420    }
421}
422print ($ok ? "ok 14\n" : "not ok 14\n");
423
424#-----------------------------------------------------------------------
425# code to script, back to code, for ALPHA3
426#-----------------------------------------------------------------------
427$ok = 1;
428foreach $code (all_script_codes(LOCALE_CODE_ALPHA_3))
429{
430    $script = code2script($code, LOCALE_CODE_ALPHA_3);
431    if (!defined $script)
432    {
433        $ok = 0;
434        last;
435    }
436    $reverse = script2code($script, LOCALE_CODE_ALPHA_3);
437    if (!defined $reverse)
438    {
439        $ok = 0;
440        last;
441    }
442    if ($reverse ne $code)
443    {
444        $ok = 0;
445        last;
446    }
447}
448print ($ok ? "ok 15\n" : "not ok 15\n");
449
450#-----------------------------------------------------------------------
451# code to script, back to code, for NUMERIC
452#-----------------------------------------------------------------------
453$ok = 1;
454foreach $code (all_script_codes(LOCALE_CODE_NUMERIC))
455{
456    $script = code2script($code, LOCALE_CODE_NUMERIC);
457    if (!defined $script)
458    {
459        $ok = 0;
460        last;
461    }
462    $reverse = script2code($script, LOCALE_CODE_NUMERIC);
463    if (!defined $reverse)
464    {
465        $ok = 0;
466        last;
467    }
468    if ($reverse ne $code)
469    {
470        $ok = 0;
471        last;
472    }
473}
474print ($ok ? "ok 16\n" : "not ok 16\n");
475
476
477#-----------------------------------------------------------------------
478# Old API - script to code, back to script, using default of ALPHA_2
479#-----------------------------------------------------------------------
480$ok = 1;
481foreach $script (all_script_names())
482{
483    $code = script2code($script);
484    if (!defined $code)
485    {
486        $ok = 0;
487        last;
488    }
489    $reverse = code2script($code);
490    if (!defined $reverse)
491    {
492        $ok = 0;
493        last;
494    }
495    if ($reverse ne $script)
496    {
497        $ok = 0;
498        last;
499    }
500}
501print ($ok ? "ok 17\n" : "not ok 17\n");
502
503#-----------------------------------------------------------------------
504# script to code, back to script, using LOCALE_CODE_ALPHA_2
505#-----------------------------------------------------------------------
506$ok = 1;
507foreach $script (all_script_names())
508{
509    $code = script2code($script, LOCALE_CODE_ALPHA_2);
510    if (!defined $code)
511    {
512        $ok = 0;
513        last;
514    }
515    $reverse = code2script($code, LOCALE_CODE_ALPHA_2);
516    if (!defined $reverse)
517    {
518        $ok = 0;
519        last;
520    }
521    if ($reverse ne $script)
522    {
523        $ok = 0;
524        last;
525    }
526}
527print ($ok ? "ok 18\n" : "not ok 18\n");
528
529#-----------------------------------------------------------------------
530# script to code, back to script, using LOCALE_CODE_ALPHA_3
531#-----------------------------------------------------------------------
532$ok = 1;
533foreach $script (all_script_names())
534{
535    $code = script2code($script, LOCALE_CODE_ALPHA_3);
536    if (!defined $code)
537    {
538        $ok = 0;
539        last;
540    }
541    $reverse = code2script($code, LOCALE_CODE_ALPHA_3);
542    if (!defined $reverse)
543    {
544        $ok = 0;
545        last;
546    }
547    if ($reverse ne $script)
548    {
549        $ok = 0;
550        last;
551    }
552}
553print ($ok ? "ok 19\n" : "not ok 19\n");
554
555#-----------------------------------------------------------------------
556# script to code, back to script, using LOCALE_CODE_NUMERIC
557#-----------------------------------------------------------------------
558$ok = 1;
559foreach $script (all_script_names())
560{
561    $code = script2code($script, LOCALE_CODE_NUMERIC);
562    if (!defined $code)
563    {
564        $ok = 0;
565        last;
566    }
567    $reverse = code2script($code, LOCALE_CODE_NUMERIC);
568    if (!defined $reverse)
569    {
570        $ok = 0;
571        last;
572    }
573    if ($reverse ne $script)
574    {
575        $ok = 0;
576        last;
577    }
578}
579print ($ok ? "ok 20\n" : "not ok 20\n");
580
581