#!/usr/bin/perl -w
use strict;
use constant TEST_NO => 31;
use Test::More tests => TEST_NO;
use File::Spec;
use File::Temp ();
use FindBin ();
use Config qw/%Config/;
use vars qw/@INC %INC/;
$ENV{PAR_TMPDIR} = File::Temp::tempdir(TMPDIR => 1, CLEANUP => 1);
unshift @INC, ($FindBin::Bin);
use_ok('PAR');
use_ok('PAR::StrippedPARL::Static');
use_ok('PAR::StrippedPARL::Dynamic');
# define all the file locations
my $builddir = File::Spec->catdir($FindBin::Bin, File::Spec->updir());
my $myldr = File::Spec->catdir($builddir, 'myldr');
my $boot = File::Spec->catfile($myldr, 'boot' . $Config{_exe});
my $dynamic = File::Spec->catfile($myldr, 'par' . $Config{_exe});
my $parl = File::Spec->catfile($myldr, 'parl' . $Config{_exe});
my $parldyn = File::Spec->catfile($myldr, 'parldyn' . $Config{_exe});
# static(.exe), parl(.exe) must exist
ok(-f $boot, 'Found the static build of parl in myldr');
if (not -f $boot) {
SKIP: {
skip "No boot found. Test script cannot continue!", TEST_NO()-4;
}
exit();
}
ok(-f $parl, 'Found parl in script');
# check that get_raw() returns the same as myldr/boot(.exe)
my $static_bin;
eval { $static_bin = PAR::StrippedPARL::Static->get_raw(); };
ok(!$@, 'Running ...Static->get_raw didn\'t complain' . ($@?": $@":''));
ok($static_bin, '...Static->get_raw didn\'t return false');
my $static_length = length($static_bin);
# compare file sizes
is(
$static_length,
-s $boot,
'Binary returned from ->get_raw has the same size as myldr/boot(.exe)'
);
# compare data
{
open my $fh, '<', $boot or die $!;
binmode $fh;
local $/ = undef;
ok(
$static_bin eq <$fh>,
'...Static->get_raw returns exact myldr/boot(.exe)'
);
close $fh;
}
# check that write_raw() writes the same as myldr/boot(.exe)
my $static_tmp_file;
{
my $tfh;
($tfh, $static_tmp_file) = File::Temp::tempfile(
'partestXXXXXX', OPEN => 1, DIR => File::Spec->tmpdir()
);
}
{
my $okay;
eval { $okay = PAR::StrippedPARL::Static->write_raw($static_tmp_file); };
ok(!$@, 'Running ...Static->write_raw didn\'t complain' . ($@?": $@":''));
ok($okay, '...Static->write_raw didn\'t return false');
}
ok(-f $static_tmp_file, '...Static->write_raw created file');
# compare file sizes
is(
-s $static_tmp_file,
-s $boot,
'Binary created by ->write_raw has the same size as myldr/boot(.exe)'
);
# compare data
{
open my $fh, '<', $static_tmp_file or die $!;
binmode $fh;
local $/ = undef;
ok(
$static_bin eq <$fh>,
'...Static->get_raw returns exact same as write_raw writes'
);
close $fh;
}
# check that write_parl() writes the same as script/parl(.exe)
my $parl_tmp_file;
{
my $tfh;
($tfh, $parl_tmp_file) = File::Temp::tempfile(
'partest2XXXXXX', OPEN => 1, DIR => File::Spec->tmpdir()
);
}
{
my $okay;
eval { $okay = PAR::StrippedPARL::Static->write_parl($parl_tmp_file); };
ok(!$@, 'Running ...Static->write_parl didn\'t complain' . ($@?": $@":''));
ok($okay, '...Static->write_parl didn\'t return false');
}
ok(-f $parl_tmp_file, '...Static->write_parl created file');
ok(-s $parl_tmp_file, '...Static->write_parl created non-empty file');
###############################################################
#
# If true, run the dynamic tests below
my $have_dynamic = -f $dynamic;
my $dyn_tmp_file;
my $parldyn_tmp_file;
SKIP: {
skip "No parldyn found", 13 unless $have_dynamic;
# check that get_raw() returns the same as myldr/par(.exe)
my $dyn_bin;
eval { $dyn_bin = PAR::StrippedPARL::Dynamic->get_raw(); };
ok(!$@, 'Running ...Dynamic->get_raw didn\'t complain' . ($@?": $@":''));
ok($dyn_bin, '...Dynamic->get_raw didn\'t return false');
my $dyn_length = length($dyn_bin);
# compare file sizes
is(
$dyn_length,
-s $dynamic,
'Dynamic binary returned from ->get_raw has the same size as myldr/par(.exe)'
);
# compare data
{
open my $fh, '<', $dynamic or die $!;
binmode $fh;
local $/ = undef;
ok(
$dyn_bin eq <$fh>,
'...Dynamic->get_raw returns exact myldr/par(.exe)'
);
close $fh;
}
# check that write_raw() writes the same as myldr/par(.exe)
{
my $tfh;
($tfh, $dyn_tmp_file) = File::Temp::tempfile(
'partestXXXXXX', OPEN => 1, DIR => File::Spec->tmpdir()
);
}
{
my $okay;
eval { $okay = PAR::StrippedPARL::Dynamic->write_raw($dyn_tmp_file); };
ok(!$@, 'Running ...Dynamic->write_raw didn\'t complain' . ($@?": $@":''));
ok($okay, '...Dynamic->write_raw didn\'t return false');
}
ok(-f $dyn_tmp_file, '...Dynamic->write_raw created file');
# compare file sizes
is(
-s $dyn_tmp_file,
-s $dynamic,
'Dynamic binary created by ->write_raw has the same size as myldr/par(.exe)'
);
# compare data
{
open my $fh, '<', $dyn_tmp_file or die $!;
binmode $fh;
local $/ = undef;
ok(
$dyn_bin eq <$fh>,
'...Dynamic->get_raw returns exact same as write_raw writes'
);
close $fh;
}
# check that write_parl() writes the same as myldr/parldyn(.exe)
{
my $tfh;
($tfh, $parldyn_tmp_file) = File::Temp::tempfile(
'partest2XXXXXX', OPEN => 1, DIR => File::Spec->tmpdir()
);
}
{
my $okay;
eval {
$okay = PAR::StrippedPARL::Dynamic->write_parl($parldyn_tmp_file);
};
ok(!$@, 'Running ...Dynamic->write_parl didn\'t complain' . ($@?": $@":''));
ok($okay, '...Dynamic->write_parl didn\'t return false');
}
ok(-f $parldyn_tmp_file, '...Dynamic->write_parl created file');
ok(-s $parldyn_tmp_file, '...Dynamic->write_parl created non-empty file');
}
END {
for (
grep defined,
$static_tmp_file, $parl_tmp_file, $dyn_tmp_file, $parldyn_tmp_file
) {
unlink($_);
}
}