# vim: set ts=2 sts=2 sw=2 expandtab smarttab:
use strict;
use warnings;
use Test::More;
use Dist::Zilla::Tester;
use lib 't/lib';
my $dir = 't/ini-test';
sub attr_hash {
my ($self) = @_;
return +{ map { $_ => $self->$_ } qw(arr not strung) };
}
{
my $zilla = Dist::Zilla::Tester->from_config(
{ dist_root => $dir },
{}
);
$zilla->build;
my $stash = $zilla->stash_named('%Test');
isa_ok($stash, 'Dist::Zilla::Stash::Test');
my $plug = $zilla->plugin_named('=Test::Plugin');
isa_ok($plug, 'Test::Plugin');
$stash->{_config}->{'Plugin|strung'} = 'higher';
is_deeply($stash->get_stashed_config($plug), {strung => 'higher'}, 'get_stashed_config');
$stash->merge_stashed_config($plug);
is_deeply(attr_hash($plug), {arr => ['empty array?'], strung => 'higher', not => 'not'}, 'merge_stashed_config');
@{$stash->{_config}}{qw(Plugin|strung Plugin-arr)} = qw(highest matey);
is_deeply($stash->get_stashed_config($plug), {strung => 'highest', arr => 'matey'}, 'get_stashed_config');
# from here we keep merging the config into the plugin:
$stash->merge_stashed_config($plug);
is_deeply(attr_hash($plug), {arr => ['empty array?', 'matey'], strung => 'highest', not => 'not'}, 'merge_stashed_config');
# no change
$stash->merge_stashed_config($plug, {stashed => {}});
is_deeply(attr_hash($plug), {arr => ['empty array?', 'matey'], strung => 'highest', not => 'not'}, 'merge_stashed_config with stashed');
$stash->merge_stashed_config($plug, {stashed => {arr => 'ahoy'}});
is_deeply(attr_hash($plug), {arr => ['empty array?', 'matey', 'ahoy'], strung => 'highest', not => 'not'}, 'merge_stashed_config with stashed');
$stash->merge_stashed_config($plug, {stashed => {strung => 'up'}});
is_deeply(attr_hash($plug), {arr => ['empty array?', 'matey', 'ahoy'], strung => 'up', not => 'not'}, 'merge_stashed_config with stashed');
$stash->merge_stashed_config($plug);
is_deeply(attr_hash($plug), {arr => ['empty array?', 'matey', 'ahoy', 'matey'], strung => 'highest', not => 'not'}, 'merge_stashed_config with stashed');
@{$stash->{_config}}{qw(Plugin-arr[2] Plugin-arr[1])} = qw(arr2 arr1);
$stash->merge_stashed_config($plug);
is_deeply
attr_hash($plug),
{arr => ['empty array?', 'matey', 'ahoy', 'matey', 'matey', 'arr1', 'arr2'], strung => 'highest', not => 'not'},
'merge_stashed_config with stashed array elements';
}
done_testing;