1b39c5158Smillert#!/usr/bin/perl -w 2b39c5158Smillert 3b39c5158SmillertBEGIN { 4b39c5158Smillert if ($ENV{PERL_CORE}) { 5b39c5158Smillert require Config; 6b39c5158Smillert if ($Config::Config{'extensions'} !~ /\bSocket\b/) { 7b39c5158Smillert print "1..0 # Skip: Socket not built - IO.pm uses Socket"; 8b39c5158Smillert exit 0; 9b39c5158Smillert } 10b39c5158Smillert } 11b39c5158Smillert} 12b39c5158Smillert 13b39c5158Smillertuse strict; 14b39c5158Smillertuse File::Path; 15b39c5158Smillertuse File::Spec; 16b39c5158Smillertrequire($ENV{PERL_CORE} ? "../../t/test.pl" : "./t/test.pl"); 17b39c5158Smillertplan(tests => 18); 18b39c5158Smillert 19b39c5158Smillert{ 20b39c5158Smillert require XSLoader; 21b39c5158Smillert 22b39c5158Smillert my @load; 23b39c5158Smillert local $^W; 24898184e3Ssthen my $xsl = \&XSLoader::load; 25b39c5158Smillert local *XSLoader::load = sub { 26b39c5158Smillert push @load, \@_; 27898184e3Ssthen &$xsl(@_); 28b39c5158Smillert }; 29b39c5158Smillert 30b39c5158Smillert # use_ok() calls import, which we do not want to do 31b39c5158Smillert require_ok( 'IO' ); 32b39c5158Smillert ok( @load, 'IO should call XSLoader::load()' ); 33b39c5158Smillert is( $load[0][0], 'IO', '... loading the IO library' ); 34b39c5158Smillert is( $load[0][1], $IO::VERSION, '... with the current .pm version' ); 35b39c5158Smillert} 36b39c5158Smillert 37b39c5158Smillertmy @default = map { "IO/$_.pm" } qw( Handle Seekable File Pipe Socket Dir ); 38b39c5158Smillertdelete @INC{ @default }; 39b39c5158Smillert 40b39c5158Smillertmy $warn = '' ; 41b39c5158Smillertlocal $SIG{__WARN__} = sub { $warn = "@_" } ; 42b39c5158Smillert 43b39c5158Smillert{ 44b39c5158Smillert no warnings ; 45b39c5158Smillert IO->import(); 46b39c5158Smillert is( $warn, '', "... import default, should not warn"); 47b39c5158Smillert $warn = '' ; 48b39c5158Smillert} 49b39c5158Smillert 50b39c5158Smillert{ 51b39c5158Smillert local $^W = 0; 5291f110e0Safresh1 no if $^V >= 5.17.4, warnings => "deprecated"; 53b39c5158Smillert IO->import(); 54b39c5158Smillert is( $warn, '', "... import default, should not warn"); 55b39c5158Smillert $warn = '' ; 56b39c5158Smillert} 57b39c5158Smillert 58b39c5158Smillert{ 59b39c5158Smillert local $^W = 1; 60b39c5158Smillert IO->import(); 61b39c5158Smillert like( $warn, qr/^Parameterless "use IO" deprecated at/, 62b39c5158Smillert "... import default, should warn"); 63b39c5158Smillert $warn = '' ; 64b39c5158Smillert} 65b39c5158Smillert 66b39c5158Smillert{ 67b39c5158Smillert use warnings 'deprecated' ; 68b39c5158Smillert IO->import(); 69b39c5158Smillert like( $warn, qr/^Parameterless "use IO" deprecated at/, 70b39c5158Smillert "... import default, should warn"); 71b39c5158Smillert $warn = '' ; 72b39c5158Smillert} 73b39c5158Smillert 74b39c5158Smillert{ 75b39c5158Smillert use warnings ; 76b39c5158Smillert IO->import(); 77b39c5158Smillert like( $warn, qr/^Parameterless "use IO" deprecated at/, 78b39c5158Smillert "... import default, should warn"); 79b39c5158Smillert $warn = '' ; 80b39c5158Smillert} 81b39c5158Smillert 82b39c5158Smillertforeach my $default (@default) 83b39c5158Smillert{ 84b39c5158Smillert ok( exists $INC{ $default }, "... import should default load $default" ); 85b39c5158Smillert} 86b39c5158Smillert 87b39c5158Smillerteval { IO->import( 'nothere' ) }; 88b39c5158Smillertlike( $@, qr/Can.t locate IO.nothere\.pm/, '... croaking on any error' ); 89b39c5158Smillert 90b39c5158Smillertmy $fakedir = File::Spec->catdir( 'lib', 'IO' ); 91b39c5158Smillertmy $fakemod = File::Spec->catfile( $fakedir, 'fakemod.pm' ); 92b39c5158Smillert 93b39c5158Smillertmy $flag; 94b39c5158Smillertif ( -d $fakedir or mkpath( $fakedir )) 95b39c5158Smillert{ 96*5759b3d2Safresh1 if (open( OUT, '>', $fakemod )) 97b39c5158Smillert { 98b39c5158Smillert (my $package = <<' END_HERE') =~ tr/\t//d; 99b39c5158Smillert package IO::fakemod; 100b39c5158Smillert 101b39c5158Smillert sub import { die "Do not import!\n" } 102b39c5158Smillert 103b39c5158Smillert sub exists { 1 } 104b39c5158Smillert 105b39c5158Smillert 1; 106b39c5158Smillert END_HERE 107b39c5158Smillert 108b39c5158Smillert print OUT $package; 109b39c5158Smillert } 110b39c5158Smillert 111b39c5158Smillert if (close OUT) 112b39c5158Smillert { 113b39c5158Smillert $flag = 1; 114b39c5158Smillert push @INC, 'lib'; 115b39c5158Smillert } 116b39c5158Smillert} 117b39c5158Smillert 118b39c5158SmillertSKIP: 119b39c5158Smillert{ 120b39c5158Smillert skip("Could not write to disk", 2 ) unless $flag; 121b39c5158Smillert eval { IO->import( 'fakemod' ) }; 122b39c5158Smillert ok( IO::fakemod::exists(), 'import() should import IO:: modules by name' ); 123b39c5158Smillert is( $@, '', '... and should not call import() on imported modules' ); 124b39c5158Smillert} 125b39c5158Smillert 126b39c5158SmillertEND 127b39c5158Smillert{ 128b39c5158Smillert 1 while unlink $fakemod; 129b39c5158Smillert rmdir $fakedir; 130b39c5158Smillert} 131