use
Test::More
tests
=> 2 + (
$ENV
{AUTHOR_TESTING} ? 1 : 0);
my
@module_files
= (
'App/count.pm'
);
my
@scripts
= (
'bin/count'
);
my
@warnings
;
for
my
$lib
(
@module_files
)
{
open
my
$stdin
,
'<'
, File::Spec->devnull or
die
"can't open devnull: $!"
;
my
$stderr
= IO::Handle->new;
my
$pid
= open3(
$stdin
,
'>&STDERR'
,
$stderr
, $^X,
'-Mblib'
,
'-e'
,
"require q[$lib]"
);
binmode
$stderr
,
':crlf'
if
$^O eq
'MSWin32'
;
my
@_warnings
= <
$stderr
>;
waitpid
(
$pid
, 0);
is($? >> 8, 0,
"$lib loaded ok"
);
if
(
@_warnings
)
{
warn
@_warnings
;
push
@warnings
,
@_warnings
;
}
}
foreach
my
$file
(
@scripts
)
{ SKIP: {
open
my
$fh
,
'<'
,
$file
or
warn
(
"Unable to open $file: $!"
),
next
;
my
$line
= <
$fh
>;
close
$fh
and skip(
"$file isn't perl"
, 1)
unless
$line
=~ /^
my
@flags
= $1 ?
split
(/\s+/, $1) : ();
open
my
$stdin
,
'<'
, File::Spec->devnull or
die
"can't open devnull: $!"
;
my
$stderr
= IO::Handle->new;
my
$pid
= open3(
$stdin
,
'>&STDERR'
,
$stderr
, $^X,
'-Mblib'
,
@flags
,
'-c'
,
$file
);
binmode
$stderr
,
':crlf'
if
$^O eq
'MSWin32'
;
my
@_warnings
= <
$stderr
>;
waitpid
(
$pid
, 0);
is($? >> 8, 0,
"$file compiled ok"
);
if
(
@_warnings
=
grep
{ !/\bsyntax OK$/ }
grep
{
chomp
;
$_
ne (File::Spec->splitpath(
$file
))[2] }
@_warnings
)
{
warn
map
{ _show_whitespace(
$_
) }
@_warnings
;
push
@warnings
,
@_warnings
;
}
} }
sub
_show_whitespace
{
my
$string
=
shift
;
$string
=~ s/\012/[\\012]/g;
$string
=~ s/\015/[\\015]/g;
$string
=~ s/\t/[\\t]/g;
$string
=~ s/ /[\\s]/g;
return
$string
;
}
is(
scalar
(
@warnings
), 0,
'no warnings found'
)
if
$ENV
{AUTHOR_TESTING};