Commit | Line | Data |
c3398f5b |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings; |
6d46df7a |
4 | use Test::More tests => 11; |
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 | ); |
16 | }; |
17 | |
18 | my $object = Class->new; |
19 | is($object->name, 'default', 'accessor uses attribute name'); |
f3c1ccc8 |
20 | is($object->{key}, undef, 'nothing in object->{init_arg}!'); |
21 | is($object->{name}, 'default', 'value is in object->{name}'); |
c3398f5b |
22 | |
23 | my $object2 = Class->new(name => 'name', key => 'key'); |
384072a3 |
24 | is($object2->name, 'key', 'attribute value is from name'); |
f3c1ccc8 |
25 | is($object2->{key}, undef, 'no value for the init_arg'); |
384072a3 |
26 | is($object2->{name}, 'key', 'value is in key from name'); |
c3398f5b |
27 | |
28 | my $attr = $object2->meta->get_attribute('name'); |
29 | ok($attr, 'got the attribute object by name (not init_arg)'); |
30 | is($attr->name, 'name', 'name is name'); |
31 | is($attr->init_arg, 'key', 'init_arg is key'); |
1f679986 |
32 | |
33 | do { |
34 | package Foo; |
35 | use Mouse; |
36 | |
37 | has name => ( |
38 | is => 'rw', |
39 | init_arg => undef, |
40 | default => 'default', |
41 | ); |
42 | }; |
43 | |
44 | my $foo = Foo->new(name => 'joe'); |
45 | is($foo->name, 'default', 'init_arg => undef ignores attribute name in the constructor'); |
46 | |
6d46df7a |
47 | Foo->meta->make_immutable; |
48 | |
49 | my $bar = Foo->new(name => 'joe'); |
50 | is($bar->name, 'default', 'init_arg => undef ignores attribute name in the inlined constructor'); |