This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Grab latest changes from CPAN 0.9905
[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
13 BEGIN {
14     use_ok('version', 0.9905);
15 }
16
17 SKIP: {
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 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', 5
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         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";
61 package $package;
62 use locale;
63 use POSIX qw(locale_h);
64 \$^W = 1;
65 use version;
66 setlocale (LC_ALL, '$loc');
67 use version ;
68 eval "use Socket 1.7";
69 setlocale( LC_ALL, '$orig_loc');
70 1;
71 EOF
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__
80 af_ZA
81 af_ZA.utf8
82 an_ES
83 an_ES.utf8
84 az_AZ.utf8
85 be_BY
86 be_BY.utf8
87 bg_BG
88 bg_BG.utf8
89 br_FR
90 br_FR@euro
91 br_FR.utf8
92 bs_BA
93 bs_BA.utf8
94 ca_ES
95 ca_ES@euro
96 ca_ES.utf8
97 cs_CZ
98 cs_CZ.utf8
99 da_DK
100 da_DK.utf8
101 de_AT
102 de_AT@euro
103 de_AT.utf8
104 de_BE
105 de_BE@euro
106 de_BE.utf8
107 de_DE
108 de_DE@euro
109 de_DE.utf8
110 de_LU
111 de_LU@euro
112 de_LU.utf8
113 el_GR
114 el_GR.utf8
115 en_DK
116 en_DK.utf8
117 es_AR
118 es_AR.utf8
119 es_BO
120 es_BO.utf8
121 es_CL
122 es_CL.utf8
123 es_CO
124 es_CO.utf8
125 es_EC
126 es_EC.utf8
127 es_ES
128 es_ES@euro
129 es_ES.utf8
130 es_PY
131 es_PY.utf8
132 es_UY
133 es_UY.utf8
134 es_VE
135 es_VE.utf8
136 et_EE
137 et_EE.iso885915
138 et_EE.utf8
139 eu_ES
140 eu_ES@euro
141 eu_ES.utf8
142 fi_FI
143 fi_FI@euro
144 fi_FI.utf8
145 fo_FO
146 fo_FO.utf8
147 fr_BE
148 fr_BE@euro
149 fr_BE.utf8
150 fr_CA
151 fr_CA.utf8
152 fr_CH
153 fr_CH.utf8
154 fr_FR
155 fr_FR@euro
156 fr_FR.utf8
157 fr_LU
158 fr_LU@euro
159 fr_LU.utf8
160 gl_ES
161 gl_ES@euro
162 gl_ES.utf8
163 hr_HR
164 hr_HR.utf8
165 hu_HU
166 hu_HU.utf8
167 id_ID
168 id_ID.utf8
169 is_IS
170 is_IS.utf8
171 it_CH
172 it_CH.utf8
173 it_IT
174 it_IT@euro
175 it_IT.utf8
176 ka_GE
177 ka_GE.utf8
178 kk_KZ
179 kk_KZ.utf8
180 kl_GL
181 kl_GL.utf8
182 lt_LT
183 lt_LT.utf8
184 lv_LV
185 lv_LV.utf8
186 mk_MK
187 mk_MK.utf8
188 mn_MN
189 mn_MN.utf8
190 nb_NO
191 nb_NO.utf8
192 nl_BE
193 nl_BE@euro
194 nl_BE.utf8
195 nl_NL
196 nl_NL@euro
197 nl_NL.utf8
198 nn_NO
199 nn_NO.utf8
200 no_NO
201 no_NO.utf8
202 oc_FR
203 oc_FR.utf8
204 pl_PL
205 pl_PL.utf8
206 pt_BR
207 pt_BR.utf8
208 pt_PT
209 pt_PT@euro
210 pt_PT.utf8
211 ro_RO
212 ro_RO.utf8
213 ru_RU
214 ru_RU.koi8r
215 ru_RU.utf8
216 ru_UA
217 ru_UA.utf8
218 se_NO
219 se_NO.utf8
220 sh_YU
221 sh_YU.utf8
222 sk_SK
223 sk_SK.utf8
224 sl_SI
225 sl_SI.utf8
226 sq_AL
227 sq_AL.utf8
228 sr_CS
229 sr_CS.utf8
230 sv_FI
231 sv_FI@euro
232 sv_FI.utf8
233 sv_SE
234 sv_SE.iso885915
235 sv_SE.utf8
236 tg_TJ
237 tg_TJ.utf8
238 tr_TR
239 tr_TR.utf8
240 tt_RU.utf8
241 uk_UA
242 uk_UA.utf8
243 vi_VN
244 vi_VN.tcvn
245 wa_BE
246 wa_BE@euro
247 wa_BE.utf8