]> git.vpit.fr Git - perl/modules/CPANPLUS-Dist-Gentoo.git/blob - t/30-atom-new.t
Allow the correct package names in atoms
[perl/modules/CPANPLUS-Dist-Gentoo.git] / t / 30-atom-new.t
1 #!perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 23;
7
8 use CPANPLUS::Dist::Gentoo::Atom;
9
10 sub A () { 'CPANPLUS::Dist::Gentoo::Atom' }
11
12 my $no_info      = qr/^Not enough information/;
13 my $no_category  = qr/^Category unspecified/;
14 my $range_no_ver = qr/^Range atoms require a valid version/;
15
16 sub inv { qr/^Invalid \Q$_[0]\E/ }
17
18 my $a0 = { category => 'test',  name => 'a' };
19 my $a1 = { category => 'test',  name => 'a',   version => '1.0' };
20 my $a2 = { category => 'test+', name => 'a+b', version => '1.2.3' };
21
22 my @tests = (
23  [ { }                     => $no_info ],
24  [ { category => 'test' }  => $no_info ],
25  [ { name => 'a'  }        => $no_category ],
26
27  [ { category => '',      name => 'a'  } => inv('category') ],
28  [ { category => 'test$', name => 'a'  } => inv('category') ],
29  [ { category => 'test',  name => ''   } => inv('name')     ],
30  [ { category => 'test',  name => 'a$' } => inv('name')     ],
31
32  [ $a0                     => $a0 ],
33  [ { %$a0, range => ''   } => { %$a0, range => '' } ],
34  [ { %$a0, range => '<=' } => $range_no_ver ],
35  [ $a1                     => { %$a1, range => '>=' } ],
36  [ { %$a1, range => '<>' } => inv('range'), ],
37  [ { %$a1, range => '<=' } => { %$a1, range => '<=' } ],
38
39  [ { atom => 'test/a' }        => $a0 ],
40  [ { atom => 'test/a-1.0' }    => { %$a1, range => '>=' } ],
41  [ { atom => '=test/a-v1.0' }  => { %$a1, range => '=' } ],
42  [ { atom => '=<test/a-v1.0' } => inv('atom') ],
43  [ { atom => '>=test/a' }      => $range_no_ver ],
44
45  [ { ebuild => undef }                      => inv('ebuild') ],
46  [ { ebuild => '/wat/test/a/a.ebuild' }     => inv('ebuild') ],
47  [ { ebuild => '/wat/test/a/a-1.0.ebuild' } => { %$a1, range => '>=' } ],
48  [ { ebuild => '/wat/test/a/b-1.0.ebuild' } => inv('ebuild') ],
49  [ { ebuild => '/wat/test+/a+b/a+b-1.2.3.ebuild' } => { %$a2, range => '>=' } ],
50 );
51
52 my @fields = qw/range category name version ebuild/;
53
54 for my $t (@tests) {
55  my ($args, $exp) = @$t;
56
57  my ($meth, @args);
58  if (exists $args->{ebuild}) {
59   $meth = 'new_from_ebuild';
60   @args = ($args->{ebuild});
61  } else {
62   $meth = 'new';
63   @args = %$args;
64  }
65
66  my $atom = eval { A->$meth(@args) };
67  my $err  = $@;
68
69  if (ref $exp eq 'Regexp') {
70   like $err, $exp;
71  } elsif ($err) {
72   fail $err;
73  } else {
74   $exp = { %$exp };
75   for (@fields) {
76    next if exists $exp->{$_};
77    $exp->{$_} = ($_ eq 'ebuild' and exists $args->{ebuild})
78                 ? $args->{ebuild}
79                 : undef;
80   }
81   is_deeply {
82    map { my $val = $atom->$_; $_ => (defined $val ? "$val" : undef) } @fields
83   }, $exp;
84  }
85 }