1N/ABEGIN {
1N/A chdir 't' if -d 't';
1N/A @INC = '../lib';
1N/A}
1N/A
1N/Ause Carp qw(carp cluck croak confess);
1N/A
1N/Aprint "1..9\n";
1N/A
1N/Aprint "ok 1\n";
1N/A
1N/A$SIG{__WARN__} = sub {
1N/A print "ok $1\n"
1N/A if $_[0] =~ m!ok (\d+)$! };
1N/A
1N/Acarp "ok 2\n";
1N/A
1N/A$SIG{__WARN__} = sub {
1N/A print "ok $1\n"
1N/A if $_[0] =~ m!(\d+) at .+\b(?i:carp\.t) line \d+$! };
1N/A
1N/Acarp 3;
1N/A
1N/Asub sub_4 {
1N/A
1N/A$SIG{__WARN__} = sub {
1N/A print "ok $1\n"
1N/A if $_[0] =~ m!^(\d+) at .+\b(?i:carp\.t) line \d+\n\tmain::sub_4\(\) called at .+\b(?i:carp\.t) line \d+$! };
1N/A
1N/Acluck 4;
1N/A
1N/A}
1N/A
1N/Asub_4;
1N/A
1N/A$SIG{__DIE__} = sub {
1N/A print "ok $1\n"
1N/A if $_[0] =~ m!^(\d+) at .+\b(?i:carp\.t) line \d+\n\teval \Q{...}\E called at .+\b(?i:carp\.t) line \d+$! };
1N/A
1N/Aeval { croak 5 };
1N/A
1N/Asub sub_6 {
1N/A $SIG{__DIE__} = sub {
1N/A print "ok $1\n"
1N/A if $_[0] =~ m!^(\d+) at .+\b(?i:carp\.t) line \d+\n\teval \Q{...}\E called at .+\b(?i:carp\.t) line \d+\n\tmain::sub_6\(\) called at .+\b(?i:carp\.t) line \d+$! };
1N/A
1N/A eval { confess 6 };
1N/A}
1N/A
1N/Asub_6;
1N/A
1N/Aprint "ok 7\n";
1N/A
1N/A# test for caller_info API
1N/Amy $eval = "use Carp::Heavy; return Carp::caller_info(0);";
1N/Amy %info = eval($eval);
1N/Aprint "not " if ($info{sub_name} ne "eval '$eval'");
1N/Aprint "ok 8\n";
1N/A
1N/A# test for '...::CARP_NOT used only once' warning from Carp::Heavy
1N/Amy $warning;
1N/Aeval {
1N/A BEGIN {
1N/A $^W = 1;
1N/A $SIG{__WARN__} =
1N/A sub { if( defined $^S ){ warn $_[0] } else { $warning = $_[0] } }
1N/A }
1N/A package Z;
1N/A BEGIN { eval { Carp::croak() } }
1N/A};
1N/Aprint $warning ? "not ok 9\n#$warning" : "ok 9\n";