Commit | Line | Data |
c3398f5b |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings; |
66e667af |
4 | use Test::More tests => 20; |
c3398f5b |
5 | |
6 | do { |
7 | package Class; |
8 | use Mouse; |
9 | |
10 | has name => ( |
11 | is => 'rw', |
b4160dbe |
12 | isa => 'Str', |
c3398f5b |
13 | init_arg => 'key', |
14 | default => 'default', |
15 | ); |
1f679986 |
16 | |
66e667af |
17 | has no_init_arg => ( |
1f679986 |
18 | is => 'rw', |
66e667af |
19 | isa => 'Str', |
1f679986 |
20 | init_arg => undef, |
21 | default => 'default', |
22 | ); |
66e667af |
23 | |
1f679986 |
24 | }; |
25 | |
66e667af |
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'); |
1f679986 |
41 | |
66e667af |
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'); |
6d46df7a |
44 | |
66e667af |
45 | Class->meta->make_immutable; |
46 | } |