I18N-Langinfo/t/Langinfo.t: Reinstate tests, modernize
authorKarl Williamson <khw@cpan.org>
Thu, 7 Sep 2017 22:25:33 +0000 (16:25 -0600)
committerKarl Williamson <khw@cpan.org>
Sun, 10 Sep 2017 03:27:44 +0000 (21:27 -0600)
The comments say that a bunch of tests were disabled due to the poor
support of nl_langinfo() at the time, 2001.  I haven't seen these issues
lately, and so am reinstating many of the tests, using the modern
Test::More that the rest of the file in the meantime had been updated to
use.  The tests that weren't reinstated were because results for them
may vary by platform.

ext/I18N-Langinfo/t/Langinfo.t

index deaaf28..25d30e6 100644 (file)
@@ -8,10 +8,25 @@ plan skip_all => "I18N::Langinfo or POSIX unavailable"
 
 my @constants = qw(ABDAY_1 DAY_1 ABMON_1 MON_1 RADIXCHAR AM_STR THOUSEP D_T_FMT D_FMT T_FMT);
 
-plan tests => 1 + 3 * @constants;
+my %want =
+    (
+        ABDAY_1        => "Sun",
+        DAY_1  => "Sunday",
+        ABMON_1        => "Jan",
+        MON_1  => "January",
+        RADIXCHAR      => ".",
+        THOUSEP        => "",
+     );
+
+my @want = sort keys %want;
+
+plan tests => 1 + 3 * @constants + keys(@want);
 
 use_ok('I18N::Langinfo', 'langinfo', @constants);
 
+use POSIX;
+setlocale(LC_ALL, "C");
+
 for my $constant (@constants) {
     SKIP: {
         my $string = eval { langinfo(eval "$constant()") };
@@ -22,53 +37,12 @@ for my $constant (@constants) {
     }
 }
 
-exit(0);
-
-# Background: the langinfo() (in C known as nl_langinfo()) interface
-# is supposed to be a portable way to fetch various language/country
-# (locale) dependent constants like "the first day of the week" or
-# "the decimal separator".  Give a portable (numeric) constant,
-# get back a language-specific string.  That's a comforting fantasy.
-# Now tune in for blunt reality: vendors seem to have implemented for
-# those constants whatever they felt like implementing.  The UNIX
-# standard says that one should have the RADIXCHAR constant for the
-# decimal separator.  Not so for many Linux and BSD implementations.
-# One should have the CODESET constant for returning the current
-# codeset (say, ISO 8859-1).  Not so.  So let's give up any real
-# testing (leave the old testing code here for old times' sake,
-# though.) --jhi
-
-my %want =
-    (
-     ABDAY_1   => "Sun",
-     DAY_1     => "Sunday",
-     ABMON_1   => "Jan",
-     MON_1     => "January",
-     RADIXCHAR => ".",
-     AM_STR    => qr{^(?:am|a\.m\.)$}i,
-     THOUSEP   => "",
-     D_T_FMT   => qr{^%a %b %[de] %H:%M:%S %Y$},
-     D_FMT     => qr{^%m/%d/%y$},
-     T_FMT     => qr{^%H:%M:%S$},
-     );
-
-    
-my @want = sort keys %want;
-
-print "1..", scalar @want, "\n";
-    
 for my $i (1..@want) {
     my $try = $want[$i-1];
     eval { I18N::Langinfo->import($try) };
-    unless ($@) {
-       my $got = langinfo(&$try);
-       if (ref $want{$try} && $got =~ $want{$try} || $got eq $want{$try}) {
-           print qq[ok $i - $try is "$got"\n];
-       } else {
-           print qq[not ok $i - $try is "$got" not "$want{$try}"\n];
-       }
-    } else {
-       print qq[ok $i - Skip: $try not defined\n];
+    SKIP: {
+        skip "$try not defined", 1, if $@;
+        no strict 'refs';
+        is (langinfo(&$try), $want{$try}, "$try => '$want{$try}'");
     }
 }
-