16fb12b70Safresh1#! /usr/local/perl -w 26fb12b70Safresh1# Before `make install' is performed this script should be runnable with 36fb12b70Safresh1# `make test'. After `make install' it should work as `perl test.pl' 46fb12b70Safresh1 56fb12b70Safresh1######################### 66fb12b70Safresh1 76fb12b70Safresh1use File::Basename; 86fb12b70Safresh1use File::Temp qw/tempfile/; 96fb12b70Safresh1use POSIX qw/locale_h/; 10b8851fccSafresh1use Test::More tests => 8; 116fb12b70Safresh1use Config; 126fb12b70Safresh1 136fb12b70Safresh1BEGIN { 14*3d61058aSafresh1 use_ok('version', 0.9930); 156fb12b70Safresh1} 166fb12b70Safresh1 176fb12b70Safresh1SKIP: { 18eac174f2Safresh1 skip 'No locale testing for Perl < 5.6.0', 7 if $] < 5.006; 19eac174f2Safresh1 skip 'No locale testing without d_setlocale', 7 206fb12b70Safresh1 if(!$Config{d_setlocale}); 21e0680481Safresh1 skip 'No locale testing without LC_NUMERIC', 7 22e0680481Safresh1 if($Config{ccflags}) =~ /-DNO_LOCALE_NUMERIC\b/; 236fb12b70Safresh1 246fb12b70Safresh1 # test locale handling 25b8851fccSafresh1 my $warning = ''; 266fb12b70Safresh1 276fb12b70Safresh1 local $SIG{__WARN__} = sub { $warning = $_[0] }; 286fb12b70Safresh1 296fb12b70Safresh1 my $ver = 1.23; # has to be floating point number 306fb12b70Safresh1 my $loc; 316fb12b70Safresh1 my $orig_loc = setlocale(LC_NUMERIC); 326fb12b70Safresh1 ok ($ver eq "1.23", 'Not using locale yet'); # Don't use is(), 336fb12b70Safresh1 # because have to 346fb12b70Safresh1 # evaluate in current 356fb12b70Safresh1 # scope 366fb12b70Safresh1 use if $^O !~ /android/, 'locale'; 376fb12b70Safresh1 386fb12b70Safresh1 while (<DATA>) { 396fb12b70Safresh1 chomp; 406fb12b70Safresh1 $loc = setlocale( LC_ALL, $_); 416fb12b70Safresh1 last if $loc && localeconv()->{decimal_point} eq ','; 426fb12b70Safresh1 } 43b8851fccSafresh1 skip 'Cannot test locale handling without a comma locale', 6 446fb12b70Safresh1 unless $loc and localeconv()->{decimal_point} eq ','; 456fb12b70Safresh1 466fb12b70Safresh1 setlocale(LC_NUMERIC, $loc); 476fb12b70Safresh1 $ver = 1.23; # has to be floating point number 486fb12b70Safresh1 ok ($ver eq "1,23", "Using locale: $loc"); 49eac174f2Safresh1 $v = 'version'->new($ver); 506fb12b70Safresh1 unlike($warning, qr/Version string '1,23' contains invalid data/, 516fb12b70Safresh1 "Process locale-dependent floating point"); 526fb12b70Safresh1 ok ($v eq "1.23", "Locale doesn't apply to version objects"); 536fb12b70Safresh1 ok ($v == $ver, "Comparison to locale floating point"); 546fb12b70Safresh1 55b8851fccSafresh1 TODO: { # Resolve https://rt.cpan.org/Ticket/Display.html?id=102272 56b8851fccSafresh1 local $TODO = 'Fails for Perl 5.x.0 < 5.19.0' if $] < 5.019000; 57eac174f2Safresh1 $ver = 'version'->new($]); 58b8851fccSafresh1 is "$ver", "$]", 'Use PV for dualvars'; 59b8851fccSafresh1 } 606fb12b70Safresh1 setlocale( LC_ALL, $orig_loc); # reset this before possible skip 616fb12b70Safresh1 skip 'Cannot test RT#46921 with Perl < 5.008', 1 626fb12b70Safresh1 if ($] < 5.008); 636fb12b70Safresh1 my ($fh, $filename) = tempfile('tXXXXXXX', SUFFIX => '.pm', UNLINK => 1); 646fb12b70Safresh1 (my $package = basename($filename)) =~ s/\.pm$//; 656fb12b70Safresh1 print $fh <<"EOF"; 666fb12b70Safresh1package $package; 676fb12b70Safresh1use locale; 686fb12b70Safresh1use POSIX qw(locale_h); 696fb12b70Safresh1\$^W = 1; 706fb12b70Safresh1use version; 716fb12b70Safresh1setlocale (LC_ALL, '$loc'); 726fb12b70Safresh1use version ; 736fb12b70Safresh1eval "use Socket 1.7"; 746fb12b70Safresh1setlocale( LC_ALL, '$orig_loc'); 756fb12b70Safresh11; 766fb12b70Safresh1EOF 776fb12b70Safresh1 close $fh; 786fb12b70Safresh1 796fb12b70Safresh1 eval "use lib '.'; use $package;"; 806fb12b70Safresh1 unlike($warning, qr"Version string '1,7' contains invalid data", 816fb12b70Safresh1 'Handle locale action-at-a-distance'); 826fb12b70Safresh1} 836fb12b70Safresh1 846fb12b70Safresh1__DATA__ 856fb12b70Safresh1af_ZA 866fb12b70Safresh1af_ZA.utf8 87b8851fccSafresh1af_ZA.UTF-8 886fb12b70Safresh1an_ES 896fb12b70Safresh1an_ES.utf8 90b8851fccSafresh1an_ES.UTF-8 916fb12b70Safresh1az_AZ.utf8 92b8851fccSafresh1az_AZ.UTF-8 936fb12b70Safresh1be_BY 946fb12b70Safresh1be_BY.utf8 95b8851fccSafresh1be_BY.UTF-8 966fb12b70Safresh1bg_BG 976fb12b70Safresh1bg_BG.utf8 98b8851fccSafresh1bg_BG.UTF-8 996fb12b70Safresh1br_FR 1006fb12b70Safresh1br_FR@euro 1016fb12b70Safresh1br_FR.utf8 102b8851fccSafresh1br_FR.UTF-8 1036fb12b70Safresh1bs_BA 1046fb12b70Safresh1bs_BA.utf8 105b8851fccSafresh1bs_BA.UTF-8 1066fb12b70Safresh1ca_ES 1076fb12b70Safresh1ca_ES@euro 1086fb12b70Safresh1ca_ES.utf8 109b8851fccSafresh1ca_ES.UTF-8 1106fb12b70Safresh1cs_CZ 1116fb12b70Safresh1cs_CZ.utf8 112b8851fccSafresh1cs_CZ.UTF-8 1136fb12b70Safresh1da_DK 1146fb12b70Safresh1da_DK.utf8 115b8851fccSafresh1da_DK.UTF-8 1166fb12b70Safresh1de_AT 1176fb12b70Safresh1de_AT@euro 1186fb12b70Safresh1de_AT.utf8 119b8851fccSafresh1de_AT.UTF-8 1206fb12b70Safresh1de_BE 1216fb12b70Safresh1de_BE@euro 1226fb12b70Safresh1de_BE.utf8 123b8851fccSafresh1de_BE.UTF-8 1246fb12b70Safresh1de_DE 1256fb12b70Safresh1de_DE@euro 1266fb12b70Safresh1de_DE.utf8 127b8851fccSafresh1de_DE.UTF-8 128b8851fccSafresh1de_DE.UTF-8 1296fb12b70Safresh1de_LU 1306fb12b70Safresh1de_LU@euro 1316fb12b70Safresh1de_LU.utf8 132b8851fccSafresh1de_LU.UTF-8 1336fb12b70Safresh1el_GR 1346fb12b70Safresh1el_GR.utf8 135b8851fccSafresh1el_GR.UTF-8 1366fb12b70Safresh1en_DK 1376fb12b70Safresh1en_DK.utf8 138b8851fccSafresh1en_DK.UTF-8 1396fb12b70Safresh1es_AR 1406fb12b70Safresh1es_AR.utf8 141b8851fccSafresh1es_AR.UTF-8 1426fb12b70Safresh1es_BO 1436fb12b70Safresh1es_BO.utf8 144b8851fccSafresh1es_BO.UTF-8 1456fb12b70Safresh1es_CL 1466fb12b70Safresh1es_CL.utf8 147b8851fccSafresh1es_CL.UTF-8 1486fb12b70Safresh1es_CO 1496fb12b70Safresh1es_CO.utf8 150b8851fccSafresh1es_CO.UTF-8 1516fb12b70Safresh1es_EC 1526fb12b70Safresh1es_EC.utf8 153b8851fccSafresh1es_EC.UTF-8 1546fb12b70Safresh1es_ES 1556fb12b70Safresh1es_ES@euro 1566fb12b70Safresh1es_ES.utf8 157b8851fccSafresh1es_ES.UTF-8 1586fb12b70Safresh1es_PY 1596fb12b70Safresh1es_PY.utf8 160b8851fccSafresh1es_PY.UTF-8 1616fb12b70Safresh1es_UY 1626fb12b70Safresh1es_UY.utf8 163b8851fccSafresh1es_UY.UTF-8 1646fb12b70Safresh1es_VE 1656fb12b70Safresh1es_VE.utf8 166b8851fccSafresh1es_VE.UTF-8 1676fb12b70Safresh1et_EE 1686fb12b70Safresh1et_EE.iso885915 1696fb12b70Safresh1et_EE.utf8 170b8851fccSafresh1et_EE.UTF-8 1716fb12b70Safresh1eu_ES 1726fb12b70Safresh1eu_ES@euro 1736fb12b70Safresh1eu_ES.utf8 174b8851fccSafresh1eu_ES.UTF-8 1756fb12b70Safresh1fi_FI 1766fb12b70Safresh1fi_FI@euro 1776fb12b70Safresh1fi_FI.utf8 178b8851fccSafresh1fi_FI.UTF-8 1796fb12b70Safresh1fo_FO 1806fb12b70Safresh1fo_FO.utf8 181b8851fccSafresh1fo_FO.UTF-8 1826fb12b70Safresh1fr_BE 1836fb12b70Safresh1fr_BE@euro 1846fb12b70Safresh1fr_BE.utf8 185b8851fccSafresh1fr_BE.UTF-8 1866fb12b70Safresh1fr_CA 1876fb12b70Safresh1fr_CA.utf8 188b8851fccSafresh1fr_CA.UTF-8 1896fb12b70Safresh1fr_CH 1906fb12b70Safresh1fr_CH.utf8 191b8851fccSafresh1fr_CH.UTF-8 1926fb12b70Safresh1fr_FR 1936fb12b70Safresh1fr_FR@euro 1946fb12b70Safresh1fr_FR.utf8 195b8851fccSafresh1fr_FR.UTF-8 1966fb12b70Safresh1fr_LU 1976fb12b70Safresh1fr_LU@euro 1986fb12b70Safresh1fr_LU.utf8 199b8851fccSafresh1fr_LU.UTF-8 2006fb12b70Safresh1gl_ES 2016fb12b70Safresh1gl_ES@euro 2026fb12b70Safresh1gl_ES.utf8 203b8851fccSafresh1gl_ES.UTF-8 2046fb12b70Safresh1hr_HR 2056fb12b70Safresh1hr_HR.utf8 206b8851fccSafresh1hr_HR.UTF-8 2076fb12b70Safresh1hu_HU 2086fb12b70Safresh1hu_HU.utf8 209b8851fccSafresh1hu_HU.UTF-8 2106fb12b70Safresh1id_ID 2116fb12b70Safresh1id_ID.utf8 212b8851fccSafresh1id_ID.UTF-8 2136fb12b70Safresh1is_IS 2146fb12b70Safresh1is_IS.utf8 215b8851fccSafresh1is_IS.UTF-8 2166fb12b70Safresh1it_CH 2176fb12b70Safresh1it_CH.utf8 218b8851fccSafresh1it_CH.UTF-8 2196fb12b70Safresh1it_IT 2206fb12b70Safresh1it_IT@euro 2216fb12b70Safresh1it_IT.utf8 222b8851fccSafresh1it_IT.UTF-8 2236fb12b70Safresh1ka_GE 2246fb12b70Safresh1ka_GE.utf8 225b8851fccSafresh1ka_GE.UTF-8 2266fb12b70Safresh1kk_KZ 2276fb12b70Safresh1kk_KZ.utf8 228b8851fccSafresh1kk_KZ.UTF-8 2296fb12b70Safresh1kl_GL 2306fb12b70Safresh1kl_GL.utf8 231b8851fccSafresh1kl_GL.UTF-8 2326fb12b70Safresh1lt_LT 2336fb12b70Safresh1lt_LT.utf8 234b8851fccSafresh1lt_LT.UTF-8 2356fb12b70Safresh1lv_LV 2366fb12b70Safresh1lv_LV.utf8 237b8851fccSafresh1lv_LV.UTF-8 2386fb12b70Safresh1mk_MK 2396fb12b70Safresh1mk_MK.utf8 240b8851fccSafresh1mk_MK.UTF-8 2416fb12b70Safresh1mn_MN 2426fb12b70Safresh1mn_MN.utf8 243b8851fccSafresh1mn_MN.UTF-8 2446fb12b70Safresh1nb_NO 2456fb12b70Safresh1nb_NO.utf8 246b8851fccSafresh1nb_NO.UTF-8 2476fb12b70Safresh1nl_BE 2486fb12b70Safresh1nl_BE@euro 2496fb12b70Safresh1nl_BE.utf8 250b8851fccSafresh1nl_BE.UTF-8 2516fb12b70Safresh1nl_NL 2526fb12b70Safresh1nl_NL@euro 2536fb12b70Safresh1nl_NL.utf8 254b8851fccSafresh1nl_NL.UTF-8 2556fb12b70Safresh1nn_NO 2566fb12b70Safresh1nn_NO.utf8 257b8851fccSafresh1nn_NO.UTF-8 2586fb12b70Safresh1no_NO 2596fb12b70Safresh1no_NO.utf8 260b8851fccSafresh1no_NO.UTF-8 2616fb12b70Safresh1oc_FR 2626fb12b70Safresh1oc_FR.utf8 263b8851fccSafresh1oc_FR.UTF-8 2646fb12b70Safresh1pl_PL 2656fb12b70Safresh1pl_PL.utf8 266b8851fccSafresh1pl_PL.UTF-8 2676fb12b70Safresh1pt_BR 2686fb12b70Safresh1pt_BR.utf8 269b8851fccSafresh1pt_BR.UTF-8 2706fb12b70Safresh1pt_PT 2716fb12b70Safresh1pt_PT@euro 2726fb12b70Safresh1pt_PT.utf8 273b8851fccSafresh1pt_PT.UTF-8 2746fb12b70Safresh1ro_RO 2756fb12b70Safresh1ro_RO.utf8 276b8851fccSafresh1ro_RO.UTF-8 2776fb12b70Safresh1ru_RU 2786fb12b70Safresh1ru_RU.koi8r 2796fb12b70Safresh1ru_RU.utf8 280b8851fccSafresh1ru_RU.UTF-8 2816fb12b70Safresh1ru_UA 2826fb12b70Safresh1ru_UA.utf8 283b8851fccSafresh1ru_UA.UTF-8 2846fb12b70Safresh1se_NO 2856fb12b70Safresh1se_NO.utf8 286b8851fccSafresh1se_NO.UTF-8 2876fb12b70Safresh1sh_YU 2886fb12b70Safresh1sh_YU.utf8 289b8851fccSafresh1sh_YU.UTF-8 2906fb12b70Safresh1sk_SK 2916fb12b70Safresh1sk_SK.utf8 292b8851fccSafresh1sk_SK.UTF-8 2936fb12b70Safresh1sl_SI 2946fb12b70Safresh1sl_SI.utf8 295b8851fccSafresh1sl_SI.UTF-8 2966fb12b70Safresh1sq_AL 2976fb12b70Safresh1sq_AL.utf8 298b8851fccSafresh1sq_AL.UTF-8 2996fb12b70Safresh1sr_CS 3006fb12b70Safresh1sr_CS.utf8 301b8851fccSafresh1sr_CS.UTF-8 3026fb12b70Safresh1sv_FI 3036fb12b70Safresh1sv_FI@euro 3046fb12b70Safresh1sv_FI.utf8 305b8851fccSafresh1sv_FI.UTF-8 3066fb12b70Safresh1sv_SE 3076fb12b70Safresh1sv_SE.iso885915 3086fb12b70Safresh1sv_SE.utf8 309b8851fccSafresh1sv_SE.UTF-8 3106fb12b70Safresh1tg_TJ 3116fb12b70Safresh1tg_TJ.utf8 312b8851fccSafresh1tg_TJ.UTF-8 3136fb12b70Safresh1tr_TR 3146fb12b70Safresh1tr_TR.utf8 315b8851fccSafresh1tr_TR.UTF-8 3166fb12b70Safresh1tt_RU.utf8 317b8851fccSafresh1tt_RU.UTF-8 3186fb12b70Safresh1uk_UA 3196fb12b70Safresh1uk_UA.utf8 320b8851fccSafresh1uk_UA.UTF-8 3216fb12b70Safresh1vi_VN 3226fb12b70Safresh1vi_VN.tcvn 3236fb12b70Safresh1wa_BE 3246fb12b70Safresh1wa_BE@euro 3256fb12b70Safresh1wa_BE.utf8 326b8851fccSafresh1wa_BE.UTF-8 327