support attributes without isa, better tests, release
[gitmo/MooseX-AlwaysCoerce.git] / t / 04-parameterized-roles.t
CommitLineData
a193e05d 1#!/usr/bin/env perl
13005566 2
a193e05d 3use strict;
4use warnings;
a193e05d 5use Test::More;
13005566 6use Test::Exception;
a193e05d 7
13005566 8unless (eval { require MooseX::Role::Parameterized }) {
9 plan skip_all => 'This test needs MooseX::Role::Parameterized';
a193e05d 10}
11
13005566 12eval <<'EOF';
a193e05d 13 package Role;
14 use MooseX::Role::Parameterized;
15 use MooseX::AlwaysCoerce;
16 use Moose::Util::TypeConstraints;
17
18 # I do nothing!
19 role {};
a193e05d 20
21 subtype 'MyType', as 'Int';
22 coerce 'MyType', from 'Str', via { length $_ };
23
24 subtype 'Uncoerced', as 'Int';
25
26 has foo => (is => 'rw', isa => 'MyType');
27
28 class_has bar => (is => 'rw', isa => 'MyType');
29
30 class_has baz => (is => 'rw', isa => 'MyType', coerce => 0);
31
32 has quux => (is => 'rw', isa => 'MyType', coerce => 0);
33
34 has uncoerced_attr => (is => 'rw', isa => 'Uncoerced');
35
36 class_has uncoerced_class_attr => (is => 'rw', isa => 'Uncoerced');
a193e05d 37
bb7cca58 38 has untyped_attr => (is => 'rw');
39
40 class_has untyped_class_attr => (is => 'rw');
41
a193e05d 42 package Foo;
43 use Moose;
44 with 'Role';
13005566 45EOF
46
47if ($@) {
48 plan skip_all =>
49'MooseX::ClassAttribute is currently incompatible with MooseX::Role::Parameterized';
a193e05d 50}
51
bb7cca58 52plan tests => 10;
13005566 53
54eval 'use Test::NoWarnings';
a193e05d 55
56ok( (my $instance = MyClass->new), 'instance' );
57
0a64dac6 58{
59 local $TODO = 'waiting on Moose changes for role support, and ClassAttribute changes for paramterized role support';
60
bb7cca58 61 lives_and {
62 $instance->foo('bar');
63 is $instance->foo, 3;
64 } 'attribute coercion ran';
0a64dac6 65}
a193e05d 66
bb7cca58 67lives_and {
68 $instance->bar('baz');
69 is $instance->bar, 3;
70} 'class attribute coercion ran';
a193e05d 71
72dies_ok { $instance->baz('quux') }
73 'class attribute coercion did not run with coerce => 0';
74
75dies_ok { $instance->quux('mtfnpy') }
76 'attribute coercion did not run with coerce => 0';
77
bb7cca58 78lives_and {
79 $instance->uncoerced_attr(10);
80 is $instance->uncoerced_attr(10), 10;
81} 'set attribute having type with no coercion and no coerce=0';
82
83lives_and {
84 $instance->uncoerced_class_attr(10);
85 is $instance->uncoerced_class_attr(10), 10;
86} 'set class attribute having type with no coercion and no coerce=0';
87
88lives_and {
89 $instance->untyped_attr(10);
90 is $instance->untyped_attr, 10;
91} 'set untyped attribute';
92
93lives_and {
94 $instance->untyped_class_attr(10);
95 is $instance->untyped_class_attr, 10;
96} 'set untyped class attribute';