use Test::More tests => 3;
ok(1, "Before");
BEGIN {
package M;
use TE;
package main;
}
use TE;
use M;
exits_ok( sub {f()}, -2, "exits");
ok(1, "After");
####
package M;
use strict;
require Exporter;
use vars qw(@ISA @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(f);
sub f {
exit(-1);
}
1;
####
package TE;
use strict;
require Exporter;
use vars qw(@ISA @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(exit exits_ok);
use Test::Builder;
my $Test = Test::Builder->new();
sub exit {
my ($arg) = @_;
$arg = '' if not defined $arg;
die "EXIT$arg\n";
}
sub exits_ok (&$;$$) {
my ($coderef, $expecting, $description) = @_;
$expecting = '' if not defined $expecting;
$description ||= "exit $expecting";
my $result;
eval {&$coderef};
my $ex = $@;
$Test->ok($ex and $ex eq "EXIT$expecting\n", $description);
if ($ex) {
if ($ex =~ /^EXIT(.*)/) {
if ($1 ne $expecting) {
$Test->diag("Received '$1' expected '$expecting'");
}
} else {
$Test->diag("died before reaching an exit statement");
}
}
}
1;