initial import
[gitmo/MooseX-StrictConstructor.git] / t / basic.t
1 use strict;
2 use warnings;
3
4 use Test::More tests => 4;
5
6
7 {
8     package Standard;
9
10     use Moose;
11
12     has 'thing' => ( is => 'rw' );
13 }
14
15 {
16     package Stricter;
17
18     use MooseX::StrictConstructor;
19
20     has 'thing' => ( is => 'rw' );
21 }
22
23 {
24     package Tricky;
25
26     use MooseX::StrictConstructor;
27
28     has 'thing' => ( is => 'rw' );
29
30     sub BUILD
31     {
32         my $self   = shift;
33         my $params = shift;
34
35         delete $params->{spy};
36     }
37 }
38
39
40 eval { Standard->new( thing => 1, bad => 99 ) };
41 is( $@, '', 'standard Moose class ignores unknown params' );
42
43 eval { Stricter->new( thing => 1, bad => 99 ) };
44 like( $@, qr/unknown attribute.+: bad/, 'strict constructor blows up on unknown params' );
45
46 eval { Tricky->new( thing => 1, spy => 99 ) };
47 is( $@, '', 'can work around strict constructor by deleting params in BUILD()' );
48
49 eval { Tricky->new( thing => 1, agent => 99 ) };
50 like( $@, qr/unknown attribute.+: agent/, 'Tricky still blows up on unknown params other than spy' );