Blame t/compress/CompTestUtils.pm

Packit Service 4a2782
package CompTestUtils;
Packit Service 4a2782
Packit Service 4a2782
package main ;
Packit Service 4a2782
Packit Service 4a2782
use strict ;
Packit Service 4a2782
use warnings;
Packit Service 4a2782
use bytes;
Packit Service 4a2782
Packit Service 4a2782
#use lib qw(t t/compress);
Packit Service 4a2782
Packit Service 4a2782
use Carp ;
Packit Service 4a2782
#use Test::More ; 
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
sub title
Packit Service 4a2782
{
Packit Service 4a2782
    #diag "" ; 
Packit Service 4a2782
    ok(1, $_[0]) ;
Packit Service 4a2782
    #diag "" ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub like_eval
Packit Service 4a2782
{
Packit Service 4a2782
    like $@, @_ ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
BEGIN {
Packit Service 4a2782
    eval { 
Packit Service 4a2782
       require File::Temp;
Packit Service 4a2782
     } ;
Packit Service 4a2782
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
{
Packit Service 4a2782
    package LexFile ;
Packit Service 4a2782
Packit Service 4a2782
    our ($index);
Packit Service 4a2782
    $index = '00000';
Packit Service 4a2782
    
Packit Service 4a2782
    sub new
Packit Service 4a2782
    {
Packit Service 4a2782
        my $self = shift ;
Packit Service 4a2782
        foreach (@_)
Packit Service 4a2782
        {
Packit Service 4a2782
            Carp::croak "NO!!!!" if defined $_;
Packit Service 4a2782
            # autogenerate the name if none supplied
Packit Service 4a2782
            $_ = "tst" . $$ . "X" . $index ++ . ".tmp"
Packit Service 4a2782
                unless defined $_;
Packit Service 4a2782
        }
Packit Service 4a2782
        chmod 0777, @_;
Packit Service 4a2782
        for (@_) { 1 while unlink $_ } ;
Packit Service 4a2782
        bless [ @_ ], $self ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    sub DESTROY
Packit Service 4a2782
    {
Packit Service 4a2782
        my $self = shift ;
Packit Service 4a2782
        chmod 0777, @{ $self } ;
Packit Service 4a2782
        for (@$self) { 1 while unlink $_ } ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
{
Packit Service 4a2782
    package LexDir ;
Packit Service 4a2782
Packit Service 4a2782
    use File::Path;
Packit Service 4a2782
Packit Service 4a2782
    our ($index);
Packit Service 4a2782
    $index = '00000';
Packit Service 4a2782
    our ($useTempFile);
Packit Service 4a2782
    our ($useTempDir);
Packit Service 4a2782
    
Packit Service 4a2782
    sub new
Packit Service 4a2782
    {
Packit Service 4a2782
        my $self = shift ;
Packit Service 4a2782
Packit Service 4a2782
        if ( $useTempDir)
Packit Service 4a2782
        {
Packit Service 4a2782
            foreach (@_)
Packit Service 4a2782
            {
Packit Service 4a2782
                Carp::croak "NO!!!!" if defined $_;
Packit Service 4a2782
                $_ = File::Temp->newdir(DIR => '.');
Packit Service 4a2782
                # Subsequent manipulations assume Unix syntax, metacharacters, etc.
Packit Service 4a2782
                if ($^O eq 'VMS')
Packit Service 4a2782
                {
Packit Service 4a2782
                    $_->{DIRNAME} = VMS::Filespec::unixify($_->{DIRNAME});
Packit Service 4a2782
                    $_->{DIRNAME} =~ s/\/$//;
Packit Service 4a2782
                }
Packit Service 4a2782
            }
Packit Service 4a2782
            bless [ @_ ], $self ;
Packit Service 4a2782
        }
Packit Service 4a2782
        elsif ( $useTempFile)
Packit Service 4a2782
        {
Packit Service 4a2782
            foreach (@_)
Packit Service 4a2782
            {
Packit Service 4a2782
                Carp::croak "NO!!!!" if defined $_;
Packit Service 4a2782
                $_ = File::Temp::tempdir(DIR => '.', CLEANUP => 1);
Packit Service 4a2782
                # Subsequent manipulations assume Unix syntax, metacharacters, etc.
Packit Service 4a2782
                if ($^O eq 'VMS')
Packit Service 4a2782
                {
Packit Service 4a2782
                    $_ = VMS::Filespec::unixify($_);
Packit Service 4a2782
                    $_ =~ s/\/$//;
Packit Service 4a2782
                }
Packit Service 4a2782
            }
Packit Service 4a2782
            bless [ @_ ], $self ;
Packit Service 4a2782
        }
Packit Service 4a2782
        else
Packit Service 4a2782
        {
Packit Service 4a2782
            foreach (@_)
Packit Service 4a2782
            {
Packit Service 4a2782
                Carp::croak "NO!!!!" if defined $_;
Packit Service 4a2782
                # autogenerate the name if none supplied
Packit Service 4a2782
                $_ = "tmpdir" . $$ . "X" . $index ++ . ".tmp" ;
Packit Service 4a2782
            }
Packit Service 4a2782
            foreach (@_) 
Packit Service 4a2782
            { 
Packit Service 4a2782
                rmtree $_, {verbose => 0, safe => 1}
Packit Service 4a2782
                    if -d $_; 
Packit Service 4a2782
                mkdir $_, 0777 
Packit Service 4a2782
            }
Packit Service 4a2782
            bless [ @_ ], $self ;
Packit Service 4a2782
        }
Packit Service 4a2782
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    sub DESTROY
Packit Service 4a2782
    {
Packit Service 4a2782
        if (! $useTempFile)
Packit Service 4a2782
        {
Packit Service 4a2782
            my $self = shift ;
Packit Service 4a2782
            foreach (@$self) 
Packit Service 4a2782
            { 
Packit Service 4a2782
                rmtree $_, {verbose => 0, safe => 1}
Packit Service 4a2782
                    if -d $_ ; 
Packit Service 4a2782
            }
Packit Service 4a2782
        }
Packit Service 4a2782
    }
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub readFile
Packit Service 4a2782
{
Packit Service 4a2782
    my $f = shift ;
Packit Service 4a2782
Packit Service 4a2782
    my @strings ;
Packit Service 4a2782
Packit Service 4a2782
    if (IO::Compress::Base::Common::isaFilehandle($f))
Packit Service 4a2782
    {
Packit Service 4a2782
        my $pos = tell($f);
Packit Service 4a2782
        seek($f, 0,0);
Packit Service 4a2782
        @strings = <$f> ;	
Packit Service 4a2782
        seek($f, 0, $pos);
Packit Service 4a2782
    }
Packit Service 4a2782
    else
Packit Service 4a2782
    {
Packit Service 4a2782
        open (F, "<$f") 
Packit Service 4a2782
            or croak "Cannot open $f: $!\n" ;
Packit Service 4a2782
        binmode F;
Packit Service 4a2782
        @strings = <F> ;	
Packit Service 4a2782
        close F ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    return @strings if wantarray ;
Packit Service 4a2782
    return join "", @strings ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub touch
Packit Service 4a2782
{
Packit Service 4a2782
    foreach (@_) { writeFile($_, '') }
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub writeFile
Packit Service 4a2782
{
Packit Service 4a2782
    my($filename, @strings) = @_ ;
Packit Service 4a2782
    1 while unlink $filename ;
Packit Service 4a2782
    open (F, ">$filename") 
Packit Service 4a2782
        or croak "Cannot open $filename: $!\n" ;
Packit Service 4a2782
    binmode F;
Packit Service 4a2782
    foreach (@strings) {
Packit Service 4a2782
        no warnings ;
Packit Service 4a2782
        print F $_ ;
Packit Service 4a2782
    }
Packit Service 4a2782
    close F ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub GZreadFile
Packit Service 4a2782
{
Packit Service 4a2782
    my ($filename) = shift ;
Packit Service 4a2782
Packit Service 4a2782
    my ($uncomp) = "" ;
Packit Service 4a2782
    my $line = "" ;
Packit Service 4a2782
    my $fil = gzopen($filename, "rb") 
Packit Service 4a2782
        or croak "Cannopt open '$filename': $Compress::Zlib::gzerrno" ;
Packit Service 4a2782
Packit Service 4a2782
    $uncomp .= $line 
Packit Service 4a2782
        while $fil->gzread($line) > 0;
Packit Service 4a2782
Packit Service 4a2782
    $fil->gzclose ;
Packit Service 4a2782
    return $uncomp ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub hexDump
Packit Service 4a2782
{
Packit Service 4a2782
    my $d = shift ;
Packit Service 4a2782
Packit Service 4a2782
    if (IO::Compress::Base::Common::isaFilehandle($d))
Packit Service 4a2782
    {
Packit Service 4a2782
        $d = readFile($d);
Packit Service 4a2782
    }
Packit Service 4a2782
    elsif (IO::Compress::Base::Common::isaFilename($d))
Packit Service 4a2782
    {
Packit Service 4a2782
        $d = readFile($d);
Packit Service 4a2782
    }
Packit Service 4a2782
    else
Packit Service 4a2782
    {
Packit Service 4a2782
        $d = $$d ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    my $offset = 0 ;
Packit Service 4a2782
Packit Service 4a2782
    $d = '' unless defined $d ;
Packit Service 4a2782
    #while (read(STDIN, $data, 16)) {
Packit Service 4a2782
    while (my $data = substr($d, 0, 16)) {
Packit Service 4a2782
        substr($d, 0, 16) = '' ;
Packit Service 4a2782
        printf "# %8.8lx    ", $offset;
Packit Service 4a2782
        $offset += 16;
Packit Service 4a2782
Packit Service 4a2782
        my @array = unpack('C*', $data);
Packit Service 4a2782
        foreach (@array) {
Packit Service 4a2782
            printf('%2.2x ', $_);
Packit Service 4a2782
        }
Packit Service 4a2782
        print "   " x (16 - @array)
Packit Service 4a2782
            if @array < 16 ;
Packit Service 4a2782
        $data =~ tr/\0-\37\177-\377/./;
Packit Service 4a2782
        print "  $data\n";
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub readHeaderInfo
Packit Service 4a2782
{
Packit Service 4a2782
    my $name = shift ;
Packit Service 4a2782
    my %opts = @_ ;
Packit Service 4a2782
Packit Service 4a2782
    my $string = <
Packit Service 4a2782
some text
Packit Service 4a2782
EOM
Packit Service 4a2782
Packit Service 4a2782
    ok my $x = new IO::Compress::Gzip $name, %opts 
Packit Service 4a2782
        or diag "GzipError is $IO::Compress::Gzip::GzipError" ;
Packit Service 4a2782
    ok $x->write($string) ;
Packit Service 4a2782
    ok $x->close ;
Packit Service 4a2782
Packit Service 4a2782
    #is GZreadFile($name), $string ;
Packit Service 4a2782
Packit Service 4a2782
    ok my $gunz = new IO::Uncompress::Gunzip $name, Strict => 0
Packit Service 4a2782
        or diag "GunzipError is $IO::Uncompress::Gunzip::GunzipError" ;
Packit Service 4a2782
    ok my $hdr = $gunz->getHeaderInfo();
Packit Service 4a2782
    my $uncomp ;
Packit Service 4a2782
    ok $gunz->read($uncomp) ;
Packit Service 4a2782
    ok $uncomp eq $string;
Packit Service 4a2782
    ok $gunz->close ;
Packit Service 4a2782
Packit Service 4a2782
    return $hdr ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub cmpFile
Packit Service 4a2782
{
Packit Service 4a2782
    my ($filename, $uue) = @_ ;
Packit Service 4a2782
    return readFile($filename) eq unpack("u", $uue) ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
#sub isRawFormat
Packit Service 4a2782
#{
Packit Service 4a2782
#    my $class = shift;
Packit Service 4a2782
#    # TODO -- add Lzma here?
Packit Service 4a2782
#    my %raw = map { $_ => 1 } qw( RawDeflate );
Packit Service 4a2782
#
Packit Service 4a2782
#    return defined $raw{$class};
Packit Service 4a2782
#}
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
my %TOP = (
Packit Service 4a2782
    'IO::Uncompress::AnyInflate' => { Inverse  => 'IO::Compress::Gzip',
Packit Service 4a2782
                                      Error    => 'AnyInflateError',
Packit Service 4a2782
                                      TopLevel => 'anyinflate',
Packit Service 4a2782
                                      Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Uncompress::AnyUncompress' => { Inverse  => 'IO::Compress::Gzip',
Packit Service 4a2782
                                         Error    => 'AnyUncompressError',
Packit Service 4a2782
                                         TopLevel => 'anyuncompress',
Packit Service 4a2782
                                         Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::Gzip' => { Inverse  => 'IO::Uncompress::Gunzip',
Packit Service 4a2782
                              Error    => 'GzipError',
Packit Service 4a2782
                              TopLevel => 'gzip',
Packit Service 4a2782
                              Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
    'IO::Uncompress::Gunzip' => { Inverse  => 'IO::Compress::Gzip',
Packit Service 4a2782
                                  Error    => 'GunzipError',
Packit Service 4a2782
                                  TopLevel => 'gunzip',
Packit Service 4a2782
                                  Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::Deflate' => { Inverse  => 'IO::Uncompress::Inflate',
Packit Service 4a2782
                                 Error    => 'DeflateError',
Packit Service 4a2782
                                 TopLevel => 'deflate',
Packit Service 4a2782
                                 Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
    'IO::Uncompress::Inflate' => { Inverse  => 'IO::Compress::Deflate',
Packit Service 4a2782
                                   Error    => 'InflateError',
Packit Service 4a2782
                                   TopLevel => 'inflate',
Packit Service 4a2782
                                   Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::RawDeflate' => { Inverse  => 'IO::Uncompress::RawInflate',
Packit Service 4a2782
                                    Error    => 'RawDeflateError',
Packit Service 4a2782
                                    TopLevel => 'rawdeflate',
Packit Service 4a2782
                                    Raw      => 1,
Packit Service 4a2782
                            },
Packit Service 4a2782
    'IO::Uncompress::RawInflate' => { Inverse  => 'IO::Compress::RawDeflate',
Packit Service 4a2782
                                      Error    => 'RawInflateError',
Packit Service 4a2782
                                      TopLevel => 'rawinflate',
Packit Service 4a2782
                                      Raw      => 1,
Packit Service 4a2782
                            },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::Zip' => { Inverse  => 'IO::Uncompress::Unzip',
Packit Service 4a2782
                             Error    => 'ZipError',
Packit Service 4a2782
                             TopLevel => 'zip',
Packit Service 4a2782
                             Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
    'IO::Uncompress::Unzip' => { Inverse  => 'IO::Compress::Zip',
Packit Service 4a2782
                                 Error    => 'UnzipError',
Packit Service 4a2782
                                 TopLevel => 'unzip',
Packit Service 4a2782
                                 Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::Bzip2' => { Inverse  => 'IO::Uncompress::Bunzip2',
Packit Service 4a2782
                               Error    => 'Bzip2Error',
Packit Service 4a2782
                               TopLevel => 'bzip2',
Packit Service 4a2782
                               Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
    'IO::Uncompress::Bunzip2' => { Inverse  => 'IO::Compress::Bzip2',
Packit Service 4a2782
                                   Error    => 'Bunzip2Error',
Packit Service 4a2782
                                   TopLevel => 'bunzip2',
Packit Service 4a2782
                                   Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::Lzop' => { Inverse  => 'IO::Uncompress::UnLzop',
Packit Service 4a2782
                              Error    => 'LzopError',
Packit Service 4a2782
                              TopLevel => 'lzop',
Packit Service 4a2782
                              Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
    'IO::Uncompress::UnLzop' => { Inverse  => 'IO::Compress::Lzop',
Packit Service 4a2782
                                  Error    => 'UnLzopError',
Packit Service 4a2782
                                  TopLevel => 'unlzop',
Packit Service 4a2782
                                  Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::Lzf' => { Inverse  => 'IO::Uncompress::UnLzf',
Packit Service 4a2782
                             Error    => 'LzfError',
Packit Service 4a2782
                             TopLevel => 'lzf',
Packit Service 4a2782
                             Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
    'IO::Uncompress::UnLzf' => { Inverse  => 'IO::Compress::Lzf',
Packit Service 4a2782
                                 Error    => 'UnLzfError',
Packit Service 4a2782
                                 TopLevel => 'unlzf',
Packit Service 4a2782
                                 Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::Lzma' => { Inverse  => 'IO::Uncompress::UnLzma',
Packit Service 4a2782
                              Error    => 'LzmaError',
Packit Service 4a2782
                              TopLevel => 'lzma',
Packit Service 4a2782
                              Raw      => 1,
Packit Service 4a2782
                            },
Packit Service 4a2782
    'IO::Uncompress::UnLzma' => { Inverse  => 'IO::Compress::Lzma',
Packit Service 4a2782
                                  Error    => 'UnLzmaError',
Packit Service 4a2782
                                  TopLevel => 'unlzma',
Packit Service 4a2782
                                  Raw      => 1,
Packit Service 4a2782
                                },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::Xz' => { Inverse  => 'IO::Uncompress::UnXz',
Packit Service 4a2782
                            Error    => 'XzError',
Packit Service 4a2782
                            TopLevel => 'xz',
Packit Service 4a2782
                            Raw      => 0,
Packit Service 4a2782
                          },
Packit Service 4a2782
    'IO::Uncompress::UnXz' => { Inverse  => 'IO::Compress::Xz',
Packit Service 4a2782
                                Error    => 'UnXzError',
Packit Service 4a2782
                                TopLevel => 'unxz',
Packit Service 4a2782
                                Raw      => 0,
Packit Service 4a2782
                              },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::PPMd' => { Inverse  => 'IO::Uncompress::UnPPMd',
Packit Service 4a2782
                              Error    => 'PPMdError',
Packit Service 4a2782
                              TopLevel => 'ppmd',
Packit Service 4a2782
                              Raw      => 0,
Packit Service 4a2782
                            },
Packit Service 4a2782
    'IO::Uncompress::UnPPMd' => { Inverse  => 'IO::Compress::PPMd',
Packit Service 4a2782
                                  Error    => 'UnPPMdError',
Packit Service 4a2782
                                  TopLevel => 'unppmd',
Packit Service 4a2782
                                  Raw      => 0,
Packit Service 4a2782
                                },
Packit Service 4a2782
Packit Service 4a2782
    'IO::Compress::DummyComp' => { Inverse  => 'IO::Uncompress::DummyUnComp',
Packit Service 4a2782
                                   Error    => 'DummyCompError',
Packit Service 4a2782
                                   TopLevel => 'dummycomp',
Packit Service 4a2782
                                   Raw      => 0,
Packit Service 4a2782
                                 },
Packit Service 4a2782
    'IO::Uncompress::DummyUnComp' => { Inverse  => 'IO::Compress::DummyComp',
Packit Service 4a2782
                                       Error    => 'DummyUnCompError',
Packit Service 4a2782
                                       TopLevel => 'dummyunComp',
Packit Service 4a2782
                                       Raw      => 0,
Packit Service 4a2782
                                     },
Packit Service 4a2782
);
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
for my $key (keys %TOP)
Packit Service 4a2782
{
Packit Service 4a2782
    no strict;
Packit Service 4a2782
    no warnings;
Packit Service 4a2782
    $TOP{$key}{Error}    = \${ $key . '::' . $TOP{$key}{Error}    };
Packit Service 4a2782
    $TOP{$key}{TopLevel} =     $key . '::' . $TOP{$key}{TopLevel}  ;
Packit Service 4a2782
Packit Service 4a2782
    # Silence used once warning in really old perl
Packit Service 4a2782
    my $dummy            = \${ $key . '::' . $TOP{$key}{Error}    };
Packit Service 4a2782
Packit Service 4a2782
    #$TOP{$key . "::" . $TOP{$key}{TopLevel} } = $TOP{$key};
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub uncompressBuffer
Packit Service 4a2782
{
Packit Service 4a2782
    my $compWith = shift ;
Packit Service 4a2782
    my $buffer = shift ;
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
    my $out ;
Packit Service 4a2782
    my $obj = $TOP{$compWith}{Inverse}->new( \$buffer, -Append => 1);
Packit Service 4a2782
    1 while $obj->read($out) > 0 ;
Packit Service 4a2782
    return $out ;
Packit Service 4a2782
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
sub getInverse
Packit Service 4a2782
{
Packit Service 4a2782
    my $class = shift ;
Packit Service 4a2782
Packit Service 4a2782
    return $TOP{$class}{Inverse};
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub getErrorRef
Packit Service 4a2782
{
Packit Service 4a2782
    my $class = shift ;
Packit Service 4a2782
Packit Service 4a2782
    return $TOP{$class}{Error};
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub getTopFuncRef
Packit Service 4a2782
{
Packit Service 4a2782
    my $class = shift ;
Packit Service 4a2782
Packit Service 4a2782
    die "Cannot find $class"
Packit Service 4a2782
        if ! defined $TOP{$class}{TopLevel};
Packit Service 4a2782
    return \&{ $TOP{$class}{TopLevel} } ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub getTopFuncName
Packit Service 4a2782
{
Packit Service 4a2782
    my $class = shift ;
Packit Service 4a2782
Packit Service 4a2782
    return $TOP{$class}{TopLevel} ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub compressBuffer
Packit Service 4a2782
{
Packit Service 4a2782
    my $compWith = shift ;
Packit Service 4a2782
    my $buffer = shift ;
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
    my $out ;
Packit Service 4a2782
    die "Cannot find $compWith"
Packit Service 4a2782
        if ! defined $TOP{$compWith}{Inverse};
Packit Service 4a2782
    my $obj = $TOP{$compWith}{Inverse}->new( \$out);
Packit Service 4a2782
    $obj->write($buffer) ;
Packit Service 4a2782
    $obj->close();
Packit Service 4a2782
    return $out ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
our ($AnyUncompressError);
Packit Service 4a2782
BEGIN
Packit Service 4a2782
{
Packit Service 4a2782
    eval ' use IO::Uncompress::AnyUncompress qw($AnyUncompressError); ';
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub anyUncompress
Packit Service 4a2782
{
Packit Service 4a2782
    my $buffer = shift ;
Packit Service 4a2782
    my $already = shift;
Packit Service 4a2782
Packit Service 4a2782
    my @opts = ();
Packit Service 4a2782
    if (ref $buffer && ref $buffer eq 'ARRAY')
Packit Service 4a2782
    {
Packit Service 4a2782
        @opts = @$buffer;
Packit Service 4a2782
        $buffer = shift @opts;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    if (ref $buffer)
Packit Service 4a2782
    {
Packit Service 4a2782
        croak "buffer is undef" unless defined $$buffer;
Packit Service 4a2782
        croak "buffer is empty" unless length $$buffer;
Packit Service 4a2782
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
    my $data ;
Packit Service 4a2782
    if (IO::Compress::Base::Common::isaFilehandle($buffer))
Packit Service 4a2782
    {
Packit Service 4a2782
        $data = readFile($buffer);
Packit Service 4a2782
    }
Packit Service 4a2782
    elsif (IO::Compress::Base::Common::isaFilename($buffer))
Packit Service 4a2782
    {
Packit Service 4a2782
        $data = readFile($buffer);
Packit Service 4a2782
    }
Packit Service 4a2782
    else
Packit Service 4a2782
    {
Packit Service 4a2782
        $data = $$buffer ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    if (defined $already && length $already)
Packit Service 4a2782
    {
Packit Service 4a2782
Packit Service 4a2782
        my $got = substr($data, 0, length($already));
Packit Service 4a2782
        substr($data, 0, length($already)) = '';
Packit Service 4a2782
Packit Service 4a2782
        is $got, $already, '  Already OK' ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    my $out = '';
Packit Service 4a2782
    my $o = new IO::Uncompress::AnyUncompress \$data, 
Packit Service 4a2782
                    Append => 1, 
Packit Service 4a2782
                    Transparent => 0, 
Packit Service 4a2782
                    RawInflate => 1,
Packit Service 4a2782
                    UnLzma     => 1,
Packit Service 4a2782
                    @opts
Packit Service 4a2782
        or croak "Cannot open buffer/file: $AnyUncompressError" ;
Packit Service 4a2782
Packit Service 4a2782
    1 while $o->read($out) > 0 ;
Packit Service 4a2782
Packit Service 4a2782
    croak "Error uncompressing -- " . $o->error()
Packit Service 4a2782
        if $o->error() ;
Packit Service 4a2782
Packit Service 4a2782
    return $out ;
Packit Service 4a2782
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub getHeaders
Packit Service 4a2782
{
Packit Service 4a2782
    my $buffer = shift ;
Packit Service 4a2782
    my $already = shift;
Packit Service 4a2782
Packit Service 4a2782
    my @opts = ();
Packit Service 4a2782
    if (ref $buffer && ref $buffer eq 'ARRAY')
Packit Service 4a2782
    {
Packit Service 4a2782
        @opts = @$buffer;
Packit Service 4a2782
        $buffer = shift @opts;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    if (ref $buffer)
Packit Service 4a2782
    {
Packit Service 4a2782
        croak "buffer is undef" unless defined $$buffer;
Packit Service 4a2782
        croak "buffer is empty" unless length $$buffer;
Packit Service 4a2782
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
    my $data ;
Packit Service 4a2782
    if (IO::Compress::Base::Common::isaFilehandle($buffer))
Packit Service 4a2782
    {
Packit Service 4a2782
        $data = readFile($buffer);
Packit Service 4a2782
    }
Packit Service 4a2782
    elsif (IO::Compress::Base::Common::isaFilename($buffer))
Packit Service 4a2782
    {
Packit Service 4a2782
        $data = readFile($buffer);
Packit Service 4a2782
    }
Packit Service 4a2782
    else
Packit Service 4a2782
    {
Packit Service 4a2782
        $data = $$buffer ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    if (defined $already && length $already)
Packit Service 4a2782
    {
Packit Service 4a2782
Packit Service 4a2782
        my $got = substr($data, 0, length($already));
Packit Service 4a2782
        substr($data, 0, length($already)) = '';
Packit Service 4a2782
Packit Service 4a2782
        is $got, $already, '  Already OK' ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    my $out = '';
Packit Service 4a2782
    my $o = new IO::Uncompress::AnyUncompress \$data, 
Packit Service 4a2782
                MultiStream => 1, 
Packit Service 4a2782
                Append => 1, 
Packit Service 4a2782
                Transparent => 0, 
Packit Service 4a2782
                RawInflate => 1,
Packit Service 4a2782
                UnLzma     => 1,
Packit Service 4a2782
                @opts
Packit Service 4a2782
        or croak "Cannot open buffer/file: $AnyUncompressError" ;
Packit Service 4a2782
Packit Service 4a2782
    1 while $o->read($out) > 0 ;
Packit Service 4a2782
Packit Service 4a2782
    croak "Error uncompressing -- " . $o->error()
Packit Service 4a2782
        if $o->error() ;
Packit Service 4a2782
Packit Service 4a2782
    return ($o->getHeaderInfo()) ;
Packit Service 4a2782
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub mkComplete
Packit Service 4a2782
{
Packit Service 4a2782
    my $class = shift ;
Packit Service 4a2782
    my $data = shift;
Packit Service 4a2782
    my $Error = getErrorRef($class);
Packit Service 4a2782
Packit Service 4a2782
    my $buffer ;
Packit Service 4a2782
    my %params = ();
Packit Service 4a2782
Packit Service 4a2782
    if ($class eq 'IO::Compress::Gzip') {
Packit Service 4a2782
        %params = (
Packit Service 4a2782
            Name       => "My name",
Packit Service 4a2782
            Comment    => "a comment",
Packit Service 4a2782
            ExtraField => ['ab' => "extra"],
Packit Service 4a2782
            HeaderCRC  => 1);
Packit Service 4a2782
    }
Packit Service 4a2782
    elsif ($class eq 'IO::Compress::Zip'){
Packit Service 4a2782
        %params = (
Packit Service 4a2782
            Name              => "My name",
Packit Service 4a2782
            Comment           => "a comment",
Packit Service 4a2782
            ZipComment        => "last comment",
Packit Service 4a2782
            exTime            => [100, 200, 300],
Packit Service 4a2782
            ExtraFieldLocal   => ["ab" => "extra1"],
Packit Service 4a2782
            ExtraFieldCentral => ["cd" => "extra2"],
Packit Service 4a2782
        );
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    my $z = new $class( \$buffer, %params)
Packit Service 4a2782
        or croak "Cannot create $class object: $$Error";
Packit Service 4a2782
    $z->write($data);
Packit Service 4a2782
    $z->close();
Packit Service 4a2782
Packit Service 4a2782
    my $unc = getInverse($class);
Packit Service 4a2782
    anyUncompress(\$buffer) eq $data
Packit Service 4a2782
        or die "bad bad bad";
Packit Service 4a2782
    my $u = new $unc( \$buffer);
Packit Service 4a2782
    my $info = $u->getHeaderInfo() ;
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
    return wantarray ? ($info, $buffer) : $buffer ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub mkErr
Packit Service 4a2782
{
Packit Service 4a2782
    my $string = shift ;
Packit Service 4a2782
    my ($dummy, $file, $line) = caller ;
Packit Service 4a2782
    -- $line ;
Packit Service 4a2782
Packit Service 4a2782
    $file = quotemeta($file);
Packit Service 4a2782
Packit Service 4a2782
    #return "/$string\\s+at $file line $line/" if $] >= 5.006 ;
Packit Service 4a2782
    return "/$string\\s+at /" ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub mkEvalErr
Packit Service 4a2782
{
Packit Service 4a2782
    my $string = shift ;
Packit Service 4a2782
Packit Service 4a2782
    #return "/$string\\s+at \\(eval /" if $] > 5.006 ;
Packit Service 4a2782
    return "/$string\\s+at /" ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
sub dumpObj
Packit Service 4a2782
{
Packit Service 4a2782
    my $obj = shift ;
Packit Service 4a2782
Packit Service 4a2782
    my ($dummy, $file, $line) = caller ;
Packit Service 4a2782
Packit Service 4a2782
    if (@_)
Packit Service 4a2782
    {
Packit Service 4a2782
        print "#\n# dumpOBJ from $file line $line @_\n" ;
Packit Service 4a2782
    }
Packit Service 4a2782
    else
Packit Service 4a2782
    {
Packit Service 4a2782
        print "#\n# dumpOBJ from $file line $line \n" ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    my $max = 0 ;;
Packit Service 4a2782
    foreach my $k (keys %{ *$obj })
Packit Service 4a2782
    {
Packit Service 4a2782
        $max = length $k if length $k > $max ;
Packit Service 4a2782
    }
Packit Service 4a2782
Packit Service 4a2782
    foreach my $k (sort keys %{ *$obj })
Packit Service 4a2782
    {
Packit Service 4a2782
        my $v = $obj->{$k} ;
Packit Service 4a2782
        $v = '-undef-' unless defined $v;
Packit Service 4a2782
        my $pad = ' ' x ($max - length($k) + 2) ;
Packit Service 4a2782
        print "# $k$pad: [$v]\n";
Packit Service 4a2782
    }
Packit Service 4a2782
    print "#\n" ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
sub getMultiValues
Packit Service 4a2782
{
Packit Service 4a2782
    my $class = shift ;
Packit Service 4a2782
Packit Service 4a2782
    return (0,0) if $class =~ /lzf|lzma/i;
Packit Service 4a2782
    return (1,0);
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
Packit Service 4a2782
sub gotScalarUtilXS
Packit Service 4a2782
{
Packit Service 4a2782
    eval ' use Scalar::Util "dualvar" ';
Packit Service 4a2782
    return $@ ? 0 : 1 ;
Packit Service 4a2782
}
Packit Service 4a2782
Packit Service 4a2782
package CompTestUtils;
Packit Service 4a2782
Packit Service 4a2782
1;
Packit Service 4a2782
__END__
Packit Service 4a2782
	t/Test/Builder.pm
Packit Service 4a2782
	t/Test/More.pm
Packit Service 4a2782
	t/Test/Simple.pm
Packit Service 4a2782
	t/compress/CompTestUtils.pm
Packit Service 4a2782
	t/compress/any.pl
Packit Service 4a2782
	t/compress/anyunc.pl
Packit Service 4a2782
	t/compress/destroy.pl
Packit Service 4a2782
	t/compress/generic.pl
Packit Service 4a2782
	t/compress/merge.pl
Packit Service 4a2782
	t/compress/multi.pl
Packit Service 4a2782
	t/compress/newtied.pl
Packit Service 4a2782
	t/compress/oneshot.pl
Packit Service 4a2782
	t/compress/prime.pl
Packit Service 4a2782
	t/compress/tied.pl
Packit Service 4a2782
	t/compress/truncate.pl
Packit Service 4a2782
	t/compress/zlib-generic.plParsing config.in...
Packit Service 4a2782
Building Zlib enabled
Packit Service 4a2782
Auto Detect Gzip OS Code..
Packit Service 4a2782
Setting Gzip OS Code to 3 [Unix/Default]
Packit Service 4a2782
Looks Good.