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