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