lib/locale.t: Improve skipping of incompatible locales
authorKarl Williamson <khw@cpan.org>
Sat, 29 Oct 2016 18:24:21 +0000 (12:24 -0600)
committerKarl Williamson <khw@cpan.org>
Tue, 29 Nov 2016 00:15:24 +0000 (17:15 -0700)
Perl works properly with only a subset of the possible locales out
there.  This improves the detection of those and the skipping.

lib/locale.t

index 4a2cb75..9695d86 100644 (file)
@@ -750,8 +750,9 @@ debug "Scanning for locales...\n";
 
 require POSIX; import POSIX ':locale_h';
 
-my @Locale = find_locales([ 'LC_CTYPE', 'LC_NUMERIC', 'LC_ALL' ]);
-my @include_incompatible_locales = find_locales('LC_CTYPE',
+my $categories = [ 'LC_CTYPE', 'LC_NUMERIC', 'LC_ALL' ];
+my @Locale = find_locales($categories);
+my @include_incompatible_locales = find_locales($categories,
                                                 'even incompatible locales');
 
 # The locales included in the incompatible list that aren't in the compatible
@@ -778,12 +779,16 @@ if (@Locale < @include_incompatible_locales) {
             push @warnings, ($warning =~ s/\n/\n# /sgr);
         };
 
-        setlocale(&POSIX::LC_CTYPE, $bad_locale);
+        my $ret = setlocale(&POSIX::LC_CTYPE, $bad_locale);
 
         my $message = "testing of locale '$bad_locale' is skipped";
         if (@warnings) {
             skip $message . ":\n# " . join "\n# ", @warnings;
         }
+        elsif (! $ret) {
+            skip("$message:\n#"
+               . " setlocale(&POSIX::LC_CTYPE, '$bad_locale') failed");
+        }
         else {
             fail $message . ", because it is was found to be incompatible with"
                           . " Perl, but could not discern reason";