Make cref registry thread-safe and a ton of tests
[p5sagit/Class-Accessor-Grouped.git] / t / accessors_xs.t
CommitLineData
1ed25f9e 1my $has_threads;
2BEGIN { eval '
3 use 5.008001;
4 use threads;
5 use threads::shared;
6 $has_threads = 1;
7' }
8
9540f4e4 9use strict;
10use warnings;
1ed25f9e 11no warnings 'once';
9540f4e4 12use FindBin qw($Bin);
13use File::Spec::Functions;
cfed50f2 14use File::Spec::Unix (); # need this for %INC munging
9540f4e4 15use Test::More;
16use lib 't/lib';
17
8019c4d8 18BEGIN {
7a1ba8bd 19 plan skip_all => "Sub::Name not available"
20 unless eval { require Sub::Name };
21
ba8c183b 22 require Class::Accessor::Grouped;
7a1ba8bd 23
ba8c183b 24 my $xsa_ver = $Class::Accessor::Grouped::__minimum_xsa_version;
25 eval {
26 require Class::XSAccessor;
27 Class::XSAccessor->VERSION ($xsa_ver);
28 };
29 plan skip_all => "Class::XSAccessor >= $xsa_ver not available"
30 if $@;
8019c4d8 31}
9540f4e4 32
28344104 33# rerun the regular 3 tests under XSAccessor
ed606987 34our $SUBTESTING = 1;
8019c4d8 35$Class::Accessor::Grouped::USE_XS = 1;
cfed50f2 36
ed606987 37for my $tname (qw/accessors.t accessors_ro.t accessors_wo.t/) {
38
1ed25f9e 39 my $pass = 1;
40 share($pass) if $has_threads;
41
42 my $todo = sub {
43 note "\nTesting $tname with USE_XS (pass @{[ $pass++ ]})\n\n";
ed606987 44
cfed50f2 45 my $tfn = catfile($Bin, $tname);
46
f7cf6867 47 for (
5808b224 48 qw|AccessorGroups.pm AccessorGroups/BeenThereDoneThat.pm AccessorGroupsRO.pm AccessorGroupsSubclass.pm AccessorGroupsParent.pm AccessorGroupsWO.pm|,
cfed50f2 49 File::Spec::Unix->catfile ($tfn),
f7cf6867 50 ) {
51 delete $INC{$_};
52 no strict 'refs';
53 if (my ($mod) = $_ =~ /(.+)\.pm$/ ) {
54 %{"${mod}::"} = ();
55 }
56 }
cfed50f2 57
58 local $SIG{__WARN__} = sub { warn @_ unless $_[0] =~ /subroutine .+ redefined/i };
59
60 do($tfn);
1ed25f9e 61 };
62
63 if ($has_threads) {
64 threads->create(sub {
65 threads->create(sub {
66 $todo->() for (1,2) }
67 )->join;
68 $todo->() for (1,2);
69 })->join for (1,2)
70 }
71 else {
72 $todo->() for (1, 2);
ed606987 73 }
8019c4d8 74}
75
76done_testing;