summaryrefslogtreecommitdiffstats
path: root/pym/portage/tests/dep/testExtractAffectingUSE.py
blob: f998bbbb7c56379f3d060787501a348a226bf90a (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
# Copyright 2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from portage.tests import TestCase
from portage.dep import extract_affecting_use
from portage.exception import InvalidDependString

class TestExtractAffectingUSE(TestCase):

	def testExtractAffectingUSE(self):
		test_cases = (
			("a? ( A ) !b? ( B ) !c? ( C ) d? ( D )", "A", ("a",)),
			("a? ( A ) !b? ( B ) !c? ( C ) d? ( D )", "B", ("b",)),
			("a? ( A ) !b? ( B ) !c? ( C ) d? ( D )", "C", ("c",)),
			("a? ( A ) !b? ( B ) !c? ( C ) d? ( D )", "D", ("d",)),
			
			("a? ( b? ( AB ) )", "AB", ("a", "b")),
			("a? ( b? ( c? ( ABC ) ) )", "ABC", ("a", "b", "c")),

			("a? ( A b? ( c? ( ABC ) AB ) )", "A", ("a",)),
			("a? ( A b? ( c? ( ABC ) AB ) )", "AB", ("a", "b")),
			("a? ( A b? ( c? ( ABC ) AB ) )", "ABC", ("a", "b", "c")),
			("a? ( A b? ( c? ( ABC ) AB ) ) X", "X", []),
			("X a? ( A b? ( c? ( ABC ) AB ) )", "X", []),

			("ab? ( || ( A B ) )", "A", ("ab",)),
			("!ab? ( || ( A B ) )", "B", ("ab",)),
			("ab? ( || ( A || ( b? ( || ( B C ) ) ) ) )", "A", ("ab",)),
			("ab? ( || ( A || ( b? ( || ( B C ) ) ) ) )", "B", ("ab", "b")),
			("ab? ( || ( A || ( b? ( || ( B C ) ) ) ) )", "C", ("ab", "b")),

			("( ab? ( || ( ( A ) || ( b? ( ( ( || ( B ( C ) ) ) ) ) ) ) ) )", "A", ("ab",)),
			("( ab? ( || ( ( A ) || ( b? ( ( ( || ( B ( C ) ) ) ) ) ) ) ) )", "B", ("ab", "b")),
			("( ab? ( || ( ( A ) || ( b? ( ( ( || ( B ( C ) ) ) ) ) ) ) ) )", "C", ("ab", "b")),

			("a? ( A )", "B", []),

			("a? ( || ( A B ) )", "B", ["a"]),
		)

		test_cases_xfail = (
			("? ( A )", "A"),
			("!? ( A )", "A"),
			("( A", "A"),
			("A )", "A"),
			
			("||( A B )", "A"),
			("|| (A B )", "A"),
			("|| ( A B)", "A"),
			("|| ( A B", "A"),
			("|| A B )", "A"),
			("|| A B", "A"),
			("|| ( A B ) )", "A"),
			("|| || B C", "A"),
			("|| ( A B || )", "A"),
			("a? A", "A"),
			("( || ( || || ( A ) foo? ( B ) ) )", "A"),
			("( || ( || bar? ( A ) foo? ( B ) ) )", "A"),
		)

		for dep, atom, expected in test_cases:
			expected = set(expected)
			result = extract_affecting_use(dep, atom)
			fail_msg = "dep: " + dep + ", atom: " + atom + ", got: " + \
				" ".join(sorted(result)) + ", expected: " + " ".join(sorted(expected))
			self.assertEqual(result, expected, fail_msg)

		for dep, atom in test_cases_xfail:
			fail_msg = "dep: " + dep + ", atom: " + atom + ", got: " + \
				" ".join(sorted(result)) + ", expected: " + " ".join(sorted(expected))
			self.assertRaisesMsg(fail_msg, \
				InvalidDependString, extract_affecting_use, dep, atom)