Attempt to fix core-specific logic in IPC::Open2 tests
[p5sagit/p5-mst-13.2.git] / ext / PerlIO-via / t / via.t
CommitLineData
2b8740d8 1#!./perl
2
3BEGIN {
2b8740d8 4 unless (find PerlIO::Layer 'perlio') {
5 print "1..0 # Skip: not perlio\n";
6 exit 0;
7 }
740dabb8 8 require Config;
98641f60 9 if (($Config::Config{'extensions'} !~ m!\bPerlIO/via\b!) ){
740dabb8 10 print "1..0 # Skip -- Perl configured without PerlIO::via module\n";
11 exit 0;
12 }
2b8740d8 13}
14
740dabb8 15use strict;
16use warnings;
17
2b8740d8 18my $tmp = "via$$";
19
4f776d34 20use Test::More tests => 18;
99ef548b 21
22my $fh;
23my $a = join("", map { chr } 0..255) x 10;
24my $b;
2b8740d8 25
e934609f 26BEGIN { use_ok('PerlIO::via::QuotedPrint'); }
2b8740d8 27
e934609f 28ok( !open($fh,"<via(PerlIO::via::QuotedPrint)", $tmp), 'open QuotedPrint for input fails');
29ok( open($fh,">via(PerlIO::via::QuotedPrint)", $tmp), 'open QuotedPrint for output');
99ef548b 30ok( (print $fh $a), "print to output file");
31ok( close($fh), 'close output file');
2b8740d8 32
e934609f 33ok( open($fh,"<via(PerlIO::via::QuotedPrint)", $tmp), 'open QuotedPrint for input');
2b8740d8 34{ local $/; $b = <$fh> }
99ef548b 35ok( close($fh), "close input file");
36
37is($a, $b, 'compare original data with filtered version');
38
39
40{
41 my $warnings = '';
42 local $SIG{__WARN__} = sub { $warnings = join '', @_ };
43
44 use warnings 'layer';
d9dac8cd 45
46 # Find fd number we should be using
47 my $fd = open($fh,">$tmp") && fileno($fh);
48 print $fh "Hello\n";
49 close($fh);
50
e934609f 51 ok( ! open($fh,">via(Unknown::Module)", $tmp), 'open via Unknown::Module will fail');
99ef548b 52 like( $warnings, qr/^Cannot find package 'Unknown::Module'/, 'warn about unknown package' );
2b8740d8 53
d9dac8cd 54 # Now open normally again to see if we get right fileno
55 my $fd2 = open($fh,"<$tmp") && fileno($fh);
56 is($fd2,$fd,"Wrong fd number after failed open");
57
58 my $data = <$fh>;
59
60 is($data,"Hello\n","File clobbered by failed open");
61
62 close($fh);
63
4f776d34 64{
65package Incomplete::Module;
66}
d9dac8cd 67
4f776d34 68 $warnings = '';
69 no warnings 'layer';
70 ok( ! open($fh,">via(Incomplete::Module)", $tmp), 'open via Incomplete::Module will fail');
71 is( $warnings, "", "don't warn about unknown package" );
d9dac8cd 72
99ef548b 73 $warnings = '';
74 no warnings 'layer';
e934609f 75 ok( ! open($fh,">via(Unknown::Module)", $tmp), 'open via Unknown::Module will fail');
99ef548b 76 is( $warnings, "", "don't warn about unknown package" );
d9dac8cd 77}
2b8740d8 78
52f3c1af 79my $obj = '';
80sub Foo::PUSHED { $obj = shift; -1; }
e934609f 81sub PerlIO::via::Bar::PUSHED { $obj = shift; -1; }
82open $fh, '<:via(Foo)', "foo";
52f3c1af 83is( $obj, 'Foo', 'search for package Foo' );
e934609f 84open $fh, '<:via(Bar)', "bar";
85is( $obj, 'PerlIO::via::Bar', 'search for package PerlIO::via::Bar' );
52f3c1af 86
2b8740d8 87END {
88 1 while unlink $tmp;
89}
30ef3321 90