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

#!perl
use strict;
#------------------------------------------------------------------------------
subtest string_constructor => sub {
my $target = Pinto::Target::Distribution->new('Author/subdir/Foo-1.2.tar.gz');
is $target->author, 'AUTHOR', 'author attribute';
is $target->archive, 'Foo-1.2.tar.gz', 'archive attribute';
is $target->path, 'A/AU/AUTHOR/subdir/Foo-1.2.tar.gz', 'Constructed path';
is "$target", 'AUTHOR/subdir/Foo-1.2.tar.gz', 'Stringified object';
};
#------------------------------------------------------------------------------
subtest hash_constructor => sub {
my $target = Pinto::Target::Distribution->new(
author => 'Author',
subdirs => [qw(foo bar)],
archive => 'Foo-1.2.tar.gz'
);
is $target->author, 'AUTHOR', 'author attribute';
is $target->archive, 'Foo-1.2.tar.gz', 'archive attribute';
is $target->path, 'A/AU/AUTHOR/foo/bar/Foo-1.2.tar.gz', 'Constructed path';
is "$target", 'AUTHOR/foo/bar/Foo-1.2.tar.gz', 'Stringified object';
};
#------------------------------------------------------------------------------
subtest invalid_constructor => sub {
throws_ok { Pinto::Target::Distribution->new('AUTHOR/') } qr{Invalid distribution target}, 'Invalid dist target';
throws_ok { Pinto::Target::Distribution->new('/Foo-1.2.tar.gz') } qr{Invalid distribution target}, 'Invalid dist target';
throws_ok { Pinto::Target::Distribution->new('Foo-1.2.tar.gz') } qr{Invalid distribution target}, 'Invalid dist target';
throws_ok { Pinto::Target::Distribution->new('') } qr{Invalid distribution target}, 'Empty dist target';
};
#------------------------------------------------------------------------------
done_testing;