Update tests
[gitmo/Mouse.git] / t / 050_metaclasses / 051_metarole_on_anon.t
diff --git a/t/050_metaclasses/051_metarole_on_anon.t b/t/050_metaclasses/051_metarole_on_anon.t
new file mode 100644 (file)
index 0000000..f0ec101
--- /dev/null
@@ -0,0 +1,52 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Exception;
+
+use Mouse ();
+use Mouse::Meta::Class;
+use Mouse::Util::MetaRole;
+
+{
+    package Foo;
+    use Mouse;
+}
+
+{
+    package Role::Bar;
+    use Mouse::Role;
+}
+
+my $anon_name;
+
+{
+    my $anon_class = Mouse::Meta::Class->create_anon_class(
+        superclasses => ['Foo'],
+        cache        => 1,
+    );
+
+    $anon_name = $anon_class->name;
+
+    ok( $anon_name->meta, 'anon class has a metaclass' );
+}
+
+ok(
+    $anon_name->meta,
+    'cached anon class still has a metaclass after \$anon_class goes out of scope'
+);
+
+Mouse::Util::MetaRole::apply_metaroles(
+    for             => $anon_name,
+    class_metaroles => {
+        class => ['Role::Bar'],
+    },
+);
+
+BAIL_OUT('Cannot continue if the anon class does not have a metaclass')
+    unless $anon_name->can('meta');
+
+my $meta = $anon_name->meta;
+ok( $meta, 'cached anon class still has a metaclass applying a metarole' );
+
+done_testing;