lib/less.pm For "use less"
lib/less.t See if less support works
lib/lib_pm.PL For "use lib", produces lib/lib.pm
+lib/lib.t For "use lib" testing
lib/locale.pm For "use locale"
lib/locale.t See if locale support works
lib/Locale/Codes/t/all.t See if Locale::Codes work
--- /dev/null
+#!./perl -w
+
+BEGIN {
+ chdir 't';
+ @INC = '../lib';
+ @OrigINC = @INC;
+}
+
+use Test::More tests => 12;
+use Config;
+use File::Spec;
+use File::Path;
+
+#set up files and directories
+my @lib_dir;
+my $Lib_Dir;
+my $Arch_Dir;
+my $Auto_Dir;
+my $Module;
+BEGIN {
+ # lib.pm is documented to only work with Unix filepaths.
+ @lib_dir = qw(stuff moo);
+ $Lib_Dir = join "/", @lib_dir;
+ $Arch_Dir = join "/", @lib_dir, $Config{archname};
+
+ # create the auto/ directory and a module
+ $Auto_Dir = File::Spec->catdir(@lib_dir, $Config{archname},'auto');
+ $Module = File::Spec->catfile(@lib_dir, 'Yup.pm');
+
+ mkpath [$Auto_Dir];
+
+ open(MOD, ">$Module") || DIE $!;
+ print MOD <<'MODULE';
+package Yup;
+$Plan = 9;
+return '42';
+MODULE
+
+ close MOD;
+}
+
+END {
+ # cleanup the auto/ directory we created.
+ rmtree([$lib_dir[0]]);
+}
+
+
+use lib $Lib_Dir;
+use lib $Lib_Dir;
+
+BEGIN { use_ok('Yup') }
+
+BEGIN {
+ is( $INC[1], $Lib_Dir, 'lib adding at end of @INC' );
+ print "# \@INC == @INC\n";
+ is( $INC[0], $Arch_Dir, ' auto/ dir in front of that' );
+ is( grep(/^\Q$Lib_Dir\E$/, @INC), 1, ' no duplicates' );
+
+ # Yes, %INC uses Unixy filepaths.
+ is( $INC{'Yup.pm'}, join("/",$Lib_Dir, 'Yup.pm'), '%INC set properly' );
+
+ is( eval { do 'Yup.pm' }, 42, 'do() works' );
+ ok( eval { require Yup; }, ' require()' );
+ ok( eval "use Yup; 1;", ' use()' );
+ is( $@, '' );
+
+ is_deeply(\@OrigINC, \@lib::ORIG_INC, '@lib::ORIG_INC' );
+}
+
+no lib $Lib_Dir;
+
+BEGIN {
+ is( grep(/stuff/, @INC), 0, 'no lib' );
+ ok( !do 'Yup.pm', ' do() effected' );
+}
@INC = @lib::ORIG_INC;
+=head1 CAVEATS
+
+In order to keep lib.pm small and simple, it only works with Unix
+filepaths. This doesn't mean it only works on Unix, but non-Unix
+users must first translate their file paths to Unix conventions.
+
+ # VMS users wanting to put [.stuff.moo] into
+ # their @INC would write
+ use lib 'stuff/moo';
=head1 SEE ALSO