package Test::LoadAllModules; use strict; use warnings; use Module::Pluggable::Object; use List::MoreUtils qw(any); use Test::More (); our $VERSION = '0.022'; use Exporter; our @ISA = qw/Exporter/; our @EXPORT = qw/all_uses_ok/; sub all_uses_ok { my %param = @_; my $search_path = $param{search_path}; unless ($search_path) { Test::More::plan skip_all => 'no search path'; exit; } Test::More::plan('no_plan'); my @exceptions = @{ $param{except} || [] }; my @lib = @{ $param{lib} || [ 'lib' ] }; foreach my $class ( grep { !is_excluded( $_, @exceptions ) } sort do { local @INC = @lib; my $finder = Module::Pluggable::Object->new( search_path => $search_path ); ( $search_path, $finder->plugins ); } ) { Test::More::use_ok($class); } } sub is_excluded { my ( $module, @exceptions ) = @_; any { $module eq $_ || $module =~ /$_/ } @exceptions; } 1; __END__ =head1 NAME Test::LoadAllModules - do use_ok for modules in search path =head1 SYNOPSIS # basic use Test::LoadAllModules; BEGIN { all_uses_ok(search_path => 'MyApp'); } # exclude some classes use Test::LoadAllModules; BEGIN { all_uses_ok( search_path => 'MyApp', except => [ 'MyApp::Role', qr/MyApp::Exclude::.*/, ] ); } # set @INC with lib parm use Test::LoadAllModules; BEGIN { all_uses_ok( search_path => 'MyApp', lib => [ 'lib', 't/lib', ] ); } =head1 DESCRIPTION Test::LoadAllModules do use_ok for modules in search_path. =head1 EXPORTED FUNCTIONS =head2 all_uses_ok Does Test::More's use_ok() for every modules found in search path. =head1 AUTHOR Takatoshi Kitano Ekitano.tk@gmail.comE =head1 SEE ALSO L =head1 LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut