Cleanup tests, s/class/obj/ where appropriate
[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
28344104 11my $use_xs;
9540f4e4 12BEGIN {
8019c4d8 13 $Class::Accessor::Grouped::USE_XS = 0
14 unless defined $Class::Accessor::Grouped::USE_XS;
15 $ENV{CAG_USE_XS} = 1;
28344104 16 $use_xs = $Class::Accessor::Grouped::USE_XS;
8019c4d8 17};
18
19use AccessorGroups;
9540f4e4 20
84430300 21my $obj = AccessorGroups->new;
e7d391a8 22
23{
84430300 24 my $class = ref $obj;
25 my $name = 'multiple1';
26 my $alias = "_${name}_accessor";
27 my $accessor = $obj->can($name);
28 my $alias_accessor = $obj->can($alias);
29 isnt(sub_name($accessor), '__ANON__', 'accessor is named');
30 isnt(sub_name($alias_accessor), '__ANON__', 'alias is named');
31 is(sub_fullname($accessor), join('::',$class,$name), 'accessor FQ name');
32 is(sub_fullname($alias_accessor), join('::',$class,$alias), 'alias FQ name');
33
e7d391a8 34 my $warned = 0;
35
36 local $SIG{__WARN__} = sub {
37 if (shift =~ /DESTROY/i) {
38 $warned++;
39 };
40 };
41
84430300 42 no warnings qw/once/;
43 local *AccessorGroups::DESTROY = sub {};
e7d391a8 44
84430300 45 $obj->mk_group_accessors('warnings', 'DESTROY');
e7d391a8 46 ok($warned);
1ee74bdd 47}
48
28344104 49my $test_accessors = {
50 singlefield => {
51 is_xs => $use_xs,
fee7c68b 52 has_extra => 1,
28344104 53 },
54 multiple1 => {
55 },
56 multiple2 => {
57 },
58 lr1name => {
59 custom_field => 'lr1;field',
60 },
61 lr2name => {
62 custom_field => "lr2'field",
63 },
64};
65
66
67for my $name (sort keys %$test_accessors) {
e7d391a8 68 my $alias = "_${name}_accessor";
28344104 69 my $field = $test_accessors->{$name}{custom_field} || $name;
fee7c68b 70 my $extra = $test_accessors->{$name}{has_extra};
e7d391a8 71
84430300 72 can_ok($obj, $name, $alias);
73 ok(!$obj->can($field))
28344104 74 if $field ne $name;
e7d391a8 75
84430300 76 is($obj->$name, undef);
77 is($obj->$alias, undef);
e7d391a8 78
79 # get/set via name
84430300 80 is($obj->$name('a'), 'a');
81 is($obj->$name, 'a');
82 is($obj->{$field}, $extra ? 'a Extra tackled on' : 'a');
e7d391a8 83
84 # alias gets same as name
84430300 85 is($obj->$alias, 'a');
e7d391a8 86
87 # get/set via alias
84430300 88 is($obj->$alias('b'), 'b');
89 is($obj->$alias, 'b');
90 is($obj->{$field}, $extra ? 'b Extra tackled on' : 'b');
e7d391a8 91
92 # alias gets same as name
84430300 93 is($obj->$name, 'b');
e7d391a8 94};
95
8019c4d8 96# important
9540f4e4 971;