BEGIN {
if ($ENV{PERL_CORE}) {
chdir 't' if -d 't';
@INC = ("../lib", "lib/compress");
}
}
use lib qw(t t/compress);
use strict;
use warnings;
use bytes;
use Test::More ;
use CompTestUtils;
BEGIN {
plan(skip_all => "oneshot needs Perl 5.005 or better - you have Perl $]" )
if $] < 5.005 ;
plan(skip_all => "IO::Compress::Bzip2 not available" )
unless eval { require IO::Compress::Bzip2;
require IO::Uncompress::Bunzip2;
1
} ;
# use Test::NoWarnings, if available
my $extra = 0 ;
$extra = 1
if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
plan tests => 144 + $extra ;
#use_ok('IO::Compress::Zip', qw(zip $ZipError :zip_method)) ;
use_ok('IO::Compress::Zip', qw(:all)) ;
use_ok('IO::Uncompress::Unzip', qw(unzip $UnzipError)) ;
}
sub zipGetHeader
{
my $in = shift;
my $content = shift ;
my %opts = @_ ;
my $out ;
my $got ;
ok zip($in, \$out, %opts), " zip ok" ;
ok unzip(\$out, \$got), " unzip ok"
or diag $UnzipError ;
is $got, $content, " got expected content" ;
my $gunz = new IO::Uncompress::Unzip \$out, Strict => 0
or diag "UnzipError is $IO::Uncompress::Unzip::UnzipError" ;
ok $gunz, " Created IO::Uncompress::Unzip object";
my $hdr = $gunz->getHeaderInfo();
ok $hdr, " got Header info";
my $uncomp ;
ok $gunz->read($uncomp), " read ok" ;
is $uncomp, $content, " got expected content";
ok $gunz->close, " closed ok" ;
return $hdr ;
}
for my $stream (0, 1)
{
for my $zip64 (0, 1)
{
#next if $zip64 && ! $stream;
for my $method (ZIP_CM_STORE, ZIP_CM_DEFLATE, ZIP_CM_BZIP2)
{
title "Stream $stream, Zip64 $zip64, Method $method";
my $lex = new LexFile my $file1;
my $content = "hello ";
#writeFile($file1, $content);
ok zip(\$content => $file1 , Method => $method,
Zip64 => $zip64,
Stream => $stream), " zip ok"
or diag $ZipError ;
my $got ;
if ($stream && $method == ZIP_CM_STORE ) {
#eval ' unzip($file1 => \$got) ';
ok ! unzip($file1 => \$got), " unzip fails";
like $UnzipError, "/Streamed Stored content not supported/",
" Streamed Stored content not supported";
next ;
}
ok unzip($file1 => \$got), " unzip ok"
or diag $UnzipError ;
is $got, $content, " content ok";
my $u = new IO::Uncompress::Unzip $file1
or diag $ZipError ;
my $hdr = $u->getHeaderInfo();
ok $hdr, " got header";
is $hdr->{Stream}, $stream, " stream is $stream" ;
is $hdr->{MethodID}, $method, " MethodID is $method" ;
is $hdr->{Zip64}, $zip64, " Zip64 is $zip64" ;
}
}
}
for my $stream (0, 1)
{
for my $zip64 (0, 1)
{
next if $zip64 && ! $stream;
for my $method (ZIP_CM_STORE, ZIP_CM_DEFLATE, ZIP_CM_BZIP2)
{
title "Stream $stream, Zip64 $zip64, Method $method";
my $file1;
my $file2;
my $zipfile;
my $lex = new LexFile $file1, $file2, $zipfile;
my $content1 = "hello ";
writeFile($file1, $content1);
my $content2 = "goodbye ";
writeFile($file2, $content2);
my %content = ( $file1 => $content1,
$file2 => $content2,
);
ok zip([$file1, $file2] => $zipfile , Method => $method,
Zip64 => $zip64,
Stream => $stream), " zip ok"
or diag $ZipError ;
for my $file ($file1, $file2)
{
my $got ;
if ($stream && $method == ZIP_CM_STORE ) {
#eval ' unzip($zipfile => \$got) ';
ok ! unzip($zipfile => \$got, Name => $file), " unzip fails";
like $UnzipError, "/Streamed Stored content not supported/",
" Streamed Stored content not supported";
next ;
}
ok unzip($zipfile => \$got, Name => $file), " unzip $file ok"
or diag $UnzipError ;
is $got, $content{$file}, " content ok";
}
}
}
}
# TODO add more error cases