use MooseX::StrictConstructor::Role::Object;
use MooseX::StrictConstructor::Role::Meta::Method::Constructor;
-
Moose::Exporter->setup_import_methods();
-sub init_meta
-{
+sub init_meta {
shift;
my %p = @_;
my $caller = $p{for_class};
- Moose::Util::MetaRole::apply_metaclass_roles
- ( for_class => $caller,
- constructor_class_roles =>
- ['MooseX::StrictConstructor::Role::Meta::Method::Constructor'],
- );
-
- Moose::Util::MetaRole::apply_base_class_roles
- ( for_class => $caller,
- roles =>
- [ 'MooseX::StrictConstructor::Role::Object' ],
- );
+ Moose::Util::MetaRole::apply_metaclass_roles(
+ for_class => $caller,
+ constructor_class_roles =>
+ ['MooseX::StrictConstructor::Role::Meta::Method::Constructor'],
+ );
+
+ Moose::Util::MetaRole::apply_base_class_roles(
+ for_class => $caller,
+ roles =>
+ ['MooseX::StrictConstructor::Role::Object'],
+ );
return $caller->meta();
}
use Test::More tests => 15;
-
{
+
package Standard;
use Moose;
}
{
+
package Stricter;
use Moose;
}
{
+
package Subclass;
use Moose;
}
{
+
package Tricky;
use Moose;
has 'thing' => ( is => 'rw' );
- sub BUILD
- {
+ sub BUILD {
my $self = shift;
my $params = shift;
}
{
+
package InitArg;
use Moose;
}
{
+
package ImmutableInitArg;
use Moose;
}
{
+
package Immutable;
use Moose;
}
{
+
package ImmutableTricky;
use Moose;
has 'thing' => ( is => 'rw' );
- sub BUILD
- {
+ sub BUILD {
my $self = shift;
my $params = shift;
__PACKAGE__->meta()->make_immutable();
}
-
eval { Standard->new( thing => 1, bad => 99 ) };
is( $@, '', 'standard Moose class ignores unknown params' );
eval { Stricter->new( thing => 1, bad => 99 ) };
-like( $@, qr/unknown attribute.+: bad/, 'strict constructor blows up on unknown params' );
+like( $@, qr/unknown attribute.+: bad/,
+ 'strict constructor blows up on unknown params' );
eval { Subclass->new( thing => 1, size => 'large' ) };
is( $@, '', 'subclass constructor handles known attributes correctly' );
eval { Tricky->new( thing => 1, spy => 99 ) };
-is( $@, '', 'can work around strict constructor by deleting params in BUILD()' );
+is( $@, '',
+ 'can work around strict constructor by deleting params in BUILD()' );
eval { Tricky->new( thing => 1, agent => 99 ) };
-like( $@, qr/unknown attribute.+: agent/, 'Tricky still blows up on unknown params other than spy' );
+like( $@, qr/unknown attribute.+: agent/,
+ 'Tricky still blows up on unknown params other than spy' );
eval { Subclass->new( thing => 1, bad => 99 ) };
-like( $@, qr/unknown attribute.+: bad/, 'subclass constructor blows up on unknown params' );
+like( $@, qr/unknown attribute.+: bad/,
+ 'subclass constructor blows up on unknown params' );
eval { InitArg->new( thing => 1 ) };
-like( $@, qr/unknown attribute.+: thing/,
- 'InitArg blows up with attribute name' );
+like(
+ $@, qr/unknown attribute.+: thing/,
+ 'InitArg blows up with attribute name'
+);
eval { InitArg->new( size => 1 ) };
-like( $@, qr/unknown attribute.+: size/,
- 'InitArg blows up when given attribute with undef init_arg' );
+like(
+ $@, qr/unknown attribute.+: size/,
+ 'InitArg blows up when given attribute with undef init_arg'
+);
eval { InitArg->new( other => 1 ) };
-is( $@, '',
- 'InitArg works when given proper init_arg' );
+is(
+ $@, '',
+ 'InitArg works when given proper init_arg'
+);
eval { ImmutableInitArg->new( thing => 1 ) };
-like( $@, qr/unknown attribute.+: thing/,
- 'ImmutableInitArg blows up with attribute name' );
+like(
+ $@, qr/unknown attribute.+: thing/,
+ 'ImmutableInitArg blows up with attribute name'
+);
eval { ImmutableInitArg->new( size => 1 ) };
-like( $@, qr/unknown attribute.+: size/,
- 'ImmutableInitArg blows up when given attribute with undef init_arg' );
+like(
+ $@, qr/unknown attribute.+: size/,
+ 'ImmutableInitArg blows up when given attribute with undef init_arg'
+);
eval { ImmutableInitArg->new( other => 1 ) };
-is( $@, '',
- 'ImmutableInitArg works when given proper init_arg' );
+is(
+ $@, '',
+ 'ImmutableInitArg works when given proper init_arg'
+);
eval { Immutable->new( thing => 1, bad => 99 ) };
-like( $@, qr/unknown attribute.+: bad/,
- 'strict constructor in immutable class blows up on unknown params' );
+like(
+ $@, qr/unknown attribute.+: bad/,
+ 'strict constructor in immutable class blows up on unknown params'
+);
eval { ImmutableTricky->new( thing => 1, spy => 99 ) };
-is( $@, '',
- 'immutable class can work around strict constructor by deleting params in BUILD()' );
+is(
+ $@, '',
+ 'immutable class can work around strict constructor by deleting params in BUILD()'
+);
eval { ImmutableTricky->new( thing => 1, agent => 99 ) };
-like( $@, qr/unknown attribute.+: agent/,
- 'ImmutableTricky still blows up on unknown params other than spy' );
+like(
+ $@, qr/unknown attribute.+: agent/,
+ 'ImmutableTricky still blows up on unknown params other than spy'
+);