X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F21_coerce_parameterized_types.t;h=4a4cf9c8d20f04c6fda24cbe5d8f7075c53aa771;hb=7186792babbd64572f1b227c2666ead4ee549ede;hp=dbbd5d23286a57713de2d91410a3fcd0c4f0b17c;hpb=6cfbfdbc099ddc95835bfb05384d36c9eba7e527;p=gitmo%2FMooseX-Types.git diff --git a/t/21_coerce_parameterized_types.t b/t/21_coerce_parameterized_types.t index dbbd5d2..4a4cf9c 100644 --- a/t/21_coerce_parameterized_types.t +++ b/t/21_coerce_parameterized_types.t @@ -1,43 +1,49 @@ #!/usr/bin/env perl use strict; use warnings; -use Test::Exception; -use Test::More tests => 2; +use Test::More; BEGIN { package TypeLib; - use MooseX::Types -declare => [qw/MyType ArrayRefOfMyType/]; - use MooseX::Types::Moose qw/ArrayRef Str/; + use MooseX::Types -declare => [qw/ + MyChar MyDigit ArrayRefOfMyCharOrDigit + /]; + use MooseX::Types::Moose qw/ArrayRef Str Int/; - subtype MyType, as Str, where { + subtype MyChar, as Str, where { length == 1 }; - coerce ArrayRef[MyType], from Str, via { + subtype MyDigit, as Int, where { + length == 1 + }; + + coerce ArrayRef[MyChar|MyDigit], from Str, via { [split //] }; # same thing with an explicit subtype - subtype ArrayRefOfMyType, as ArrayRef[MyType]; + subtype ArrayRefOfMyCharOrDigit, as ArrayRef[MyChar|MyDigit]; - coerce ArrayRefOfMyType, from Str, via { + coerce ArrayRefOfMyCharOrDigit, from Str, via { [split //] }; } + { - package AClass; - use Moose; - BEGIN { TypeLib->import(qw/MyType ArrayRefOfMyType/) }; + BEGIN { TypeLib->import(qw/ + MyChar MyDigit ArrayRefOfMyCharOrDigit/ + ) }; use MooseX::Types::Moose 'ArrayRef'; - has parameterized => (is => 'rw', isa => ArrayRef[MyType], coerce => 1); - has subtype => (is => 'rw', isa => ArrayRefOfMyType, coerce => 1); -} - -my $instance = AClass->new; + my $parameterized = ArrayRef[MyChar|MyDigit]; + { local $::TODO = "see comments in MooseX::Types->create_arged_..."; + ::ok( $parameterized->has_coercion, 'coercion applied to parameterized type' ); + } -lives_ok { $instance->parameterized('foo') } - 'coercion applied to parameterized type'; + my $subtype = ArrayRefOfMyCharOrDigit; + ::ok( $subtype->has_coercion, 'coercion applied to subtype' ); +} -lives_ok { $instance->subtype('foo') } 'coercion applied to subtype'; +done_testing();