Merge "Fix logic for groups"
This commit is contained in:
commit
7e941fc9a8
|
@ -165,15 +165,15 @@ class Depends(object):
|
||||||
# selectors we need a match.
|
# selectors we need a match.
|
||||||
positive = False
|
positive = False
|
||||||
match_found = False
|
match_found = False
|
||||||
|
group_found = False
|
||||||
|
group_match_found = False
|
||||||
negative = False
|
negative = False
|
||||||
for group in partition_rule:
|
for group in partition_rule:
|
||||||
if isinstance(group, list):
|
if isinstance(group, list):
|
||||||
|
group_found = True
|
||||||
if self._match_all(group, profiles):
|
if self._match_all(group, profiles):
|
||||||
match_found = True
|
group_match_found = True
|
||||||
continue
|
continue
|
||||||
else:
|
|
||||||
negative = True
|
|
||||||
break
|
|
||||||
sense, profile = group
|
sense, profile = group
|
||||||
if sense:
|
if sense:
|
||||||
positive = True
|
positive = True
|
||||||
|
@ -183,7 +183,10 @@ class Depends(object):
|
||||||
if profile in profiles:
|
if profile in profiles:
|
||||||
negative = True
|
negative = True
|
||||||
break
|
break
|
||||||
if not negative and (match_found or not positive):
|
if not negative:
|
||||||
|
if group_match_found or match_found:
|
||||||
|
return True
|
||||||
|
if not group_found and not positive:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
@ -236,6 +236,19 @@ class TestDepends(TestCase):
|
||||||
[("foo", [(False, "bar"), (True, "baz"), (True, "quux")], [])],
|
[("foo", [(False, "bar"), (True, "baz"), (True, "quux")], [])],
|
||||||
depends._rules)
|
depends._rules)
|
||||||
|
|
||||||
|
def test_single_group_only(self):
|
||||||
|
depends = Depends("foo [(bar)]\n")
|
||||||
|
self.assertTrue(depends._evaluate(depends._rules[0][1], ["bar"]))
|
||||||
|
self.assertFalse(depends._evaluate(depends._rules[0][1], ["baz"]))
|
||||||
|
|
||||||
|
def test_multiple_groups_only(self):
|
||||||
|
depends = Depends("foo [(bar baz) (quux)]\n")
|
||||||
|
self.assertTrue(depends._evaluate(depends._rules[0][1],
|
||||||
|
["bar", "baz"]))
|
||||||
|
self.assertTrue(depends._evaluate(depends._rules[0][1], ["quux"]))
|
||||||
|
self.assertFalse(depends._evaluate(depends._rules[0][1], ["baz"]))
|
||||||
|
self.assertFalse(depends._evaluate(depends._rules[0][1], ["bar"]))
|
||||||
|
|
||||||
def test_whitespace(self):
|
def test_whitespace(self):
|
||||||
depends = Depends("foo [ ( bar !baz ) quux ]\n")
|
depends = Depends("foo [ ( bar !baz ) quux ]\n")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
|
Loading…
Reference in New Issue