Testcase for get_code_info on a sub that's still being compiled
[gitmo/Class-MOP.git] / t / 082_get_code_info.t
CommitLineData
423ea917 1use strict;
2use warnings;
3
e896822d 4use Test::More;
5
6BEGIN {
351e5029 7 $^P &= ~0x200; # Don't munger anonymous sub names
2621d59f 8 if ( eval 'use Sub::Name qw(subname); 1;' ) {
1b7e9bae 9 plan tests => 6;
e896822d 10 }
11 else {
12 plan skip_all => 'These tests require Sub::Name';
13 }
14}
423ea917 15
16BEGIN { use_ok("Class::MOP") }
17
423ea917 18
19sub code_name_is ($$$;$) {
20 my ( $code, $stash, $name, $desc ) = @_;
21 $desc ||= "sub name is ${stash}::$name";
22
23 is_deeply(
24 [ Class::MOP::get_code_info($code) ],
25 [ $stash, $name ],
26 $desc,
27 );
28}
29
30code_name_is( sub {}, main => "__ANON__" );
31
32code_name_is( subname("Foo::bar", sub {}), Foo => "bar" );
33
34code_name_is( subname("", sub {}), "main" => "" );
35
36require Class::MOP::Method;
37code_name_is( \&Class::MOP::Method::name, "Class::MOP::Method", "name" );
38
1b7e9bae 39{
40 package Foo;
41
42 sub MODIFY_CODE_ATTRIBUTES {
43 my ($class, $code) = @_;
44 ::ok(!Class::MOP::get_code_info($code), "no name for a coderef that's still compiling");
45 return ();
46 }
47
48 sub foo : Bar {}
49}