xref: /openbsd-src/gnu/usr.bin/perl/cpan/version/t/07locale.t (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
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