Added tests for mk_group_ro_accessors
[p5sagit/Class-Accessor-Grouped.git] / t / accessors_ro.t
1 use Test::More no_plan;
2 use strict;
3 use warnings;
4 use lib 't/lib';
5 use AccessorGroupsRO;
6
7 my $class = AccessorGroupsRO->new;
8
9 {
10     my $warned = 0;
11
12     local $SIG{__WARN__} = sub {
13         if  (shift =~ /DESTROY/i) {
14             $warned++;
15         };
16     };
17
18     $class->mk_group_ro_accessors('warnings', 'DESTROY');
19
20     ok($warned);
21 };
22
23 foreach (qw/singlefield multiple1 multiple2/) {
24     my $name = $_;
25     my $alias = "_${name}_accessor";
26
27     can_ok($class, $name, $alias);
28
29     is($class->$name, undef);
30     is($class->$alias, undef);
31
32     # get via name
33     $class->{$name} = 'a';
34     is($class->$name, 'a');
35
36     # alias gets same as name
37     is($class->$alias, 'a');
38
39     # die on set via name/alias
40     eval {
41         $class->$name('b');
42     };
43     ok($@ =~ /cannot alter/);
44
45     eval {
46         $class->$alias('b');
47     };
48     ok($@ =~ /cannot alter/);
49
50     # value should be unchanged
51     is($class->$name, 'a');
52     is($class->$alias, 'a');
53 };
54
55 foreach (qw/lr1 lr2/) {
56     my $name = "$_".'name';
57     my $alias = "_${name}_accessor";
58     my $field = "$_".'field';
59
60     can_ok($class, $name, $alias);
61     ok(!$class->can($field));
62
63     is($class->$name, undef);
64     is($class->$alias, undef);
65
66     # get via name
67     $class->{$field} = 'c';
68     is($class->$name, 'c');
69
70     # alias gets same as name
71     is($class->$alias, 'c');
72
73     # die on set via name/alias
74     eval {
75         $class->$name('d');
76     };
77     ok($@ =~ /cannot alter/);
78
79     eval {
80         $class->$alias('d');
81     };
82     ok($@ =~ /cannot alter/);
83
84     # value should be unchanged
85     is($class->$name, 'c');
86     is($class->$alias, 'c');
87 };