File: alien_build_plugin_prefer_sortversions.t

package info (click to toggle)
libalien-build-perl 2.84-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,116 kB
  • sloc: perl: 10,350; ansic: 134; sh: 66; makefile: 2
file content (92 lines) | stat: -rw-r--r-- 2,312 bytes parent folder | download
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
use 5.008004;
use Test2::V0 -no_srand => 1;
use Test::Alien::Build;
use Alien::Build::Plugin::Prefer::SortVersions;
use Path::Tiny qw( path );
use Alien::Build::Util qw( _dump );

subtest 'updates requires' => sub {

  my $plugin = Alien::Build::Plugin::Prefer::SortVersions->new;

  my $build = alienfile filename => 'corpus/blank/alienfile';
  my $meta = $build->meta;

  $plugin->init($meta);

  is( $build->requires('share')->{'Sort::Versions'}, 0 );

  note _dump $meta;

};

subtest 'prefer' => sub {

  my $builder = sub {
    my $plugin = Alien::Build::Plugin::Prefer::SortVersions->new(@_);
    my $build = alienfile filename => 'corpus/blank/alienfile';
    my $meta = $build->meta;
    $plugin->init($meta);
    eval { $build->load_requires('share') };
    $@ ? () : wantarray ? ($build,$meta) : $build; ## no critic
  };

  my $make_list = sub {
    return {
      type => 'list',
      list => [
        map {
          my $h = { filename => $_, url => "http://example.test/foo/bar/$_" };
        } @_
      ],
    };
  };

  my $make_cmp = sub {
    return {
      type => 'list',
      list => [
        map {
          hash {
            field filename => $_;
            field url => "http://example.test/foo/bar/$_";
            field version => T();
          },
        } @_
      ],
    };
  };

  skip_all 'test requires Sort::Versions' unless $builder->();

  subtest 'default settings' => sub {

    my $build = $builder->();

    my $res = $build->prefer($make_list->(qw(roger-0.0.0.tar.gz abc-2.3.4.tar.gz xyz-1.0.0.tar.gz)));
    note _dump($res);
    is( $res, $make_cmp->(qw( abc-2.3.4.tar.gz xyz-1.0.0.tar.gz roger-0.0.0.tar.gz )) );

  };

  subtest 'filter' => sub {

    my $build = $builder->(filter => qr/abc|xyz/);
    my $res = $build->prefer($make_list->(qw(roger-0.0.0.tar.gz abc-2.3.4.tar.gz xyz-1.0.0.tar.gz)));
    note _dump($res);
    is( $res, $make_cmp->(qw( abc-2.3.4.tar.gz xyz-1.0.0.tar.gz )) );

  };

  subtest 'version regex' => sub {

    my $build = $builder->(qr/^foo-[0-9\.]+-bar-([0-9\.](?:[0-9\.]*[0-9])?)/);
    my $res = $build->prefer($make_list->(qw( foo-10.0-bar-0.1.0.tar.gz foo-5-bar-2.1.0.tar.gz bogus.tar.gz )));
    note _dump($res);
    is( $res, $make_cmp->(qw( foo-5-bar-2.1.0.tar.gz foo-10.0-bar-0.1.0.tar.gz )) );

  };

};

done_testing;