#!perl -w use strict; use Test::More tests => 18; use IO::Handle; use File::Spec; BEGIN{ use_ok('PerlIO::Util'); } sub anonio(){ return select select my $anonio; } my %l; my @layers = PerlIO::Util->known_layers(); @l{ @layers } = (); ok scalar(@layers), 'known_layers()'; ok exists $l{raw}, ':raw exists'; ok exists $l{crlf}, ':crlf exists'; # IO::Handle::push_layer()/pop_layer() my $s = 'bar'; @layers = DATA->get_layers(); DATA->push_layer(scalar => \$s); is_deeply [DATA->get_layers()], [@layers, 'scalar'], 'push_layer(scalar)'; is scalar(), 'bar', '... pushed correctly'; DATA->pop_layer(); is_deeply [DATA->get_layers()], \@layers, 'pop_layer()'; is scalar(), "foo\n", '... popped correctly'; DATA->push_layer(':utf8'); is_deeply [DATA->get_layers()], [@layers, 'utf8'], 'allows ":foo" style'; DATA->pop_layer(); is *DATA->push_layer('crlf'), \*DATA, 'push_layer() returns self'; is *DATA->pop_layer(), 'crlf', 'pop_layer() returns the name of the poped layer'; # open() my $io = PerlIO::Util->open('<', \(my $x = 'foo')); ok $io, 'PerlIO::Util->open()'; ok defined( fileno $io ), "... opened"; # checks on errors eval{ local $INC{'PerlIO/foo.pm'} = __FILE__; DATA->push_layer('foo'); }; like $@, qr/Unknown PerlIO layer/, 'push_layer(): Unknown PerlIO layer'; eval{ anonio()->push_layer('raw'); }; like $@, qr/Invalid filehandle/, 'push_layer(): Invalid filehandle'; ok !(anonio()->pop_layer()), 'pop_layer(): returns false'; eval{ PerlIO::Util->open('file'); }; like $@, qr/Usage/i, 'open(): too few arguments'; eval{ PerlIO::Util->open('<', 'no such file'); }; like $@, qr/Cannot open/i, 'open(): cannot open file'; __DATA__ foo