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