our
$VERSION
=
'0.12'
;
our
@ISA
=
qw/Exporter/
;
our
@EXPORT
=
qw/all_uses_ok/
;
my
$RULE
=
qr{^lib/(.+)\.pm$}
;
sub
import
{
shift
->export_to_level(1);
shift
if
@_
&&
$_
[0] eq
'under'
;
my
@dirs
= (
'lib'
,
@_
);
my
%seen
;
@dirs
=
grep
{ !
$seen
{
$_
}++ }
map
{ s|/+$||;
$_
}
@dirs
;
$RULE
=
'^(?:'
.(
join
'|'
,
@dirs
).
')/(.+)\.pm\s*$'
;
unshift
@INC
,
@dirs
;
}
sub
_get_module_list {
shift
if
@_
&&
$_
[0] eq
'except'
;
my
@exceptions
=
@_
;
my
@modules
;
my
$manifest
= maniread();
READ:
foreach
my
$file
(
keys
%{
$manifest
}) {
if
(
my
(
$module
) =
$file
=~ m|
$RULE
|) {
$module
=~ s|/|::|g;
foreach
my
$rule
(
@exceptions
) {
next
READ
if
$module
eq
$rule
||
$module
=~ /
$rule
/;
}
push
@modules
,
$module
;
}
}
return
@modules
;
}
sub
_planned { Test::More->builder->{Have_Plan}; }
sub
all_uses_ok {
unless
(-f
'MANIFEST'
) {
plan
skip_all
=>
'no MANIFEST'
unless
_planned();
return
;
}
my
@modules
= _get_module_list(
@_
);
unless
(
@modules
) {
plan
skip_all
=>
'no .pm files are found under the lib directory'
unless
_planned();
return
;
}
plan
tests
=>
scalar
@modules
unless
_planned();
my
@failed
;
foreach
my
$module
(
@modules
) {
use_ok(
$module
) or
push
@failed
,
$module
;
}
BAIL_OUT(
'failed: '
. (
join
','
,
@failed
) )
if
@failed
;
}
1;