use strict; use warnings; use lib 't/lib'; use Test::More tests => 49; use File::Basename; use File::Find; use File::Spec; use Footprintless::Util qw( slurp temp_dir ); BEGIN { use_ok('Footprintless::Extract') } eval { require Getopt::Long; Getopt::Long::Configure( 'pass_through', 'bundling' ); my $level = 'error'; Getopt::Long::GetOptions( 'log:s' => \$level ); require Log::Any::Adapter; Log::Any::Adapter->set( 'Stdout', log_level => Log::Any::Adapter::Util::numeric_level($level) ); }; my $logger = Log::Any->get_logger(); my $test_dir = dirname( File::Spec->rel2abs($0) ); my $bar_dir = File::Spec->catdir( $test_dir, 'data', 'resources', 'bar' ); my $bar_dir_length = length($bar_dir); sub dir_ok { my ( $extract_dir, $prefix, @dir ) = @_; my $path = File::Spec->catdir( $extract_dir, @dir ); ok( -d $path, "dir_ok $prefix $path" ); } sub file_ok { my ( $extract_dir, $prefix, @file ) = @_; my $path = File::Spec->catfile( $extract_dir, @file ); ok( -f $path, "file_ok -f $prefix $path" ); is( slurp($path), slurp( File::Spec->catfile( $bar_dir, @file ) ), "file_ok content $prefix $path" ); } sub bar_extract_ok { my ( $extract_dir, $prefix ) = @_; find( sub { return if /^\.\.?$/; my $relative = substr( $File::Find::name, $bar_dir_length + 1 ); # git doesnt keep empty folder, so we skip it... return if ( $relative =~ /WEB-INF\/classes$/ ); if ( -d $File::Find::name ) { dir_ok( $extract_dir, $prefix, $relative ); } else { file_ok( $extract_dir, $prefix, $relative ); } }, $bar_dir ); } { $logger->info("test tar"); my $temp_dir = temp_dir(); ok( Footprintless::Extract->new( archive => File::Spec->catfile( $test_dir, 'data', 'resources', 'bar.tar' ) )->extract( to => $temp_dir ), 'tar extract' ); bar_extract_ok( $temp_dir, 'tar' ); } { $logger->info("test tgz"); my $temp_dir = temp_dir(); ok( Footprintless::Extract->new( archive => File::Spec->catfile( $test_dir, 'data', 'resources', 'bar.tgz' ) )->extract( to => $temp_dir ), 'tgz extract' ); bar_extract_ok( $temp_dir, 'tgz' ); } { $logger->info("test unzip"); my $temp_dir = temp_dir(); ok( Footprintless::Extract->new( archive => File::Spec->catfile( $test_dir, 'data', 'resources', 'bar.war' ) )->extract( to => $temp_dir ), 'zip extract' ); bar_extract_ok( $temp_dir, 'zip' ); }