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 7use File::Basename; 8use File::Temp qw/tempfile/; 9use POSIX qw/locale_h/; 10use Test::More tests => 8; 11use Config; 12 13BEGIN { 14 use_ok('version', 0.9930); 15} 16 17SKIP: { 18 skip 'No locale testing for Perl < 5.6.0', 7 if $] < 5.006; 19 skip 'No locale testing without d_setlocale', 7 20 if(!$Config{d_setlocale}); 21 skip 'No locale testing without LC_NUMERIC', 7 22 if($Config{ccflags}) =~ /-DNO_LOCALE_NUMERIC\b/; 23 24 # test locale handling 25 my $warning = ''; 26 27 local $SIG{__WARN__} = sub { $warning = $_[0] }; 28 29 my $ver = 1.23; # has to be floating point number 30 my $loc; 31 my $orig_loc = setlocale(LC_NUMERIC); 32 ok ($ver eq "1.23", 'Not using locale yet'); # Don't use is(), 33 # because have to 34 # evaluate in current 35 # scope 36 use if $^O !~ /android/, 'locale'; 37 38 while (<DATA>) { 39 chomp; 40 $loc = setlocale( LC_ALL, $_); 41 last if $loc && localeconv()->{decimal_point} eq ','; 42 } 43 skip 'Cannot test locale handling without a comma locale', 6 44 unless $loc and localeconv()->{decimal_point} eq ','; 45 46 setlocale(LC_NUMERIC, $loc); 47 $ver = 1.23; # has to be floating point number 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 TODO: { # Resolve https://rt.cpan.org/Ticket/Display.html?id=102272 56 local $TODO = 'Fails for Perl 5.x.0 < 5.19.0' if $] < 5.019000; 57 $ver = 'version'->new($]); 58 is "$ver", "$]", 'Use PV for dualvars'; 59 } 60 setlocale( LC_ALL, $orig_loc); # reset this before possible skip 61 skip 'Cannot test RT#46921 with Perl < 5.008', 1 62 if ($] < 5.008); 63 my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1); 64 (my $package = basename($filename)) =~ s/\.pm$//; 65 print $fh <<"EOF"; 66package $package; 67use locale; 68use POSIX qw(locale_h); 69\$^W = 1; 70use version; 71setlocale (LC_ALL, '$loc'); 72use version ; 73eval "use Socket 1.7"; 74setlocale( LC_ALL, '$orig_loc'); 751; 76EOF 77 close $fh; 78 79 eval "use lib '.'; use $package;"; 80 unlike($warning, qr"Version string '1,7' contains invalid data", 81 'Handle locale action-at-a-distance'); 82} 83 84__DATA__ 85af_ZA 86af_ZA.utf8 87af_ZA.UTF-8 88an_ES 89an_ES.utf8 90an_ES.UTF-8 91az_AZ.utf8 92az_AZ.UTF-8 93be_BY 94be_BY.utf8 95be_BY.UTF-8 96bg_BG 97bg_BG.utf8 98bg_BG.UTF-8 99br_FR 100br_FR@euro 101br_FR.utf8 102br_FR.UTF-8 103bs_BA 104bs_BA.utf8 105bs_BA.UTF-8 106ca_ES 107ca_ES@euro 108ca_ES.utf8 109ca_ES.UTF-8 110cs_CZ 111cs_CZ.utf8 112cs_CZ.UTF-8 113da_DK 114da_DK.utf8 115da_DK.UTF-8 116de_AT 117de_AT@euro 118de_AT.utf8 119de_AT.UTF-8 120de_BE 121de_BE@euro 122de_BE.utf8 123de_BE.UTF-8 124de_DE 125de_DE@euro 126de_DE.utf8 127de_DE.UTF-8 128de_DE.UTF-8 129de_LU 130de_LU@euro 131de_LU.utf8 132de_LU.UTF-8 133el_GR 134el_GR.utf8 135el_GR.UTF-8 136en_DK 137en_DK.utf8 138en_DK.UTF-8 139es_AR 140es_AR.utf8 141es_AR.UTF-8 142es_BO 143es_BO.utf8 144es_BO.UTF-8 145es_CL 146es_CL.utf8 147es_CL.UTF-8 148es_CO 149es_CO.utf8 150es_CO.UTF-8 151es_EC 152es_EC.utf8 153es_EC.UTF-8 154es_ES 155es_ES@euro 156es_ES.utf8 157es_ES.UTF-8 158es_PY 159es_PY.utf8 160es_PY.UTF-8 161es_UY 162es_UY.utf8 163es_UY.UTF-8 164es_VE 165es_VE.utf8 166es_VE.UTF-8 167et_EE 168et_EE.iso885915 169et_EE.utf8 170et_EE.UTF-8 171eu_ES 172eu_ES@euro 173eu_ES.utf8 174eu_ES.UTF-8 175fi_FI 176fi_FI@euro 177fi_FI.utf8 178fi_FI.UTF-8 179fo_FO 180fo_FO.utf8 181fo_FO.UTF-8 182fr_BE 183fr_BE@euro 184fr_BE.utf8 185fr_BE.UTF-8 186fr_CA 187fr_CA.utf8 188fr_CA.UTF-8 189fr_CH 190fr_CH.utf8 191fr_CH.UTF-8 192fr_FR 193fr_FR@euro 194fr_FR.utf8 195fr_FR.UTF-8 196fr_LU 197fr_LU@euro 198fr_LU.utf8 199fr_LU.UTF-8 200gl_ES 201gl_ES@euro 202gl_ES.utf8 203gl_ES.UTF-8 204hr_HR 205hr_HR.utf8 206hr_HR.UTF-8 207hu_HU 208hu_HU.utf8 209hu_HU.UTF-8 210id_ID 211id_ID.utf8 212id_ID.UTF-8 213is_IS 214is_IS.utf8 215is_IS.UTF-8 216it_CH 217it_CH.utf8 218it_CH.UTF-8 219it_IT 220it_IT@euro 221it_IT.utf8 222it_IT.UTF-8 223ka_GE 224ka_GE.utf8 225ka_GE.UTF-8 226kk_KZ 227kk_KZ.utf8 228kk_KZ.UTF-8 229kl_GL 230kl_GL.utf8 231kl_GL.UTF-8 232lt_LT 233lt_LT.utf8 234lt_LT.UTF-8 235lv_LV 236lv_LV.utf8 237lv_LV.UTF-8 238mk_MK 239mk_MK.utf8 240mk_MK.UTF-8 241mn_MN 242mn_MN.utf8 243mn_MN.UTF-8 244nb_NO 245nb_NO.utf8 246nb_NO.UTF-8 247nl_BE 248nl_BE@euro 249nl_BE.utf8 250nl_BE.UTF-8 251nl_NL 252nl_NL@euro 253nl_NL.utf8 254nl_NL.UTF-8 255nn_NO 256nn_NO.utf8 257nn_NO.UTF-8 258no_NO 259no_NO.utf8 260no_NO.UTF-8 261oc_FR 262oc_FR.utf8 263oc_FR.UTF-8 264pl_PL 265pl_PL.utf8 266pl_PL.UTF-8 267pt_BR 268pt_BR.utf8 269pt_BR.UTF-8 270pt_PT 271pt_PT@euro 272pt_PT.utf8 273pt_PT.UTF-8 274ro_RO 275ro_RO.utf8 276ro_RO.UTF-8 277ru_RU 278ru_RU.koi8r 279ru_RU.utf8 280ru_RU.UTF-8 281ru_UA 282ru_UA.utf8 283ru_UA.UTF-8 284se_NO 285se_NO.utf8 286se_NO.UTF-8 287sh_YU 288sh_YU.utf8 289sh_YU.UTF-8 290sk_SK 291sk_SK.utf8 292sk_SK.UTF-8 293sl_SI 294sl_SI.utf8 295sl_SI.UTF-8 296sq_AL 297sq_AL.utf8 298sq_AL.UTF-8 299sr_CS 300sr_CS.utf8 301sr_CS.UTF-8 302sv_FI 303sv_FI@euro 304sv_FI.utf8 305sv_FI.UTF-8 306sv_SE 307sv_SE.iso885915 308sv_SE.utf8 309sv_SE.UTF-8 310tg_TJ 311tg_TJ.utf8 312tg_TJ.UTF-8 313tr_TR 314tr_TR.utf8 315tr_TR.UTF-8 316tt_RU.utf8 317tt_RU.UTF-8 318uk_UA 319uk_UA.utf8 320uk_UA.UTF-8 321vi_VN 322vi_VN.tcvn 323wa_BE 324wa_BE@euro 325wa_BE.utf8 326wa_BE.UTF-8 327