More tests for strict constructor
[gitmo/Mouse.git] / t / 001_mouse / 068-strict-constructor.t
1 #!perl
2 use strict;
3 use warnings;
4
5 use if 'Mouse' eq 'Moose',
6     'Test::More' => skip_all => 'Moose does nots support strict constructor';
7 use Test::More;
8 use Test::Exception;
9
10 {
11     package MyClass;
12     use Mouse;
13
14     has foo => (
15         is => 'rw',
16     );
17
18     has bar => (
19         is => 'rw',
20         init_arg => undef,
21     );
22
23     has baz => (
24         is      => 'rw',
25         default => 42,
26     );
27
28     __PACKAGE__->meta->make_immutable(strict_constructor => 1);
29 }
30
31 lives_and {
32     my $o = MyClass->new(foo => 1);
33     isa_ok($o, 'MyClass');
34     is $o->baz, 42;
35 } 'correc use of the constructor';
36
37 lives_and {
38     my $o = MyClass->new(foo => 1, baz => 10);
39     isa_ok($o, 'MyClass');
40     is $o->baz, 10;
41 } 'correc use of the constructor';
42
43
44 throws_ok {
45     MyClass->new(foo => 1, hoge => 42);
46 } qr/\b hoge \b/xms;
47
48 throws_ok {
49     MyClass->new(foo => 1, bar => 42);
50 } qr/\b bar \b/xms, "init_arg => undef";
51
52
53 throws_ok {
54     MyClass->new(aaa => 1, bbb => 2, ccc => 3);
55 } qr/\b aaa \b/xms, $@;
56
57 throws_ok {
58     MyClass->new(aaa => 1, bbb => 2, ccc => 3);
59 } qr/\b bbb \b/xms, $@;
60
61 throws_ok {
62     MyClass->new(aaa => 1, bbb => 2, ccc => 3);
63 } qr/\b ccc \b/xms, $@;
64
65 done_testing;