#!/usr/bin/perl
sub
not_in_file_ok {
my
(
$filename
,
%regex
) =
@_
;
open
(
my
$fh
,
'<'
,
$filename
)
or
die
"couldn't open $filename for reading: $!"
;
my
%violated
;
while
(
my
$line
= <
$fh
>) {
while
(
my
(
$desc
,
$regex
) =
each
%regex
) {
if
(
$line
=~
$regex
) {
push
@{
$violated
{
$desc
}||=[]}, $.;
}
}
}
for
my
$test
(
keys
%regex
) {
ok !
$violated
{
$test
},
$test
or diag
"$test appears on lines @{$violated{$test}}"
;
}
}
sub
module_boilerplate_ok {
my
(
$module
) =
@_
;
subtest
$module
=>
sub
{
not_in_file_ok(
$module
=>
'the great new $MODULENAME'
=>
qr/ - The great new /
,
'boilerplate description'
=>
qr/Quick summary of what the module/
,
'stub function definition'
=>
qr/function[12]/
,
'module description'
=>
qr/One-line description of module/
,
'description'
=>
qr/A full description of the module/
,
'subs / methods'
=>
qr/section listing the public components/
,
'diagnostics'
=>
qr/A list of every error and warning message/
,
'config and environment'
=>
qr/A full explanation of any configuration/
,
'dependencies'
=>
qr/A list of all of the other modules that this module relies upon/
,
'incompatible'
=>
qr/any modules that this module cannot be used/
,
'bugs and limitations'
=>
qr/A list of known problems/
,
'contact details'
=>
qr/<contact address>/
,
);
};
}
subtest
'README'
=>
sub
{
not_in_file_ok((-f
'README'
?
'README'
:
'README.pod'
) =>
"The README is used..."
=>
qr/The README is used/
,
"'version information here'"
=>
qr/to provide version information/
,
);
};
subtest
'Changes'
=>
sub
{
not_in_file_ok(
Changes
=>
"placeholder date/time"
=>
qr(Date/time)
);
};
module_boilerplate_ok(
'bin/bb-cli'
);
module_boilerplate_ok(
'lib/App/BitBucketCli.pm'
);
module_boilerplate_ok(
'lib/App/BitBucketCli/Branch.pm'
);
module_boilerplate_ok(
'lib/App/BitBucketCli/Base.pm'
);
module_boilerplate_ok(
'lib/App/BitBucketCli/Core.pm'
);
module_boilerplate_ok(
'lib/App/BitBucketCli/Link.pm'
);
module_boilerplate_ok(
'lib/App/BitBucketCli/Links.pm'
);
module_boilerplate_ok(
'lib/App/BitBucketCli/Project.pm'
);
module_boilerplate_ok(
'lib/App/BitBucketCli/PullRequest.pm'
);
module_boilerplate_ok(
'lib/App/BitBucketCli/Repository.pm'
);
done_testing();