X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMooseX-AlwaysCoerce.git;a=blobdiff_plain;f=t%2F04-parameterized-roles.t;h=12f053afc7ab84ef86126b81e212a93bdf818eb4;hp=3992dcace692257f88ee2096a5d421007e65244a;hb=fc553705e0102a934825453c17767a7adf937f4a;hpb=13005566e6870be3ac9c1cd688f1e73b962eedf1 diff --git a/t/04-parameterized-roles.t b/t/04-parameterized-roles.t index 3992dca..12f053a 100644 --- a/t/04-parameterized-roles.t +++ b/t/04-parameterized-roles.t @@ -1,68 +1,88 @@ -#!/usr/bin/env perl - use strict; use warnings; use Test::More; -use Test::Exception; +use Test::Fatal; -unless (eval { require MooseX::Role::Parameterized }) { - plan skip_all => 'This test needs MooseX::Role::Parameterized'; -} +use Test::Requires { + 'MooseX::Role::Parameterized' => 0.25, +}; + +plan tests => 12; +use if $ENV{AUTHOR_TESTING}, 'Test::Warnings'; eval <<'EOF'; package Role; - use MooseX::Role::Parameterized; + use MooseX::Role::Parameterized 0.25; + use MooseX::ClassAttribute 0.24; use MooseX::AlwaysCoerce; use Moose::Util::TypeConstraints; - # I do nothing! - role {}; + role { + subtype 'MyType', as 'Int'; + coerce 'MyType', from 'Str', via { length $_ }; - subtype 'MyType', as 'Int'; - coerce 'MyType', from 'Str', via { length $_ }; + subtype 'Uncoerced', as 'Int'; - subtype 'Uncoerced', as 'Int'; + has foo => (is => 'rw', isa => 'MyType'); - has foo => (is => 'rw', isa => 'MyType'); + class_has bar => (is => 'rw', isa => 'MyType'); - class_has bar => (is => 'rw', isa => 'MyType'); + class_has baz => (is => 'rw', isa => 'MyType', coerce => 0); - class_has baz => (is => 'rw', isa => 'MyType', coerce => 0); + has quux => (is => 'rw', isa => 'MyType', coerce => 0); - has quux => (is => 'rw', isa => 'MyType', coerce => 0); + has uncoerced_attr => (is => 'rw', isa => 'Uncoerced'); - has uncoerced_attr => (is => 'rw', isa => 'Uncoerced'); + class_has uncoerced_class_attr => (is => 'rw', isa => 'Uncoerced'); - class_has uncoerced_class_attr => (is => 'rw', isa => 'Uncoerced'); + has untyped_attr => (is => 'rw'); - package Foo; + class_has untyped_class_attr => (is => 'rw'); + }; + + package MyClass; use Moose; with 'Role'; EOF -if ($@) { - plan skip_all => -'MooseX::ClassAttribute is currently incompatible with MooseX::Role::Parameterized'; -} - -plan tests => 8; -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'; + + is( exception { + $instance->foo('bar'); + is $instance->foo, 3; + }, undef, 'attribute coercion ran' ); + + is( exception { + $instance->bar('baz'); + is $instance->bar, 3; + }, undef, 'class attribute coercion ran' ); -lives_ok { $instance->bar('baz') } 'class attribute coercion ran'; + isnt( exception { $instance->baz('quux') }, undef, 'class attribute coercion did not run with coerce => 0' ); -dies_ok { $instance->baz('quux') } - 'class attribute coercion did not run with coerce => 0'; + isnt( exception { $instance->quux('mtfnpy') }, undef, 'attribute coercion did not run with coerce => 0' ); -dies_ok { $instance->quux('mtfnpy') } - 'attribute coercion did not run with coerce => 0'; + is( exception { + $instance->uncoerced_attr(10); + is $instance->uncoerced_attr(10), 10; + }, undef, 'set attribute having type with no coercion and no coerce=0' ); -lives_ok { $instance->uncoerced_attr(10) } - 'set attribute having type with no coercion and no coerce=0'; + is( exception { + $instance->uncoerced_class_attr(10); + is $instance->uncoerced_class_attr(10), 10; + }, undef, 'set class attribute having type with no coercion and no coerce=0' ); -lives_ok { $instance->uncoerced_class_attr(10) } - 'set class attribute having type with no coercion and no coerce=0'; + is( exception { + $instance->untyped_attr(10); + is $instance->untyped_attr, 10; + }, undef, 'set untyped attribute' ); + + is( exception { + $instance->untyped_class_attr(10); + is $instance->untyped_class_attr, 10; + }, undef, 'set untyped class attribute' ); +}