From 9c6df44eda98e5e43bb8a8d4d71688ae77f9a590 Mon Sep 17 00:00:00 2001 From: Niko Tyni Date: Wed, 27 Oct 2010 09:49:38 +0300 Subject: [PATCH] Refactor LC_NUMERIC test out of t/run/fresh_perl.t Neither lib/locale.t nor t/run/fresh_perl.t should be used for new tests, so take the locale related tests and the setup code from fresh_perl.t to make ground for more. --- MANIFEST | 1 + t/run/fresh_perl.t | 36 ------------------------------------ t/run/locale.t | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 36 deletions(-) create mode 100644 t/run/locale.t diff --git a/MANIFEST b/MANIFEST index 22d4ca6..c19bb4b 100644 --- a/MANIFEST +++ b/MANIFEST @@ -4802,6 +4802,7 @@ t/re/uniprops.t Test unicode \p{} regex constructs t/run/cloexec.t Test close-on-exec. t/run/exit.t Test perl's exit status. t/run/fresh_perl.t Tests that require a fresh perl. +t/run/locale.t Tests related to locale handling t/run/noswitch.t Test aliasing ARGV for other switch tests t/run/runenv.t Test if perl honors its environment variables. t/run/script.t See if script invocation works diff --git a/t/run/fresh_perl.t b/t/run/fresh_perl.t index 3666f09..927d7f6 100644 --- a/t/run/fresh_perl.t +++ b/t/run/fresh_perl.t @@ -565,42 +565,6 @@ EOT EXPECT ok ######## -# This test is here instead of lib/locale.t because -# the bug depends on in the internal state of the locale -# settings and pragma/locale messes up that state pretty badly. -# We need a "fresh run". -BEGIN { - eval { require POSIX }; - if ($@) { - exit(0); # running minitest? - } -} -use Config; -my $have_setlocale = $Config{d_setlocale} eq 'define'; -$have_setlocale = 0 if $@; -# Visual C's CRT goes silly on strings of the form "en_US.ISO8859-1" -# and mingw32 uses said silly CRT -$have_setlocale = 0 if (($^O eq 'MSWin32' || $^O eq 'NetWare') && $Config{cc} =~ /^(cl|gcc)/i); -exit(0) unless $have_setlocale; -my @locales; -if (-x "/usr/bin/locale" && open(LOCALES, "/usr/bin/locale -a 2>/dev/null|")) { - while() { - chomp; - push(@locales, $_); - } - close(LOCALES); -} -exit(0) unless @locales; -for (@locales) { - use POSIX qw(locale_h); - use locale; - setlocale(LC_NUMERIC, $_) or next; - my $s = sprintf "%g %g", 3.1, 3.1; - next if $s eq '3.1 3.1' || $s =~ /^(3.+1) \1$/; - print "$_ $s\n"; -} -EXPECT -######## # [ID 20001202.002] and change #8066 added 'at -e line 1'; # reversed again as a result of [perl #17763] die qr(x) diff --git a/t/run/locale.t b/t/run/locale.t new file mode 100644 index 0000000..9f9d32c --- /dev/null +++ b/t/run/locale.t @@ -0,0 +1,50 @@ +#!./perl +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require './test.pl'; # for fresh_perl_is() etc +} + +use strict; + +######## +# This test is here instead of lib/locale.t because +# the bug depends on in the internal state of the locale +# settings and pragma/locale messes up that state pretty badly. +# We need a "fresh run". +BEGIN { + eval { require POSIX }; + if ($@) { + skip_all("could not load the POSIX module"); # running minitest? + } +} +use Config; +my $have_setlocale = $Config{d_setlocale} eq 'define'; +$have_setlocale = 0 if $@; +# Visual C's CRT goes silly on strings of the form "en_US.ISO8859-1" +# and mingw32 uses said silly CRT +$have_setlocale = 0 if (($^O eq 'MSWin32' || $^O eq 'NetWare') && $Config{cc} =~ /^(cl|gcc)/i); +skip_all("no setlocale available") unless $have_setlocale; +my @locales; +if (-x "/usr/bin/locale" && open(LOCALES, "/usr/bin/locale -a 2>/dev/null|")) { + while() { + chomp; + push(@locales, $_); + } + close(LOCALES); +} +skip_all("no locales available") unless @locales; + +plan tests => &last; +fresh_perl_is("for (qw(@locales)) {\n" . <<'EOF', + use POSIX qw(locale_h); + use locale; + setlocale(LC_NUMERIC, "$_") or next; + my $s = sprintf "%g %g", 3.1, 3.1; + next if $s eq '3.1 3.1' || $s =~ /^(3.+1) \1$/; + print "$_ $s\n"; +} +EOF + "", {}, "no locales where LC_NUMERIC breaks"); + +sub last { 1 } -- 2.7.4