4 @INC = ("../lib", "lib");
17 # use Test::NoWarnings, if available
20 if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
22 plan tests => 2374 + $extra;
24 use_ok('Compress::Zlib', 2) ;
26 use_ok('IO::Compress::Gzip', qw($GzipError)) ;
27 use_ok('IO::Uncompress::Gunzip', qw($GunzipError)) ;
29 use_ok('IO::Compress::Deflate', qw($DeflateError)) ;
30 use_ok('IO::Uncompress::Inflate', qw($InflateError)) ;
32 use_ok('IO::Compress::RawDeflate', qw($RawDeflateError)) ;
33 use_ok('IO::Uncompress::RawInflate', qw($RawInflateError)) ;
41 some more stuff on this line
48 foreach my $CompressClass ('IO::Compress::Gzip', 'IO::Compress::Deflate')
50 my $UncompressClass = getInverse($CompressClass);
56 if ($CompressClass eq 'IO::Compress::Gzip') {
57 ok( my $x = new IO::Compress::Gzip \$compressed,
59 -Comment => "a comment",
60 -ExtraField => ['ab' => "extra"],
62 ok $x->write($hello) ;
66 ok($gz = new IO::Uncompress::Gunzip \$cc,
68 or diag "$GunzipError";
70 ok $gz->read($un) > 0 ;
75 ok( my $x = new $CompressClass(\$compressed));
76 ok $x->write($hello) ;
80 ok($gz = new $UncompressClass(\$cc,
82 or diag "$GunzipError";
84 ok $gz->read($un) > 0 ;
90 for my $trans ( 0 .. 1)
92 title "Testing $CompressClass, Transparent $trans";
94 my $info = $gz->getHeaderInfo() ;
95 my $header_size = $info->{HeaderLength};
96 my $trailer_size = $info->{TrailerLength};
97 ok 1, "Compressed size is " . length($compressed) ;
98 ok 1, "Header size is $header_size" ;
99 ok 1, "Trailer size is $trailer_size" ;
101 title "Fingerprint Truncation";
104 my $lex = new LexFile my $name ;
107 my $part = substr($compressed, 0, $i);
108 writeFile($name, $part);
110 my $gz = new $UncompressClass $name,
111 -BlockSize => $blocksize,
112 -Transparent => $trans;
117 ok $gz->read($buff) == length($part) ;
128 title "Header Truncation";
130 # Any header corruption past the fingerprint is considered catastrophic
131 # so even if Transparent is set, it should still fail
133 foreach my $i (2 .. $header_size -1)
135 my $lex = new LexFile my $name ;
138 my $part = substr($compressed, 0, $i);
139 writeFile($name, $part);
140 ok ! defined new $UncompressClass $name,
141 -BlockSize => $blocksize,
142 -Transparent => $trans;
146 title "Compressed Data Truncation";
147 foreach my $i ($header_size .. length($compressed) - 1 - $trailer_size)
150 my $lex = new LexFile my $name ;
153 my $part = substr($compressed, 0, $i);
154 writeFile($name, $part);
155 ok my $gz = new $UncompressClass $name,
156 -BlockSize => $blocksize,
157 -Transparent => $trans;
160 $status = $gz->read($un) while $status >= 0 ;
167 # RawDeflate does not have a trailer
168 next if $CompressClass eq 'IO::Compress::RawDeflate' ;
170 title "Compressed Trailer Truncation";
171 foreach my $i (length($compressed) - $trailer_size .. length($compressed) -1 )
173 foreach my $lax (0, 1)
175 my $lex = new LexFile my $name ;
177 ok 1, "Length $i, Lax $lax" ;
178 my $part = substr($compressed, 0, $i);
179 writeFile($name, $part);
180 ok my $gz = new $UncompressClass $name,
181 -BlockSize => $blocksize,
184 -Transparent => $trans;
187 $status = $gz->read($un) while $status > 0 ;
193 or diag "Status $status Error is " . $gz->error() ;
195 or diag "Status $status Error is " . $gz->error() ;
201 or diag "Status $status Error is " . $gz->error() ;
203 or diag "Status $status Error is " . $gz->error() ;
214 foreach my $CompressClass ( 'IO::Compress::RawDeflate')
216 my $UncompressClass = getInverse($CompressClass);
217 my $Error = getErrorRef($UncompressClass);
220 ok( my $x = new IO::Compress::RawDeflate \$compressed);
221 ok $x->write($hello) ;
225 my $cc = $compressed ;
228 ok($gz = new $UncompressClass(\$cc,
232 ok $gz->read($un) > 0 ;
236 for my $trans (0 .. 1)
238 title "Testing $CompressClass, Transparent = $trans";
240 my $info = $gz->getHeaderInfo() ;
241 my $header_size = $info->{HeaderLength};
242 my $trailer_size = $info->{TrailerLength};
243 ok 1, "Compressed size is " . length($compressed) ;
244 ok 1, "Header size is $header_size" ;
245 ok 1, "Trailer size is $trailer_size" ;
248 title "Compressed Data Truncation";
249 foreach my $i (0 .. $blocksize)
252 my $lex = new LexFile my $name ;
255 my $part = substr($compressed, 0, $i);
256 writeFile($name, $part);
257 my $gz = new $UncompressClass $name,
258 -BlockSize => $blocksize,
259 -Transparent => $trans;
264 ok $gz->read($buff) == length $part ;
274 foreach my $i ($blocksize+1 .. length($compressed)-1)
277 my $lex = new LexFile my $name ;
280 my $part = substr($compressed, 0, $i);
281 writeFile($name, $part);
282 ok my $gz = new $UncompressClass $name,
283 -BlockSize => $blocksize,
284 -Transparent => $trans;
287 $status = $gz->read($un) while $status >= 0 ;