fix version::is_strict/is_lax exporting
[p5sagit/p5-mst-13.2.git] / lib / Carp.t
index c24760b..1eee4c4 100644 (file)
@@ -4,11 +4,14 @@ BEGIN {
        require './test.pl';
 }
 
+use warnings;
+no warnings "once";
+
 my $Is_VMS = $^O eq 'VMS';
 
 use Carp qw(carp cluck croak confess);
 
-plan tests => 37;
+plan tests => 39;
 
 ok 1;
 
@@ -55,22 +58,21 @@ sub_6;
 ok(1);
 
 # test for caller_info API
-my $eval = "use Carp::Heavy; return Carp::caller_info(0);";
+my $eval = "use Carp; return Carp::caller_info(0);";
 my %info = eval($eval);
 is($info{sub_name}, "eval '$eval'", 'caller_info API');
 
-# test for '...::CARP_NOT used only once' warning from Carp::Heavy
+# test for '...::CARP_NOT used only once' warning from Carp
 my $warning;
 eval {
     BEGIN {
-       $^W = 1;
        local $SIG{__WARN__} =
            sub { if( defined $^S ){ warn $_[0] } else { $warning = $_[0] } }
     }
     package Z;
     BEGIN { eval { Carp::croak() } }
 };
-ok !$warning, q/'...::CARP_NOT used only once' warning from Carp::Heavy/;
+ok !$warning, q/'...::CARP_NOT used only once' warning from Carp/;
 
 # Test the location of error messages.
 like(A::short(), qr/^Error at C/, "Short messages skip carped package");
@@ -266,6 +268,24 @@ cluck "Bang!"
 
 cluck_undef (0, "undef", 2, undef, 4);
 
+# check that Carp respects CORE::GLOBAL::caller override after Carp
+# has been compiled
+{
+    my $accum = '';
+    local *CORE::GLOBAL::caller = sub {
+        local *__ANON__="fakecaller";
+        my @c=CORE::caller(@_);
+        $c[0] ||= 'undef';
+        $accum .= "@c[0..3]\n";
+        return CORE::caller(($_[0]||0)+1);
+    };
+    eval "scalar caller()";
+    like( $accum, qr/main::fakecaller/, "test CORE::GLOBAL::caller override in eval");
+    $accum = '';
+    A::long();
+    like( $accum, qr/main::fakecaller/, "test CORE::GLOBAL::caller override in Carp");
+}
+
 # line 1 "A"
 package A;
 sub short {