X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F21_coerce_parameterized_types.t;fp=t%2F21_coerce_parameterized_types.t;h=dbbd5d23286a57713de2d91410a3fcd0c4f0b17c;hb=6cfbfdbc099ddc95835bfb05384d36c9eba7e527;hp=0000000000000000000000000000000000000000;hpb=76cd1d7f79f3f6315c38a0b90d2fa9c717237cd1;p=gitmo%2FMooseX-Types.git diff --git a/t/21_coerce_parameterized_types.t b/t/21_coerce_parameterized_types.t new file mode 100644 index 0000000..dbbd5d2 --- /dev/null +++ b/t/21_coerce_parameterized_types.t @@ -0,0 +1,43 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::Exception; + +use Test::More tests => 2; + +BEGIN { + package TypeLib; + use MooseX::Types -declare => [qw/MyType ArrayRefOfMyType/]; + use MooseX::Types::Moose qw/ArrayRef Str/; + + subtype MyType, as Str, where { + length == 1 + }; + + coerce ArrayRef[MyType], from Str, via { + [split //] + }; + +# same thing with an explicit subtype + subtype ArrayRefOfMyType, as ArrayRef[MyType]; + + coerce ArrayRefOfMyType, from Str, via { + [split //] + }; +} +{ + package AClass; + use Moose; + BEGIN { TypeLib->import(qw/MyType ArrayRefOfMyType/) }; + 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; + +lives_ok { $instance->parameterized('foo') } + 'coercion applied to parameterized type'; + +lives_ok { $instance->subtype('foo') } 'coercion applied to subtype';