don't rely on . in @INC in tests and stop using t::mod names
[p5sagit/App-FatPacker.git] / t / pack.t
1 use strict;
2 use warnings FATAL => 'all';
3 use Test::More qw(no_plan);
4 use File::Basename;
5 use File::Copy;
6 use File::Path;
7 use File::Temp qw/tempdir/;
8 use File::Spec;
9 use Cwd;
10
11 use App::FatPacker;
12
13 my $keep = $ENV{'FATPACKER_KEEP_TESTDIR'};
14
15 my $cwd = getcwd;
16 my $tempdir = tempdir('fatpacker-XXXXX', DIR => "$cwd/t", $keep ? (CLEANUP => 0) : (CLEANUP => 1));
17 mkpath([<$tempdir/{lib,fatlib}>]);
18
19 for (<t/mod/*.pm>) {
20   copy $_, "$tempdir/lib/".basename($_) or die "copy failed: $!";
21 }
22
23 chdir $tempdir;
24
25 my $fp = App::FatPacker->new;
26 my $packed_file = "$tempdir/script";
27 open my $temp_fh, '>', $packed_file
28   or die "can't write to $packed_file: $!";
29
30 select $temp_fh;
31 $fp->script_command_file;
32 print "1;\n";
33 select STDOUT;
34 close $temp_fh;
35
36 # make sure we don't pick up things from our created dir
37 chdir File::Spec->tmpdir;
38
39 # Packed, now try using it:
40 require $packed_file;
41
42 {
43   require ModuleA;
44   no warnings 'once';
45   ok $ModuleA::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         'ModuleA.pm',
57         'ModuleB.pm',
58         'ModuleC.pm',
59         'ModuleCond.pm',
60         'ModuleD.pm',
61     ], "\$INC[0]->files returned the files" );
62
63 }
64
65
66 if (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 ModuleA; exit($ModuleA::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 'ModuleA.pm' ? 0 : 1 )}, $temp_fh;
74     ok !$out, "\$INC[0]->files works with $perl";
75
76   }
77 }
78