We only need local $? if we inline calls to DEMOLISH
[gitmo/Moose.git] / t / cmop / get_code_info.t
CommitLineData
38bf2a25 1use strict;
2use warnings;
3
4use Test::More;
5use Sub::Name 'subname';
6
7BEGIN {
8 $^P &= ~0x200; # Don't munge anonymous sub names
9}
10
11use Class::MOP;
12
13
14sub code_name_is {
15 my ( $code, $stash, $name ) = @_;
16
17 is_deeply(
18 [ Class::MOP::get_code_info($code) ],
19 [ $stash, $name ],
20 "sub name is ${stash}::$name"
21 );
22}
23
24code_name_is( sub {}, main => "__ANON__" );
25
26code_name_is( subname("Foo::bar", sub {}), Foo => "bar" );
27
28code_name_is( subname("", sub {}), "main" => "" );
29
30require Class::MOP::Method;
31code_name_is( \&Class::MOP::Method::name, "Class::MOP::Method", "name" );
32
33{
34 package Foo;
35
36 sub MODIFY_CODE_ATTRIBUTES {
37 my ($class, $code) = @_;
38 my @info = Class::MOP::get_code_info($code);
39
40 if ( $] >= 5.011 ) {
41 ::is_deeply(\@info, ['Foo', 'foo'], "got a name for a code ref in an attr handler");
42 }
43 else {
44 ::is_deeply(\@info, [], "no name for a coderef that's still compiling");
45 }
46 return ();
47 }
48
49 sub foo : Bar {}
50}
51
52done_testing;