sub
mkconfig {
my
$root
=
shift
;
my
$t
= Builder->from_config( {
dist_root
=>
$root
}, {
add_files
=> {
'source/dist.ini'
=> simple_ini(
@_
) } } );
$t
->build;
return
$t
;
}
subtest
"BrokenPlugin"
=>
sub
{
my
$error
= exception { mkconfig(
'corpus/dist/DZT'
, [
'BrokenPlugin'
=> {} ] ) };
ok(
$error
,
"Failure occurs when a plugin is broken"
);
like(
$error
,
qr{Compilation failed in require}
,
"Exception is a compilation failure"
);
like(
$error
,
qr{This plugin is broken!}
,
"Exception reports the original problem"
);
};
subtest
"BrokenPlugin2"
=>
sub
{
my
$error
= exception { mkconfig(
'corpus/dist/DZT'
, [
'BrokenPlugin2'
=> {} ] ) };
ok(
$error
,
"Failure occurs when a plugin is broken"
);
like(
$error
,
qr{Compilation failed in require}
,
"Exception is a compilation failure"
);
like(
$error
,
qr{This plugin is broken!}
,
"Exception reports the original problem"
);
};
subtest
"BrokenPlugin3"
=>
sub
{
my
$error
= exception { mkconfig(
'corpus/dist/DZT'
, [
'BrokenPlugin3'
=> {} ] ) };
ok(
$error
,
"Failure occurs when a plugin is broken"
);
like(
$error
,
qr{Compilation failed}
,
"Exception explains that it couldn't load the plugin"
);
like(
$error
,
qr{Missing right curly or square bracket}
,
"Exception reports the original problem"
);
};
subtest
"BrokenPlugin4"
=>
sub
{
my
$error
= exception { mkconfig(
'corpus/dist/DZT'
, [
'BrokenPlugin4'
=> {} ] ) };
ok(
$error
,
"Failure occurs when a plugin is broken"
);
like(
$error
,
qr{Some(/|::)Package(/|::)That(/|::)Does(/|::)Not(/|::)Exist}
,
"Exception reports the original problem"
);
};
subtest
"Not::A::Plugin"
=>
sub
{
my
$error
= exception { mkconfig(
'corpus/dist/DZT'
, [
'Not::A::Plugin'
=> {} ] ) };
ok(
$error
,
"Failure occurs when a plugin is missing"
);
like(
$error
,
qr{Not::A::Plugin.*isn't installed}
,
"Exception explains that the plugin is not installed"
);
like(
$error
,
qr{dzil authordeps}
,
"Exception suggests using authordeps"
);
};
subtest
":version, good"
=>
sub
{
my
$error
= exception { mkconfig(
'corpus/dist/DZT'
, [
'Versioned'
=> {
':version'
=>
'1.0'
} ] ) };
ok(!
$error
,
'plugin satisfies requested version'
);
};
subtest
":version, bad"
=>
sub
{
my
$error
= exception { mkconfig(
'corpus/dist/DZT'
, [
'Versioned'
=> {
':version'
=>
'1.4'
} ] ) };
ok(
$error
,
'plugin does not satisfy requested version'
);
like(
$error
,
qr/\QDist::Zilla::Plugin::Versioned version (1.234) does not match required version: 1.4\E/
,
'exception tells us why'
);
};
done_testing;