1BEGIN { 2 if ($ENV{PERL_CORE}) { 3 chdir 't' if -d 't'; 4 @INC = ("../lib", "lib/compress"); 5 } 6} 7 8use lib qw(t t/compress); 9use strict; 10use warnings; 11use bytes; 12 13use Test::More ; 14use CompTestUtils; 15 16BEGIN 17{ 18 # use Test::NoWarnings, if available 19 my $extra = 0 ; 20 $extra = 1 21 if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 }; 22 23 plan tests => 88 + $extra ; 24 25 use_ok('Compress::Raw::Bzip2') ; 26} 27 28 29 30my $hello = "I am a HAL 9000 computer" x 2001; 31my $tmp = $hello ; 32 33my ($err, $x, $X, $status); 34 35ok( ($x, $err) = new Compress::Raw::Bzip2 (1)); 36ok $x ; 37cmp_ok $err, '==', BZ_OK, " status is BZ_OK" ; 38 39my $out ; 40$status = $x->bzdeflate($tmp, $out) ; 41cmp_ok $status, '==', BZ_RUN_OK, " status is BZ_RUN_OK" ; 42 43cmp_ok $x->bzclose($out), '==', BZ_STREAM_END, " bzflush returned BZ_STREAM_END" ; 44 45{ 46 my $t = $out; 47 my $b = new Compress::Raw::Bunzip2(0,0); 48 49 my $GOT; 50 my $status = $b->bzinflate($t, $GOT) ; 51 cmp_ok $status, "==", BZ_STREAM_END; 52 ok $GOT eq $hello; 53 54} 55 56sub getOut { my $x = ''; return \$x } 57 58for my $bufsize (1, 2, 3, 13, 4096, 1024*10) 59{ 60 print "#\n#Bufsize $bufsize\n#\n"; 61 $tmp = $out; 62 63 my $k; 64 ok(($k, $err) = new Compress::Raw::Bunzip2( 1,1,0,0,1 65 #AppendOutput => 1, 66 #LimitOutput => 1, 67 #Bufsize => $bufsize 68 )); 69 ok $k ; 70 cmp_ok $err, '==', BZ_OK, " status is BZ_OK" ; 71 72 is $k->total_in_lo32(), 0, " total_in_lo32 == 0" ; 73 is $k->total_out_lo32(), 0, " total_out_lo32 == 0" ; 74 my $GOT = getOut(); 75 my $prev; 76 my $deltaOK = 1; 77 my $looped = 0; 78 while (length $tmp) 79 { 80 ++ $looped; 81 my $prev = length $GOT; 82 $status = $k->bzinflate($tmp, $GOT) ; 83 last if $status != BZ_OK; 84 $deltaOK = 0 if length($GOT) - $prev > $bufsize; 85 } 86 87 ok $deltaOK, " Output Delta never > $bufsize"; 88 cmp_ok $looped, '>=', 1, " looped $looped"; 89 is length($tmp), 0, " length of input buffer is zero"; 90 91 cmp_ok $status, "==", BZ_STREAM_END, " status is BZ_STREAM_END" ; 92 ok $$GOT eq $hello, " got expected output" ; 93 is $k->total_in_lo32(), length $out, " length total_in_lo32 ok" ; 94 is $k->total_out_lo32(), length $hello, " length total_out_lo32 ok " . $k->total_out_lo32() ; 95} 96 97sub getit 98{ 99 my $obj = shift ; 100 my $input = shift; 101 102 my $data ; 103 1 while $obj->bzinflate($input, $data) != BZ_STREAM_END ; 104 return \$data ; 105} 106 107{ 108 title "regression test"; 109 110 my ($err, $x, $X, $status); 111 112 ok( ($x, $err) = new Compress::Raw::Bzip2 (1)); 113 ok $x ; 114 cmp_ok $err, '==', BZ_OK, " status is BZ_OK" ; 115 116 my $line1 = ("abcdefghijklmnopq" x 1000) . "\n" ; 117 my $line2 = "second line\n" ; 118 my $text = $line1 . $line2 ; 119 my $tmp = $text; 120 121 my $out ; 122 $status = $x->bzdeflate($tmp, $out) ; 123 cmp_ok $status, '==', BZ_RUN_OK, " status is BZ_RUN_OK" ; 124 125 cmp_ok $x->bzclose($out), '==', BZ_STREAM_END, " bzclose returned BZ_STREAM_END" ; 126 127 my $k; 128 ok(($k, $err) = new Compress::Raw::Bunzip2( 1,1,0,0,1 129 #AppendOutput => 1, 130 #LimitOutput => 1 131 )); 132 133 134 my $c = getit($k, $out); 135 is $$c, $text; 136 137 138} 139