Mouse::Util::does_role() respects $thing->does() method
[gitmo/Mouse.git] / t / 001_mouse / 025-more-isa.t
index 6e621a7..c2d6ba2 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/env perl
 use strict;
 use warnings;
-use Test::More tests => 34;
+use Test::More;
 use Test::Exception;
 
 do {
@@ -13,6 +13,11 @@ do {
         isa => 'Test::Builder',
     );
 
+    has obj => (
+        is  => 'rw',
+        isa => 'UNIVERSAL',
+    );
+
     package Test::Builder::Subclass;
     our @ISA = qw(Test::Builder);
 };
@@ -24,6 +29,10 @@ lives_ok {
 };
 
 lives_ok {
+    Class->new(obj => Test::Builder->new);
+};
+
+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
@@ -38,16 +47,20 @@ lives_ok {
 
 throws_ok {
     Class->new(tb => 3);
-} qr/Attribute \(tb\) does not pass the type constraint because: Validation failed for 'Test::Builder' failed with value 3/;
+} qr/Attribute \(tb\) does not pass the type constraint because: Validation failed for 'Test::Builder' with value 3/;
 
 throws_ok {
     my $class = Class->new;
     $class->tb(3);
-} qr/Attribute \(tb\) does not pass the type constraint because: Validation failed for 'Test::Builder' failed with value 3/;
+} qr/Attribute \(tb\) does not pass the type constraint because: Validation failed for 'Test::Builder' with value 3/;
 
 throws_ok {
     Class->new(tb => Class->new);
-} qr/Attribute \(tb\) does not pass the type constraint because: Validation failed for 'Test::Builder' failed with value Class=HASH\(\w+\)/;
+} qr/Attribute \(tb\) does not pass the type constraint because: Validation failed for 'Test::Builder' with value Class=HASH\(\w+\)/;
+
+throws_ok {
+    Class->new(obj => 42);
+} qr/Attribute \(obj\) does not pass the type constraint because: Validation failed for 'UNIVERSAL' with value 42/;
 
 do {
     package Other;
@@ -62,7 +75,7 @@ do {
 
 throws_ok {
     Other->new;
-} qr/Attribute \(oops\) does not pass the type constraint because: Validation failed for 'Int' failed with value yikes/;
+} qr/Attribute \(oops\) does not pass the type constraint because: Validation failed for 'Int' with value yikes/;
 
 lives_ok {
     Other->new(oops => 10);
@@ -119,31 +132,31 @@ for ('Bx', 'D'..'E', 'G::H') {
 
 throws_ok {
     ClassNameTests->new(class => 'A');
-} qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' failed with value A/;
+} qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' 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/;
+} qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' with value A/;
 
 throws_ok {
     ClassNameTests->new(class => 'C');
-} qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' failed with value C/;
+} qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' with value C/;
 
 throws_ok {
         my $obj = ClassNameTests->new;
         $obj->class('C');
-} qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' failed with value C/;
+} qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' with value C/;
 
 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 $_/;
+    } qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' 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 $_/;
+    } qr/Attribute \(class\) does not pass the type constraint because: Validation failed for 'ClassName' with value $_/;
 };
 
 
@@ -175,8 +188,9 @@ lives_ok {
 };
 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=/;
+} qr/^Attribute \(sausage\) does not pass the type constraint because: Validation failed for 'SausageRole' 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=/;
+} qr/^Attribute \(sausage\) does not pass the type constraint because: Validation failed for 'SausageRole' with value Class=/;
 
+done_testing;