xref: /openbsd/regress/usr.sbin/pkg_add/check-name (revision 90b10312)
1#! /usr/bin/perl
2# $OpenBSD: check-name,v 1.7 2009/11/03 11:14:49 sthen Exp $
3# Written by Marc Espie
4# Public domain
5
6use Test::Simple tests => 13;
7use OpenBSD::Search;
8use OpenBSD::PackageName;
9
10sub check_list
11{
12	my $expected = shift;
13	@_ = sort(@_);
14	if (@$expected != @_) {
15		return 0;
16	}
17	for my $i (0 .. @_ -1) {
18		if ($expected->[$i] ne $_[$i]) {
19			return 0;
20		}
21	}
22	return 1;
23}
24
25sub check_pkgspec
26{
27	my ($s, @list) = @_;
28
29	my $o = OpenBSD::Search::PkgSpec->new($s);
30	return $o->filter(@list);
31}
32
33@list = qw(py-MxDateTime-2.0.1-py2.1);
34ok(check_list(\@list,
35    check_pkgspec('py-MxDateTime->=2.0-py2.1', @list)),
36	'flavor with number');
37@list = qw(foo-1.0 foo-1.0p0 foo-1.0p25);
38ok(check_list([qw(foo-1.0)],
39    check_pkgspec('foo-<1.0p0', @list)),
40	'before 1.0p0 came 1.0');
41ok(check_list([qw(foo-1.0 foo-1.0p0)],
42    check_pkgspec('foo-<=1.0p0', @list)),
43	'1.0 and 1.0p0 both match <=1.0p0');
44ok(check_list([qw(foo-1.0 foo-1.0p0 foo-1.0p25)],
45    check_pkgspec('foo-1.0', @list)),
46	'any 1.0p* matches 1.0');
47ok(check_list([qw(foo-1.0rc2)],
48    check_pkgspec('foo-<1.0', @list)),
49	'before 1.0 came 1.0rc2');
50ok(check_list([qw(foo-1.0)],
51    check_pkgspec('foo-<1.0pl1', @list)),
52	'before 1.0pl1 came 1.0');
53
54my @pkglist=qw(foo-1.0 bar-2.0 foo-2.5 foobar-2.3-pouet hugs-noversion baz-0.0
55	baz-1.1 baz-25.3 pouet-1.0 pouet-zoinx-1.0 pouet-0.0-foo);
56
57my $hash = OpenBSD::PackageName::compile_stemlist(@pkglist);
58
59ok(check_list([qw(bar-2.0)],
60    $hash->find('bar')),
61	'simple stem lookup');
62ok(check_list([qw(foo-1.0 foo-2.5)],
63    $hash->find('foo')),
64	'simple stem lookup with several results');
65ok(check_list([qw(baz-0.0 baz-1.1 baz-25.3)],
66    $hash->find('baz')),
67	'stem lookup, no duplicates');
68ok(check_list([qw(foobar-2.3-pouet)],
69    $hash->find('foobar')),
70	'stem lookup with flavor');
71ok(check_list([qw(pouet-0.0-foo pouet-1.0)],
72    $hash->find('pouet')),
73    	'complicated stem matching');
74ok(check_list([],
75    $hash->find('hugs')),
76    	'bogus stem matching with no version');
77ok(check_list([qw(hugs-noversion)],
78    $hash->find('hugs-noversion')),
79    	'stem matching with no version');
80