Commit | Line | Data |
07b8c804 |
1 | #!./perl |
2 | # Tests for caller() |
3 | |
4 | BEGIN { |
5 | chdir 't' if -d 't'; |
6 | @INC = '../lib'; |
7 | require './test.pl'; |
75b6c4ca |
8 | plan( tests => 27 ); |
07b8c804 |
9 | } |
10 | |
07b8c804 |
11 | my @c; |
12 | |
72699b0f |
13 | print "# Tests with caller(0)\n"; |
14 | |
07b8c804 |
15 | @c = caller(0); |
16 | ok( (!@c), "caller(0) in main program" ); |
17 | |
18 | eval { @c = caller(0) }; |
72699b0f |
19 | is( $c[3], "(eval)", "subroutine name in an eval {}" ); |
20 | ok( !$c[4], "hasargs false in an eval {}" ); |
07b8c804 |
21 | |
22 | eval q{ @c = (Caller(0))[3] }; |
72699b0f |
23 | is( $c[3], "(eval)", "subroutine name in an eval ''" ); |
24 | ok( !$c[4], "hasargs false in an eval ''" ); |
07b8c804 |
25 | |
26 | sub { @c = caller(0) } -> (); |
72699b0f |
27 | is( $c[3], "main::__ANON__", "anonymous subroutine name" ); |
28 | ok( $c[4], "hasargs true with anon sub" ); |
07b8c804 |
29 | |
30 | # Bug 20020517.003, used to dump core |
31 | sub foo { @c = caller(0) } |
32 | my $fooref = delete $::{foo}; |
33 | $fooref -> (); |
72699b0f |
34 | is( $c[3], "(unknown)", "unknown subroutine name" ); |
35 | ok( $c[4], "hasargs true with unknown sub" ); |
36 | |
37 | print "# Tests with caller(1)\n"; |
07b8c804 |
38 | |
39 | sub f { @c = caller(1) } |
40 | |
72699b0f |
41 | sub callf { f(); } |
42 | callf(); |
43 | is( $c[3], "main::callf", "subroutine name" ); |
44 | ok( $c[4], "hasargs true with callf()" ); |
45 | &callf; |
46 | ok( !$c[4], "hasargs false with &callf" ); |
47 | |
07b8c804 |
48 | eval { f() }; |
72699b0f |
49 | is( $c[3], "(eval)", "subroutine name in an eval {}" ); |
50 | ok( !$c[4], "hasargs false in an eval {}" ); |
07b8c804 |
51 | |
52 | eval q{ f() }; |
72699b0f |
53 | is( $c[3], "(eval)", "subroutine name in an eval ''" ); |
54 | ok( !$c[4], "hasargs false in an eval ''" ); |
07b8c804 |
55 | |
56 | sub { f() } -> (); |
72699b0f |
57 | is( $c[3], "main::__ANON__", "anonymous subroutine name" ); |
58 | ok( $c[4], "hasargs true with anon sub" ); |
07b8c804 |
59 | |
60 | sub foo2 { f() } |
61 | my $fooref2 = delete $::{foo2}; |
62 | $fooref2 -> (); |
72699b0f |
63 | is( $c[3], "(unknown)", "unknown subroutine name" ); |
64 | ok( $c[4], "hasargs true with unknown sub" ); |
75b6c4ca |
65 | |
66 | # See if caller() returns the correct warning mask |
67 | |
68 | sub testwarn { |
69 | my $w = shift; |
70 | is( (caller(0))[9], $w, "warnings"); |
71 | } |
72 | |
73 | # NB : extend the warning mask values below when new warnings are added |
74 | { |
75 | no warnings; |
76 | BEGIN { is( ${^WARNING_BITS}, "\0" x 12, 'warning bits' ) } |
77 | testwarn("\0" x 12); |
78 | use warnings; |
79 | BEGIN { is( ${^WARNING_BITS}, "U" x 12, 'warning bits' ) } |
80 | BEGIN { testwarn("U" x 12); } |
81 | # run-time : |
82 | # the warning mask has been extended by warnings::register |
83 | testwarn("UUUUUUUUUUUU\001"); |
84 | use warnings::register; |
85 | BEGIN { is( ${^WARNING_BITS}, "UUUUUUUUUUUU\001", 'warning bits' ) } |
86 | testwarn("UUUUUUUUUUUU\001"); |
87 | } |