add failing tests for punctuation in $field, remove unnecessary Win32 check and updat...
[p5sagit/Class-Accessor-Grouped.git] / t / accessors.t
1 use Test::More tests => 62;
2 use strict;
3 use warnings;
4 use lib 't/lib';
5 use Sub::Identify qw/sub_name sub_fullname/;;
6
7 BEGIN {
8     # Disable XSAccessor to test pure-Perl accessors
9     $Class::Accessor::Grouped::hasXS = 0;
10     
11     require AccessorGroups;
12 }
13
14 my $class = AccessorGroups->new;
15
16 {
17     my $warned = 0;
18
19     local $SIG{__WARN__} = sub {
20         if  (shift =~ /DESTROY/i) {
21             $warned++;
22         };
23     };
24
25     $class->mk_group_accessors('warnings', 'DESTROY');
26
27     ok($warned);
28
29     # restore non-accessorized DESTROY
30     no warnings;
31     *AccessorGroups::DESTROY = sub {};
32 };
33
34 {
35   my $class_name = ref $class;
36   my $name = 'multiple1';
37   my $alias = "_${name}_accessor";
38   my $accessor = $class->can($name);
39   my $alias_accessor = $class->can($alias);
40   isnt(sub_name($accessor), '__ANON__', 'accessor is named');
41   isnt(sub_name($alias_accessor), '__ANON__', 'alias is named');
42   is(sub_fullname($accessor), join('::',$class_name,$name), 'accessor FQ name');
43   is(sub_fullname($alias_accessor), join('::',$class_name,$alias), 'alias FQ name');
44 }
45
46 foreach (qw/singlefield multiple1 multiple2/) {
47     my $name = $_;
48     my $alias = "_${name}_accessor";
49
50     can_ok($class, $name, $alias);
51
52     is($class->$name, undef);
53     is($class->$alias, undef);
54
55     # get/set via name
56     is($class->$name('a'), 'a');
57     is($class->$name, 'a');
58     is($class->{$name}, 'a');
59
60     # alias gets same as name
61     is($class->$alias, 'a');
62
63     # get/set via alias
64     is($class->$alias('b'), 'b');
65     is($class->$alias, 'b');
66     is($class->{$name}, 'b');
67
68     # alias gets same as name
69     is($class->$name, 'b');
70 };
71
72 foreach (qw/lr1 lr2/) {
73     my $name = "$_".'name';
74     my $alias = "_${name}_accessor";
75
76     my $field = { lr1 => 'lr1;field', lr2 => q{lr2'field} }->{$_};
77
78     can_ok($class, $name, $alias);
79     ok(!$class->can($field));
80
81     is($class->$name, undef);
82     is($class->$alias, undef);
83
84     # get/set via name
85     is($class->$name('c'), 'c');
86     is($class->$name, 'c');
87     is($class->{$field}, 'c');
88
89     # alias gets same as name
90     is($class->$alias, 'c');
91
92     # get/set via alias
93     is($class->$alias('d'), 'd');
94     is($class->$alias, 'd');
95     is($class->{$field}, 'd');
96
97     # alias gets same as name
98     is($class->$name, 'd');
99 };
100
101 1;