xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/ext/PerlIO/t/via.t (revision 0:68f95e015346)
1#!./perl
2
3use strict;
4use warnings;
5
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
17use Test::More tests => 18;
18
19my $fh;
20my $a = join("", map { chr } 0..255) x 10;
21my $b;
22
23BEGIN { use_ok('PerlIO::via::QuotedPrint'); }
24
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');
27ok( (print $fh $a), "print to output file");
28ok( close($fh), 'close output file');
29
30ok( open($fh,"<via(PerlIO::via::QuotedPrint)", $tmp), 'open QuotedPrint for input');
31{ local $/; $b = <$fh> }
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';
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
48    ok( ! open($fh,">via(Unknown::Module)", $tmp), 'open via Unknown::Module will fail');
49    like( $warnings, qr/^Cannot find package 'Unknown::Module'/,  'warn about unknown package' );
50
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
61{
62package Incomplete::Module;
63}
64
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" );
69
70    $warnings = '';
71    no warnings 'layer';
72    ok( ! open($fh,">via(Unknown::Module)", $tmp), 'open via Unknown::Module will fail');
73    is( $warnings, "",  "don't warn about unknown package" );
74}
75
76my $obj = '';
77sub Foo::PUSHED			{ $obj = shift; -1; }
78sub PerlIO::via::Bar::PUSHED	{ $obj = shift; -1; }
79open $fh, '<:via(Foo)', "foo";
80is( $obj, 'Foo', 'search for package Foo' );
81open $fh, '<:via(Bar)', "bar";
82is( $obj, 'PerlIO::via::Bar', 'search for package PerlIO::via::Bar' );
83
84END {
85    1 while unlink $tmp;
86}
87
88