}
{
+ package StrictSubclass;
+
+ use Moose;
+
+ extends 'Stricter';
+
+ has 'size' => ( is => 'rw' );
+}
+
+{
package Tricky;
use Moose;
has 'size' => ( is => 'rw', 'init_arg' => undef );
}
-my @classes = qw( Standard Stricter Subclass Tricky InitArg );
+my @classes = qw( Standard Stricter Subclass StrictSubclass Tricky InitArg );
with_immutable {
is(
);
is(
+ exception { StrictSubclass->new( thing => 1, size => 'large', ) }, undef,
+ 'subclass that doesn\'t use strict constructor handles known attributes correctly'
+ );
+
+ like(
+ exception { StrictSubclass->new( thing => 1, bad => 99 ) },
+ qr/unknown attribute.+: bad/,
+ 'subclass that doesn\'t use strict correctly recognizes bad attribute'
+ );
+
+ is(
exception { Tricky->new( thing => 1, spy => 99 ) }, undef,
'can work around strict constructor by deleting params in BUILD()'
);
);
like(
- exception { Subclass->new( thing => 1, bad => 99 ) },
- qr/unknown attribute.+: bad/,
- 'subclass constructor blows up on unknown params'
- );
-
- like(
exception { InitArg->new( thing => 1 ) },
qr/unknown attribute.+: thing/,
'InitArg blows up with attribute name'