Move t/*/t into t/001_mouse
[gitmo/Mouse.git] / t / 001_mouse / 400-define-role.t
diff --git a/t/001_mouse/400-define-role.t b/t/001_mouse/400-define-role.t
new file mode 100644 (file)
index 0000000..7067651
--- /dev/null
@@ -0,0 +1,103 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More tests => 11;
+use Test::Exception;
+
+lives_ok {
+    package Role;
+    use Mouse::Role;
+
+    no Mouse::Role;
+};
+
+throws_ok {
+    package Role;
+    use Mouse::Role;
+
+    extends 'Role::Parent';
+
+    no Mouse::Role;
+} qr/Roles do not support 'extends'/;
+
+lives_ok {
+    package Role;
+    use Mouse::Role;
+
+    sub foo {}
+
+    no Mouse::Role;
+};
+
+lives_ok {
+    package Role;
+    use Mouse::Role;
+
+    before foo => sub {};
+    after foo  => sub {};
+    around foo => sub {};
+
+    no Mouse::Role;
+};
+
+lives_ok {
+    package Role;
+    use Mouse::Role;
+
+    has 'foo' => (is => 'bare');
+
+    no Mouse::Role;
+};
+
+do {
+    package Other::Role;
+    use Mouse::Role;
+    no Mouse::Role;
+};
+
+lives_ok {
+    package Role;
+    use Mouse::Role;
+
+    with 'Other::Role';
+
+    no Mouse::Role;
+};
+
+TODO: {
+    package Role;
+    use Mouse::Role;
+
+    eval {
+        excludes 'excluded';
+    };
+    our $TODO;
+    local $TODO = "Mouse::Role does not currently support 'excludes'";
+    ::ok(!$@, "excludes");
+
+    no Mouse::Role;
+};
+
+throws_ok {
+    package Role;
+    use Mouse::Role;
+
+    confess "Mouse::Role exports confess";
+
+} qr/^Mouse::Role exports confess/;
+
+lives_ok {
+    package Role;
+    use Mouse::Role;
+
+    my $obj = bless {} => "Impromptu::Class";
+    ::is(blessed($obj), "Impromptu::Class");
+};
+
+lives_ok{
+    package Class;
+    use Mouse;
+
+    with 'Role', 'Other::Role';
+};
+