From: Rafael Garcia-Suarez Date: Wed, 29 Aug 2001 09:18:17 +0000 (+0200) Subject: Re: [PATCH] newer tests for the coderef-in-@INC ! X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=47de4e93f8616edfbd1b8b8a2f1b803b497e9aa1;p=p5sagit%2Fp5-mst-13.2.git Re: [PATCH] newer tests for the coderef-in-@INC ! Message-Id: <20010829091817.A4453@rafael> p4raw-id: //depot/perl@11782 --- diff --git a/t/op/inccode.t b/t/op/inccode.t index 85a235d..9173156 100644 --- a/t/op/inccode.t +++ b/t/op/inccode.t @@ -7,27 +7,29 @@ BEGIN { @INC = '../lib'; } -use Config; - -BEGIN { - require Test::More; +use File::Spec; +use File::Temp qw/tempfile/; +use Test::More tests => 30; + +sub get_temp_fh { + my ($fh,$f) = tempfile("DummyModuleXXXX", DIR => File::Spec->curdir, + UNLINK => 1); + print $fh "package ".substr($_[0],0,-3)."; 1;"; + close $fh; + open $fh, $f or die "Can't open $f: $!"; + return $fh; +} - # This test relies on perlio, but the feature being tested does not. - # The dependency should eventually be purged and use something like - # Tie::Handle instead. - if( $Config{useperlio} ) { - Test::More->import(tests => 21); - } - else { - Test::More->import('skip_all'); - } +sub get_addr { + my $str = shift; + $str =~ /(0x[0-9a-f]+)/i; + return $1; } sub fooinc { my ($self, $filename) = @_; if (substr($filename,0,3) eq 'Foo') { - open my $fh, '<', \("package ".substr($filename,0,-3)."; 1;"); - return $fh; + return get_temp_fh($filename); } else { return undef; @@ -40,12 +42,18 @@ ok( !eval { require Bar; 1 }, 'Trying non-magic package' ); ok( eval { require Foo; 1 }, 'require() magic via code ref' ); ok( exists $INC{'Foo.pm'}, ' %INC sees it' ); +is( get_addr($INC{'Foo.pm'}), get_addr(\&fooinc), + ' key is correct in %INC' ); ok( eval "use Foo1; 1;", 'use()' ); ok( exists $INC{'Foo1.pm'}, ' %INC sees it' ); +is( get_addr($INC{'Foo1.pm'}), get_addr(\&fooinc), + ' key is correct in %INC' ); ok( eval { do 'Foo2.pl'; 1 }, 'do()' ); ok( exists $INC{'Foo2.pl'}, ' %INC sees it' ); +is( get_addr($INC{'Foo2.pl'}), get_addr(\&fooinc), + ' key is correct in %INC' ); pop @INC; @@ -53,58 +61,72 @@ pop @INC; sub fooinc2 { my ($self, $filename) = @_; if (substr($filename, 0, length($self->[1])) eq $self->[1]) { - open my $fh, '<', \("package ".substr($filename,0,-3)."; 1;"); - return $fh; + return get_temp_fh($filename); } else { return undef; } } -push @INC, [ \&fooinc2, 'Bar' ]; +my $arrayref = [ \&fooinc2, 'Bar' ]; +push @INC, $arrayref; ok( eval { require Foo; 1; }, 'Originally loaded packages preserved' ); ok( !eval { require Foo3; 1; }, 'Original magic INC purged' ); ok( eval { require Bar; 1 }, 'require() magic via array ref' ); ok( exists $INC{'Bar.pm'}, ' %INC sees it' ); +is( get_addr($INC{'Bar.pm'}), get_addr($arrayref), + ' key is correct in %INC' ); ok( eval "use Bar1; 1;", 'use()' ); ok( exists $INC{'Bar1.pm'}, ' %INC sees it' ); +is( get_addr($INC{'Bar1.pm'}), get_addr($arrayref), + ' key is correct in %INC' ); ok( eval { do 'Bar2.pl'; 1 }, 'do()' ); ok( exists $INC{'Bar2.pl'}, ' %INC sees it' ); +is( get_addr($INC{'Bar2.pl'}), get_addr($arrayref), + ' key is correct in %INC' ); pop @INC; sub FooLoader::INC { my ($self, $filename) = @_; if (substr($filename,0,4) eq 'Quux') { - open my $fh, '<', \("package ".substr($filename,0,-3)."; 1;"); - return $fh; + return get_temp_fh($filename); } else { return undef; } } -push @INC, bless( {}, 'FooLoader' ); +my $href = bless( {}, 'FooLoader' ); +push @INC, $href; ok( eval { require Quux; 1 }, 'require() magic via hash object' ); ok( exists $INC{'Quux.pm'}, ' %INC sees it' ); +is( get_addr($INC{'Quux.pm'}), get_addr($href), + ' key is correct in %INC' ); pop @INC; -push @INC, bless( [], 'FooLoader' ); +my $aref = bless( [], 'FooLoader' ); +push @INC, $aref; ok( eval { require Quux1; 1 }, 'require() magic via array object' ); ok( exists $INC{'Quux1.pm'}, ' %INC sees it' ); +is( get_addr($INC{'Quux1.pm'}), get_addr($aref), + ' key is correct in %INC' ); pop @INC; -push @INC, bless( \(my $x = 1), 'FooLoader' ); +my $sref = bless( \(my $x = 1), 'FooLoader' ); +push @INC, $sref; ok( eval { require Quux2; 1 }, 'require() magic via scalar object' ); ok( exists $INC{'Quux2.pm'}, ' %INC sees it' ); +is( get_addr($INC{'Quux2.pm'}), get_addr($sref), + ' key is correct in %INC' ); pop @INC;