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 File::Spec ; use Test::More ; use CompTestUtils; my $LZMA ; my $UNLZMA ; sub ExternalLzmaWorks { my $lex = new LexFile my $outfile; my $content = qq { Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut tempus odio id dolor. Camelus perlus. Larrius in lumen numen. Dolor en quiquum filia est. Quintus cenum parat. }; writeWithLzma($outfile, $content) or return 0; my $got ; readWithLzma($outfile, $got) or return 0; if ($content ne $got) { diag "Uncompressed content is wrong"; return 0 ; } return 1 ; } sub readWithLzma { my $file = shift ; my $lex = new LexFile my $outfile; my $comp = "$UNLZMA -c " ; if (system("$comp <$file >$outfile") == 0 ) { $_[0] = readFile($outfile); return 1 ; } diag "'$comp' failed: $?"; return 0 ; } sub writeWithLzma { my $file = shift ; my $content = shift ; my $options = shift || ''; my $lex = new LexFile my $infile; writeFile($infile, $content); unlink $file ; my $comp = "$LZMA -c $options $infile >$file" ; return 1 if system($comp) == 0 ; diag "'$comp' failed: $?"; return 0 ; } BEGIN { # Check external lzma is available my $nameLZ = $^O =~ /mswin/i ? 'lzma.exe' : 'lzma'; my $nameUNLZ = $^O =~ /mswin/i ? 'unlzma.exe' : 'unlzma'; my $split = $^O =~ /mswin/i ? ";" : ":"; for my $dir (reverse split $split, $ENV{PATH}) { $LZMA = File::Spec->catfile($dir,$nameLZ) if -x File::Spec->catfile($dir,$nameLZ); $UNLZMA = File::Spec->catfile($dir,$nameUNLZ) if -x File::Spec->catfile($dir,$nameUNLZ); } # Handle spaces in path to lzma $LZMA = "\"$LZMA\"" if defined $LZMA && $LZMA =~ /\s/; $UNLZMA = "\"$UNLZMA\"" if defined $UNLZMA && $UNLZMA =~ /\s/; plan(skip_all => "Cannot find $nameLZ") if ! $LZMA ; plan(skip_all => "Cannot find $nameUNLZ") if ! $UNLZMA ; plan(skip_all => "$nameLZ doesn't work as expected") if ! ExternalLzmaWorks(); # use Test::NoWarnings, if available my $extra = 0 ; $extra = 1 if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 }; plan tests => 12 + $extra ; use_ok('IO::Compress::Lzma', ':all') ; use_ok('IO::Uncompress::UnLzma', ':all') ; } { title "Test interop with $LZMA" ; my ($file, $file1); my $lex = new LexFile $file, $file1; my $content = "hello world\n" ; my $got; ok writeWithLzma($file, $content), "writeWithLzma ok"; unlzma $file => \$got ; is $got, $content; lzma \$content => $file1; $got = ''; ok readWithLzma($file1, $got), "readWithLzma returns 0"; is $got, $content, "got content"; } { title "Test interop with $LZMA - empty file" ; my ($file, $file1); my $lex = new LexFile $file, $file1; my $content = "" ; my $got; ok writeWithLzma($file, $content), "writeWithLzma ok"; unlzma $file => \$got ; is $got, $content; lzma \$content => $file1; $got = ''; ok readWithLzma($file1, $got), "readWithLzma returns 0"; is $got, $content, "got content"; }