Include method name in immutable methods (fixes #49680)
[gitmo/Class-MOP.git] / t / 082_get_code_info.t
1 use strict;
2 use warnings;
3
4 use Test::More tests => 5;
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         ::ok(!Class::MOP::get_code_info($code), "no name for a coderef that's still compiling");
39         return ();
40     }
41
42     sub foo : Bar {}
43 }