Include both attribute name and init_arg in constructor errors (RT#79596)
[gitmo/Moo.git] / t / accessor-isa.t
index 2ddc020..2ce945a 100644 (file)
@@ -11,7 +11,8 @@ sub run_for {
 
   like(
     exception { $obj->less_than_three(4) },
-    qr/4 is not less than three/, "exception thrown on bad set (${class})"
+    qr/isa check for "less_than_three" failed: 4 is not less than three/,
+    "exception thrown on bad set (${class})"
   );
 
   is($obj->less_than_three, 1, "initial value remains after bad set (${class})");
@@ -29,7 +30,7 @@ sub run_for {
   is(exception { $class->new }, undef, "no exception with no value (${class})");
   like(
     exception { $class->new(less_than_three => 12) },
-    qr/12 is not less than three/,
+    qr/isa check for "less_than_three" failed: 12 is not less than three/,
     "exception thrown on bad constructor arg (${class})"
   );
 }
@@ -84,23 +85,32 @@ run_for 'Bar';
 
 run_for 'Baz';
 
+my $lt3;
+
 {
   package LazyFoo;
 
+  use Sub::Quote;
   use Moo;
 
   has less_than_three => (
     is => 'lazy',
-    isa => sub { die "$_[0] is not less than three" unless $_[0] < 3 }
+    isa => quote_sub(q{ die "$_[0] is not less than three" unless $_[0] < 3 })
   );
 
-  sub _build_less_than_three { 4 }
+  sub _build_less_than_three { $lt3 }
 }
 
+$lt3 = 4;
+
 like(
   exception { LazyFoo->new->less_than_three },
-  qr/4 is not less than three/,
+  qr/isa check for "less_than_three" failed: 4 is not less than three/,
   "exception thrown on bad builder return value (LazyFoo)"
 );
 
+$lt3 = 2;
+
+is(LazyFoo->new->less_than_three, 2, 'Correct builder value returned ok');
+
 done_testing;