Fix braindead ro/wo accessor breakage when CXSA is available
[p5sagit/Class-Accessor-Grouped.git] / t / accessors.t
CommitLineData
1ee74bdd 1use Test::More tests => 62;
e7d391a8 2use strict;
3use warnings;
4use lib 't/lib';
8019c4d8 5use Sub::Identify qw/sub_name sub_fullname/;
e7d391a8 6
8019c4d8 7# we test the pure-perl versions only, but allow overrides
8# from the accessor_xs test-umbrella
9# Also make sure a rogue envvar will not interfere with
10# things
9540f4e4 11BEGIN {
8019c4d8 12 $Class::Accessor::Grouped::USE_XS = 0
13 unless defined $Class::Accessor::Grouped::USE_XS;
14 $ENV{CAG_USE_XS} = 1;
15};
16
17use AccessorGroups;
9540f4e4 18
e7d391a8 19my $class = AccessorGroups->new;
20
21{
22 my $warned = 0;
23
24 local $SIG{__WARN__} = sub {
25 if (shift =~ /DESTROY/i) {
26 $warned++;
27 };
28 };
29
30 $class->mk_group_accessors('warnings', 'DESTROY');
31
32 ok($warned);
c26cc2b9 33
34 # restore non-accessorized DESTROY
35 no warnings;
36 *AccessorGroups::DESTROY = sub {};
e7d391a8 37};
38
1ee74bdd 39{
40 my $class_name = ref $class;
41 my $name = 'multiple1';
42 my $alias = "_${name}_accessor";
43 my $accessor = $class->can($name);
44 my $alias_accessor = $class->can($alias);
45 isnt(sub_name($accessor), '__ANON__', 'accessor is named');
46 isnt(sub_name($alias_accessor), '__ANON__', 'alias is named');
47 is(sub_fullname($accessor), join('::',$class_name,$name), 'accessor FQ name');
48 is(sub_fullname($alias_accessor), join('::',$class_name,$alias), 'alias FQ name');
49}
50
e7d391a8 51foreach (qw/singlefield multiple1 multiple2/) {
52 my $name = $_;
53 my $alias = "_${name}_accessor";
54
55 can_ok($class, $name, $alias);
56
57 is($class->$name, undef);
58 is($class->$alias, undef);
59
60 # get/set via name
61 is($class->$name('a'), 'a');
62 is($class->$name, 'a');
63 is($class->{$name}, 'a');
64
65 # alias gets same as name
66 is($class->$alias, 'a');
67
68 # get/set via alias
69 is($class->$alias('b'), 'b');
70 is($class->$alias, 'b');
71 is($class->{$name}, 'b');
72
73 # alias gets same as name
74 is($class->$name, 'b');
75};
76
77foreach (qw/lr1 lr2/) {
78 my $name = "$_".'name';
79 my $alias = "_${name}_accessor";
8ef9b3ff 80
81 my $field = { lr1 => 'lr1;field', lr2 => q{lr2'field} }->{$_};
e7d391a8 82
83 can_ok($class, $name, $alias);
84 ok(!$class->can($field));
85
86 is($class->$name, undef);
87 is($class->$alias, undef);
88
89 # get/set via name
90 is($class->$name('c'), 'c');
91 is($class->$name, 'c');
92 is($class->{$field}, 'c');
93
94 # alias gets same as name
95 is($class->$alias, 'c');
96
97 # get/set via alias
98 is($class->$alias('d'), 'd');
99 is($class->$alias, 'd');
100 is($class->{$field}, 'd');
101
102 # alias gets same as name
103 is($class->$name, 'd');
104};
9540f4e4 105
8019c4d8 106# important
9540f4e4 1071;