Format Changes
[gitmo/Mouse.git] / t / 001_mouse / 022-init-arg.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More tests => 20;
5
6 do {
7     package Class;
8     use Mouse;
9
10     has name => (
11         is       => 'rw',
12         isa      => 'Str',
13         init_arg => 'key',
14         default  => 'default',
15     );
16
17     has no_init_arg => (
18         is       => 'rw',
19         isa      => 'Str',
20         init_arg => undef,
21         default  => 'default',
22     );
23
24 };
25
26 for('mutable', 'immutable'){
27     my $object = Class->new;
28     is($object->name, 'default', "accessor uses attribute name ($_)");
29     is($object->{key}, undef, 'nothing in object->{init_arg}!');
30     is($object->{name}, 'default', 'value is in object->{name}');
31
32     my $object2 = Class->new(name => 'name', key => 'key');
33     is($object2->name, 'key', 'attribute value is from name');
34     is($object2->{key}, undef, 'no value for the init_arg');
35     is($object2->{name}, 'key', 'value is in key from name');
36
37     my $attr = $object2->meta->get_attribute('name');
38     ok($attr, 'got the attribute object by name (not init_arg)');
39     is($attr->name, 'name', 'name is name');
40     is($attr->init_arg, 'key', 'init_arg is key');
41
42     my $object3 = Class->new(no_init_arg => 'joe');
43     is($object3->no_init_arg, 'default', 'init_arg => undef ignores attribute name in the constructor');
44
45     Class->meta->make_immutable;
46 }