xref: /openbsd/gnu/usr.bin/perl/cpan/version/t/07locale.t (revision 73471bf0)
1#! /usr/local/perl -w
2# Before `make install' is performed this script should be runnable with
3# `make test'. After `make install' it should work as `perl test.pl'
4
5#########################
6
7use File::Basename;
8use File::Temp qw/tempfile/;
9use POSIX qw/locale_h/;
10use Test::More tests => 8;
11use Config;
12
13BEGIN {
14    use_ok('version', 0.9924);
15}
16
17SKIP: {
18	skip 'No locale testing for Perl < 5.6.0', 6 if $] < 5.006;
19	skip 'No locale testing without d_setlocale', 6
20	    if(!$Config{d_setlocale});
21
22	# test locale handling
23	my $warning = '';
24
25	local $SIG{__WARN__} = sub { $warning = $_[0] };
26
27	my $ver = 1.23;  # has to be floating point number
28	my $loc;
29	my $orig_loc = setlocale(LC_NUMERIC);
30	ok ($ver eq "1.23", 'Not using locale yet');  # Don't use is(),
31						      # because have to
32						      # evaluate in current
33						      # scope
34	use if $^O !~ /android/, 'locale';
35
36	while (<DATA>) {
37	    chomp;
38	    $loc = setlocale( LC_ALL, $_);
39	    last if $loc && localeconv()->{decimal_point} eq ',';
40	}
41	skip 'Cannot test locale handling without a comma locale', 6
42	    unless $loc and localeconv()->{decimal_point} eq ',';
43
44	setlocale(LC_NUMERIC, $loc);
45	$ver = 1.23;  # has to be floating point number
46	ok ($ver eq "1,23", "Using locale: $loc");
47	$v = version->new($ver);
48	unlike($warning, qr/Version string '1,23' contains invalid data/,
49	    "Process locale-dependent floating point");
50	ok ($v eq "1.23", "Locale doesn't apply to version objects");
51	ok ($v == $ver, "Comparison to locale floating point");
52
53        TODO: { # Resolve https://rt.cpan.org/Ticket/Display.html?id=102272
54            local $TODO = 'Fails for Perl 5.x.0 < 5.19.0' if $] < 5.019000;
55            $ver = version->new($]);
56            is "$ver", "$]", 'Use PV for dualvars';
57        }
58	setlocale( LC_ALL, $orig_loc); # reset this before possible skip
59	skip 'Cannot test RT#46921 with Perl < 5.008', 1
60	    if ($] < 5.008);
61	my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
62	(my $package = basename($filename)) =~ s/\.pm$//;
63	print $fh <<"EOF";
64package $package;
65use locale;
66use POSIX qw(locale_h);
67\$^W = 1;
68use version;
69setlocale (LC_ALL, '$loc');
70use version ;
71eval "use Socket 1.7";
72setlocale( LC_ALL, '$orig_loc');
731;
74EOF
75	close $fh;
76
77	eval "use lib '.'; use $package;";
78	unlike($warning, qr"Version string '1,7' contains invalid data",
79	    'Handle locale action-at-a-distance');
80    }
81
82__DATA__
83af_ZA
84af_ZA.utf8
85af_ZA.UTF-8
86an_ES
87an_ES.utf8
88an_ES.UTF-8
89az_AZ.utf8
90az_AZ.UTF-8
91be_BY
92be_BY.utf8
93be_BY.UTF-8
94bg_BG
95bg_BG.utf8
96bg_BG.UTF-8
97br_FR
98br_FR@euro
99br_FR.utf8
100br_FR.UTF-8
101bs_BA
102bs_BA.utf8
103bs_BA.UTF-8
104ca_ES
105ca_ES@euro
106ca_ES.utf8
107ca_ES.UTF-8
108cs_CZ
109cs_CZ.utf8
110cs_CZ.UTF-8
111da_DK
112da_DK.utf8
113da_DK.UTF-8
114de_AT
115de_AT@euro
116de_AT.utf8
117de_AT.UTF-8
118de_BE
119de_BE@euro
120de_BE.utf8
121de_BE.UTF-8
122de_DE
123de_DE@euro
124de_DE.utf8
125de_DE.UTF-8
126de_DE.UTF-8
127de_LU
128de_LU@euro
129de_LU.utf8
130de_LU.UTF-8
131el_GR
132el_GR.utf8
133el_GR.UTF-8
134en_DK
135en_DK.utf8
136en_DK.UTF-8
137es_AR
138es_AR.utf8
139es_AR.UTF-8
140es_BO
141es_BO.utf8
142es_BO.UTF-8
143es_CL
144es_CL.utf8
145es_CL.UTF-8
146es_CO
147es_CO.utf8
148es_CO.UTF-8
149es_EC
150es_EC.utf8
151es_EC.UTF-8
152es_ES
153es_ES@euro
154es_ES.utf8
155es_ES.UTF-8
156es_PY
157es_PY.utf8
158es_PY.UTF-8
159es_UY
160es_UY.utf8
161es_UY.UTF-8
162es_VE
163es_VE.utf8
164es_VE.UTF-8
165et_EE
166et_EE.iso885915
167et_EE.utf8
168et_EE.UTF-8
169eu_ES
170eu_ES@euro
171eu_ES.utf8
172eu_ES.UTF-8
173fi_FI
174fi_FI@euro
175fi_FI.utf8
176fi_FI.UTF-8
177fo_FO
178fo_FO.utf8
179fo_FO.UTF-8
180fr_BE
181fr_BE@euro
182fr_BE.utf8
183fr_BE.UTF-8
184fr_CA
185fr_CA.utf8
186fr_CA.UTF-8
187fr_CH
188fr_CH.utf8
189fr_CH.UTF-8
190fr_FR
191fr_FR@euro
192fr_FR.utf8
193fr_FR.UTF-8
194fr_LU
195fr_LU@euro
196fr_LU.utf8
197fr_LU.UTF-8
198gl_ES
199gl_ES@euro
200gl_ES.utf8
201gl_ES.UTF-8
202hr_HR
203hr_HR.utf8
204hr_HR.UTF-8
205hu_HU
206hu_HU.utf8
207hu_HU.UTF-8
208id_ID
209id_ID.utf8
210id_ID.UTF-8
211is_IS
212is_IS.utf8
213is_IS.UTF-8
214it_CH
215it_CH.utf8
216it_CH.UTF-8
217it_IT
218it_IT@euro
219it_IT.utf8
220it_IT.UTF-8
221ka_GE
222ka_GE.utf8
223ka_GE.UTF-8
224kk_KZ
225kk_KZ.utf8
226kk_KZ.UTF-8
227kl_GL
228kl_GL.utf8
229kl_GL.UTF-8
230lt_LT
231lt_LT.utf8
232lt_LT.UTF-8
233lv_LV
234lv_LV.utf8
235lv_LV.UTF-8
236mk_MK
237mk_MK.utf8
238mk_MK.UTF-8
239mn_MN
240mn_MN.utf8
241mn_MN.UTF-8
242nb_NO
243nb_NO.utf8
244nb_NO.UTF-8
245nl_BE
246nl_BE@euro
247nl_BE.utf8
248nl_BE.UTF-8
249nl_NL
250nl_NL@euro
251nl_NL.utf8
252nl_NL.UTF-8
253nn_NO
254nn_NO.utf8
255nn_NO.UTF-8
256no_NO
257no_NO.utf8
258no_NO.UTF-8
259oc_FR
260oc_FR.utf8
261oc_FR.UTF-8
262pl_PL
263pl_PL.utf8
264pl_PL.UTF-8
265pt_BR
266pt_BR.utf8
267pt_BR.UTF-8
268pt_PT
269pt_PT@euro
270pt_PT.utf8
271pt_PT.UTF-8
272ro_RO
273ro_RO.utf8
274ro_RO.UTF-8
275ru_RU
276ru_RU.koi8r
277ru_RU.utf8
278ru_RU.UTF-8
279ru_UA
280ru_UA.utf8
281ru_UA.UTF-8
282se_NO
283se_NO.utf8
284se_NO.UTF-8
285sh_YU
286sh_YU.utf8
287sh_YU.UTF-8
288sk_SK
289sk_SK.utf8
290sk_SK.UTF-8
291sl_SI
292sl_SI.utf8
293sl_SI.UTF-8
294sq_AL
295sq_AL.utf8
296sq_AL.UTF-8
297sr_CS
298sr_CS.utf8
299sr_CS.UTF-8
300sv_FI
301sv_FI@euro
302sv_FI.utf8
303sv_FI.UTF-8
304sv_SE
305sv_SE.iso885915
306sv_SE.utf8
307sv_SE.UTF-8
308tg_TJ
309tg_TJ.utf8
310tg_TJ.UTF-8
311tr_TR
312tr_TR.utf8
313tr_TR.UTF-8
314tt_RU.utf8
315tt_RU.UTF-8
316uk_UA
317uk_UA.utf8
318uk_UA.UTF-8
319vi_VN
320vi_VN.tcvn
321wa_BE
322wa_BE@euro
323wa_BE.utf8
324wa_BE.UTF-8
325