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})");
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})"
);
}
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;
+
+my $lazyfoo = LazyFoo->new;
like(
- exception { LazyFoo->new->less_than_three },
- qr/4 is not less than three/,
+ exception { $lazyfoo->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(
+ exception { $lazyfoo->less_than_three },
+ undef,
+ 'Corrected builder value on existing object returned ok'
+);
+
+is(LazyFoo->new->less_than_three, 2, 'Correct builder value returned ok');
+
done_testing;