1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
use 5.008004;
use Test2::V0 -no_srand => 1;
use Test::Alien::Build;
use Alien::Build::Plugin::Decode::DirListingFtpcopy;
use Path::Tiny;
use Alien::Build::Util qw( _dump );
subtest 'updates requires' => sub {
my $plugin = Alien::Build::Plugin::Decode::DirListingFtpcopy->new;
my $build = alienfile filename => 'corpus/blank/alienfile';
my $meta = $build->meta;
$plugin->init($meta);
is( $build->requires('share')->{'File::Listing::Ftpcopy'}, 0 );
is( $build->requires('share')->{'URI'}, 0 );
note _dump $meta;
};
subtest 'decode' => sub {
my $plugin = Alien::Build::Plugin::Decode::DirListingFtpcopy->new;
my $build = alienfile filename => 'corpus/blank/alienfile';
my $meta = $build->meta;
$plugin->init($meta);
eval { $build->load_requires('share') };
skip_all 'test requires File::Listing::Ftpcopy and URI' if $@;
foreach my $file (path('corpus/dir')->children(qr/\.list$/))
{
subtest "parse $file" => sub {
my $res1 = {
type => 'dir_listing',
base => "ftp://example.test/foo/bar/",
content => $file->slurp,
};
my $res2 = $build->decode($res1);
is(
$res2,
hash {
field type => 'list';
field list => array {
foreach my $filename (qw( foo-1.00 foo-1.00.tar foo-1.00.tar.Z foo-1.00.tar.bz2 foo-1.00.tar.gz foo-1.00.tar.xz foo-1.00.zip))
{
item hash {
field filename => $filename;
field url => match qr{\Q$filename\E};
};
}
};
},
);
note "url = $_" for map { $_->{url} } @{ $res2->{list} }
};
}
};
done_testing;
|