Move t/*/t into t/001_mouse
[gitmo/Mouse.git] / t / 001_mouse / 402-attribute-application.t
diff --git a/t/001_mouse/402-attribute-application.t b/t/001_mouse/402-attribute-application.t
new file mode 100644 (file)
index 0000000..e4745c5
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More tests => 11;
+use Test::Exception;
+
+do {
+    package Role;
+    use Mouse::Role;
+
+    has 'attr' => (
+        is      => 'bare',
+        default => 'Role',
+    );
+
+    no Mouse::Role;
+};
+
+is(Role->meta->get_attribute('attr')->{default}, 'Role');
+
+do {
+    package Class;
+    use Mouse;
+    with 'Role';
+
+    no Mouse;
+};
+
+ok(Class->meta->has_attribute('attr'), "role application added the attribute");
+is(Class->meta->get_attribute('attr')->default, 'Role');
+
+do {
+    package Role2;
+    use Mouse::Role;
+
+    has 'attr' => (
+        is      => 'bare',
+        default => 'Role2',
+    );
+
+    no Mouse::Role;
+};
+
+lives_ok {
+    package Class2;
+    use Mouse;
+    with 'Role';
+    with 'Role2';
+};
+
+is(Class2->meta->get_attribute('attr')->default, 'Role');
+
+lives_ok {
+    package Class3;
+    use Mouse;
+
+    with 'Role';
+
+    has attr => (
+        is      => 'bare',
+        default => 'Class3',
+    );
+};
+
+is(Class3->meta->get_attribute('attr')->default, 'Class3');
+
+lives_ok {
+    package Class::Parent;
+    use Mouse;
+
+    has attr => (
+        is      => 'bare',
+        default => 'Class::Parent',
+    );
+};
+
+is(Class::Parent->meta->get_attribute('attr')->default, 'Class::Parent', 'local class wins over the role');
+
+lives_ok {
+    package Class::Child;
+    use Mouse;
+
+    extends 'Class::Parent';
+
+    with 'Role';
+};
+
+is(Class::Child->meta->get_attribute('attr')->default, 'Role', 'role wins over the parent method');