⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 merge.pl

📁 source of perl for linux application,
💻 PL
字号:
use lib 't';use strict;use warnings;use bytes;use Test::More ; use CompTestUtils;use Compress::Raw::Zlib 2 ;BEGIN {     plan(skip_all => "Merge needs Zlib 1.2.1 or better - you have Zlib "                  . Compress::Raw::Zlib::zlib_version())         if ZLIB_VERNUM() < 0x1210 ;    # use Test::NoWarnings, if available    my $extra = 0 ;    $extra = 1        if eval { require Test::NoWarnings ;  import Test::NoWarnings; 1 };    plan tests => 165 + $extra ;}sub run{    my $CompressClass   = identify();    my $UncompressClass = getInverse($CompressClass);    my $Error           = getErrorRef($CompressClass);    my $UnError         = getErrorRef($UncompressClass);    # Tests         #   destination is a file that doesn't exist -- should work ok unless AnyDeflate    #   destination isn't compressed at all    #   destination is compressed but wrong format    #   destination is corrupt - error messages should be correct    #   use apend mode with old zlib - check that this is trapped    #   destination is not seekable, readable, writable - test for filename & handle    {        title "Misc error cases";        eval { new Compress::Raw::Zlib::InflateScan Bufsize => 0} ;        like $@, mkErr("^Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified 0"), "  catch bufsize == 0";        eval { Compress::Raw::Zlib::inflateScanStream::createDeflateStream(undef, Bufsize => 0) } ;        like $@, mkErr("^Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified 0"), "  catch bufsize == 0";    }    # output file/handle not writable    {        foreach my $to_file (0,1)        {            if ($to_file)              { title "$CompressClass - Merge to filename that isn't writable" }            else                { title "$CompressClass - Merge to filehandle that isn't writable" }            my $lex = new LexFile my $out_file ;            # create empty file            open F, ">$out_file" ; print F "x"; close F;            ok   -e $out_file, "  file exists" ;            ok  !-z $out_file, "  and is not empty" ;                        # make unwritable            is chmod(0444, $out_file), 1, "  chmod worked" ;            ok   -e $out_file, "  still exists after chmod" ;            SKIP:            {                skip "Cannot create non-writable file", 3                     if -w $out_file ;                ok ! -w $out_file, "  chmod made file unwritable" ;                my $dest ;                if ($to_file)                  { $dest = $out_file }                else                  { $dest = new IO::File "<$out_file"  }                my $gz = $CompressClass->new($dest, Merge => 1) ;                                ok ! $gz, "  Did not create $CompressClass object";                {                    if ($to_file) {                        is $$Error, "Output file '$out_file' is not writable",                                "  Got non-writable filename message" ;                    }                    else {                        ok $$Error, "  Got error message" ;                    }                }            }            chmod 0777, $out_file ;        }    }    # output is not compressed at all    {        my $lex = new LexFile my $out_file ;        foreach my $to_file ( qw(buffer file handle ) )        {            title "$CompressClass to $to_file, content is not compressed";            my $content = "abc" x 300 ;            my $buffer ;            my $disp_content = defined $content ? $content : '<undef>' ;            my $str_content = defined $content ? $content : '' ;            if ($to_file eq 'buffer')            {                $buffer = \$content ;            }            else            {                writeFile($out_file, $content);                if ($to_file eq 'handle')                {                    $buffer = new IO::File "+<$out_file"                         or die "# Cannot open $out_file: $!";                }                else                  { $buffer = $out_file }            }            ok ! $CompressClass->new($buffer, Merge => 1), "  constructor fails";            {                like $$Error, '/Cannot create InflateScan object: (Header Error|unexpected end of file)/', "  got Bad Magic" ;            }        }    }    # output is empty    {        my $lex = new LexFile my $out_file ;        foreach my $to_file ( qw(buffer file handle ) )        {            title "$CompressClass to $to_file, content is empty";            my $content = '';            my $buffer ;            my $dest ;            if ($to_file eq 'buffer')            {                $dest = $buffer = \$content ;            }            else            {                writeFile($out_file, $content);                $dest = $out_file;                if ($to_file eq 'handle')                {                    $buffer = new IO::File "+<$out_file"                         or die "# Cannot open $out_file: $!";                }                else                  { $buffer = $out_file }            }            ok my $gz = $CompressClass->new($buffer, Merge => 1, AutoClose => 1), "  constructor passes"                or diag $$Error;            $gz->write("FGHI");            $gz->close();            #hexDump($buffer);            my $out = anyUncompress($dest);            is $out, "FGHI", '  Merge OK';        }    }    {        title "$CompressClass - Merge to file that doesn't exist";        my $lex = new LexFile my $out_file ;                ok ! -e $out_file, "  Destination file, '$out_file', does not exist";        ok my $gz1 = $CompressClass->new($out_file, Merge => 1)            or die "# $CompressClass->new failed: $$Error\n";        #hexDump($buffer);        $gz1->write("FGHI");        $gz1->close();        #hexDump($buffer);        my $out = anyUncompress($out_file);        is $out, "FGHI", '  Merged OK';    }    {        my $lex = new LexFile my $out_file ;        foreach my $to_file ( qw( buffer file handle ) )        {            foreach my $content (undef, '', 'x', 'abcde')            {                #next if ! defined $content && $to_file;                 my $buffer ;                my $disp_content = defined $content ? $content : '<undef>' ;                my $str_content = defined $content ? $content : '' ;                if ($to_file eq 'buffer')                {                    my $x ;                    $buffer = \$x ;                    title "$CompressClass to Buffer, content is '$disp_content'";                }                else                {                    $buffer = $out_file ;                    if ($to_file eq 'handle')                    {                        title "$CompressClass to Filehandle, content is '$disp_content'";                    }                    else                    {                        title "$CompressClass to File, content is '$disp_content'";                    }                }                my $gz = $CompressClass->new($buffer);                my $len = defined $content ? length($content) : 0 ;                is $gz->write($content), $len, "  write ok";                ok $gz->close(), " close ok";                #hexDump($buffer);                is anyUncompress($buffer), $str_content, '  Destination is ok';                #if ($corruption)                #{                    #    next if $TopTypes eq 'RawDeflate' && $content eq '';                    #                    #}                my $dest = $buffer ;                    if ($to_file eq 'handle')                {                    $dest = new IO::File "+<$buffer" ;                }                my $gz1 = $CompressClass->new($dest, Merge => 1, AutoClose => 1)                    or die "## Error is  $$Error\n";                #print "YYY\n";                #hexDump($buffer);                #print "XXX\n";                is $gz1->write("FGHI"), 4, "  write returned 4";                ok $gz1->close(), "  close ok";                #hexDump($buffer);                my $out = anyUncompress($buffer);                is $out, $str_content . "FGHI", '  Merged OK';                #exit;            }        }    }    {        my $Func = getTopFuncRef($CompressClass);        my $TopType = getTopFuncName($CompressClass);        my $buffer ;        my $lex = new LexFile my $out_file ;        foreach my $to_file (0, 1)        {            foreach my $content (undef, '', 'x', 'abcde')            {                my $disp_content = defined $content ? $content : '<undef>' ;                my $str_content = defined $content ? $content : '' ;                my $buffer ;                if ($to_file)                {                    $buffer = $out_file ;                    title "$TopType to File, content is '$disp_content'";                }                else                {                    my $x = '';                    $buffer = \$x ;                    title "$TopType to Buffer, content is '$disp_content'";                }                                ok $Func->(\$content, $buffer), " Compress content";                #hexDump($buffer);                is anyUncompress($buffer), $str_content, '  Destination is ok';                ok $Func->(\"FGHI", $buffer, Merge => 1), "  Merge content";                #hexDump($buffer);                my $out = anyUncompress($buffer);                is $out, $str_content . "FGHI", '  Merged OK';            }        }    }}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -