X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class.git;a=blobdiff_plain;f=t%2F03podcoverage.t;h=88af1c46218ab1ba9386866a683f80631085ee8b;hp=a2eaa475e9808d7e428e6b86353c9d21a71084dd;hb=f4d7449cc027a63e625347d644cd7fc7d9562443;hpb=517ba890c38d5c2222903653a2a4aaf26bd8dbf6 diff --git a/t/03podcoverage.t b/t/03podcoverage.t index a2eaa47..88af1c4 100644 --- a/t/03podcoverage.t +++ b/t/03podcoverage.t @@ -1,20 +1,39 @@ +use warnings; +use strict; + use Test::More; +use List::Util (); +use lib qw(t/lib); +use DBICTest; -eval "use Pod::Coverage 0.19"; -plan skip_all => 'Pod::Coverage 0.19 required' if $@; -eval "use Test::Pod::Coverage 1.04"; -plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@; +my @MODULES = ( + 'Test::Pod::Coverage 1.08', + 'Pod::Coverage 0.20', +); -plan skip_all => 'set TEST_POD to enable this test' - unless ($ENV{TEST_POD} || -e 'MANIFEST.SKIP'); +# Don't run tests for installs +unless ( DBICTest::AuthorCheck->is_author || $ENV{AUTOMATED_TESTING} || $ENV{RELEASE_TESTING} ) { + plan( skip_all => "Author tests not required for installation" ); +} -my @modules = sort { $a cmp $b } (Test::Pod::Coverage::all_modules()); -plan tests => scalar(@modules); +# Load the testing modules +foreach my $MODULE ( @MODULES ) { + eval "use $MODULE"; + if ( $@ ) { + $ENV{RELEASE_TESTING} + ? die( "Failed to load required release-testing module $MODULE" ) + : plan( skip_all => "$MODULE not available for testing" ); + } +} # Since this is about checking documentation, a little documentation -# of what this is doing might be in order... +# of what this is doing might be in order. # The exceptions structure below is a hash keyed by the module -# name. The value for each is a hash, which contains one or more +# name. Any * in a name is treated like a wildcard and will behave +# as expected. Modules are matched by longest string first, so +# A::B::C will match even if there is A::B* + +# The value for each is a hash, which contains one or more # (although currently more than one makes no sense) of the following # things:- # skip => a true value means this module is not checked @@ -60,101 +79,77 @@ my $exceptions = { setup_connection_class /] }, - 'DBIx::Class::Storage::DBI::Sybase' => { - ignore => [qw/ - should_quote_data_type + + 'DBIx::Class::Schema::Versioned' => { + ignore => [ qw/ + connection /] }, - 'DBIx::Class::CDBICompat::AccessorMapping' => { skip => 1 }, - 'DBIx::Class::CDBICompat::AbstractSearch' => { - ignore => [qw(search_where)] - }, - 'DBIx::Class::CDBICompat::AttributeAPI' => { skip => 1 }, - 'DBIx::Class::CDBICompat::AutoUpdate' => { skip => 1 }, - 'DBIx::Class::CDBICompat::ColumnsAsHash' => { - ignore => [qw(inflate_result new update)] - }, - 'DBIx::Class::CDBICompat::ColumnCase' => { skip => 1 }, - 'DBIx::Class::CDBICompat::ColumnGroups' => { skip => 1 }, - 'DBIx::Class::CDBICompat::Constraints' => { skip => 1 }, - 'DBIx::Class::CDBICompat::Constructor' => { skip => 1 }, - 'DBIx::Class::CDBICompat::Copy' => { - ignore => [qw(copy)] + + 'DBIx::Class::Storage::DBI::Replicated*' => { + ignore => [ qw/ + connect_call_do_sql + disconnect_call_do_sql + /] }, - 'DBIx::Class::CDBICompat::DestroyWarning' => { skip => 1 }, - 'DBIx::Class::CDBICompat::GetSet' => { skip => 1 }, - 'DBIx::Class::CDBICompat::HasA' => { skip => 1 }, - 'DBIx::Class::CDBICompat::HasMany' => { skip => 1 }, - 'DBIx::Class::CDBICompat::ImaDBI' => { skip => 1 }, - 'DBIx::Class::CDBICompat::LazyLoading' => { skip => 1 }, - 'DBIx::Class::CDBICompat::LiveObjectIndex' => { skip => 1 }, - 'DBIx::Class::CDBICompat::MightHave' => { skip => 1 }, - 'DBIx::Class::CDBICompat::NoObjectIndex' => { skip => 1 }, - 'DBIx::Class::CDBICompat::Pager' => { skip => 1 }, - 'DBIx::Class::CDBICompat::ReadOnly' => { skip => 1 }, - 'DBIx::Class::CDBICompat::Relationship' => { skip => 1 }, - 'DBIx::Class::CDBICompat::Relationships' => { skip => 1 }, - 'DBIx::Class::CDBICompat::Retrieve' => { skip => 1 }, - 'DBIx::Class::CDBICompat::SQLTransformer' => { skip => 1 }, - 'DBIx::Class::CDBICompat::Stringify' => { skip => 1 }, - 'DBIx::Class::CDBICompat::TempColumns' => { skip => 1 }, - 'DBIx::Class::CDBICompat::Triggers' => { skip => 1 }, - 'DBIx::Class::ClassResolver::PassThrough' => { skip => 1 }, - 'DBIx::Class::Componentised' => { skip => 1 }, - 'DBIx::Class::Relationship::Accessor' => { skip => 1 }, - 'DBIx::Class::Relationship::BelongsTo' => { skip => 1 }, - 'DBIx::Class::Relationship::CascadeActions' => { skip => 1 }, - 'DBIx::Class::Relationship::HasMany' => { skip => 1 }, - 'DBIx::Class::Relationship::HasOne' => { skip => 1 }, - 'DBIx::Class::Relationship::Helpers' => { skip => 1 }, - 'DBIx::Class::Relationship::ManyToMany' => { skip => 1 }, - 'DBIx::Class::Relationship::ProxyMethods' => { skip => 1 }, - 'DBIx::Class::ResultSetProxy' => { skip => 1 }, - 'DBIx::Class::ResultSetManager' => { skip => 1 }, - 'DBIx::Class::ResultSourceProxy' => { skip => 1 }, - 'DBIx::Class::Storage::Statistics' => { skip => 1 }, - 'DBIx::Class::Storage::DBI' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::Replicated::Types' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::DB2' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::MSSQL' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::Sybase::MSSQL' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::ODBC400' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::ODBC::DB2_400_SQL' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::Oracle' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::Pg' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::SQLite' => { skip => 1 }, - 'DBIx::Class::Storage::DBI::mysql' => { skip => 1 }, - 'DBIx::Class::SQLAHacks' => { skip => 1 }, - 'DBIx::Class::SQLAHacks::MySQL' => { skip => 1 }, - 'DBIx::Class::SQLAHacks::MSSQL' => { skip => 1 }, - 'SQL::Translator::Parser::DBIx::Class' => { skip => 1 }, - 'SQL::Translator::Producer::DBIx::Class::File' => { skip => 1 }, -# skipped because the synopsis covers it clearly + 'DBIx::Class::Admin::Types' => { skip => 1 }, + 'DBIx::Class::ClassResolver::PassThrough' => { skip => 1 }, + 'DBIx::Class::Componentised' => { skip => 1 }, + 'DBIx::Class::Relationship::*' => { skip => 1 }, + 'DBIx::Class::ResultSetProxy' => { skip => 1 }, + 'DBIx::Class::ResultSourceProxy' => { skip => 1 }, + 'DBIx::Class::Storage::Statistics' => { skip => 1 }, + 'DBIx::Class::Storage::DBI::Replicated::Types' => { skip => 1 }, - 'DBIx::Class::InflateColumn::File' => { skip => 1 }, +# test some specific components whose parents are exempt below + 'DBIx::Class::Relationship::Base' => {}, -# skip connection since it's just an override +# internals + 'DBIx::Class::SQLAHacks*' => { skip => 1 }, + 'DBIx::Class::Storage::DBI*' => { skip => 1 }, + 'SQL::Translator::*' => { skip => 1 }, - 'DBIx::Class::Schema::Versioned' => { ignore => [ qw(connection) ] }, +# deprecated / backcompat stuff + 'DBIx::Class::CDBICompat*' => { skip => 1 }, + 'DBIx::Class::ResultSetManager' => { skip => 1 }, + 'DBIx::Class::DB' => { skip => 1 }, -# don't bother since it's heavily deprecated - 'DBIx::Class::ResultSetManager' => { skip => 1 }, +# skipped because the synopsis covers it clearly + 'DBIx::Class::InflateColumn::File' => { skip => 1 }, }; +my $ex_lookup = {}; +for my $string (keys %$exceptions) { + my $ex = $exceptions->{$string}; + $string =~ s/\*/'.*?'/ge; + my $re = qr/^$string$/; + $ex_lookup->{$re} = $ex; +} + +my @modules = sort { $a cmp $b } (Test::Pod::Coverage::all_modules()); + foreach my $module (@modules) { - SKIP: - { - skip "$module - No real methods", 1 if ($exceptions->{$module}{skip}); - - # build parms up from ignore list - my $parms = {}; - $parms->{trustme} = - [ map { qr/^$_$/ } @{ $exceptions->{$module}{ignore} } ] - if exists($exceptions->{$module}{ignore}); - - # run the test with the potentially modified parm set - pod_coverage_ok($module, $parms, "$module POD coverage"); - } + SKIP: { + + my ($match) = List::Util::first + { $module =~ $_ } + (sort { length $b <=> length $a || $b cmp $a } (keys %$ex_lookup) ) + ; + + my $ex = $ex_lookup->{$match} if $match; + + skip ("$module exempt", 1) if ($ex->{skip}); + + # build parms up from ignore list + my $parms = {}; + $parms->{trustme} = + [ map { qr/^$_$/ } @{ $ex->{ignore} } ] + if exists($ex->{ignore}); + + # run the test with the potentially modified parm set + pod_coverage_ok($module, $parms, "$module POD coverage"); + } } + +done_testing;