[PATCH] new tests for the coderef-in-@INC
[p5sagit/p5-mst-13.2.git] / t / op / inccode.t
CommitLineData
e5d18500 1#!./perl -w
2
3# Tests for the coderef-in-@INC feature
4
5BEGIN {
6 chdir 't' if -d 't';
7 @INC = '../lib';
8}
9use Config;
10unless ($Config{useperlio}) {
11 print "1..0 # Skipping (tests are implemented using perlio features, this perl uses stdio)\n";
12 exit 0;
13}
14
15print "1..12\n";
16
17sub fooinc {
18 my ($self, $filename) = @_;
19 if (substr($filename,0,3) eq 'Foo') {
20 open my $fh, '<', \("package ".substr($filename,0,-3)."; 1;");
21 return $fh;
22 }
23 else {
24 return undef;
25 }
26}
27
28push @INC, \&fooinc;
29
30print "not " if eval { require Bar };
31print "ok 1\n";
32print "not " if ! eval { require Foo } or ! exists $INC{'Foo.pm'};
33print "ok 2\n";
34print "not " if ! eval "use Foo1; 1;" or ! exists $INC{'Foo1.pm'};
35print "ok 3\n";
36print "not " if ! eval { do 'Foo2.pl' } or ! exists $INC{'Foo2.pl'};
37print "ok 4\n";
38
39pop @INC;
40
41sub fooinc2 {
42 my ($self, $filename) = @_;
43 if (substr($filename, 0, length($self->[1])) eq $self->[1]) {
44 open my $fh, '<', \("package ".substr($filename,0,-3)."; 1;");
45 return $fh;
46 }
47 else {
48 return undef;
49 }
50}
51
52push @INC, [ \&fooinc2, 'Bar' ];
53
54print "not " if ! eval { require Foo }; # Already loaded
55print "ok 5\n";
56print "not " if eval { require Foo3 };
57print "ok 6\n";
58print "not " if ! eval { require Bar } or ! exists $INC{'Bar.pm'};
59print "ok 7\n";
60print "not " if ! eval "use Bar1; 1;" or ! exists $INC{'Bar1.pm'};
61print "ok 8\n";
62print "not " if ! eval { do 'Bar2.pl' } or ! exists $INC{'Bar2.pl'};
63print "ok 9\n";
64
65pop @INC;
66
67sub FooLoader::INC {
68 my ($self, $filename) = @_;
69 if (substr($filename,0,4) eq 'Quux') {
70 open my $fh, '<', \("package ".substr($filename,0,-3)."; 1;");
71 return $fh;
72 }
73 else {
74 return undef;
75 }
76}
77
78push @INC, bless( {}, 'FooLoader' );
79
80print "not " if ! eval { require Quux } or ! exists $INC{'Quux.pm'};
81print "ok 10\n";
82
83pop @INC;
84
85push @INC, bless( [], 'FooLoader' );
86
87print "not " if ! eval { require Quux1 } or ! exists $INC{'Quux1.pm'};
88print "ok 11\n";
89
90pop @INC;
91
92push @INC, bless( \(my $x = 1), 'FooLoader' );
93
94print "not " if ! eval { require Quux2 } or ! exists $INC{'Quux2.pm'};
95print "ok 12\n";