Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

#!perl
use strict;
use Pinto::Util qw(:all);
use Pinto::Constants qw(:all);
#-----------------------------------------------------------------------------
subtest 'validate globals' => sub {
isnt( current_username, '__ME__', 'Actual user' );
local $Pinto::Globals::current_username = '__ME__';
is( current_username, '__ME__', 'Override user' );
isnt( current_utc_time, -9, 'Actual time' );
local $Pinto::Globals::current_utc_time = -9;
is( current_utc_time, -9, 'Override time' );
isnt( current_time_offset, -9, 'Actual time offset' );
local $Pinto::Globals::current_time_offset = -9;
is( current_time_offset, -9, 'Override time offset' );
isnt( is_interactive, -9, 'Actual interactive state' );
local $Pinto::Globals::is_interactive = -9;
is( is_interactive, -9, 'Override interactive state' );
local $Pinto::Globals::current_username = 'foo.bar-baz';
is( current_author_id, 'FOOBARBAZ', 'Convert username to author id' );
};
#-----------------------------------------------------------------------------
subtest 'validate author path' => sub {
my $author = 'joseph';
my $expect = dir(qw(J JO JOSEPH));
is( Pinto::Util::author_dir($author), $expect, 'Author dir path for joseph' );
};
#-----------------------------------------------------------------------------
subtest 'validate author path (short)' => sub {
my $author = 'JO';
my $expect = dir(qw(J JO JO));
is( Pinto::Util::author_dir($author), $expect, 'Author dir path for JO' );
};
#-----------------------------------------------------------------------------
subtest 'validate author path with base' => sub {
my $author = 'Mike';
my @base = qw(a b);
my $expect = dir(qw(a b M MI MIKE));
is( Pinto::Util::author_dir( @base, $author ), $expect, 'Author dir with base' );
};
#-----------------------------------------------------------------------------
subtest 'find distribution' => sub {
my @cases = qw( A/AU/AUTHOR/Dist-1.0.tar.gz
A/AU/AUTHOR/subdir/Dist-1.0.tar.gz
whatever/authors/id/A/AU/AUTHOR/subdir/Dist-1.0.tar.gz
my $expect_auth = 'AUTHOR';
my $expect_archive = 'Dist-1.0.tar.gz';
for my $case (@cases) {
my ( $got_auth, $got_archive ) = Pinto::Util::parse_dist_path($case);
is( $got_auth, $expect_auth, "Parsed author from $case" );
is( $got_archive, $expect_archive, "Parsed archive from $case" );
}
};
#-----------------------------------------------------------------------------
subtest 'title_text()' => sub {
is( title_text("foo"), 'foo' );
is( title_text("foo\nbar"), 'foo' );
is( title_text("\nbar"), '' );
};
#-----------------------------------------------------------------------------
subtest 'body_text()' => sub {
is( body_text("foo"), '' );
is( body_text("foo\n"), '' );
is( body_text("foo\nbar\n"), "bar\n" );
};
#-----------------------------------------------------------------------------
subtest 'indent_text()' => sub {
is( indent_text("foo"), "foo" );
is( indent_text( "foo\nbar", 2 ), " foo\n bar" );
is( indent_text( "\nfoo\n\n", 2 ), " \n foo\n \n" );
};
#-----------------------------------------------------------------------------
subtest 'truncate_text()' => sub {
is( truncate_text( "foobar", 3 ), "foo..." );
is( truncate_text( "foobar", 6 ), "foobar" );
is( truncate_text( "foobar", 0 ), "foobar" );
is( truncate_text( "foobar", 3, '-' ), "foo-" );
};
#-----------------------------------------------------------------------------
subtest 'is_blank()' => sub {
is( is_blank(), 1 );
is( is_blank(""), 1 );
is( is_blank(" \n\t\r\f "), 1 );
is( is_blank("foo"), 0 );
};
#-----------------------------------------------------------------------------
subtest 'diff styles' => sub {
local $ENV{PINTO_DIFF_STYLE} = '';
is default_diff_style, $PINTO_DIFF_STYLE_CONCISE,
'Got default diff style';
local $ENV{PINTO_DIFF_STYLE} = 'detailed';
is default_diff_style, $PINTO_DIFF_STYLE_DETAILED,
'Got default diff style from ENV';
local $ENV{PINTO_DIFF_STYLE} = 'pretty';
throws_ok { default_diff_style() } qr/\QPINTO_DIFF_STYLE (pretty) is invalid\E/,
'Invalid default diff style from ENV';
};
#-----------------------------------------------------------------------------
done_testing;