The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
use Test::More 0.88;
use lib 't/lib';
# protect from dzil's own release environment
local $ENV{RELEASE_STATUS};
local $ENV{TRIAL};
# TestReleaseProvider sets 'unstable'
subtest "TestReleaseProvider" => sub {
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
'GatherDir',
'MetaJSON',
'TestReleaseProvider',
),
},
},
);
$tzil->build;
is($tzil->release_status, 'unstable', "release status set from provider");
ok($tzil->is_trial, "is_trial is true");
like($tzil->archive_filename, qr/-TRIAL/, "-TRIAL in archive filename");
my $json = $tzil->slurp_file('build/META.json');
my $meta = JSON::MaybeXS->new(utf8 => 0)->decode($json);
is( $meta->{release_status}, 'unstable', "release status set in META" );
};
for my $c ( qw/true false/ ) {
subtest "is_trial in dist.ini $c" => sub {
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
{ is_trial => $c eq 'true' ? '1' : '0' },
'GatherDir',
),
},
},
);
$tzil->build;
my $expect = $c eq 'true' ? 'testing' : 'stable';
my $is_trial = $expect eq 'testing' ? 1 : 0;
is($tzil->release_status, $expect, "release status set from is_trial");
if ( $is_trial ) {
is($tzil->is_trial, 1, "is_trial is true, represented as 1");
like($tzil->archive_filename, qr/-TRIAL/, "-TRIAL in archive filename");
}
else {
is($tzil->is_trial, 0, "is_trial is not true, represented as 0");
unlike($tzil->archive_filename, qr/-TRIAL/, "-TRIAL not in archive filename");
}
};
}
subtest "RELEASE_STATUS" => sub {
local $ENV{RELEASE_STATUS} = 'stable';
local $ENV{TRIAL} = 1;
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
'GatherDir',
'TestReleaseProvider',
),
},
},
);
$tzil->build;
is($tzil->release_status, 'stable', "release status set from environment");
ok(! $tzil->is_trial, "is_trial is not true");
unlike($tzil->archive_filename, qr/-TRIAL/, "-TRIAL not in archive filename");
};
subtest "TRIAL" => sub {
local $ENV{TRIAL} = 1;
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
'GatherDir',
'TestReleaseProvider',
),
},
},
);
$tzil->build;
is($tzil->release_status, 'testing', "release status set from environment");
ok($tzil->is_trial, "is_trial is true");
like($tzil->archive_filename, qr/-TRIAL/, "-TRIAL in archive filename");
};
subtest "too many providers" => sub {
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
{ is_trial => '1' }, 'GatherDir', 'TestReleaseProvider',
),
},
},
);
like(
exception { $tzil->build },
qr/attempted to set release status twice/,
"setting too many times is fatal",
);
};
subtest "from version (stable)" => sub {
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
{ version => 1.23 }, 'GatherDir',
),
},
},
);
$tzil->build;
is($tzil->release_status, 'stable', "release status set from version (stable)");
ok(!$tzil->is_trial, "is_trial is false");
unlike($tzil->archive_filename, qr/-TRIAL/, "no -TRIAL in archive filename");
};
subtest "from version (testing)" => sub {
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
add_files => {
'source/dist.ini' => simple_ini(
{ version => "1.23_45" }, 'GatherDir',
),
},
},
);
$tzil->build;
is($tzil->release_status, 'testing', "release status set from version (testing)");
ok($tzil->is_trial, "is_trial is true");
unlike($tzil->archive_filename, qr/-TRIAL/, "no -TRIAL in archive filename");
};
done_testing;