use strict;
use warnings;
-# FIXME This is a crock of shit, needs to go away
-# currently here to work around https://rt.cpan.org/Ticket/Display.html?id=74151
-# kill with fire when PS::XS / RT#74151 is *finally* fixed
-BEGIN {
- my $PS_provider;
-
- if ( "$]" < 5.010 ) {
- require Package::Stash::PP;
- $PS_provider = 'Package::Stash::PP';
- }
- else {
- require Package::Stash;
- $PS_provider = 'Package::Stash';
- }
- eval <<"EOS" or die $@;
-
-sub stash_for (\$) {
- $PS_provider->new(\$_[0]);
-}
-1;
-EOS
-}
-
use Test::More;
use DBICTest;
use File::Find;
-use File::Spec;
-use B qw/svref_2object/;
+use DBIx::Class::_Util qw( get_subname describe_class_methods );
# makes sure we can load at least something
use DBIx::Class;
use DBIx::Class::Carp;
my @modules = grep {
- my ($mod) = $_ =~ /(.+)/;
+ my $mod = $_;
# not all modules are loadable at all times
do {
# utility classes, not part of the inheritance chain
'DBIx::Class::Optional::Dependencies',
'DBIx::Class::ResultSource::RowParser::Util',
+ 'DBIx::Class::ResultSource::FromSpec::Util',
+ 'DBIx::Class::SQLMaker::Util',
'DBIx::Class::_Util',
) };
SKIP: {
skip "$mod exempt from namespace checks",1 if $skip_idx->{$mod};
- my %all_method_like = (map
- { %{stash_for($_)->get_all_symbols('CODE')} }
- (reverse @{mro::get_linear_isa($mod)})
- );
+ my %all_method_like =
+ map
+ { $_->[0]{name} => $mod->can( $_->[0]{name} ) }
+ grep
+ { $_->[0]{via_class} ne 'UNIVERSAL' }
+ values %{ describe_class_methods($mod)->{methods} }
+ ;
my %parents = map { $_ => 1 } @{mro::get_linear_isa($mod)};
# overload is a funky thing - it is not cleaned, and its imports are named funny
next if $name =~ /^\(/;
- my $gv = svref_2object($all_method_like{$name})->GV;
- my $origin = $gv->STASH->NAME;
+ my ($origin, $cv_name) = get_subname($all_method_like{$name});
- is ($gv->NAME, $name, "Properly named $name method at $origin" . ($origin eq $mod
+ is ($cv_name, $name, "Properly named $name method at $origin" . ($origin eq $mod
? ''
: " (inherited by $mod)"
));
- next if $seen->{"${origin}:${name}"}++;
+ next if $seen->{"${origin}::${name}"}++;
if ($origin eq $mod) {
pass ("$name is a native $mod method");
}
# some common import names (these should never ever be methods)
- for my $f (qw/carp carp_once carp_unique croak confess cluck try catch finally/) {
+ for my $f (qw(
+ carp carp_once carp_unique croak confess cluck
+ try catch finally dbic_internal_try dbic_internal_catch
+ )) {
if ($mod->can($f)) {
my $via;
for (reverse @{mro::get_linear_isa($mod)} ) {
$_ =~ m|lib/DBIx/Class/_TempExtlib| and return;
s/\.pm$// or return;
s/^ (?: lib | blib . (?:lib|arch) ) . //x;
- push @modules, join ('::', File::Spec->splitdir($_));
+ s/[\/\\]/::/g;
+ push @modules, ( $_ =~ /(.+)/ );
},
no_chdir => 1,
}, (