Revert autogenerated tests. Tests should not changed radically.
[gitmo/Mouse.git] / t / 100_bugs / failing / 024_anon_method_metaclass.t
diff --git a/t/100_bugs/failing/024_anon_method_metaclass.t b/t/100_bugs/failing/024_anon_method_metaclass.t
new file mode 100644 (file)
index 0000000..e8f639b
--- /dev/null
@@ -0,0 +1,48 @@
+use strict;
+use warnings;
+use Test::More tests => 10;
+
+{
+    package Ball;
+    use Mouse;
+}
+
+{
+    package Arbitrary::Roll;
+    use Mouse::Role;
+}
+
+my $method_meta = Mouse::Meta::Class->create_anon_class(
+    superclasses => ['Mouse::Meta::Method'],
+    roles        => ['Arbitrary::Roll'],
+);
+
+# For comparing identity without actually keeping $original_meta around
+my $original_meta = "$method_meta";
+
+my $method_class = $method_meta->name;
+
+my $method_object = $method_class->wrap(
+    sub {'ok'},
+    associated_metaclass => Ball->meta,
+    package_name         => 'Ball',
+    name                 => 'bounce',
+);
+
+Ball->meta->add_method( bounce => $method_object );
+
+for ( 1, 2 ) {
+    is( Ball->bounce, 'ok', "method still exists on Ball" );
+    is( Ball->meta->get_method('bounce')->meta->name, $method_class,
+        "method's package still exists" );
+
+    is( Ball->meta->get_method('bounce'), $method_object,
+        'original method object is preserved' );
+
+    is( Ball->meta->get_method('bounce')->meta . '', $original_meta,
+        "method's metaclass still exists" );
+    ok( Ball->meta->get_method('bounce')->meta->does_role('Arbitrary::Roll'),
+        "method still does Arbitrary::Roll" );
+
+    undef $method_meta;
+}