Added tests for mk_group_ro_accessors
[p5sagit/Class-Accessor-Grouped.git] / t / accessors_ro.t
CommitLineData
6a48652b 1use Test::More no_plan;
2use strict;
3use warnings;
4use lib 't/lib';
5use AccessorGroupsRO;
6
7my $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
23foreach (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
55foreach (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};