use strict; use warnings; use Test::More 0.88; use Test::Fatal; use lib 't/lib'; use Test::DZil; use JSON::MaybeXS; # 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;