X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F025-more-isa.t;h=0be76034340cb604ab7f938357b69a95b601f314;hb=766534c221078e4e10d66fcc2aca0563aad54f4e;hp=213fba8136cc3de806901468009e2a1881a80d23;hpb=e3d9dc7bc964416439c935152c3670e90a1cd315;p=gitmo%2FMouse.git diff --git a/t/025-more-isa.t b/t/025-more-isa.t index 213fba8..0be7603 100644 --- 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 => 9; +use Test::More tests => 30; use Test::Exception; do { @@ -12,6 +12,9 @@ do { is => 'rw', isa => 'Test::Builder', ); + + package Test::Builder::Subclass; + our @ISA = qw(Test::Builder); }; can_ok(Class => 'tb'); @@ -21,6 +24,13 @@ lives_ok { }; lives_ok { + # Test::Builder was a bizarre choice, because it's a singleton. Because of + # that calling new on T:B:S won't work. Blessing directly -- rjbs, + # 2008-12-04 + Class->new(tb => (bless {} => 'Test::Builder::Subclass')); +}; + +lives_ok { my $class = Class->new; $class->tb(Test::Builder->new); isa_ok($class->tb, 'Test::Builder'); @@ -57,3 +67,74 @@ lives_ok { Other->new(oops => 10); }; +# ClassName coverage tests + +do { + package A; + our @VERSION; + + package B; + our $VERSION = 1; + + package C; + our %ISA; + + package D; + our @ISA = 'Mouse::Object'; + + package E; + sub foo {} + + package F; + + package G::H; + sub bar {} + + package I; + our $NOT_CODE = 1; +}; + +do { + package ClassNameTests; + use Mouse; + + has class => ( + is => 'rw', + isa => 'ClassName', + ); +}; + +for ('B'..'E', 'G::H') { + lives_ok { + ClassNameTests->new(class => $_); + }; + + lives_ok { + my $obj = ClassNameTests->new; + $obj->class($_); + }; +} + +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 => $_); + } qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' failed with value $_/; + + throws_ok { + my $obj = ClassNameTests->new; + $obj->class($_); + } qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' failed with value $_/; +}; +