Get rid of subtests so we can test threads
[p5sagit/Class-Accessor-Grouped.git] / t / accessors_wo.t
CommitLineData
ed606987 1use Test::More;
8019c4d8 2use Test::Exception;
c26cc2b9 3use strict;
4use warnings;
ed606987 5no warnings 'once';
395c3fdb 6use Config;
c26cc2b9 7use lib 't/lib';
8019c4d8 8
9# we test the pure-perl versions only, but allow overrides
10# from the accessor_xs test-umbrella
11# Also make sure a rogue envvar will not interfere with
12# things
13my $use_xs;
14BEGIN {
ba8c183b 15 $Class::Accessor::Grouped::USE_XS = 0
16 unless defined $Class::Accessor::Grouped::USE_XS;
17 $ENV{CAG_USE_XS} = 1;
18 $use_xs = $Class::Accessor::Grouped::USE_XS;
8019c4d8 19};
20
c26cc2b9 21use AccessorGroupsWO;
22
84430300 23my $obj = AccessorGroupsWO->new;
c26cc2b9 24
25{
ba8c183b 26 my $warned = 0;
c26cc2b9 27
ba8c183b 28 local $SIG{__WARN__} = sub {
29 if (shift =~ /DESTROY/i) {
30 $warned++;
c26cc2b9 31 };
ba8c183b 32 };
c26cc2b9 33
ba8c183b 34 no warnings qw/once/;
35 local *AccessorGroupsWO::DESTROY = sub {};
c26cc2b9 36
ba8c183b 37 $obj->mk_group_wo_accessors('warnings', 'DESTROY');
38 ok($warned);
c26cc2b9 39};
40
8019c4d8 41my $test_accessors = {
ba8c183b 42 singlefield => {
43 is_xs => $use_xs,
44 },
45 multiple1 => {
46 },
47 multiple2 => {
48 },
49 lr1name => {
50 custom_field => 'lr1;field',
51 },
52 lr2name => {
53 custom_field => "lr2'field",
54 },
4d70ba11 55 fieldname_torture => {
79f0ccb0 56 custom_field => join ('', map { chr($_) } (0..255) ),
4d70ba11 57 is_xs => $use_xs,
58 },
8019c4d8 59};
60
61for my $name (sort keys %$test_accessors) {
62
ba8c183b 63 my $alias = "_${name}_accessor";
64 my $field = $test_accessors->{$name}{custom_field} || $name;
c26cc2b9 65
ba8c183b 66 can_ok($obj, $name, $alias);
c26cc2b9 67
ba8c183b 68 ok(!$obj->can($field))
69 if $field ne $name;
8019c4d8 70
ba8c183b 71 # set via name
72 is($obj->$name('a'), 'a');
73 is($obj->{$field}, 'a');
c26cc2b9 74
ba8c183b 75 # alias sets same as name
76 is($obj->$alias('b'), 'b');
77 is($obj->{$field}, 'b');
8ef9b3ff 78
ba8c183b 79 my $wo_regex = $test_accessors->{$name}{is_xs}
80 ? qr/Usage\:.+$name.*\(self, newvalue\)/
da609a46 81 : qr/$name(:?_accessor)?\Q' cannot access its value (write-only attribute of class AccessorGroupsWO)/
ba8c183b 82 ;
c26cc2b9 83
ba8c183b 84 # die on get via name/alias
395c3fdb 85 {
86 local $TODO = "Class::XSAccessor emits broken error messages on 5.10 or -DDEBUGGING 5.8"
87 if (
88 $test_accessors->{$name}{is_xs}
89 and
90 $] < '5.011'
91 and
92 ( $] > '5.009' or $Config{config_args} =~ /DEBUGGING/ )
93 );
94
95 throws_ok {
96 $obj->$name;
97 } $wo_regex;
98
99 throws_ok {
100 $obj->$alias;
101 } $wo_regex;
102 }
c26cc2b9 103};
8019c4d8 104
ed606987 105done_testing unless $::SUBTESTING;