X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F800_shikabased%2F010-isa-or.t;h=b912815b94a1ca08e9740617959f5aff0c692646;hb=a09601ab6f3b4b6efb78d3f24a050fec92dcf02f;hp=8708ae389b93691ddaad26e73f7dacac7804fed2;hpb=eec1bb49cc5fcd39b8923dfc56ca568359122784;p=gitmo%2FMouse.git diff --git a/t/800_shikabased/010-isa-or.t b/t/800_shikabased/010-isa-or.t index 8708ae3..b912815 100644 --- a/t/800_shikabased/010-isa-or.t +++ b/t/800_shikabased/010-isa-or.t @@ -5,16 +5,19 @@ use Test::More tests => 18; { package Foo; use Mouse; - use Mouse::TypeRegistry; - subtype Baz => where { defined($_) && $_ eq 'Baz' }; + use Mouse::Util::TypeConstraints; + type Baz => where { defined($_) && $_ eq 'Baz' }; + coerce Baz => from 'ArrayRef', via { 'Baz' }; + has 'bar' => ( is => 'rw', isa => 'Str | Baz | Undef', coerce => 1 ); } eval { Foo->new( bar => +{} ); }; -ok $@, 'not got an object'; +like($@, qr/^Attribute \(bar\) does not pass the type constraint because: Validation failed for 'Str\|Baz\|Undef' failed with value HASH\(\w+\)/, 'type constraint and coercion failed') + or diag "\$@='$@'"; eval { isa_ok(Foo->new( bar => undef ), 'Foo'); @@ -32,7 +35,7 @@ my $f = Foo->new; eval { $f->bar([]); }; -ok !$@; +ok !$@, $@; is $f->bar, 'Baz', 'bar is baz (coerce from ArrayRef)'; eval { @@ -51,12 +54,12 @@ is $f->bar, undef, 'bar is undef'; { package Bar; use Mouse; - use Mouse::TypeRegistry; + use Mouse::Util::TypeConstraints; - subtype 'Type1' => where { defined($_) && $_ eq 'Name' }; + type 'Type1' => where { defined($_) && $_ eq 'Name' }; coerce 'Type1', from 'Str', via { 'Names' }; - subtype 'Type2' => where { defined($_) && $_ eq 'Group' }; + type 'Type2' => where { defined($_) && $_ eq 'Group' }; coerce 'Type2', from 'Str', via { 'Name' }; has 'foo' => ( is => 'rw', isa => 'Type1|Type2', coerce => 1 ); @@ -69,23 +72,23 @@ is $foo->foo, 'Name', 'foo is Name'; { package KLASS; - sub new { bless {}, shift }; + use Mouse; } { - package Baz; + package Funk; use Mouse; - use Mouse::TypeRegistry; + use Mouse::Util::TypeConstraints; - subtype 'Type3' => where { defined($_) && $_ eq 'Name' }; + type 'Type3' => where { defined($_) && $_ eq 'Name' }; coerce 'Type3', from 'CodeRef', via { 'Name' }; has 'foo' => ( is => 'rw', isa => 'Type3|KLASS|Undef', coerce => 1 ); } -eval { Baz->new( foo => 'aaa' ) }; +eval { Funk->new( foo => 'aaa' ) }; like $@, qr/Attribute \(foo\) does not pass the type constraint because: Validation failed for 'Type3\|KLASS\|Undef' failed with value aaa/; -my $k = Baz->new; +my $k = Funk->new; ok $k, 'got an object 4'; $k->foo(sub {}); is $k->foo, 'Name', 'foo is Name';