This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Skip various locale tests when locales are not available
authorKarl Williamson <khw@cpan.org>
Mon, 9 Mar 2015 04:26:17 +0000 (22:26 -0600)
committerKarl Williamson <khw@cpan.org>
Mon, 9 Mar 2015 15:37:08 +0000 (09:37 -0600)
It is possible to compile Perl without locales, and some platforms may
not have them available properly.  These tests were failing under these
conditions.  This commit uses the new infrastructure in loc_tools.pl to
centralize the knowledge of how to determine if locales are available.

ext/POSIX/t/posix.t
ext/re/t/reflags.t
lib/locale.pm
lib/locale.t
t/lib/warnings/regexec
t/lib/warnings/utf8
t/op/quotemeta.t
t/op/taint.t
t/re/charset.t
t/re/pat.t
t/uni/fold.t

index 9495fcc..ec25d3a 100644 (file)
@@ -6,6 +6,7 @@ BEGIN {
        print "1..0\n";
        exit 0;
     }
+    require 'loc_tools.pl';
 }
 
 use Test::More tests => 120;
@@ -344,7 +345,8 @@ eval { use strict; POSIX->import("S_ISBLK"); my $x = S_ISBLK };
 unlike( $@, qr/Can't use string .* as a symbol ref/, "Can import autoloaded constants" );
 
 SKIP: {
-    skip("localeconv() not present", 26) unless $Config{d_locconv};
+    skip("locales not available", 26) unless locales_enabled(qw(NUMERIC MONETARY));
+    skip("localeconv() not available", 26) unless $Config{d_locconv};
     my $conv = localeconv;
     is(ref $conv, 'HASH', 'localconv returns a hash reference');
 
index 03c35a0..fd1c35a 100644 (file)
@@ -6,6 +6,7 @@ BEGIN {
                print "1..0 # Skip -- Perl configured without re module\n";
                exit 0;
        }
+        require 'loc_tools.pl';
 }
 
 use strict;
@@ -66,12 +67,7 @@ ok 'f r e l p' =~ /f r e l p/,
 }
 
 SKIP: {
-  if (
-      !$Config::Config{d_setlocale}
-   || $Config::Config{ccflags} =~ /\bD?NO_LOCALE\b/
-  ) {
-    skip "no locale support", 7
-  }
+  skip "no locale support", 7 unless locales_enabled('CTYPE');
   use locale;
   use re '/u';
   is qr//, '(?^u:)', 'use re "/u" with active locale';
index 61e77c7..9cc243f 100644 (file)
@@ -1,6 +1,6 @@
 package locale;
 
-our $VERSION = '1.05';
+our $VERSION = '1.06';
 use Config;
 
 $Carp::Internal{ (__PACKAGE__) } = 1;
index 5012d3b..9238290 100644 (file)
@@ -19,13 +19,13 @@ BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
     unshift @INC, '.';
-    require Config; import Config;
-    if (!$Config{d_setlocale} || $Config{ccflags} =~ /\bD?NO_LOCALE\b/) {
+    require './loc_tools.pl';
+    unless (locales_enabled('LC_CTYPE')) {
        print "1..0\n";
        exit;
     }
-    require './loc_tools.pl';
     $| = 1;
+    require Config; import Config;
 }
 
 use strict;
@@ -1856,7 +1856,9 @@ foreach my $Locale (@Locale) {
             # first).  This is only done if the current locale has LC_MESSAGES
             $ok14 = 1;
             $ok14_5 = 1;
-            if (setlocale(&POSIX::LC_MESSAGES, $Locale)) {
+            if (   locales_enabled('LC_MESSAGES')
+                && setlocale(&POSIX::LC_MESSAGES, $Locale))
+            {
                 foreach my $err (keys %!) {
                     use Errno;
                     $! = eval "&Errno::$err";   # Convert to strerror() output
@@ -1904,6 +1906,7 @@ foreach my $Locale (@Locale) {
     }
 
     $ok21 = 1;
+    if (locales_enabled('LC_MESSAGES')) {
     foreach my $err (keys %!) {
         no locale;
         use Errno;
@@ -1912,6 +1915,7 @@ foreach my $Locale (@Locale) {
         if ("$strerror" =~ /\P{ASCII}/) {
             $ok21 = 0;
             last;
+            }
         }
     }
 
index 3f15db0..d956cb8 100644 (file)
@@ -119,6 +119,10 @@ EXPECT
 
 ########
 # NAME Wide character in non-UTF-8 locale
+require '../loc_tools.pl';
+unless (locales_enabled()) {
+    print("SKIPPED\n# locales not available\n"),exit;
+}
 eval { require POSIX; POSIX->import("locale_h") };
 if ($@) {
     print("SKIPPED\n# no POSIX\n"),exit;
@@ -133,16 +137,16 @@ setlocale(&POSIX::LC_CTYPE, "C");
 "\x{100}" =~ /[\x{100}\x{102}]/l;
 no warnings 'locale';
 EXPECT
-Wide character (U+100) in pattern match (m//) at - line 8.
-Wide character (U+100) in pattern match (m//) at - line 8.
-Wide character (U+100) in pattern match (m//) at - line 9.
-Wide character (U+100) in pattern match (m//) at - line 9.
-Wide character (U+100) in pattern match (m//) at - line 9.
-Wide character (U+100) in pattern match (m//) at - line 10.
-Wide character (U+100) in pattern match (m//) at - line 10.
-Wide character (U+100) in pattern match (m//) at - line 11.
 Wide character (U+100) in pattern match (m//) at - line 12.
 Wide character (U+100) in pattern match (m//) at - line 12.
+Wide character (U+100) in pattern match (m//) at - line 13.
+Wide character (U+100) in pattern match (m//) at - line 13.
+Wide character (U+100) in pattern match (m//) at - line 13.
+Wide character (U+100) in pattern match (m//) at - line 14.
+Wide character (U+100) in pattern match (m//) at - line 14.
+Wide character (U+100) in pattern match (m//) at - line 15.
+Wide character (U+100) in pattern match (m//) at - line 16.
+Wide character (U+100) in pattern match (m//) at - line 16.
 ########
 # NAME \b{} in non-UTF-8 locale
 eval { require POSIX; POSIX->import("locale_h") };
index 4a7cef1..d8f301d 100644 (file)
@@ -583,6 +583,10 @@ close $fh;
 EXPECT
 ########
 # NAME Case change crosses 255/256 under non-UTF8 locale
+require '../loc_tools.pl';
+unless (locales_enabled('LC_CTYPE')) {
+    print("SKIPPED\n# locales not available\n"),exit;
+}
 eval { require POSIX; POSIX->import("locale_h") };
 if ($@) {
     print("SKIPPED\n# no POSIX\n"),exit;
@@ -606,14 +610,18 @@ $a = uc("\x{FB00}");
 $a = ucfirst("\x{149}");
 $a = lcfirst("\x{178}");
 EXPECT
-Can't do lc("\x{178}") on non-UTF-8 locale; resolved to "\x{178}". at - line 10.
-Can't do fc("\x{1E9E}") on non-UTF-8 locale; resolved to "\x{17F}\x{17F}". at - line 11.
-Can't do fc("\x{FB05}") on non-UTF-8 locale; resolved to "\x{FB06}". at - line 12.
-Can't do uc("\x{FB00}") on non-UTF-8 locale; resolved to "\x{FB00}". at - line 13.
-Can't do ucfirst("\x{149}") on non-UTF-8 locale; resolved to "\x{149}". at - line 14.
-Can't do lcfirst("\x{178}") on non-UTF-8 locale; resolved to "\x{178}". at - line 15.
+Can't do lc("\x{178}") on non-UTF-8 locale; resolved to "\x{178}". at - line 14.
+Can't do fc("\x{1E9E}") on non-UTF-8 locale; resolved to "\x{17F}\x{17F}". at - line 15.
+Can't do fc("\x{FB05}") on non-UTF-8 locale; resolved to "\x{FB06}". at - line 16.
+Can't do uc("\x{FB00}") on non-UTF-8 locale; resolved to "\x{FB00}". at - line 17.
+Can't do ucfirst("\x{149}") on non-UTF-8 locale; resolved to "\x{149}". at - line 18.
+Can't do lcfirst("\x{178}") on non-UTF-8 locale; resolved to "\x{178}". at - line 19.
 ########
 # NAME Wide character in non-UTF-8 locale
+require '../loc_tools.pl';
+unless (locales_enabled('LC_CTYPE')) {
+    print("SKIPPED\n# locales not available\n"),exit;
+}
 eval { require POSIX; POSIX->import("locale_h") };
 if ($@) {
     print("SKIPPED\n# no POSIX\n"),exit;
@@ -635,8 +643,8 @@ $a = fc("\x{102}");
 $a = uc("\x{103}");
 $a = ucfirst("\x{104}");
 EXPECT
-Wide character (U+100) in lc at - line 10.
-Wide character (U+101) in lcfirst at - line 11.
-Wide character (U+102) in fc at - line 12.
-Wide character (U+103) in uc at - line 13.
-Wide character (U+104) in ucfirst at - line 14.
+Wide character (U+100) in lc at - line 14.
+Wide character (U+101) in lcfirst at - line 15.
+Wide character (U+102) in fc at - line 16.
+Wide character (U+103) in uc at - line 17.
+Wide character (U+104) in ucfirst at - line 18.
index 9ba3f09..35ed2c6 100644 (file)
@@ -5,6 +5,7 @@ BEGIN {
     @INC = qw(../lib .);
     require Config; import Config;
     require "./test.pl";
+    require "./loc_tools.pl";
 }
 
 plan tests => 60;
@@ -80,7 +81,7 @@ is(length(quotemeta($char)), 1, "quotemeta '\\N{U+DF}'  in UTF-8 length");
     is(length(quotemeta("\x{df}")), 2, "quotemeta Latin1 no unicode_strings quoted length");
 
   SKIP: {
-    skip 'No locale testing without d_setlocale', 8 if(!$Config{d_setlocale});
+    skip 'Locales not available', 8 unless locales_enabled('LC_CTYPE');
     use locale;
 
     my $char = ":";
@@ -109,7 +110,7 @@ is(length(quotemeta($char)), 1, "quotemeta '\\N{U+DF}'  in UTF-8 length");
     is(length(quotemeta("\x{df}")), 1, "quotemeta Latin1 unicode_strings nonquoted length");
 
   SKIP: {
-    skip 'No locale testing without d_setlocale', 12 if(!$Config{d_setlocale});
+    skip 'Locales not available', 12 unless locales_enabled('LC_CTYPE');
     use locale;
 
     my $char = ":";
index de30a9b..08afc78 100644 (file)
@@ -10,6 +10,7 @@
 BEGIN {
     chdir 't' if -d 't';
     require './test.pl';
+    require './loc_tools.pl';
     set_up_inc('../lib');
 }
 
@@ -298,7 +299,7 @@ my $TEST = 'TEST';
     is($one, 'a',      "$desc: \$1 value");
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 10 if(!$Config{d_setlocale});
+        skip 'Locales not available', 10 unless locales_enabled('LC_CTYPE');
 
         $desc = "match with pattern tainted via locale";
 
@@ -351,7 +352,7 @@ my $TEST = 'TEST';
     is($one, 'd',      "$desc: \$1 value");
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 12 if(!$Config{d_setlocale});
+        skip 'Locales not available', 12 unless locales_enabled('LC_CTYPE');
 
         $desc = "match with pattern tainted via locale, list cxt";
 
@@ -503,7 +504,7 @@ my $TEST = 'TEST';
     is($one, 'abcd',   "$desc: \$1 value");
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 18 if(!$Config{d_setlocale});
+        skip 'Locales not available', 18 unless locales_enabled('LC_CTYPE');
 
         $desc = "substitution with pattern tainted via locale";
 
@@ -687,7 +688,7 @@ my $TEST = 'TEST';
        is($one, 'a',      "$desc: \$1 value");
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 10 if(!$Config{d_setlocale});
+        skip 'Locales not available', 10 unless locales_enabled('LC_CTYPE');
 
         $desc = "use re 'taint': match with pattern tainted via locale";
 
@@ -740,7 +741,7 @@ my $TEST = 'TEST';
        is($one, 'd',      "$desc: \$1 value");
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 12 if(!$Config{d_setlocale});
+        skip 'Locales not available', 12 unless locales_enabled('LC_CTYPE');
 
         $desc = "use re 'taint': match with pattern tainted via locale, list cxt";
 
@@ -893,7 +894,7 @@ my $TEST = 'TEST';
        is($one, 'abcd',   "$desc: \$1 value");
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 18 if(!$Config{d_setlocale});
+        skip 'Locales not available', 18 unless locales_enabled('LC_CTYPE');
 
         $desc = "use re 'taint': substitution with pattern tainted via locale";
 
@@ -2297,7 +2298,7 @@ pass("no death when TARG of ref is tainted");
 }
 
 SKIP: {
-    skip 'No locale testing without d_setlocale', 4 if(!$Config{d_setlocale});
+    skip 'Locales not available', 4 unless locales_enabled('LC_CTYPE');
 
     use feature 'fc';
     use locale;
index 4c3e537..7a5852a 100644 (file)
@@ -41,7 +41,7 @@ $testcases{'[:word:]'} = $testcases{'\w'};
 my $utf8_locale;
 
 my @charsets = qw(a d u aa);
-if (! is_miniperl() && $Config{d_setlocale}) {
+if (! is_miniperl() && locales_enabled('LC_CTYPE')) {
     require POSIX;
     my $current_locale = POSIX::setlocale( &POSIX::LC_ALL, "C") // "";
     if ($current_locale eq 'C') {
index a60bfe5..64f6487 100644 (file)
@@ -18,6 +18,7 @@ BEGIN {
     @INC = ('../lib','.','../ext/re');
     require Config; import Config;
     require './test.pl'; require './charset_tools.pl';
+    require './loc_tools.pl';
     skip_all('no re module') unless defined &DynaLoader::boot_DynaLoader;
     skip_all_without_unicode_tables();
 }
@@ -522,7 +523,7 @@ sub run_tests {
         my $locale;
 
       SKIP: {
-            skip 'No locale testing without d_setlocale', 1 if(!$Config{d_setlocale});
+            skip 'Locales not available', 1 unless locales_enabled('LC_CTYPE');
 
             use locale;
             $locale = qr/\b\v$/;
@@ -536,22 +537,21 @@ sub run_tests {
         is(qr/abc$dual/,    '(?^u:abc(?^:\b\v$))', 'Verify retains d meaning when interpolated under locale');
 
       SKIP: {
-            skip 'No locale testing without d_setlocale', 1 if(!$Config{d_setlocale});
+            skip 'Locales not available', 1 unless locales_enabled('LC_CTYPE');
 
             is(qr/abc$locale/,    '(?^u:abc(?^l:\b\v$))', 'Verify retains l when interpolated under unicode_strings');
         }
 
         no feature 'unicode_strings';
       SKIP: {
-            skip 'No locale testing without d_setlocale', 1 if(!$Config{d_setlocale});
-
+            skip 'Locales not available', 1 unless locales_enabled('LC_CTYPE');
             is(qr/abc$locale/,    '(?^:abc(?^l:\b\v$))', 'Verify retains l when interpolated outside locale and unicode strings');
         }
 
         is(qr/def$unicode/,    '(?^:def(?^u:\b\v$))', 'Verify retains u when interpolated outside locale and unicode strings');
 
       SKIP: {
-            skip 'No locale testing without d_setlocale', 2 if(!$Config{d_setlocale});
+            skip 'Locales not available', 2 unless locales_enabled('LC_CTYPE');
 
              use locale;
             is(qr/abc$dual/,    '(?^l:abc(?^:\b\v$))', 'Verify retains d meaning when interpolated under locale');
index deb47f7..149573a 100644 (file)
@@ -446,7 +446,7 @@ SKIP: {
         utf8::upgrade($utf8);
         is(fc($latin1), fc($utf8), "fc() gives the same results for \\x{$_} in Latin-1 and UTF-8 under unicode_strings");
         SKIP: {
-            skip 'No locale testing without d_setlocale', 2 if(!$Config{d_setlocale});
+            skip 'Locales not available', 2 unless locales_enabled('LC_CTYPE');
             use locale;
             is(fc($latin1), lc($latin1), "use locale; fc(qq{\\x{$_}}), lc(qq{\\x{$_}}) when qq{\\x{$_}} is in latin-1");
             is(fc($utf8), lc($utf8), "use locale; fc(qq{\\x{$_}}), lc(qq{\\x{$_}}) when qq{\\x{$_}} is in latin-1");