What does an empty PERLIO= mean, anyway?
[p5sagit/p5-mst-13.2.git] / t / io / layers.t
index 15359c1..6f161cd 100644 (file)
@@ -8,12 +8,18 @@ BEGIN {
        print "1..0 # Skip: not perlio\n";
        exit 0;
     }
+    if (exists $ENV{PERLIO} && $ENV{PERLIO} !~ /^(stdio|perlio|mmap)$/) {
+       print "1..0 # PERLIO='$ENV{PERLIO}' unknown\n";
+       exit 0;
+    }
 }
 
 plan tests => 43;
 
 use Config;
 
+my $NONSTDIO = exists $ENV{PERLIO} && $ENV{PERLIO} ne 'stdio';
+
 SKIP: {
     skip("This perl does not have Encode", 43)
        unless " $Config{extensions} " =~ / Encode /;
@@ -21,14 +27,21 @@ SKIP: {
     sub check {
        my ($result, $expected, $id) = @_;
        my $n = scalar @$expected;
-       is($n, scalar @$expected, "$id layers = $n");
+       is($n, scalar @$expected, "$id - layers = $n");
+       if ($NONSTDIO) {
+           # Get rid of "unix" and similar OS-specific low lever layer.
+           shift(@$result);
+           # Change expectations.
+           $expected->[0] = $ENV{PERLIO} if $expected->[0] eq "stdio";
+       }
        for (my $i = 0; $i < $n; $i++) {
            my $j = $expected->[$i];
            if (ref $j eq 'CODE') {
-               ok($j->($result->[$i]), "$id $i is ok");
+               ok($j->($result->[$i]), "$id - $i is ok");
            } else {
                is($result->[$i], $j,
-                  sprintf("$id $i is %s", defined $j ? $j : "undef"));
+                  sprintf("$id - $i is %s",
+                          defined $j ? $j : "undef"));
            }
        }
     }
@@ -87,10 +100,17 @@ SKIP: {
 
     binmode(F, ":raw :encoding(latin1)"); # "latin1" will be canonized
 
-    check([ PerlIO::get_layers(F, details => 1) ],
-         [ "stdio",    undef,        sub { $_[0] > 0 },
-           "encoding", "iso-8859-1", sub { $_[0] & PerlIO::F_UTF8() } ],
-         ":raw:encoding(latin1)");
+    {
+       my @results = PerlIO::get_layers(F, details => 1);
+
+       # Get rid of "unix" and undef.
+       splice(@results, 0, 2) if $NONSTDIO;
+
+       check([ @results ],
+             [ "stdio",    undef,        sub { $_[0] > 0 },
+               "encoding", "iso-8859-1", sub { $_[0] & PerlIO::F_UTF8() } ],
+             ":raw:encoding(latin1)");
+    }
 
     binmode(F);