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