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