File: alien_build_plugin_decode_mojo.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 (90 lines) | stat: -rw-r--r-- 2,143 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
use 5.008004;
use Test2::V0 -no_srand => 1;
use Alien::Build::Plugin::Decode::Mojo;
use Test::Alien::Build;
use Path::Tiny qw( path );
use Data::Dumper qw( Dumper );

subtest 'updates requires' => sub {

  my $build = alienfile q{
    use alienfile;
    plugin 'Decode::Mojo';
  };

  is(
    $build->requires('share'),
    hash {
      field 'URI'         => 0;
      field 'URI::Escape' => 0;
      if($build->requires('share')->{'Mojo::DOM58'})
      {
        field 'Mojo::DOM58' => '1.00';
      }
      elsif($build->requires('share')->{'Mojo::DOM58'})
      {
        field 'Mojo::DOM'   => '0';
        field 'Mojolicious' => '0';
      }
      etc;
    },
  );

  note Dumper($build->requires('share'));

};

foreach my $class (qw( Mojo::DOM Mojo::DOM58 ))
{
  subtest "decode class = $class" => sub {

    my $build = alienfile qq{
      use alienfile;
      plugin 'Decode::Mojo' => ( _class => "$class" );
      probe sub { 'share' };
    };

    alienfile_skip_if_missing_prereqs;

    is
      $build->requires('share'),
      hash {
        field $class => D();
        field 'Mojolicious' => D() if $class eq 'Mojo::DOM';
        etc;
      }
    ;

    foreach my $file (path('corpus/dir')->children(qr/\.html$/))
    {
      subtest "parse $file" => sub {
        my $res1 = {
          type    => 'html',
          base    => "http://example.test/foo/bar/index.html",
          content => $file->slurp,
        };
        my $res2 = $build->decode($res1);
        is(
          $res2,
          hash {
            field type => 'list';
            field list => array {
              foreach my $filename (qw( foo-1.00 foo-1.00.tar foo-1.00.tar.Z foo-1.00.tar.bz2 foo-1.00.tar.gz foo-1.00.tar.xz foo-1.00.tgz foo-1.00.zip))
              {
                item hash {
                  field filename => $filename;
                  field url => match qr{\Q$filename\E};
                };
              }
            };
          },
        );
        note "filename = $_" for map { $_->{filename} } @{ $res2->{list} };
        note "url = $_" for map { $_->{url} } @{ $res2->{list} };
      };
    }

  };
}

done_testing