X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F04-parameterized-roles.t;h=b7b61825de09b03f299959dd7f0547b3c8e7cb4d;hb=f2dec73df5a5b1eafeb7d39cbf5d775b29795cfb;hp=3992dcace692257f88ee2096a5d421007e65244a;hpb=13005566e6870be3ac9c1cd688f1e73b962eedf1;p=gitmo%2FMooseX-AlwaysCoerce.git diff --git a/t/04-parameterized-roles.t b/t/04-parameterized-roles.t index 3992dca..b7b6182 100644 --- a/t/04-parameterized-roles.t +++ b/t/04-parameterized-roles.t @@ -5,64 +5,87 @@ use warnings; use Test::More; use Test::Exception; -unless (eval { require MooseX::Role::Parameterized }) { - plan skip_all => 'This test needs MooseX::Role::Parameterized'; -} +use Test::Requires { + 'MooseX::Role::Parameterized' => 0.01, +}; eval <<'EOF'; package Role; use MooseX::Role::Parameterized; + use MooseX::ClassAttribute; use MooseX::AlwaysCoerce; use Moose::Util::TypeConstraints; - # I do nothing! - role {}; + role { + subtype 'MyType', as 'Int'; + coerce 'MyType', from 'Str', via { length $_ }; + + subtype 'Uncoerced', as 'Int'; - subtype 'MyType', as 'Int'; - coerce 'MyType', from 'Str', via { length $_ }; + has foo => (is => 'rw', isa => 'MyType'); - subtype 'Uncoerced', as 'Int'; + class_has bar => (is => 'rw', isa => 'MyType'); - has foo => (is => 'rw', isa => 'MyType'); + class_has baz => (is => 'rw', isa => 'MyType', coerce => 0); - class_has bar => (is => 'rw', isa => 'MyType'); + has quux => (is => 'rw', isa => 'MyType', coerce => 0); - class_has baz => (is => 'rw', isa => 'MyType', coerce => 0); + has uncoerced_attr => (is => 'rw', isa => 'Uncoerced'); - has quux => (is => 'rw', isa => 'MyType', coerce => 0); + class_has uncoerced_class_attr => (is => 'rw', isa => 'Uncoerced'); - has uncoerced_attr => (is => 'rw', isa => 'Uncoerced'); + has untyped_attr => (is => 'rw'); - class_has uncoerced_class_attr => (is => 'rw', isa => 'Uncoerced'); + class_has untyped_class_attr => (is => 'rw'); + }; - package Foo; + package MyClass; use Moose; with 'Role'; EOF -if ($@) { - plan skip_all => -'MooseX::ClassAttribute is currently incompatible with MooseX::Role::Parameterized'; -} - -plan tests => 8; +plan tests => 10; eval 'use Test::NoWarnings'; ok( (my $instance = MyClass->new), 'instance' ); -lives_ok { $instance->foo('bar') } 'attribute coercion ran'; +{ + local $TODO = 'waiting on Moose changes for role support, and ClassAttribute changes for paramterized role support'; -lives_ok { $instance->bar('baz') } 'class attribute coercion ran'; + lives_and { + $instance->foo('bar'); + is $instance->foo, 3; + } 'attribute coercion ran'; -dies_ok { $instance->baz('quux') } - 'class attribute coercion did not run with coerce => 0'; + lives_and { + $instance->bar('baz'); + is $instance->bar, 3; + } 'class attribute coercion ran'; -dies_ok { $instance->quux('mtfnpy') } - 'attribute coercion did not run with coerce => 0'; + dies_ok { $instance->baz('quux') } + 'class attribute coercion did not run with coerce => 0'; -lives_ok { $instance->uncoerced_attr(10) } - 'set attribute having type with no coercion and no coerce=0'; + dies_ok { $instance->quux('mtfnpy') } + 'attribute coercion did not run with coerce => 0'; -lives_ok { $instance->uncoerced_class_attr(10) } - 'set class attribute having type with no coercion and no coerce=0'; + lives_and { + $instance->uncoerced_attr(10); + is $instance->uncoerced_attr(10), 10; + } 'set attribute having type with no coercion and no coerce=0'; + + lives_and { + $instance->uncoerced_class_attr(10); + is $instance->uncoerced_class_attr(10), 10; + } 'set class attribute having type with no coercion and no coerce=0'; + + lives_and { + $instance->untyped_attr(10); + is $instance->untyped_attr, 10; + } 'set untyped attribute'; + + lives_and { + $instance->untyped_class_attr(10); + is $instance->untyped_class_attr, 10; + } 'set untyped class attribute'; +}