Blob Blame History Raw
BEGIN {
    $|++;
    my $exit_message = "";
    unless ($ENV{AUTHOR_TEST}) {
        $exit_message = "test only run when envariable AUTHOR_TEST is set";
    }
    unless ($exit_message) {
        unless (eval { require Compress::Zlib; 1 }) {
            $exit_message = "Compress::Zlib not found";
        }
    }
    if ($exit_message) {
        print "1..0 # SKIP $exit_message\n";
        eval "require POSIX; 1" and POSIX::_exit(0);
        exit;
    }
}

use strict;
use warnings;
use Test::More 'no_plan';
use English;

diag("OS == $^O");

use Compress::Zlib;
use Devel::Symdump;

diag('$Devel::Symdump::VERSION == '.$Devel::Symdump::VERSION);
diag('$Compress::Zlib::VERSION == '.$Compress::Zlib::VERSION);
diag("Perl == $]");

my $glob_ref = eval {
	no strict 'refs';
	${*{"Compress::Zlib::"}}{GZIP_NULL_BYTE};
};

ok(!$@,'reference assignment');
diag('ref($glob_ref) == "'.ref($glob_ref).'"');

_check_child(sub {
	local *ENTRY;
	diag "Checking GLOB assignment to reference...";
	*ENTRY = $glob_ref;
});

_check_child(sub {
	diag "Checking Devel::Symdump->rnew->packages...";
	Devel::Symdump->rnew->packages;
});

sub _check_child {
	local *CHILD;

	my $code = shift;
	my $pid = open(CHILD, "|-");

	unless ($pid) {
		$code->();
		exit 0;
	} else {
		my $w = waitpid($pid,0);
		ok($w != -1 && $w == $pid,'waitpid()');
		my $e = $? >> 8;
		my $s = $? & 127;
		my $c = $? & 128;
		diag "exit value = $e";
		diag "exit with signal = $s";
		diag "dumped core? $c";
		ok($s != 11,'child did not SEGV');
		ok($e == 0 && $s == 0,'child exited properly');
	}
}


# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# End: