#!/usr/bin/perl -w
BEGIN
{
chdir 't' if -d 't';
@INC = '../lib';
}
use strict;
use File::Path;
use File::Spec;
use Test::More tests => 18;
{
local $INC{'XSLoader.pm'} = 1;
local *XSLoader::load;
my @load;
*XSLoader::load = sub {
push @load, \@_;
};
# use_ok() calls import, which we do not want to do
require_ok( 'IO' );
ok( @load, 'IO should call XSLoader::load()' );
is( $load[0][0], 'IO', '... loading the IO library' );
is( $load[0][1], $IO::VERSION, '... with the current .pm version' );
}
my @default = map { "IO/$_.pm" } qw( Handle Seekable File Pipe Socket Dir );
delete @INC{ @default };
my $warn = '' ;
local $SIG{__WARN__} = sub { $warn = "@_" } ;
{
no warnings ;
IO->import();
is( $warn, '', "... import default, should not warn");
$warn = '' ;
}
{
local $^W = 0;
IO->import();
is( $warn, '', "... import default, should not warn");
$warn = '' ;
}
{
local $^W = 1;
IO->import();
like( $warn, qr/^Parameterless "use IO" deprecated at/,
"... import default, should warn");
$warn = '' ;
}
{
use warnings 'deprecated' ;
IO->import();
like( $warn, qr/^Parameterless "use IO" deprecated at/,
"... import default, should warn");
$warn = '' ;
}
{
use warnings ;
IO->import();
like( $warn, qr/^Parameterless "use IO" deprecated at/,
"... import default, should warn");
$warn = '' ;
}
foreach my $default (@default)
{
ok( exists $INC{ $default }, "... import should default load $default" );
}
eval { IO->import( 'nothere' ) };
like( $@, qr/Can.t locate IO.nothere\.pm/, '... croaking on any error' );
my $fakedir = File::Spec->catdir( 'lib', 'IO' );
my $fakemod = File::Spec->catfile( $fakedir, 'fakemod.pm' );
my $flag;
if ( -d $fakedir or mkpath( $fakedir ))
{
if (open( OUT, ">$fakemod"))
{
(my $package = <<' END_HERE') =~ tr/\t//d;
package IO::fakemod;
sub import { die "Do not import!\n" }
sub exists { 1 }
1;
END_HERE
print OUT $package;
}
if (close OUT)
{
$flag = 1;
push @INC, 'lib';
}
}
SKIP:
{
skip("Could not write to disk", 2 ) unless $flag;
eval { IO->import( 'fakemod' ) };
ok( IO::fakemod::exists(), 'import() should import IO:: modules by name' );
is( $@, '', '... and should not call import() on imported modules' );
}
END
{
1 while unlink $fakemod;
rmdir $fakedir;
}