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