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