|
Packit |
d03632 |
BEGIN {
|
|
Packit |
d03632 |
if ($ENV{PERL_CORE}) {
|
|
Packit |
d03632 |
chdir 't' if -d 't';
|
|
Packit |
d03632 |
@INC = ("../lib", "lib/compress");
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
use lib qw(t t/compress);
|
|
Packit |
d03632 |
use strict;
|
|
Packit |
d03632 |
use warnings;
|
|
Packit |
d03632 |
use bytes;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
use Test::More ;
|
|
Packit |
d03632 |
use CompTestUtils;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
BEGIN
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
# use Test::NoWarnings, if available
|
|
Packit |
d03632 |
my $extra = 0 ;
|
|
Packit |
d03632 |
$extra = 1
|
|
Packit |
d03632 |
if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $count = 0 ;
|
|
Packit |
d03632 |
if ($] < 5.005) {
|
|
Packit |
d03632 |
$count = 237 ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
elsif ($] >= 5.006) {
|
|
Packit |
d03632 |
$count = 325 ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else {
|
|
Packit |
d03632 |
$count = 280 ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
plan tests => $count + $extra;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
use_ok('Compress::Raw::Zlib', 2) ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $Zlib_ver = Compress::Raw::Zlib::zlib_version ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = <
|
|
Packit |
d03632 |
hello world
|
|
Packit |
d03632 |
this is a test
|
|
Packit |
d03632 |
EOM
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $len = length $hello ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# Check zlib_version and ZLIB_VERSION are the same.
|
|
Packit |
d03632 |
SKIP: {
|
|
Packit |
d03632 |
skip "TEST_SKIP_VERSION_CHECK is set", 1
|
|
Packit |
d03632 |
if $ENV{TEST_SKIP_VERSION_CHECK};
|
|
Packit |
d03632 |
is Compress::Raw::Zlib::zlib_version, ZLIB_VERSION,
|
|
Packit |
d03632 |
"ZLIB_VERSION matches Compress::Raw::Zlib::zlib_version" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title "Error Cases" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Deflate(-Level) };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Expected even number of parameters, got 1") ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Inflate(-Level) };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Expected even number of parameters, got 1");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Deflate(-Joe => 1) };
|
|
Packit |
d03632 |
like $@, mkErr('^Compress::Raw::Zlib::Deflate::new: unknown key value\(s\) Joe');
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Inflate(-Joe => 1) };
|
|
Packit |
d03632 |
like $@, mkErr('^Compress::Raw::Zlib::Inflate::new: unknown key value\(s\) Joe');
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Deflate(-Bufsize => 0) };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified 0");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Inflate(-Bufsize => 0) };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified 0");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Deflate(-Bufsize => -1) };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Parameter 'Bufsize' must be an unsigned int, got '-1'");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Inflate(-Bufsize => -1) };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Parameter 'Bufsize' must be an unsigned int, got '-1'");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Deflate(-Bufsize => "xxx") };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Parameter 'Bufsize' must be an unsigned int, got 'xxx'");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Inflate(-Bufsize => "xxx") };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Parameter 'Bufsize' must be an unsigned int, got 'xxx'");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Inflate(-Bufsize => 1, 2) };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Inflate::new: Expected even number of parameters, got 3");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { new Compress::Raw::Zlib::Deflate(-Bufsize => 1, 2) };
|
|
Packit |
d03632 |
like $@, mkErr("^Compress::Raw::Zlib::Deflate::new: Expected even number of parameters, got 3");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title "deflate/inflate - small buffer";
|
|
Packit |
d03632 |
# ==============================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my @hello = split('', $hello) ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1 ), "Create deflate object" );
|
|
Packit |
d03632 |
ok $x, "Compress::Raw::Zlib::Deflate ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok ! defined $x->msg() ;
|
|
Packit |
d03632 |
is $x->total_in(), 0, "total_in() == 0" ;
|
|
Packit |
d03632 |
is $x->total_out(), 0, "total_out() == 0" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$X = "" ;
|
|
Packit |
d03632 |
my $Answer = '';
|
|
Packit |
d03632 |
foreach (@hello)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $x->deflate($_, $X) ;
|
|
Packit |
d03632 |
last unless $status == Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$Answer .= $X ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ;
|
|
Packit |
d03632 |
$Answer .= $X ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok ! defined $x->msg() ;
|
|
Packit |
d03632 |
is $x->total_in(), length $hello, "total_in ok" ;
|
|
Packit |
d03632 |
is $x->total_out(), length $Answer, "total_out ok" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @Answer = split('', $Answer) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1}) );
|
|
Packit |
d03632 |
ok $k, "Compress::Raw::Zlib::Inflate ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok ! defined $k->msg(), "No error messages" ;
|
|
Packit |
d03632 |
is $k->total_in(), 0, "total_in() == 0" ;
|
|
Packit |
d03632 |
is $k->total_out(), 0, "total_out() == 0" ;
|
|
Packit |
d03632 |
my $GOT = '';
|
|
Packit |
d03632 |
my $Z;
|
|
Packit |
d03632 |
$Z = 1 ;#x 2000 ;
|
|
Packit |
d03632 |
foreach (@Answer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $k->inflate($_, $Z) ;
|
|
Packit |
d03632 |
$GOT .= $Z ;
|
|
Packit |
d03632 |
last if $status == Z_STREAM_END or $status != Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
|
|
Packit |
d03632 |
is $GOT, $hello, "uncompressed data matches ok" ;
|
|
Packit |
d03632 |
ok ! defined $k->msg(), "No error messages" ;
|
|
Packit |
d03632 |
is $k->total_in(), length $Answer, "total_in ok" ;
|
|
Packit |
d03632 |
is $k->total_out(), length $hello , "total_out ok";
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
# deflate/inflate - small buffer with a number
|
|
Packit |
d03632 |
# ==============================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = 6529 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -AppendOutput => 1 ) ;
|
|
Packit |
d03632 |
ok $x ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $status;
|
|
Packit |
d03632 |
my $Answer = '';
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->deflate($hello, $Answer), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($Answer), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @Answer = split('', $Answer) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1, -AppendOutput =>1}) );
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#my $GOT = '';
|
|
Packit |
d03632 |
my $GOT ;
|
|
Packit |
d03632 |
foreach (@Answer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $k->inflate($_, $GOT) ;
|
|
Packit |
d03632 |
last if $status == Z_STREAM_END or $status != Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
is $GOT, $hello ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# deflate/inflate options - AppendOutput
|
|
Packit |
d03632 |
# ================================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# AppendOutput
|
|
Packit |
d03632 |
# CRC
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my @hello = split('', $hello) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my ($x, $err) = new Compress::Raw::Zlib::Deflate ( {-Bufsize => 1, -AppendOutput =>1} ) ;
|
|
Packit |
d03632 |
ok $x ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $status;
|
|
Packit |
d03632 |
my $X;
|
|
Packit |
d03632 |
foreach (@hello)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $x->deflate($_, $X) ;
|
|
Packit |
d03632 |
last unless $status == Z_OK ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @Answer = split('', $X) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1, -AppendOutput =>1}));
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $Z;
|
|
Packit |
d03632 |
foreach (@Answer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $k->inflate($_, $Z) ;
|
|
Packit |
d03632 |
last if $status == Z_STREAM_END or $status != Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
is $Z, $hello ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title "deflate/inflate - larger buffer";
|
|
Packit |
d03632 |
# ==============================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# generate a long random string
|
|
Packit |
d03632 |
my $contents = '' ;
|
|
Packit |
d03632 |
foreach (1 .. 50000)
|
|
Packit |
d03632 |
{ $contents .= chr int rand 255 }
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my ($x, $err) = new Compress::Raw::Zlib::Deflate() ;
|
|
Packit |
d03632 |
ok $x ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my (%X, $Y, %Z, $X, $Z);
|
|
Packit |
d03632 |
#cmp_ok $x->deflate($contents, $X{key}), '==', Z_OK ;
|
|
Packit |
d03632 |
cmp_ok $x->deflate($contents, $X), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#$Y = $X{key} ;
|
|
Packit |
d03632 |
$Y = $X ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#cmp_ok $x->flush($X{key}), '==', Z_OK ;
|
|
Packit |
d03632 |
#$Y .= $X{key} ;
|
|
Packit |
d03632 |
cmp_ok $x->flush($X), '==', Z_OK ;
|
|
Packit |
d03632 |
$Y .= $X ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $keep = $Y ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate() );
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#cmp_ok $k->inflate($Y, $Z{key}), '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
#ok $contents eq $Z{key} ;
|
|
Packit |
d03632 |
cmp_ok $k->inflate($Y, $Z), '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
ok $contents eq $Z ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# redo deflate with AppendOutput
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok (($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1)) ;
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $s ;
|
|
Packit |
d03632 |
my $out ;
|
|
Packit |
d03632 |
my @bits = split('', $keep) ;
|
|
Packit |
d03632 |
foreach my $bit (@bits) {
|
|
Packit |
d03632 |
$s = $k->inflate($bit, $out) ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $s, '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok $contents eq $out ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title "deflate/inflate - preset dictionary";
|
|
Packit |
d03632 |
# ===================================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $dictionary = "hello" ;
|
|
Packit |
d03632 |
ok my $x = new Compress::Raw::Zlib::Deflate({-Level => Z_BEST_COMPRESSION,
|
|
Packit |
d03632 |
-Dictionary => $dictionary}) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $dictID = $x->dict_adler() ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my ($X, $Y, $Z);
|
|
Packit |
d03632 |
cmp_ok $x->deflate($hello, $X), '==', Z_OK;
|
|
Packit |
d03632 |
cmp_ok $x->flush($Y), '==', Z_OK;
|
|
Packit |
d03632 |
$X .= $Y ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my $k = new Compress::Raw::Zlib::Inflate(-Dictionary => $dictionary) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $k->inflate($X, $Z), '==', Z_STREAM_END;
|
|
Packit |
d03632 |
is $k->dict_adler(), $dictID;
|
|
Packit |
d03632 |
is $hello, $Z ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title 'inflate - check remaining buffer after Z_STREAM_END';
|
|
Packit |
d03632 |
# and that ConsumeInput works.
|
|
Packit |
d03632 |
# ===================================================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
for my $consume ( 0 .. 1)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
ok my $x = new Compress::Raw::Zlib::Deflate(-Level => Z_BEST_COMPRESSION ) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my ($X, $Y, $Z);
|
|
Packit |
d03632 |
cmp_ok $x->deflate($hello, $X), '==', Z_OK;
|
|
Packit |
d03632 |
cmp_ok $x->flush($Y), '==', Z_OK;
|
|
Packit |
d03632 |
$X .= $Y ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my $k = new Compress::Raw::Zlib::Inflate( -ConsumeInput => $consume) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $first = substr($X, 0, 2) ;
|
|
Packit |
d03632 |
my $remember_first = $first ;
|
|
Packit |
d03632 |
my $last = substr($X, 2) ;
|
|
Packit |
d03632 |
cmp_ok $k->inflate($first, $Z), '==', Z_OK;
|
|
Packit |
d03632 |
if ($consume) {
|
|
Packit |
d03632 |
ok $first eq "" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else {
|
|
Packit |
d03632 |
ok $first eq $remember_first ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $T ;
|
|
Packit |
d03632 |
$last .= "appendage" ;
|
|
Packit |
d03632 |
my $remember_last = $last ;
|
|
Packit |
d03632 |
cmp_ok $k->inflate($last, $T), '==', Z_STREAM_END;
|
|
Packit |
d03632 |
is $hello, $Z . $T ;
|
|
Packit |
d03632 |
if ($consume) {
|
|
Packit |
d03632 |
is $last, "appendage" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else {
|
|
Packit |
d03632 |
is $last, $remember_last ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title 'Check - MAX_WBITS';
|
|
Packit |
d03632 |
# =================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "Test test test test test";
|
|
Packit |
d03632 |
my @hello = split('', $hello) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my ($x, $err) =
|
|
Packit |
d03632 |
new Compress::Raw::Zlib::Deflate ( -Bufsize => 1,
|
|
Packit |
d03632 |
-WindowBits => -MAX_WBITS(),
|
|
Packit |
d03632 |
-AppendOutput => 1 ) ;
|
|
Packit |
d03632 |
ok $x ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $Answer = '';
|
|
Packit |
d03632 |
my $status;
|
|
Packit |
d03632 |
foreach (@hello)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $x->deflate($_, $Answer) ;
|
|
Packit |
d03632 |
last unless $status == Z_OK ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($Answer), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @Answer = split('', $Answer) ;
|
|
Packit |
d03632 |
# Undocumented corner -- extra byte needed to get inflate to return
|
|
Packit |
d03632 |
# Z_STREAM_END when done.
|
|
Packit |
d03632 |
push @Answer, " " ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate(
|
|
Packit |
d03632 |
{-Bufsize => 1,
|
|
Packit |
d03632 |
-AppendOutput =>1,
|
|
Packit |
d03632 |
-WindowBits => -MAX_WBITS()})) ;
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $GOT = '';
|
|
Packit |
d03632 |
foreach (@Answer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $k->inflate($_, $GOT) ;
|
|
Packit |
d03632 |
last if $status == Z_STREAM_END or $status != Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
is $GOT, $hello ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
SKIP:
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title 'inflateSync';
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
skip "inflateSync needs zlib 1.2.1 or better, you have $Zlib_ver", 22
|
|
Packit |
d03632 |
if ZLIB_VERNUM() < 0x1210 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# create a deflate stream with flush points
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" x 2001 ;
|
|
Packit |
d03632 |
my $goodbye = "Will I dream?" x 2010;
|
|
Packit |
d03632 |
my ($x, $err, $answer, $X, $Z, $status);
|
|
Packit |
d03632 |
my $Answer ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#use Devel::Peek ;
|
|
Packit |
d03632 |
ok(($x, $err) = new Compress::Raw::Zlib::Deflate(AppendOutput => 1)) ;
|
|
Packit |
d03632 |
ok $x ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->deflate($hello, $Answer), '==', Z_OK;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# create a flush point
|
|
Packit |
d03632 |
cmp_ok $x->flush($Answer, Z_FULL_FLUSH), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $len1 = length $Answer;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->deflate($goodbye, $Answer), '==', Z_OK;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($Answer), '==', Z_OK ;
|
|
Packit |
d03632 |
my $len2 = length($Answer) - $len1 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my ($first, @Answer) = split('', $Answer) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate()) ;
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $k->inflate($first, $Z), '==', Z_OK;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# skip to the first flush point.
|
|
Packit |
d03632 |
while (@Answer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $byte = shift @Answer;
|
|
Packit |
d03632 |
$status = $k->inflateSync($byte) ;
|
|
Packit |
d03632 |
last unless $status == Z_DATA_ERROR;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $GOT = '';
|
|
Packit |
d03632 |
foreach (@Answer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
my $Z = '';
|
|
Packit |
d03632 |
$status = $k->inflate($_, $Z) ;
|
|
Packit |
d03632 |
$GOT .= $Z if defined $Z ;
|
|
Packit |
d03632 |
# print "x $status\n";
|
|
Packit |
d03632 |
last if $status == Z_STREAM_END or $status != Z_OK ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_DATA_ERROR ;
|
|
Packit |
d03632 |
is $GOT, $goodbye ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# Check inflateSync leaves good data in buffer
|
|
Packit |
d03632 |
my $rest = $Answer ;
|
|
Packit |
d03632 |
$rest =~ s/^(.)//;
|
|
Packit |
d03632 |
my $initial = $1 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate(ConsumeInput => 0)) ;
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $k->inflate($initial, $Z), '==', Z_OK;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# Skip to the flush point
|
|
Packit |
d03632 |
$status = $k->inflateSync($rest);
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK
|
|
Packit |
d03632 |
or diag "status '$status'\nlength rest is " . length($rest) . "\n" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is length($rest), $len2, "expected compressed output";
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$GOT = '';
|
|
Packit |
d03632 |
cmp_ok $k->inflate($rest, $GOT), '==', Z_DATA_ERROR, "inflate returns Z_DATA_ERROR";
|
|
Packit |
d03632 |
is $GOT, $goodbye ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title 'deflateParams';
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" x 2001 ;
|
|
Packit |
d03632 |
my $goodbye = "Will I dream?" x 2010;
|
|
Packit |
d03632 |
my ($x, $input, $err, $answer, $X, $status, $Answer);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok(($x, $err) = new Compress::Raw::Zlib::Deflate(
|
|
Packit |
d03632 |
-AppendOutput => 1,
|
|
Packit |
d03632 |
-Level => Z_DEFAULT_COMPRESSION,
|
|
Packit |
d03632 |
-Strategy => Z_DEFAULT_STRATEGY)) ;
|
|
Packit |
d03632 |
ok $x ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok $x->get_Level() == Z_DEFAULT_COMPRESSION;
|
|
Packit |
d03632 |
ok $x->get_Strategy() == Z_DEFAULT_STRATEGY;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $x->deflate($hello, $Answer) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
$input .= $hello;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# error cases
|
|
Packit |
d03632 |
eval { $x->deflateParams() };
|
|
Packit |
d03632 |
like $@, mkErr('^Compress::Raw::Zlib::deflateParams needs Level and\/or Strategy');
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { $x->deflateParams(-Bufsize => 0) };
|
|
Packit |
d03632 |
like $@, mkErr('^Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified 0');
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
eval { $x->deflateParams(-Joe => 3) };
|
|
Packit |
d03632 |
like $@, mkErr('^Compress::Raw::Zlib::deflateStream::deflateParams: unknown key value\(s\) Joe');
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is $x->get_Level(), Z_DEFAULT_COMPRESSION;
|
|
Packit |
d03632 |
is $x->get_Strategy(), Z_DEFAULT_STRATEGY;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# change both Level & Strategy
|
|
Packit |
d03632 |
$status = $x->deflateParams(-Level => Z_BEST_SPEED, -Strategy => Z_HUFFMAN_ONLY, -Bufsize => 1234) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is $x->get_Level(), Z_BEST_SPEED;
|
|
Packit |
d03632 |
is $x->get_Strategy(), Z_HUFFMAN_ONLY;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# change both Level & Strategy again without any calls to deflate
|
|
Packit |
d03632 |
$status = $x->deflateParams(-Level => Z_DEFAULT_COMPRESSION, -Strategy => Z_DEFAULT_STRATEGY, -Bufsize => 1234) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is $x->get_Level(), Z_DEFAULT_COMPRESSION;
|
|
Packit |
d03632 |
is $x->get_Strategy(), Z_DEFAULT_STRATEGY;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $x->deflate($goodbye, $Answer) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
$input .= $goodbye;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# change only Level
|
|
Packit |
d03632 |
$status = $x->deflateParams(-Level => Z_NO_COMPRESSION) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is $x->get_Level(), Z_NO_COMPRESSION;
|
|
Packit |
d03632 |
is $x->get_Strategy(), Z_DEFAULT_STRATEGY;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $x->deflate($goodbye, $Answer) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
$input .= $goodbye;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# change only Strategy
|
|
Packit |
d03632 |
$status = $x->deflateParams(-Strategy => Z_FILTERED) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is $x->get_Level(), Z_NO_COMPRESSION;
|
|
Packit |
d03632 |
is $x->get_Strategy(), Z_FILTERED;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $x->deflate($goodbye, $Answer) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
$input .= $goodbye;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($Answer), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate()) ;
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $Z;
|
|
Packit |
d03632 |
$status = $k->inflate($Answer, $Z) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
is $Z, $input ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title "ConsumeInput and a read-only buffer trapped" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my $k = new Compress::Raw::Zlib::Inflate(-ConsumeInput => 1) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $Z;
|
|
Packit |
d03632 |
eval { $k->inflate("abc", $Z) ; };
|
|
Packit |
d03632 |
like $@, mkErr("Compress::Raw::Zlib::Inflate::inflate input parameter cannot be read-only when ConsumeInput is specified");
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
foreach (1 .. 2)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
next if $] < 5.005 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title 'test inflate/deflate with a substr';
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $contents = '' ;
|
|
Packit |
d03632 |
foreach (1 .. 5000)
|
|
Packit |
d03632 |
{ $contents .= chr int rand 255 }
|
|
Packit |
d03632 |
ok my $x = new Compress::Raw::Zlib::Deflate(-AppendOutput => 1) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $X ;
|
|
Packit |
d03632 |
my $status = $x->deflate(substr($contents,0), $X);
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $append = "Appended" ;
|
|
Packit |
d03632 |
$X .= $append ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my $k = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $Z;
|
|
Packit |
d03632 |
my $keep = $X ;
|
|
Packit |
d03632 |
$status = $k->inflate(substr($X, 0), $Z) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
#print "status $status X [$X]\n" ;
|
|
Packit |
d03632 |
is $contents, $Z ;
|
|
Packit |
d03632 |
ok $X eq $append;
|
|
Packit |
d03632 |
#is length($X), length($append);
|
|
Packit |
d03632 |
#ok $X eq $keep;
|
|
Packit |
d03632 |
#is length($X), length($keep);
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title 'Looping Append test - checks that deRef_l resets the output buffer';
|
|
Packit |
d03632 |
foreach (1 .. 2)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my @hello = split('', $hello) ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1 ) );
|
|
Packit |
d03632 |
ok $x ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$X = "" ;
|
|
Packit |
d03632 |
my $Answer = '';
|
|
Packit |
d03632 |
foreach (@hello)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $x->deflate($_, $X) ;
|
|
Packit |
d03632 |
last unless $status == Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$Answer .= $X ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X), '==', Z_OK ;
|
|
Packit |
d03632 |
$Answer .= $X ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @Answer = split('', $Answer) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) );
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $GOT ;
|
|
Packit |
d03632 |
my $Z;
|
|
Packit |
d03632 |
$Z = 1 ;#x 2000 ;
|
|
Packit |
d03632 |
foreach (@Answer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $k->inflate($_, $GOT) ;
|
|
Packit |
d03632 |
last if $status == Z_STREAM_END or $status != Z_OK ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
is $GOT, $hello ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if ($] >= 5.005)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title 'test inflate input parameter via substr';
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my $data = $hello ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my($X, $Z);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my $x = new Compress::Raw::Zlib::Deflate ( -AppendOutput => 1 );
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->deflate($data, $X), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $append = "Appended" ;
|
|
Packit |
d03632 |
$X .= $append ;
|
|
Packit |
d03632 |
my $keep = $X ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1,
|
|
Packit |
d03632 |
-ConsumeInput => 1 ) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $k->inflate(substr($X, 0, -1), $Z), '==', Z_STREAM_END ; ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok $hello eq $Z ;
|
|
Packit |
d03632 |
is $X, $append;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$X = $keep ;
|
|
Packit |
d03632 |
$Z = '';
|
|
Packit |
d03632 |
ok $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1,
|
|
Packit |
d03632 |
-ConsumeInput => 0 ) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $k->inflate(substr($X, 0, -1), $Z), '==', Z_STREAM_END ; ;
|
|
Packit |
d03632 |
#cmp_ok $k->inflate(substr($X, 0), $Z), '==', Z_STREAM_END ; ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok $hello eq $Z ;
|
|
Packit |
d03632 |
is $X, $keep;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
SKIP:
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
skip "InflateScan needs zlib 1.2.1 or better, you have $Zlib_ver", 1
|
|
Packit |
d03632 |
if ZLIB_VERNUM() < 0x1210 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
# regression - check that resetLastBlockByte can cope with a NULL
|
|
Packit |
d03632 |
# pointer.
|
|
Packit |
d03632 |
Compress::Raw::Zlib::InflateScan->new->resetLastBlockByte(undef);
|
|
Packit |
d03632 |
ok 1, "resetLastBlockByte(undef) is ok" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
SKIP:
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title "gzip mode";
|
|
Packit |
d03632 |
# ================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 13
|
|
Packit |
d03632 |
if ZLIB_VERNUM() < 0x1210 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my @hello = split('', $hello) ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate (
|
|
Packit |
d03632 |
WindowBits => WANT_GZIP ,
|
|
Packit |
d03632 |
AppendOutput => 1
|
|
Packit |
d03632 |
), "Create deflate object" );
|
|
Packit |
d03632 |
ok $x, "Compress::Raw::Zlib::Deflate ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $x->deflate($hello, $X) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my ($k, $GOT);
|
|
Packit |
d03632 |
($k, $err) = new Compress::Raw::Zlib::Inflate(
|
|
Packit |
d03632 |
WindowBits => WANT_GZIP ,
|
|
Packit |
d03632 |
ConsumeInput => 0 ,
|
|
Packit |
d03632 |
AppendOutput => 1);
|
|
Packit |
d03632 |
ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $k->inflate($X, $GOT) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
|
|
Packit |
d03632 |
is $GOT, $hello, "uncompressed data matches ok" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$GOT = '';
|
|
Packit |
d03632 |
($k, $err) = new Compress::Raw::Zlib::Inflate(
|
|
Packit |
d03632 |
WindowBits => WANT_GZIP_OR_ZLIB ,
|
|
Packit |
d03632 |
AppendOutput => 1);
|
|
Packit |
d03632 |
ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $k->inflate($X, $GOT) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
|
|
Packit |
d03632 |
is $GOT, $hello, "uncompressed data matches ok" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
SKIP:
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title "gzip error mode";
|
|
Packit |
d03632 |
# Create gzip -
|
|
Packit |
d03632 |
# read with no special windowbits setting - this will fail
|
|
Packit |
d03632 |
# then read with WANT_GZIP_OR_ZLIB - thi swill work
|
|
Packit |
d03632 |
# ================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12
|
|
Packit |
d03632 |
if ZLIB_VERNUM() < 0x1210 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate (
|
|
Packit |
d03632 |
WindowBits => WANT_GZIP ,
|
|
Packit |
d03632 |
AppendOutput => 1
|
|
Packit |
d03632 |
), "Create deflate object" );
|
|
Packit |
d03632 |
ok $x, "Compress::Raw::Zlib::Deflate ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $x->deflate($hello, $X) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my ($k, $GOT);
|
|
Packit |
d03632 |
($k, $err) = new Compress::Raw::Zlib::Inflate(
|
|
Packit |
d03632 |
WindowBits => MAX_WBITS ,
|
|
Packit |
d03632 |
ConsumeInput => 0 ,
|
|
Packit |
d03632 |
AppendOutput => 1);
|
|
Packit |
d03632 |
ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $k->inflate($X, $GOT) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_DATA_ERROR, "Got Z_DATA_ERROR" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$GOT = '';
|
|
Packit |
d03632 |
($k, $err) = new Compress::Raw::Zlib::Inflate(
|
|
Packit |
d03632 |
WindowBits => WANT_GZIP_OR_ZLIB ,
|
|
Packit |
d03632 |
AppendOutput => 1);
|
|
Packit |
d03632 |
ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $k->inflate($X, $GOT) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
|
|
Packit |
d03632 |
is $GOT, $hello, "uncompressed data matches ok" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
SKIP:
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title "gzip/zlib error mode";
|
|
Packit |
d03632 |
# Create zlib -
|
|
Packit |
d03632 |
# read with no WANT_GZIP windowbits setting - this will fail
|
|
Packit |
d03632 |
# then read with WANT_GZIP_OR_ZLIB - thi swill work
|
|
Packit |
d03632 |
# ================
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12
|
|
Packit |
d03632 |
if ZLIB_VERNUM() < 0x1210 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate (
|
|
Packit |
d03632 |
AppendOutput => 1
|
|
Packit |
d03632 |
), "Create deflate object" );
|
|
Packit |
d03632 |
ok $x, "Compress::Raw::Zlib::Deflate ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $x->deflate($hello, $X) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my ($k, $GOT);
|
|
Packit |
d03632 |
($k, $err) = new Compress::Raw::Zlib::Inflate(
|
|
Packit |
d03632 |
WindowBits => WANT_GZIP ,
|
|
Packit |
d03632 |
ConsumeInput => 0 ,
|
|
Packit |
d03632 |
AppendOutput => 1);
|
|
Packit |
d03632 |
ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $k->inflate($X, $GOT) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_DATA_ERROR, "Got Z_DATA_ERROR" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$GOT = '';
|
|
Packit |
d03632 |
($k, $err) = new Compress::Raw::Zlib::Inflate(
|
|
Packit |
d03632 |
WindowBits => WANT_GZIP_OR_ZLIB ,
|
|
Packit |
d03632 |
AppendOutput => 1);
|
|
Packit |
d03632 |
ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $k->inflate($X, $GOT) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ;
|
|
Packit |
d03632 |
is $GOT, $hello, "uncompressed data matches ok" ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title "zlibCompileFlags";
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $flags = Compress::Raw::Zlib::zlibCompileFlags;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if (ZLIB_VERNUM() < 0x1210)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
is $flags, 0, "zlibCompileFlags == 0 if < 1.2.1";
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
else
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
ok $flags, "zlibCompileFlags != 0 if < 1.2.1";
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title "repeated calls to flush after some compression";
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" );
|
|
Packit |
d03632 |
isa_ok $x, "Compress::Raw::Zlib::deflateStream" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$status = $x->deflate($hello, $X) ;
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ;
|
|
Packit |
d03632 |
cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ;
|
|
Packit |
d03632 |
is $X, "", "no output from second flush";
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title "repeated calls to flush - no compression";
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" );
|
|
Packit |
d03632 |
isa_ok $x, "Compress::Raw::Zlib::deflateStream" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ;
|
|
Packit |
d03632 |
cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ;
|
|
Packit |
d03632 |
is $X, "", "no output from second flush";
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title "crc32";
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is eval('Compress::Raw::Zlib::crc32("A" x 0x100, 0, 0x100); 0x1234'), 0x1234;
|
|
Packit |
d03632 |
is $@, '';
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
is eval('Compress::Raw::Zlib::crc32("A" x 0x100, 0, 0x101); 0x1234'), undef;
|
|
Packit |
d03632 |
like $@, mkErr("^Offset out of range in Compress::Raw::Zlib::crc32") ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
if (0)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
title "RT #122695: sync flush appending extra empty uncompressed block";
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" );
|
|
Packit |
d03632 |
isa_ok $x, "Compress::Raw::Zlib::deflateStream" ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK, "status is Z_OK" ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ;
|
|
Packit |
d03632 |
cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ;
|
|
Packit |
d03632 |
is $X, "", "no output from second flush";
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
exit if $] < 5.006 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title 'Looping Append test with substr output - substr the end of the string';
|
|
Packit |
d03632 |
foreach (1 .. 2)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my @hello = split('', $hello) ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1,
|
|
Packit |
d03632 |
-AppendOutput => 1 ) );
|
|
Packit |
d03632 |
ok $x ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$X = "" ;
|
|
Packit |
d03632 |
my $Answer = '';
|
|
Packit |
d03632 |
foreach (@hello)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $x->deflate($_, substr($Answer, length($Answer))) ;
|
|
Packit |
d03632 |
last unless $status == Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush(substr($Answer, length($Answer))), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
#cmp_ok length $Answer, ">", 0 ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @Answer = split('', $Answer) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) );
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $GOT = '';
|
|
Packit |
d03632 |
my $Z;
|
|
Packit |
d03632 |
$Z = 1 ;#x 2000 ;
|
|
Packit |
d03632 |
foreach (@Answer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $k->inflate($_, substr($GOT, length($GOT))) ;
|
|
Packit |
d03632 |
last if $status == Z_STREAM_END or $status != Z_OK ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
is $GOT, $hello ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
title 'Looping Append test with substr output - substr the complete string';
|
|
Packit |
d03632 |
foreach (1 .. 2)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $hello = "I am a HAL 9000 computer" ;
|
|
Packit |
d03632 |
my @hello = split('', $hello) ;
|
|
Packit |
d03632 |
my ($err, $x, $X, $status);
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1,
|
|
Packit |
d03632 |
-AppendOutput => 1 ) );
|
|
Packit |
d03632 |
ok $x ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
$X = "" ;
|
|
Packit |
d03632 |
my $Answer = '';
|
|
Packit |
d03632 |
foreach (@hello)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $x->deflate($_, substr($Answer, 0)) ;
|
|
Packit |
d03632 |
last unless $status == Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $x->flush(substr($Answer, 0)), '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my @Answer = split('', $Answer) ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $k;
|
|
Packit |
d03632 |
ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) );
|
|
Packit |
d03632 |
ok $k ;
|
|
Packit |
d03632 |
cmp_ok $err, '==', Z_OK ;
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
my $GOT = '';
|
|
Packit |
d03632 |
my $Z;
|
|
Packit |
d03632 |
$Z = 1 ;#x 2000 ;
|
|
Packit |
d03632 |
foreach (@Answer)
|
|
Packit |
d03632 |
{
|
|
Packit |
d03632 |
$status = $k->inflate($_, substr($GOT, 0)) ;
|
|
Packit |
d03632 |
last if $status == Z_STREAM_END or $status != Z_OK ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|
|
Packit |
d03632 |
cmp_ok $status, '==', Z_STREAM_END ;
|
|
Packit |
d03632 |
is $GOT, $hello ;
|
|
Packit |
d03632 |
}
|
|
Packit |
d03632 |
|