TODO or skip certain failing locale tests on cygwin
authorKarl Williamson <khw@cpan.org>
Mon, 22 Feb 2016 18:27:50 +0000 (11:27 -0700)
committerKarl Williamson <khw@cpan.org>
Fri, 4 Mar 2016 03:55:18 +0000 (20:55 -0700)
This is a known problem which cygwin has fixed in 2.5

Tony Cook tested this and found and fixed several bugs in it before this
final version was made.

lib/locale.t
t/run/locale.t

index 6b5616c..dc31b46 100644 (file)
@@ -53,6 +53,12 @@ my %known_bad_locales = (
                           os390 => qr/ ^ italian /ix,
                         );
 
+# cygwin isn't returning proper radix length in this locale, but supposedly to
+# be fixed in later versions.
+if ($^O eq 'cygwin' && version->new(($Config{osvers} =~ /^(\d+(?:\.\d+)+)/)[0]) le v2.4.1) {
+    $known_bad_locales{'cygwin'} = qr/ ^ ps_AF /ix;
+}
+
 use Dumpvalue;
 
 my $dumper = Dumpvalue->new(
@@ -2025,12 +2031,14 @@ foreach my $Locale (@Locale) {
 
     report_result($Locale, ++$locales_test_number, $ok16);
     $test_names{$locales_test_number} = 'Verify that a sprintf of a number with a UTF-8 radix yields UTF-8';
+    $problematical_tests{$locales_test_number} = 1;
 
     report_result($Locale, ++$locales_test_number, $ok17);
     $test_names{$locales_test_number} = 'Verify that a sprintf of a number outside locale scope uses a dot radix';
 
     report_result($Locale, ++$locales_test_number, $ok18);
     $test_names{$locales_test_number} = 'Verify that a sprintf of a number back within locale scope uses locale radix';
+    $problematical_tests{$locales_test_number} = 1;
 
     report_result($Locale, ++$locales_test_number, $ok19);
     $test_names{$locales_test_number} = 'Verify that strftime doesn\'t return "%p" in locales where %p is empty';
index eb1202b..09e76f8 100644 (file)
@@ -47,7 +47,13 @@ SKIP: {
     isnt(setlocale(LC_ALL), "C", "retrieving current non-C LC_ALL doesn't give 'C'");
 }
 
-fresh_perl_is("for (qw(@locales)) {\n" . <<'EOF',
+# Skip this locale on these cywgwin versions as the returned radix character
+# length is wrong
+my @test_numeric_locales = ($^O ne 'cygwin' || version->new(($Config{'osvers'} =~ /^(\d+(?:\.\d+)+)/)[0]) gt v2.4.1)
+                           ? @locales
+                           : grep { $_ !~ m/ps_AF/i } @locales;
+
+fresh_perl_is("for (qw(@test_numeric_locales)) {\n" . <<'EOF',
     use POSIX qw(locale_h);
     use locale;
     setlocale(LC_NUMERIC, "$_") or next;