summaryrefslogtreecommitdiff
path: root/cpan/Test-Simple/t/Test-Stream-Carp.t
blob: 037d23f48b67b53622176c1f012d07378f0e9408 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use strict;
use warnings;

# On some threaded systems this test cannot be run.
BEGIN {
    require Test::Stream::Threads;
    if ($INC{'Carp.pm'}) {
        print "1..0 # SKIP: Carp is already loaded before we even begin.\n";
        exit 0;
    }
}

my @stack;
BEGIN {
    unshift @INC => sub {
        my ($ref, $filename) = @_;
        return if @stack;
        return unless $filename eq 'Carp.pm';
        my %seen;
        my $level = 1;
        while (my @call = caller($level++)) {
            my ($pkg, $file, $line) = @call;
            next if $seen{"$file $line"}++;
            push @stack => \@call;
        }
        return;
    };
}

use Test::More;

BEGIN {
    my $r = ok(!$INC{'Carp.pm'}, "Carp is not loaded when we start");
}

use ok 'Test::Stream::Carp', 'croak';

ok(!$INC{'Carp.pm'}, "Carp is not loaded");

if (@stack) {
    my $msg = "Carp load trace:\n";
    $msg .= "  $_->[1] line $_->[2]\n" for @stack;
    diag $msg;
}

my $out = eval { croak "xxx"; 1 };
my $err = $@;
ok(!$out, "died");
like($err, qr/xxx/, "Got carp exception");

ok($INC{'Carp.pm'}, "Carp is loaded now");

done_testing;