X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F025-more-isa.t;h=022c89c495ed083aefc1a1d9be13bab0dac35fc7;hb=8c0a77aa50dc0fef958845e65f2b5b87a9239024;hp=e59ef90026967db657b5a2bedec8ef56ffcce529;hpb=7cd9681ff300933f3590aafeaa18ab6de615709c;p=gitmo%2FMouse.git diff --git a/t/025-more-isa.t b/t/025-more-isa.t old mode 100644 new mode 100755 index e59ef90..022c89c --- a/t/025-more-isa.t +++ b/t/025-more-isa.t @@ -1,7 +1,7 @@ #!/usr/bin/env perl use strict; use warnings; -use Test::More tests => 30; +use Test::More tests => 34; use Test::Exception; do { @@ -54,6 +54,7 @@ do { use Mouse; has oops => ( + is => 'bare', isa => 'Int', default => "yikes", ); @@ -104,7 +105,7 @@ do { ); }; -for ('A'..'E', 'G::H') { +for ('B'..'E', 'G::H') { lives_ok { ClassNameTests->new(class => $_); }; @@ -115,6 +116,18 @@ for ('A'..'E', 'G::H') { }; } +TODO: { + local $TODO = "Moose throws errors here. Mouse does not"; + throws_ok { + ClassNameTests->new(class => 'A'); + } qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' failed with value A/; + + throws_ok { + my $obj = ClassNameTests->new; + $obj->class('A'); + } qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' failed with value A/; +} + for ('F', 'G', 'I', 'Z') { throws_ok { ClassNameTests->new(class => $_); @@ -126,3 +139,37 @@ for ('F', 'G', 'I', 'Z') { } qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' failed with value $_/; }; + +# Check that Roles can be used in 'isa' and they are constrained with +# 'does' +do { + package SausageRole; + use Mouse::Role; + + package DoesSausage; + use Mouse; + with 'SausageRole'; + + package HasSausage; + use Mouse; + + has sausage => + (isa => 'SausageRole', + is => 'rw'); + +}; + +my $hs; +lives_ok { + $hs = HasSausage->new(sausage => DoesSausage->new); +}; +lives_ok { + $hs->sausage(DoesSausage->new); +}; +throws_ok { + HasSausage->new(sausage => Class->new); +} qr/^Attribute \(sausage\) does not pass the type constraint because: Validation failed for 'SausageRole' failed with value Class=/; +throws_ok { + $hs->sausage(Class->new); +} qr/^Attribute \(sausage\) does not pass the type constraint because: Validation failed for 'SausageRole' failed with value Class=/; +