This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix regression with $version::LAX and bump release
[perl5.git] / cpan / version / t / 07locale.t
CommitLineData
543eec9e
JP
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/;
02aba72f 10use Test::More tests => 7;
569f7fc5 11use Config;
543eec9e
JP
12
13BEGIN {
db9cb848 14 use_ok('version', 0.9906);
543eec9e
JP
15}
16
17SKIP: {
5027b3af
JP
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
543eec9e
JP
22 # test locale handling
23 my $warning;
b127e37e 24
543eec9e
JP
25 local $SIG{__WARN__} = sub { $warning = $_[0] };
26
543eec9e 27 my $ver = 1.23; # has to be floating point number
543eec9e 28 my $loc;
8c72d156 29 my $orig_loc = setlocale(LC_NUMERIC);
3fca3d61 30 ok ($ver eq "1.23", 'Not using locale yet'); # Don't use is(),
5027b3af
JP
31 # because have to
32 # evaluate in current
33 # scope
95a23f5d
JP
34 use locale;
35
543eec9e
JP
36 while (<DATA>) {
37 chomp;
38 $loc = setlocale( LC_ALL, $_);
95a23f5d 39 last if $loc && localeconv()->{decimal_point} eq ',';
543eec9e 40 }
02aba72f 41 skip 'Cannot test locale handling without a comma locale', 5
35c57365 42 unless $loc and localeconv()->{decimal_point} eq ',';
543eec9e 43
5027b3af 44 setlocale(LC_NUMERIC, $loc);
4141ef59 45 $ver = 1.23; # has to be floating point number
3fca3d61 46 ok ($ver eq "1,23", "Using locale: $loc");
543eec9e
JP
47 $v = version->new($ver);
48 unlike($warning, qr/Version string '1,23' contains invalid data/,
49 "Process locale-dependent floating point");
3fca3d61 50 ok ($v eq "1.23", "Locale doesn't apply to version objects");
543eec9e
JP
51 ok ($v == $ver, "Comparison to locale floating point");
52
53 setlocale( LC_ALL, $orig_loc); # reset this before possible skip
54 skip 'Cannot test RT#46921 with Perl < 5.008', 1
55 if ($] < 5.008);
56 skip 'Cannot test RT#46921 with pure Perl module', 1
57 if exists $INC{'version/vpp.pm'};
58 my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1);
59 (my $package = basename($filename)) =~ s/\.pm$//;
60 print $fh <<"EOF";
61package $package;
68e8f474 62use locale;
543eec9e
JP
63use POSIX qw(locale_h);
64\$^W = 1;
65use version;
66setlocale (LC_ALL, '$loc');
67use version ;
68eval "use Socket 1.7";
69setlocale( LC_ALL, '$orig_loc');
701;
71EOF
72 close $fh;
73
74 eval "use lib '.'; use $package;";
75 unlike($warning, qr"Version string '1,7' contains invalid data",
76 'Handle locale action-at-a-distance');
77 }
78
79__DATA__
80af_ZA
81af_ZA.utf8
82an_ES
83an_ES.utf8
84az_AZ.utf8
85be_BY
86be_BY.utf8
87bg_BG
88bg_BG.utf8
89br_FR
90br_FR@euro
91br_FR.utf8
92bs_BA
93bs_BA.utf8
94ca_ES
95ca_ES@euro
96ca_ES.utf8
97cs_CZ
98cs_CZ.utf8
99da_DK
100da_DK.utf8
101de_AT
102de_AT@euro
103de_AT.utf8
104de_BE
105de_BE@euro
106de_BE.utf8
107de_DE
108de_DE@euro
109de_DE.utf8
110de_LU
111de_LU@euro
112de_LU.utf8
113el_GR
114el_GR.utf8
115en_DK
116en_DK.utf8
117es_AR
118es_AR.utf8
119es_BO
120es_BO.utf8
121es_CL
122es_CL.utf8
123es_CO
124es_CO.utf8
125es_EC
126es_EC.utf8
127es_ES
128es_ES@euro
129es_ES.utf8
130es_PY
131es_PY.utf8
132es_UY
133es_UY.utf8
134es_VE
135es_VE.utf8
136et_EE
137et_EE.iso885915
138et_EE.utf8
139eu_ES
140eu_ES@euro
141eu_ES.utf8
142fi_FI
143fi_FI@euro
144fi_FI.utf8
145fo_FO
146fo_FO.utf8
147fr_BE
148fr_BE@euro
149fr_BE.utf8
150fr_CA
151fr_CA.utf8
152fr_CH
153fr_CH.utf8
154fr_FR
155fr_FR@euro
156fr_FR.utf8
157fr_LU
158fr_LU@euro
159fr_LU.utf8
160gl_ES
161gl_ES@euro
162gl_ES.utf8
163hr_HR
164hr_HR.utf8
165hu_HU
166hu_HU.utf8
167id_ID
168id_ID.utf8
169is_IS
170is_IS.utf8
171it_CH
172it_CH.utf8
173it_IT
174it_IT@euro
175it_IT.utf8
176ka_GE
177ka_GE.utf8
178kk_KZ
179kk_KZ.utf8
180kl_GL
181kl_GL.utf8
182lt_LT
183lt_LT.utf8
184lv_LV
185lv_LV.utf8
186mk_MK
187mk_MK.utf8
188mn_MN
189mn_MN.utf8
190nb_NO
191nb_NO.utf8
192nl_BE
193nl_BE@euro
194nl_BE.utf8
195nl_NL
196nl_NL@euro
197nl_NL.utf8
198nn_NO
199nn_NO.utf8
200no_NO
201no_NO.utf8
202oc_FR
203oc_FR.utf8
204pl_PL
205pl_PL.utf8
206pt_BR
207pt_BR.utf8
208pt_PT
209pt_PT@euro
210pt_PT.utf8
211ro_RO
212ro_RO.utf8
213ru_RU
214ru_RU.koi8r
215ru_RU.utf8
216ru_UA
217ru_UA.utf8
218se_NO
219se_NO.utf8
220sh_YU
221sh_YU.utf8
222sk_SK
223sk_SK.utf8
224sl_SI
225sl_SI.utf8
226sq_AL
227sq_AL.utf8
228sr_CS
229sr_CS.utf8
230sv_FI
231sv_FI@euro
232sv_FI.utf8
233sv_SE
234sv_SE.iso885915
235sv_SE.utf8
236tg_TJ
237tg_TJ.utf8
238tr_TR
239tr_TR.utf8
240tt_RU.utf8
241uk_UA
242uk_UA.utf8
243vi_VN
244vi_VN.tcvn
245wa_BE
246wa_BE@euro
247wa_BE.utf8