Merge branch 'stable'
[gitmo/Class-MOP.git] / t / 082_get_code_info.t
index 1a10319..2770b76 100644 (file)
@@ -1,22 +1,23 @@
-#!/usr/bin/perl
-
 use strict;
 use warnings;
 
-use Test::More 'no_plan';
+use Test::More;
+use Sub::Name 'subname';
+
+BEGIN {
+    $^P &= ~0x200; # Don't munge anonymous sub names
+}
 
-BEGIN { use_ok("Class::MOP") }
+use Class::MOP;
 
-use Sub::Name qw(subname);
 
-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"
     );
 }
 
@@ -29,3 +30,23 @@ code_name_is( subname("", sub {}), "main" => "" );
 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;