1use strict; 2use warnings FATAL => 'all'; 3use Test::More qw(no_plan); 4use File::Basename; 5use File::Copy; 6use File::Path; 7use File::Temp qw/tempdir/; 8use File::Spec; 9use Cwd; 10 11use App::FatPacker; 12 13my $keep = $ENV{'FATPACKER_KEEP_TESTDIR'}; 14 15my $cwd = getcwd; 16my $tempdir = tempdir('fatpacker-XXXXX', DIR => "$cwd/t", $keep ? (CLEANUP => 0) : (CLEANUP => 1)); 17mkpath([<$tempdir/{lib,fatlib}/t/mod>]); 18 19for(<t/mod/*.pm>) { 20 copy $_, "$tempdir/lib/$_" or die "copy failed: $!"; 21} 22 23chdir $tempdir; 24 25my $fp = App::FatPacker->new; 26my $packed_file = "$tempdir/script"; 27open my $temp_fh, '>', $packed_file 28 or die "can't write to $packed_file: $!"; 29 30select $temp_fh; 31$fp->script_command_file; 32print "1;\n"; 33select STDOUT; 34close $temp_fh; 35 36# make sure we don't pick up things from our created dir 37chdir File::Spec->tmpdir; 38 39# Packed, now try using it: 40require $packed_file; 41 42{ 43 require t::mod::a; 44 no warnings 'once'; 45 ok $t::mod::a::foo eq 'bar', "packed script works"; 46} 47 48{ 49 50 ok ref $INC[0], "\$INC[0] is a reference"; 51 ok $INC[0]->can( "files" ), "\$INC[0] has a files method"; 52 53 my @files = sort $INC[0]->files; 54 55 is_deeply( \@files, [ 56 't/mod/a.pm', 57 't/mod/b.pm', 58 't/mod/c.pm', 59 't/mod/cond.pm', 60 't/mod/d.pm', 61 ], "\$INC[0]->files returned the files" ); 62 63} 64 65 66if (my $testwith = $ENV{'FATPACKER_TESTWITH'}) { 67 for my $perl (split ' ', $testwith) { 68 my $out = system $perl, '-e', 69 q{alarm 5; require $ARGV[0]; require t::mod::a; exit($t::mod::a::foo eq 'bar' ? 0 : 1)}, $temp_fh; 70 ok !$out, "packed script works with $perl"; 71 72 $out = system $perl, '-e', 73 q{alarm 5; require $ARGV[0]; exit( (sort $INC[0]->files)[0] eq 't/mod/a.pm' ? 0 : 1 )}, $temp_fh; 74 ok !$out, "\$INC[0]->files works with $perl"; 75 76 } 77} 78 79