1#!./perl -w 2 3BEGIN { 4 chdir 't'; 5 @INC = '../lib'; 6 @OrigINC = @INC; 7} 8 9use Test::More tests => 13; 10use Config; 11use File::Spec; 12use File::Path; 13 14#set up files and directories 15my @lib_dir; 16my $Lib_Dir; 17my $Arch_Dir; 18my $Auto_Dir; 19my $Module; 20BEGIN { 21 # lib.pm is documented to only work with Unix filepaths. 22 @lib_dir = qw(stuff moo); 23 $Lib_Dir = join "/", @lib_dir; 24 $Arch_Dir = join "/", @lib_dir, $Config{archname}; 25 26 # create the auto/ directory and a module 27 $Auto_Dir = File::Spec->catdir(@lib_dir, $Config{archname},'auto'); 28 $Module = File::Spec->catfile(@lib_dir, 'Yup.pm'); 29 30 mkpath [$Auto_Dir]; 31 32 open(MOD, ">$Module") || DIE $!; 33 print MOD <<'MODULE'; 34package Yup; 35$Plan = 9; 36return '42'; 37MODULE 38 39 close MOD; 40} 41 42END { 43 # cleanup the auto/ directory we created. 44 rmtree([$lib_dir[0]]); 45} 46 47 48use lib $Lib_Dir; 49use lib $Lib_Dir; 50 51BEGIN { use_ok('Yup') } 52 53BEGIN { 54 if ($^O eq 'MacOS') { 55 for ($Lib_Dir, $Arch_Dir) { 56 tr|/|:|; 57 $_ .= ":" unless /:$/; 58 $_ = ":$_" unless /^:/; # we know this path is relative 59 } 60 } 61 is( $INC[1], $Lib_Dir, 'lib adding at end of @INC' ); 62 print "# \@INC == @INC\n"; 63 is( $INC[0], $Arch_Dir, ' auto/ dir in front of that' ); 64 is( grep(/^\Q$Lib_Dir\E$/, @INC), 1, ' no duplicates' ); 65 66 # Yes, %INC uses Unixy filepaths. 67 # Not on Mac OS, it doesn't ... it never has, at least. 68 my $path = join("/",$Lib_Dir, 'Yup.pm'); 69 if ($^O eq 'MacOS') { 70 $path = $Lib_Dir . 'Yup.pm'; 71 } 72 is( $INC{'Yup.pm'}, $path, '%INC set properly' ); 73 74 is( eval { do 'Yup.pm' }, 42, 'do() works' ); 75 ok( eval { require Yup; }, ' require()' ); 76 ok( eval "use Yup; 1;", ' use()' ); 77 is( $@, '' ); 78 79 is_deeply(\@OrigINC, \@lib::ORIG_INC, '@lib::ORIG_INC' ); 80} 81 82no lib $Lib_Dir; 83 84unlike( do { eval 'use lib $Config{installsitelib};'; $@ || '' }, 85 qr/::Config is read-only/, 'lib handles readonly stuff' ); 86 87BEGIN { 88 is( grep(/stuff/, @INC), 0, 'no lib' ); 89 ok( !do 'Yup.pm', ' do() effected' ); 90} 91