The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use Test::Most 'no_plan';

use App::PAUSE::cleanup;

cmp_deeply( [ App::PAUSE::cleanup->expand_filelist( [qw/
    A-1.0
    A-2.0
    A-3
    B-4.0_1
    B-5_2
/] ) ], [qw/
    A-1.0.meta
    A-1.0.readme
    A-1.0.tar.gz
    A-2.0.meta
    A-2.0.readme
    A-2.0.tar.gz
    A-3.meta
    A-3.readme
    A-3.tar.gz
    B-4.0_1.tar.gz
    B-5_2.tar.gz
/]
);

sub _file {
    my ( $package, $version ) = @_;

    return { package => $package,
             version => $version,
             package_version => "${package}-${version}",
    };
}

{
    my ( @filelist, @latest );
    push @filelist,
        _file( qw/ A 1_2 / ),
        _file( qw/ A 1_1 / ),
        _file( qw/ A 2 / ),
        _file( qw/ A 1 / ),
    ;
    @latest = App::PAUSE::cleanup->extract_latest( \@filelist );

    cmp_deeply( [ map { $_->{package_version} } @latest ], [qw/ A-1_2 A-2 /] );
    cmp_deeply( [ map { $_->{package_version} } @filelist ], [qw/ A-1_1 A-1 /] );
}

{
    my ( @filelist, @latest );
    push @filelist,
        _file( qw/ A 1_1 / ),
        _file( qw/ A 2 / ),
        _file( qw/ A 1 / ),
    ;
    @latest = App::PAUSE::cleanup->extract_latest( \@filelist );

    cmp_deeply( [ map { $_->{package_version} } @latest ], [qw/ A-1_1 A-2 /] );
    cmp_deeply( [ map { $_->{package_version} } @filelist ], [qw/ A-1 /] );
}

{
    my ( @filelist, @latest );
    push @filelist,
        _file( qw/ A 2 / ),
        _file( qw/ A 1 / ),
    ;
    @latest = App::PAUSE::cleanup->extract_latest( \@filelist );

    cmp_deeply( [ map { $_->{package_version} } @latest ], [qw/ A-2 /] );
    cmp_deeply( [ map { $_->{package_version} } @filelist ], [qw/ A-1 /] );
}

{
    my ( @filelist, @latest );
    push @filelist,
        _file( qw/ A 2 / ),
        _file( qw/ A 1_1 / ),
    ;
    @latest = App::PAUSE::cleanup->extract_latest( \@filelist );

    cmp_deeply( [ map { $_->{package_version} } @latest ], [qw/ A-2 /] );
    cmp_deeply( [ map { $_->{package_version} } @filelist ], [qw/ A-1_1 /] );
}

{
    my ( @filelist, @latest );
    push @filelist,
        _file( qw/ A 1_1 / ),
        _file( qw/ A 2 / ),
    ;
    @latest = App::PAUSE::cleanup->extract_latest( \@filelist );

    cmp_deeply( [ map { $_->{package_version} } @latest ], [qw/ A-1_1 A-2 /] );
    cmp_deeply( [ map { $_->{package_version} } @filelist ], [] );
}