summaryrefslogtreecommitdiff
path: root/regress/usr.sbin/pkg_add/check-cfl
blob: ab4d0486c8ba5de5b2b90ba3bf84c3a161fb348e (plain)
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
#! /usr/bin/perl
# $OpenBSD: check-cfl,v 1.3 2014/01/31 10:28:18 espie Exp $
# Written by Marc Espie
# Public domain

use strict;
use warnings;
use Test::Simple tests => 4;

use OpenBSD::PkgCfl;
use OpenBSD::PackingList;
use OpenBSD::PackingElement;

sub check_list
{
	my $expected = shift;
	my @r = sort(@$expected);
	@_ = sort(@_);
	if (@r != @_) {
		print STDERR "length: ", scalar(@r)," vs. ", 
		    scalar(@_), "\n";
		    print STDERR "Expected: ", join(',', @r), "\n";
		    print STDERR "Result: ", join(',', @_), "\n";
		return 0;
	}
	for my $i (0 .. @_ -1) {
		if ($r[$i] ne $_[$i]) {
			print STDERR "$r[$i] vs. $_[$i]\n";
			return 0;
		}
	}
	return 1;
}

sub check_conflict
{
	my ($plist, @list) = @_;
	my $cfl = OpenBSD::PkgCfl->make_conflict_list($plist);
	return $cfl->conflicts_with(@list);
}


my $p1 = OpenBSD::PackingList->new;
OpenBSD::PackingElement::Name->add($p1, "foo-1.0");

my @l1 = qw(foo-2.0 partial-foo-2.5 bar-2.0 bar-1.5 buz-1.0 .libs-buz-0.0);
my @r1 = qw(foo-2.0 partial-foo-2.5);
ok(check_list(\@r1, check_conflict($p1, @l1)));

my $p2 = OpenBSD::PackingList->new;
OpenBSD::PackingElement::Name->add($p2, "bar-2.0");
OpenBSD::PackingElement::NoDefaultConflict->add($p2);
my @r2 = qw(bar-2.0);
ok(check_list(\@r2, check_conflict($p2, @l1)));

my $p3 = OpenBSD::PackingList->new;
OpenBSD::PackingElement::Name->add($p3, "buz-2.5");
OpenBSD::PackingElement::Conflict->add($p3, "bar->=2");

my @r3 = qw(bar-2.0 buz-1.0 .libs-buz-0.0);
ok(check_list(\@r3, check_conflict($p3, @l1)));

my @l2 = qw(partial-foo-2.5 partial-partial-foo-2.10 bar-2.0 bar-1.5 buz-1.0 .libs-buz-0.0);
my @r4 = qw(partial-foo-2.5 partial-partial-foo-2.10);
ok(check_list(\@r4, check_conflict($p1, @l2)));