diff options
Diffstat (limited to 'odoo')
| -rw-r--r-- | odoo/addons/base/tests/test_expression.py | 11 | ||||
| -rw-r--r-- | odoo/osv/expression.py | 5 |
2 files changed, 15 insertions, 1 deletions
diff --git a/odoo/addons/base/tests/test_expression.py b/odoo/addons/base/tests/test_expression.py index 8cb405319f4..810db9b888b 100644 --- a/odoo/addons/base/tests/test_expression.py +++ b/odoo/addons/base/tests/test_expression.py @@ -593,6 +593,17 @@ class TestExpression(SavepointCaseWithUserDemo): norm_domain = ['&', '&', '&'] + domain self.assertEqual(norm_domain, expression.normalize_domain(domain), "Non-normalized domains should be properly normalized") + def test_35_negating_thruty_leafs(self): + self.assertEqual(expression.distribute_not(['!', '!', expression.TRUE_LEAF]), [expression.TRUE_LEAF], "distribute_not applied wrongly") + self.assertEqual(expression.distribute_not(['!', '!', expression.FALSE_LEAF]), [expression.FALSE_LEAF], "distribute_not applied wrongly") + self.assertEqual(expression.distribute_not(['!', '!', '!', '!', expression.TRUE_LEAF]), [expression.TRUE_LEAF], "distribute_not applied wrongly") + self.assertEqual(expression.distribute_not(['!', '!', '!', '!', expression.FALSE_LEAF]), [expression.FALSE_LEAF], "distribute_not applied wrongly") + + self.assertEqual(expression.distribute_not(['!', expression.TRUE_LEAF]), [expression.FALSE_LEAF], "distribute_not applied wrongly") + self.assertEqual(expression.distribute_not(['!', expression.FALSE_LEAF]), [expression.TRUE_LEAF], "distribute_not applied wrongly") + self.assertEqual(expression.distribute_not(['!', '!', '!', expression.TRUE_LEAF]), [expression.FALSE_LEAF], "distribute_not applied wrongly") + self.assertEqual(expression.distribute_not(['!', '!', '!', expression.FALSE_LEAF]), [expression.TRUE_LEAF], "distribute_not applied wrongly") + def test_40_negating_long_expression(self): source = ['!', '&', ('user_id', '=', 4), ('partner_id', 'in', [1, 2])] expect = ['|', ('user_id', '!=', 4), ('partner_id', 'not in', [1, 2])] diff --git a/odoo/osv/expression.py b/odoo/osv/expression.py index 6aa0c88ab5c..ab4b546fa16 100644 --- a/odoo/osv/expression.py +++ b/odoo/osv/expression.py @@ -310,7 +310,10 @@ def distribute_not(domain): if negate: left, operator, right = token if operator in TERM_OPERATORS_NEGATION: - result.append((left, TERM_OPERATORS_NEGATION[operator], right)) + if token in (TRUE_LEAF, FALSE_LEAF): + result.append(FALSE_LEAF if token == TRUE_LEAF else TRUE_LEAF) + else: + result.append((left, TERM_OPERATORS_NEGATION[operator], right)) else: result.append(NOT_OPERATOR) result.append(token) |
