Make sure we can pass references to roles
Shawn M Moore [Wed, 26 Nov 2008 04:19:45 +0000 (04:19 +0000)]
t/011-reference-parameters.t [new file with mode: 0644]

diff --git a/t/011-reference-parameters.t b/t/011-reference-parameters.t
new file mode 100644 (file)
index 0000000..313396b
--- /dev/null
@@ -0,0 +1,77 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More tests => 8;
+
+do {
+    package MyRole::Delegator;
+    use MooseX::Role::Parameterized;
+
+    parameter handles => (
+        is       => 'rw',
+        required => 1,
+    );
+
+    role {
+        my $p = shift;
+
+        has attr => (
+            is      => 'rw',
+            isa     => 'MyClass::WithMethods',
+            handles => $p->handles,
+        );
+    };
+};
+
+do {
+    package MyClass::WithMethods;
+
+    sub foo { "foo" }
+    sub bar { "bar" }
+    sub baz { "baz" }
+};
+
+do {
+    package MyArrayConsumer;
+    use Moose;
+    with 'MyRole::Delegator' => {
+        handles => ['foo', 'bar'],
+    };
+};
+
+can_ok(MyArrayConsumer => 'foo', 'bar');
+cant_ok(MyArrayConsumer => 'baz');
+
+do {
+    package MyRegexConsumer;
+    use Moose;
+    with 'MyRole::Delegator' => {
+        handles => qr/^ba/,
+    };
+};
+
+can_ok(MyRegexConsumer => 'bar', 'baz');
+cant_ok(MyRegexConsumer => 'foo');
+
+do {
+    package MyHashConsumer;
+    use Moose;
+    with 'MyRole::Delegator' => {
+        handles => {
+            my_foo => 'foo',
+            his_baz => 'baz',
+        },
+    };
+};
+
+can_ok(MyHashConsumer => 'my_foo', 'his_baz');
+cant_ok(MyHashConsumer => qw/foo bar baz/);
+
+sub cant_ok {
+    local $Test::Builder::Level = $Test::Builder::Level + 1;
+    my $instance = shift;
+    for my $method (@_) {
+        ok(!$instance->can($method), "$instance cannot $method");
+    }
+}
+