The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use Test::More;
use File::Slurp;

use IO::Handle ;

use UNIVERSAL ;

plan tests => 4;

my $path = "data.txt";
my $data = "random junk\n";

# create an object
my $obj = FileObject->new($path);
isa_ok( $obj, 'FileObject' );
is( "$obj", $path, "check that the object correctly stringifies" );

my $is_glob = eval{ $obj->isa( 'GLOB' ) } ;
#print "GLOB $is_glob\n" ;

my $is_io = eval{ $obj->isa( 'IO' ) } ;
#print "IO $is_io\n" ;

my $io = IO::Handle->new() ;
#print "IO2: $io\n" ;

my $is_io2 = eval{ $io->isa( 'GLOB' ) } ;
#print "IO2 $is_io2\n" ;

open( FH, "<$0" ) or die "can't open $0: $!" ;

my $io3 = *FH{IO} ;
#print "IO3: $io3\n" ;

my $is_io3 = eval{ $io3->isa( 'IO' ) } ;
#print "IO3 $is_io3\n" ;

my $io4 = *FH{GLOB} ;
#print "IO4: $io4\n" ;

my $is_io4 = eval{ $io4->isa( 'GLOB' ) } ;
#print "IO4 $is_io4\n" ;


SKIP: {
    # write something to that file
    open(FILE, ">$obj") or skip 4, "can't write to '$path': $!";
    print FILE $data;
    close(FILE);

    # pass it to read_file()
    my $content = eval { read_file($obj) };
    is( $@, '', "passing an object to read_file()" );
    is( $content, $data, "checking that the content matches the data" );
}

unlink $path;


# the following mimics the parts from Path::Class causing 
# problems with File::Slurp
package FileObject;
use overload
    q[""] => \&stringify, fallback => 1;

sub new {
    return bless { path => $_[1] }, $_[0]
}

sub stringify {
    return $_[0]->{path}
}