summaryrefslogtreecommitdiff
blob: 9345711f6c0cb188a9c05eb5fb71eae7fd9541b0 (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
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
93
94
95
96
97
98
# test_isvalidatom.py -- Portage Unit Testing Functionality
# Copyright 2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from portage.tests import TestCase
from portage.dep import Atom
import portage.dep
portage.dep._dep_check_strict = True

class TestAtom(TestCase):
	""" A simple testcase for isvalidatom
	"""

	def testAtom(self):

		tests = [
			  ( "=sys-apps/portage-2.1-r1:0[doc,a=,!b=,c?,!d?,-e]",
				('=',  'sys-apps/portage', '2.1-r1', '0', '[doc,a=,!b=,c?,!d?,-e]', None), False ),
			  ( "=sys-apps/portage-2.1-r1*:0[doc]",
				('=*',  'sys-apps/portage', '2.1-r1', '0', '[doc]', None), False ),
			  ( "sys-apps/portage:0[doc]",
				(None,  'sys-apps/portage', None, '0', '[doc]', None), False ),
			  ( "sys-apps/portage:0[doc]",
				(None,  'sys-apps/portage', None, '0', '[doc]', None), False ),
			  ( "*/*",
				(None,  '*/*', None, None, None, None), True ),
			  ( "sys-apps/*",
				(None,  'sys-apps/*', None, None, None, None), True ),
			  ( "*/portage",
				(None,  '*/portage', None, None, None, None), True ),
			  ( "s*s-*/portage:1",
				(None,  's*s-*/portage', None, '1', None, None), True ),
			  ( "*/po*ge:2",
				(None,  '*/po*ge', None, '2', None, None), True ),

			  ( "=sys-apps/portage-2.1-r1:0::repo_name[doc,a=,!b=,c?,!d?,-e]",
				('=',  'sys-apps/portage', '2.1-r1', '0', '[doc,a=,!b=,c?,!d?,-e]', 'repo_name'), False ),
			  ( "=sys-apps/portage-2.1-r1*:0::repo_name[doc]",
				('=*',  'sys-apps/portage', '2.1-r1', '0', '[doc]', 'repo_name'), False ),
			  ( "sys-apps/portage:0::repo_name[doc]",
				(None,  'sys-apps/portage', None, '0', '[doc]', 'repo_name'), False ),
		]
		
		tests_xfail = [
			( "cat/pkg[a!]", False ),
			( "cat/pkg[a-]", False ),
			( "cat/pkg[!a]", False ),
			( "cat/pkg[!a!]", False ),
			( "cat/pkg[!a-]", False ),
			( "cat/pkg[-a=]", False ),
			( "cat/pkg[-a?]", False ),
			( "cat/pkg[-a!]", False ),
			( "cat/pkg[-a-]", False ),
			( "cat/pkg[=a]", False ),
			( "cat/pkg[=a=]", False ),
			( "cat/pkg[=a?]", False ),
			( "cat/pkg[=a!]", False ),
			( "cat/pkg[=a-]", False ),
			( "cat/pkg[?a]", False ),
			( "cat/pkg[?a=]", False ),
			( "cat/pkg[?a?]", False ),
			( "cat/pkg[?a!]", False ),
			( "cat/pkg[?a-]", False ),
			( "sys-apps/portage[doc]:0", False ),
			( "*/*", False ),
			( "sys-apps/*", False ),
			( "*/portage", False ),
			( "*/**", True ),
			( "*/portage[use]", True ),
			( "*/portage:slot", True )
		]

		for atom, parts, allow_wildcard in tests:
			a = Atom(atom, allow_wildcard=allow_wildcard)
			op, cp, ver, slot, use, repo = parts
			self.assertEqual( op, a.operator,
				msg="Atom('%s').operator == '%s'" % ( atom, a.operator ) )
			self.assertEqual( cp, a.cp,
				msg="Atom('%s').cp == '%s'" % ( atom, a.cp ) )
			if ver is not None:
				cpv = "%s-%s" % (cp, ver)
			else:
				cpv = cp
			self.assertEqual( cpv, a.cpv,
				msg="Atom('%s').cpv == '%s'" % ( atom, a.cpv ) )
			self.assertEqual( slot, a.slot,
				msg="Atom('%s').slot == '%s'" % ( atom, a.slot ) )
			self.assertEqual( repo, a.repo,
				msg="Atom('%s').repo == '%s'" % ( atom, a.repo ) )
			if a.use:
				expected_use = str(a.use)
			else:
				expected_use = None
			self.assertEqual( use, expected_use,
				msg="Atom('%s').use == '%s'" % ( atom, a.use ) )

		for atom, allow_wildcard in tests_xfail:
			self.assertRaisesMsg(atom, portage.exception.InvalidAtom, Atom, atom)