From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

#!perl
use strict;
use lib 't/lib';
use Pinto::Constants qw(:diff);
#------------------------------------------------------------------------------
my $t = Pinto::Tester->new;
$t->populate('AUTHOR/Dist-1 = PkgA~1; PkgB~1');
$t->populate('AUTHOR/Dist-2 = PkgB~2; PkgC~2');
#------------------------------------------------------------------------------
subtest 'detailed diff' => sub {
local $ENV{PINTO_DIFF_STYLE} = $PINTO_DIFF_STYLE_DETAILED;
my $fmt = '%a/%D/%P/%y';
my $right = $t->get_stack->head;
my $left = ( $right->parents )[0];
my $expect_adds = [ 'AUTHOR/Dist-2/PkgB~2/-', 'AUTHOR/Dist-2/PkgC~2/-' ];
my $expect_dels = [ 'AUTHOR/Dist-1/PkgA~1/-', 'AUTHOR/Dist-1/PkgB~1/-' ];
my $diff = Pinto::Difference->new( left => $left, right => $right );
my @adds = map { $_->to_string($fmt) } $diff->additions;
my @dels = map { $_->to_string($fmt) } $diff->deletions;
is_deeply \@adds, $expect_adds, 'Got expected additions';
is_deeply \@dels, $expect_dels, 'Got expected deletions';
# If we reverse the direction of the diff, then
# we should always get the opposite results...
( $right, $left ) = ( $left, $right );
( $expect_adds, $expect_dels ) = ( $expect_dels, $expect_adds );
$diff = Pinto::Difference->new( left => $left, right => $right );
@adds = map { $_->to_string($fmt) } $diff->additions;
@dels = map { $_->to_string($fmt) } $diff->deletions;
is_deeply \@adds, $expect_adds, 'Got expected additions';
is_deeply \@dels, $expect_dels, 'Got expected deletions';
};
#------------------------------------------------------------------------------
subtest 'concise diff' => sub {
local $ENV{PINTO_DIFF_STYLE} = $PINTO_DIFF_STYLE_CONCISE;
my $fmt = '%a/%f';
my $right = $t->get_stack->head;
my $left = ( $right->parents )[0];
my $expect_adds = [ 'AUTHOR/Dist-2.tar.gz' ];
my $expect_dels = [ 'AUTHOR/Dist-1.tar.gz' ];
my $diff = Pinto::Difference->new( left => $left, right => $right );
my @adds = map { $_->to_string($fmt) } $diff->additions;
my @dels = map { $_->to_string($fmt) } $diff->deletions;
is_deeply \@adds, $expect_adds, 'Got expected additions';
is_deeply \@dels, $expect_dels, 'Got expected deletions';
# If we reverse the direction of the diff, then we should always
# get the opposite results.
( $right, $left ) = ( $left, $right );
( $expect_adds, $expect_dels ) = ( $expect_dels, $expect_adds );
$diff = Pinto::Difference->new( left => $left, right => $right );
@adds = map { $_->to_string($fmt) } $diff->additions;
@dels = map { $_->to_string($fmt) } $diff->deletions;
is_deeply \@adds, $expect_adds, 'Got expected additions';
is_deeply \@dels, $expect_dels, 'Got expected deletions';
};
#------------------------------------------------------------------------------
done_testing;