1
2use lib 't';
3use strict;
4use warnings;
5use bytes;
6
7use Test::More ;
8use CompTestUtils;
9
10our ($extra);
11
12BEGIN {
13    plan skip_all => "Lengthy Tests Disabled\n" .
14                     "set COMPRESS_ZLIB_RUN_ALL or COMPRESS_ZLIB_RUN_MOST to run this test suite"
15        unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} or defined $ENV{COMPRESS_ZLIB_RUN_MOST};
16
17    # use Test::NoWarnings, if available
18    $extra = 0 ;
19    $extra = 1
20        if eval { require Test::NoWarnings ;  import Test::NoWarnings; 1 };
21
22}
23
24sub run
25{
26
27    my $CompressClass   = identify();
28    my $UncompressClass = getInverse($CompressClass);
29    my $Error           = getErrorRef($CompressClass);
30    my $UnError         = getErrorRef($UncompressClass);
31
32
33
34    my $hello = <<EOM ;
35hello world
36this is a test
37some more stuff on this line
38ad finally...
39EOM
40
41    print "#\n# Testing $UncompressClass\n#\n";
42
43    my $compressed = mkComplete($CompressClass, $hello);
44    my $cc = $compressed ;
45
46    plan tests => (length($compressed) * 6 * 7) + 1 + $extra ;
47
48    is anyUncompress(\$cc), $hello ;
49
50    for my $blocksize (1, 2, 13)
51    {
52        for my $i (0 .. length($compressed) - 1)
53        {
54            for my $useBuf (0 .. 1)
55            {
56                print "#\n# BlockSize $blocksize, Length $i, Buffer $useBuf\n#\n" ;
57                my $lex = LexFile->new( my $name );
58
59                my $prime = substr($compressed, 0, $i);
60                my $rest = substr($compressed, $i);
61
62                my $start  ;
63                if ($useBuf) {
64                    $start = \$rest ;
65                }
66                else {
67                    $start = $name ;
68                    writeFile($name, $rest);
69                }
70
71                #my $gz = $UncompressClass->can('new')->( $UncompressClass, $name,
72                my $gz = $UncompressClass->can('new')->( $UncompressClass, $start,
73                                              -Append      => 1,
74                                              -BlockSize   => $blocksize,
75                                              -Prime       => $prime,
76                                              -Transparent => 0
77                                             );
78                ok $gz;
79                ok ! $gz->error() ;
80                my $un ;
81                my $status = 1 ;
82                $status = $gz->read($un) while $status > 0 ;
83                is $status, 0 ;
84                ok ! $gz->error()
85                    or print "Error is '" . $gz->error() . "'\n";
86                is $un, $hello ;
87                ok $gz->eof() ;
88                ok $gz->close() ;
89            }
90        }
91    }
92}
93
941;
95