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