our
@EXPORT_OK
=
qw(
all_po_files
all_perl_files
all_perl_modules
test_get_po_dirs
test_get_perl_dirs
test_get_data_path
test_get_temp_path
test_needs_author
test_needs_module
test_needs_command
test_needs_openpgp_backend
test_needs_srcdir_switch
test_neutralize_checksums
)
;
our
%EXPORT_TAGS
= (
needs
=> [
qw(
test_needs_author
test_needs_module
test_needs_command
test_needs_openpgp_backend
test_needs_srcdir_switch
)
],
paths
=> [
qw(
all_po_files
all_perl_files
all_perl_modules
test_get_po_dirs
test_get_perl_dirs
test_get_data_path
test_get_temp_path
)
],
);
my
$test_mode
;
BEGIN {
$test_mode
=
$ENV
{DPKG_TEST_MODE} //
'dpkg'
;
}
sub
_test_get_caller_dir
{
my
(
undef
,
$path
,
undef
) =
caller
1;
$path
=~ s{\.t$}{};
$path
=~ s{^\./}{};
return
$path
;
}
sub
test_get_data_path
{
my
$path
=
shift
;
if
(
defined
$path
) {
my
$srcdir
;
$srcdir
=
$ENV
{srcdir}
if
$test_mode
ne
'cpan'
;
$srcdir
||=
'.'
;
return
"$srcdir/$path"
;
}
else
{
return
_test_get_caller_dir();
}
}
sub
test_get_temp_path
{
my
$path
=
shift
// _test_get_caller_dir();
$path
=
't.tmp/'
. fileparse(
$path
);
rmtree(
$path
);
make_path(
$path
);
return
$path
;
}
sub
test_get_po_dirs
{
if
(
$test_mode
eq
'cpan'
) {
return
qw()
;
}
else
{
return
qw(po scripts/po dselect/po man/po)
;
}
}
sub
test_get_perl_dirs
{
if
(
$test_mode
eq
'cpan'
) {
return
qw(t lib)
;
}
else
{
return
qw(t lib utils/t scripts dselect)
;
}
}
sub
_test_get_files
{
my
(
$filter
,
$dirs
) =
@_
;
my
@files
;
my
$scan_files
=
sub
{
push
@files
,
$File::Find::name
if
m/
$filter
/;
};
find(
$scan_files
, @{
$dirs
});
return
@files
;
}
sub
all_po_files
{
return
_test_get_files(
qr/\.(?:po|pot)$/
, [ test_get_po_dirs() ]);
}
sub
all_perl_files
{
return
_test_get_files(
qr/\.(?:PL|pl|pm|t)$/
, [ test_get_perl_dirs() ]);
}
sub
all_perl_modules
{
return
_test_get_files(
qr/\.pm$/
, [ test_get_perl_dirs() ]);
}
sub
test_needs_author
{
if
(not
$ENV
{AUTHOR_TESTING}) {
plan
skip_all
=>
'author test'
;
}
}
sub
test_needs_module
{
my
(
$module
,
@imports
) =
@_
;
my
(
$package
) =
caller
;
my
$version
=
''
;
if
(
@imports
>= 1 and version::is_lax(
$imports
[0])) {
$version
=
shift
@imports
;
}
eval
qq{
package $package;
use $module $version \@imports;
1;
}
or
do
{
plan
skip_all
=>
"requires module $module $version"
;
}
}
sub
test_needs_command
{
my
$command
=
shift
;
if
(not can_run(
$command
)) {
plan
skip_all
=>
"requires command $command"
;
}
}
sub
test_needs_openpgp_backend
{
my
@backends
=
qw(
gpg
sq
sqop
pgpainless-cli
)
;
my
@cmds
=
grep
{ can_run(
$_
) }
@backends
;
if
(
@cmds
== 0) {
plan
skip_all
=>
"requires >= 1 openpgp command: @backends"
;
}
return
@cmds
;
}
sub
test_needs_srcdir_switch
{
if
(
defined
$ENV
{srcdir}) {
chdir
$ENV
{srcdir} or BAIL_OUT(
"cannot chdir to source directory: $!"
);
}
}
sub
test_neutralize_checksums
{
my
$filename
=
shift
;
my
$filenamenew
=
"$filename.new"
;
my
$cwd
= getcwd();
open
my
$fhnew
,
'>'
,
$filenamenew
or
die
"cannot open new $filenamenew in $cwd: $!"
;
open
my
$fh
,
'<'
,
$filename
or
die
"cannot open $filename in $cwd: $!"
;
while
(<
$fh
>) {
s/^ ([0-9a-f]{32,}) [1-9][0-9]* /
q{ }
. $1 =~
tr
{0-9a-f}{0}r .
q{ 0 }
/e;
print
{
$fhnew
}
$_
;
}
close
$fh
or
die
"cannot close $filename"
;
close
$fhnew
or
die
"cannot close $filenamenew"
;
rename
$filenamenew
,
$filename
or
die
"cannot rename $filenamenew to $filename"
;
}
1;