NAME
Test::Dist::Zilla::Release - Test your Dist::Zilla plugin in build action
VERSION
Version v0.4.4, released on 2016-12-28 19:48 UTC.
SYNOPSIS
# Let's test ArchiveRelease Dist::Zilla plugin:
use strict;
use warnings;
use Path::Tiny;
use Test::Deep qw{ cmp_deeply re };
use Test::More;
use Test::Routine;
use Test::Routine::Util;
with 'Test::Dist::Zilla::Release';
has options => ( # Options for the plugin.
isa => 'HashRef',
is => 'ro',
default => sub { {} }, # No options by default,
# but can be specified in test.
);
sub _build_plugins { # All the tests use the same set of plugins.
my ( $self ) = @_; # Let's define builder to avoid repetition.
return [ # See "plugins" in Test::Dist::Zilla.
'GatherDir',
'Manifest',
'MetaJSON',
[ 'ArchiveRelease' => $self->options ], # Pass options to the plugin.
];
};
sub _build_files { # Source file.
return { # See "files" in Test::Dist::Zilla.
'lib/Dummy.pm' => 'package Dummy; 1;',
};
};
sub _build_message_filter {
return sub {
map(
{ $_ =~ s{^\[.*?\] }{}; $_; } # Drop plugin name from messages.
grep( { $_ =~ qr{^\Q[ArchiveRelease]\E } } @_ )
# We are interested only in messages printed by the plugin.
);
};
};
test Archive => sub { # Test routine, is called after Release routine.
my ( $self ) = @_;
my $expected = $self->{ expected };
$self->skip_if_exception;
if ( not exists( $expected->{ archive } ) ) {
plan skip_all => 'no expected archive';
};
my $root = path( $self->tzil->root );
my $archive = $root->child( $expected->{ archive } );
ok( -f $archive, "archive $archive exists" );
# Archive content could also be tested...
};
run_me 'Default directory' => {
expected => {
messages => [
'Created directory releases',
re( qr{Moved to releases[/\\]Dummy-0\.003\.tar\.gz} ),
],
archive => 'releases/Dummy-0.003.tar.gz',
},
};
run_me 'Custom directory' => {
options => {
directory => '.archive',
},
expected => {
messages => [
'Created directory .archive',
re( qr{Moved to \.archive[/\\]Dummy-0\.003\.tar\.gz} ),
],
archive => '.archive/Dummy-0.003.tar.gz',
},
};
done_testing;
DESCRIPTION
This is a Test::Routine
-based role for testing Dist::Zilla
and its plugins. It creates dist.ini file with specified content in a temporary directory, populates the directory with specified files, runs "release" command with testing version of Dist::Zilla
in the temporary directory, checks actual exception and log messages do match expected ones, and let you write other checks specific for your plugin.
OBJECT METHODS
Release
This is a test routine. It runs dzil release
, and then:
If expected
exception
is specified (see "expected" in Test::Dist::Zilla) the routine checks release fails with the expected exception. If exception is not expected the routine checks release completes successfully.If expected
messages
are specified (see "expected" in Test::Dist::Zilla) the routine compares (withcmd_deeply
) actual messages and expected messages.
SEE ALSO
AUTHOR
Van de Bugger <van.de.bugger@gmail.com>
COPYRIGHT AND LICENSE
Copyright (C) 2015, 2016 Van de Bugger
License GPLv3+: The GNU General Public License version 3 or later <http://www.gnu.org/licenses/gpl-3.0.txt>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.