16fb12b70Safresh1#!./perl
26fb12b70Safresh1
36fb12b70Safresh1use strict;
4*b8851fccSafresh1use warnings;
56fb12b70Safresh1
66fb12b70Safresh1use Test::More tests => 21;
76fb12b70Safresh1use Scalar::Util qw(openhandle);
86fb12b70Safresh1
96fb12b70Safresh1ok(defined &openhandle, 'defined');
106fb12b70Safresh1
116fb12b70Safresh1{
126fb12b70Safresh1    my $fh = \*STDERR;
136fb12b70Safresh1    is(openhandle($fh), $fh, 'STDERR');
146fb12b70Safresh1
156fb12b70Safresh1    is(fileno(openhandle(*STDERR)), fileno(STDERR), 'fileno(STDERR)');
166fb12b70Safresh1}
176fb12b70Safresh1
186fb12b70Safresh1{
196fb12b70Safresh1    use vars qw(*CLOSED);
206fb12b70Safresh1    is(openhandle(*CLOSED), undef, 'closed');
216fb12b70Safresh1}
226fb12b70Safresh1
236fb12b70Safresh1SKIP: {
246fb12b70Safresh1    skip "3-arg open only on 5.6 or later", 1 if $]<5.006;
256fb12b70Safresh1
266fb12b70Safresh1    open my $fh, "<", $0;
276fb12b70Safresh1    skip "could not open $0 for reading: $!", 2 unless $fh;
286fb12b70Safresh1    is(openhandle($fh), $fh, "works with indirect filehandles");
296fb12b70Safresh1    close($fh);
306fb12b70Safresh1    is(openhandle($fh), undef, "works with indirect filehandles");
316fb12b70Safresh1}
326fb12b70Safresh1
336fb12b70Safresh1SKIP: {
346fb12b70Safresh1    skip "in-memory files only on 5.8 or later", 2 if $]<5.008;
356fb12b70Safresh1
366fb12b70Safresh1    open my $fh, "<", \"in-memory file";
376fb12b70Safresh1    skip "could not open in-memory file: $!", 2 unless $fh;
386fb12b70Safresh1    is(openhandle($fh), $fh, "works with in-memory files");
396fb12b70Safresh1    close($fh);
406fb12b70Safresh1    is(openhandle($fh), undef, "works with in-memory files");
416fb12b70Safresh1}
426fb12b70Safresh1
436fb12b70Safresh1ok(openhandle(\*DATA), "works for \*DATA");
446fb12b70Safresh1ok(openhandle(*DATA), "works for *DATA");
456fb12b70Safresh1ok(openhandle(*DATA{IO}), "works for *DATA{IO}");
466fb12b70Safresh1
476fb12b70Safresh1{
486fb12b70Safresh1    require IO::Handle;
496fb12b70Safresh1    my $fh = IO::Handle->new_from_fd(fileno(*STDERR), 'w');
506fb12b70Safresh1    skip "new_from_fd(fileno(*STDERR)) failed", 2 unless $fh;
516fb12b70Safresh1    ok(openhandle($fh), "works for IO::Handle objects");
526fb12b70Safresh1
536fb12b70Safresh1    ok(!openhandle(IO::Handle->new), "unopened IO::Handle");
546fb12b70Safresh1}
556fb12b70Safresh1
566fb12b70Safresh1{
576fb12b70Safresh1    require IO::File;
586fb12b70Safresh1    my $fh = IO::File->new;
596fb12b70Safresh1    $fh->open("< $0")
606fb12b70Safresh1        or skip "could not open $0: $!", 3;
616fb12b70Safresh1    ok(openhandle($fh), "works for IO::File objects");
626fb12b70Safresh1    close($fh);
636fb12b70Safresh1    ok(!openhandle($fh), "works for IO::File objects");
646fb12b70Safresh1
656fb12b70Safresh1    ok(!openhandle(IO::File->new), "unopened IO::File" );
666fb12b70Safresh1}
676fb12b70Safresh1
686fb12b70Safresh1SKIP: {
696fb12b70Safresh1    skip( "Tied handles only on 5.8 or later", 2) if $]<5.008;
706fb12b70Safresh1
716fb12b70Safresh1    use vars qw(*H);
726fb12b70Safresh1
736fb12b70Safresh1    package My::Tie;
746fb12b70Safresh1    require Tie::Handle;
756fb12b70Safresh1    @My::Tie::ISA = qw(Tie::Handle);
766fb12b70Safresh1    sub TIEHANDLE { bless {} }
776fb12b70Safresh1
786fb12b70Safresh1    package main;
796fb12b70Safresh1    tie *H, 'My::Tie';
806fb12b70Safresh1    ok(openhandle(*H), "tied handles are always ok");
816fb12b70Safresh1    ok(openhandle(\*H), "tied handle refs are always ok");
826fb12b70Safresh1}
836fb12b70Safresh1
846fb12b70Safresh1ok !openhandle(undef),   "undef is not a filehandle";
856fb12b70Safresh1ok !openhandle("STDIN"), "strings are not filehandles";
866fb12b70Safresh1ok !openhandle(0),       "integers are not filehandles";
876fb12b70Safresh1
886fb12b70Safresh1
896fb12b70Safresh1__DATA__
90