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" ;
}

