use warnings;
use Test::More;
+use Sub::Name 'subname';
BEGIN {
- $^P &= ~0x200; # Don't munger anonymous sub names
- if ( eval 'use Sub::Name qw(subname); 1;' ) {
- plan tests => 5;
- }
- else {
- plan skip_all => 'These tests require Sub::Name';
- }
+ $^P &= ~0x200; # Don't munge anonymous sub names
}
-BEGIN { use_ok("Class::MOP") }
+use Class::MOP;
-sub code_name_is ($$$;$) {
- my ( $code, $stash, $name, $desc ) = @_;
- $desc ||= "sub name is ${stash}::$name";
+sub code_name_is {
+ my ( $code, $stash, $name ) = @_;
is_deeply(
[ Class::MOP::get_code_info($code) ],
[ $stash, $name ],
- $desc,
+ "sub name is ${stash}::$name"
);
}
require Class::MOP::Method;
code_name_is( \&Class::MOP::Method::name, "Class::MOP::Method", "name" );
+{
+ package Foo;
+
+ sub MODIFY_CODE_ATTRIBUTES {
+ my ($class, $code) = @_;
+ my @info = Class::MOP::get_code_info($code);
+
+ if ( $] >= 5.011 ) {
+ ::is_deeply(\@info, ['Foo', 'foo'], "got a name for a code ref in an attr handler");
+ }
+ else {
+ ::is_deeply(\@info, [], "no name for a coderef that's still compiling");
+ }
+ return ();
+ }
+
+ sub foo : Bar {}
+}
+
+done_testing;