blob: ed5971bc8acbcdfe51f5688357ec860eb478cd6b [file] [log] [blame]
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 => "Encode is not available"
if $] < 5.006 ;
eval { require Encode; Encode->import(); };
plan skip_all => "Encode is not available"
if $@ ;
# use Test::NoWarnings, if available
my $extra = 0 ;
$extra = 1
if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
plan tests => 29 + $extra ;
use_ok('Compress::Zlib', qw(:ALL zlib_version memGunzip memGzip));
}
# Check zlib_version and ZLIB_VERSION are the same.
SKIP: {
skip "TEST_SKIP_VERSION_CHECK is set", 1
if $ENV{TEST_SKIP_VERSION_CHECK};
is Compress::Zlib::zlib_version, ZLIB_VERSION,
"ZLIB_VERSION matches Compress::Zlib::zlib_version" ;
}
{
title "memGzip" ;
# length of this string is 2 characters
my $s = "\x{df}\x{100}";
my $cs = memGzip(Encode::encode_utf8($s));
# length stored at end of gzip file should be 4
my ($crc, $len) = unpack ("VV", substr($cs, -8, 8));
is $len, 4, " length is 4";
}
{
title "memGunzip when compressed gzip has been encoded" ;
my $s = "hello world" ;
my $co = memGzip($s);
is memGunzip(my $x = $co), $s, " match uncompressed";
utf8::upgrade($co);
my $un = memGunzip($co);
ok $un, " got uncompressed";
is $un, $s, " uncompressed matched original";
}
{
title "compress/uncompress";
my $s = "\x{df}\x{100}";
my $s_copy = $s ;
my $ces = compress(Encode::encode_utf8($s_copy));
ok $ces, " compressed ok" ;
my $un = Encode::decode_utf8(uncompress($ces));
is $un, $s, " decode_utf8 ok";
utf8::upgrade($ces);
$un = Encode::decode_utf8(uncompress($ces));
is $un, $s, " decode_utf8 ok";
}
{
title "gzopen" ;
my $s = "\x{df}\x{100}";
my $byte_len = length( Encode::encode_utf8($s) );
my ($uncomp) ;
my $lex = new LexFile my $name ;
ok my $fil = gzopen($name, "wb"), " gzopen for write ok" ;
is $fil->gzwrite(Encode::encode_utf8($s)), $byte_len, " wrote $byte_len bytes" ;
ok ! $fil->gzclose, " gzclose ok" ;
ok $fil = gzopen($name, "rb"), " gzopen for read ok" ;
is $fil->gzread($uncomp), $byte_len, " read $byte_len bytes" ;
is length($uncomp), $byte_len, " uncompress is $byte_len bytes";
ok ! $fil->gzclose, "gzclose ok" ;
is $s, Encode::decode_utf8($uncomp), " decode_utf8 ok" ;
}
{
title "Catch wide characters";
my $a = "a\xFF\x{100}";
eval { memGzip($a) };
like($@, qr/Wide character in memGzip/, " wide characters in memGzip");
eval { memGunzip($a) };
like($@, qr/Wide character in memGunzip/, " wide characters in memGunzip");
eval { compress($a) };
like($@, qr/Wide character in compress/, " wide characters in compress");
eval { uncompress($a) };
like($@, qr/Wide character in uncompress/, " wide characters in uncompress");
my $lex = new LexFile my $name ;
ok my $fil = gzopen($name, "wb"), " gzopen for write ok" ;
eval { $fil->gzwrite($a); } ;
like($@, qr/Wide character in gzwrite/, " wide characters in gzwrite");
ok ! $fil->gzclose, " gzclose ok" ;
}