Commit | Line | Data |
38bf2a25 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
5 | use Sub::Name 'subname'; |
6 | |
7 | BEGIN { |
8 | $^P &= ~0x200; # Don't munge anonymous sub names |
9 | } |
10 | |
11 | use Class::MOP; |
12 | |
13 | |
14 | sub 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 | |
24 | code_name_is( sub {}, main => "__ANON__" ); |
25 | |
26 | code_name_is( subname("Foo::bar", sub {}), Foo => "bar" ); |
27 | |
28 | code_name_is( subname("", sub {}), "main" => "" ); |
29 | |
30 | require Class::MOP::Method; |
31 | code_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 | |
52 | done_testing; |