#!perl use strict; use warnings; use Test::More; use PerlIO::Util; BEGIN{ if(!PerlIO::Layer->find('dir')){ plan skip_all => 'without directory functions'; exit; } else{ plan tests => 22; } } use IO::Dir; use FindBin qw($Bin); use File::Spec; use IO::Seekable qw(SEEK_SET SEEK_CUR SEEK_END); ok open(my $dir, '<:dir', '.'), 'open:dir'; is_deeply [$dir->get_layers()], ['dir'], 'only :dir layer'; my @dirs = <$dir>; is_deeply \@dirs, [ map{ "$_\n" } IO::Dir->new('.')->read() ], '<$dir>'; ok eof($dir), "eof:dir"; seek $dir, 0, 0; # rewind ok !eof($dir), 'eof:dir after seek:dir (cleared)'; my $first = <$dir>; is $first, $dirs[0], 'seek:dir (rewind 1st)'; seek $dir, 0, 0; # rewind $first = <$dir>; is $first, $dirs[0], 'seek:dir (rewind 2nd)'; ok close($dir), 'close:dir'; STDIN->push_layer(dir => '.'); is_deeply [ ], \@dirs, 'push_layer:dir'; is(STDIN->pop_layer(), 'dir', 'pop_layer:dir'); ok open($dir, '<:dir:utf8', '.'), 'open:dir'; ok utf8::is_utf8(scalar <$dir>), 'with :utf8'; binmode $dir; ok !utf8::is_utf8(scalar <$dir>), 'without :utf8'; ok open($dir, '<:dir', '.'), 'open:dir'; ok !seek($dir, 1, SEEK_SET), 'SEEK_SET (NK)'; ok !seek($dir, 1, SEEK_CUR), 'SEEK_CUR (NG)'; ok !seek($dir, 1, SEEK_END), 'SEEK_END (NG)'; $! = 0; ok !open($dir, '>:dir', '.'), "open:dir for writing (\$!='$!')"; #ok $!{EPERM}, "... permission denied (\$!=$!)"; ok !open($dir, '+<:dir', '.'), "open:dir for update (\$!='$!')"; #ok $!{EPERM}, "... permission denied (\$!=$!)"; ok !open($dir, '<:dir', File::Spec->join($Bin, 'util', '.lock')), "open:dir for a file (\$!='$!')"; #ok $!{ENOTDIR}, "... not a directory (\$!=$!)"; ok !open($dir, '<:dir', File::Spec->join($Bin, 'util', '@@@')), "open:dir no such directory (\$!='$!')"; #ok $!{ENOENT}, "... no such file or directory (\$!=$!)"; ok !binmode(STDIN, ':dir'), ':dir without an argument';