aboutsummaryrefslogtreecommitdiff
blob: 8c93ad97316fdae95943c2ff3fd87211255429b4 (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
99
100
101
102
103
104
105
# Copyright 2010-2020 Gentoo Authors
# 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 USE dep defaults for bug #363073
            (
                "a? ( >=dev-lang/php-5.2[pcre(+)] )",
                ">=dev-lang/php-5.2[pcre(+)]",
                ["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, eapi="0")
            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,
                eapi="0",
            )