No need to use Pod::Coverage::Moose for this test.
[gitmo/MooseX-StrictConstructor.git] / t / basic.t
index d06235f..9c26f8d 100644 (file)
--- a/t/basic.t
+++ b/t/basic.t
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 6;
+use Test::More tests => 9;
 
 
 {
@@ -46,6 +46,36 @@ use Test::More tests => 6;
     }
 }
 
+{
+    package Immutable;
+
+    use MooseX::StrictConstructor;
+
+    has 'thing' => ( is => 'rw' );
+
+    no Moose;
+    __PACKAGE__->meta()->make_immutable();
+}
+
+{
+    package ImmutableTricky;
+
+    use MooseX::StrictConstructor;
+
+    has 'thing' => ( is => 'rw' );
+
+    sub BUILD
+    {
+        my $self   = shift;
+        my $params = shift;
+
+        delete $params->{spy};
+    }
+
+    no Moose;
+    __PACKAGE__->meta()->make_immutable();
+}
+
 
 eval { Standard->new( thing => 1, bad => 99 ) };
 is( $@, '', 'standard Moose class ignores unknown params' );
@@ -64,3 +94,15 @@ like( $@, qr/unknown attribute.+: bad/, 'subclass constructor blows up on unknow
 
 eval { Subclass->new( thing => 1, size => 'large' ) };
 is( $@, '', 'subclass constructor handles known attributes correctly' );
+
+eval { Immutable->new( thing => 1, bad => 99 ) };
+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()' );
+
+eval { ImmutableTricky->new( thing => 1, agent => 99 ) };
+like( $@, qr/unknown attribute.+: agent/,
+      'ImmutableTricky still blows up on unknown params other than spy' );