details:   https://code.tryton.org/tryton/commit/a28800bfd0f1
branch:    default
user:      Nicolas Évrard <[email protected]>
date:      Tue Apr 14 18:20:45 2026 +0200
description:
        Modernize parse_clause tests
diffstat:

 tryton/tryton/tests/test_common_domain_parser.py |  257 ++++++++--------------
 1 files changed, 97 insertions(+), 160 deletions(-)

diffs (267 lines):

diff -r 73989a49f837 -r a28800bfd0f1 
tryton/tryton/tests/test_common_domain_parser.py
--- a/tryton/tryton/tests/test_common_domain_parser.py  Tue Apr 14 17:29:07 
2026 +0200
+++ b/tryton/tryton/tests/test_common_domain_parser.py  Tue Apr 14 18:20:45 
2026 +0200
@@ -1001,166 +1001,103 @@
                         },
                     },
                 })
-        self.assertEqual(
-            rlist(dom.parse_clause([('John',)])), [
-                ('rec_name', 'ilike', '%John%'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Name', None, None)])), [
-                ('name', 'ilike', '%'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Name', '', None)])), [
-                ('name', 'ilike', '%'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Name', '=', None)])), [
-                ('name', '=', None),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Name', '=', '')])), [
-                ('name', '=', ''),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Name', None, 'Doe')])), [
-                ('name', 'ilike', '%Doe%'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Name', '!', 'Doe')])), [
-                ('name', 'not ilike', '%Doe%'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Name', None, ['John', 'Jane'])])), [
-                ('name', 'in', ['John', 'Jane']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Name', '!', ['John', 'Jane'])])), [
-                ('name', 'not in', ['John', 'Jane']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Selection', None, None)])), [
-                ('selection', '=', None),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Selection', None, '')])), [
-                ('selection', '=', ''),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Selection', None, ['Male', 'Female'])])),
-            [('selection', 'in', ['male', 'female'])])
-        self.assertEqual(
-            rlist(dom.parse_clause([('MultiSelection', None, None)])), [
-                ('multiselection', '=', None),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('MultiSelection', None, '')])), [
-                ('multiselection', 'in', ['']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('MultiSelection', '=', '')])), [
-                ('multiselection', '=', ['']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('MultiSelection', '!', '')])), [
-                ('multiselection', 'not in', ['']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('MultiSelection', '!=', '')])), [
-                ('multiselection', '!=', ['']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause(
-                [('MultiSelection', None, ['Foo', 'Bar'])])), [
-                ('multiselection', 'in', ['foo', 'bar']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause(
-                [('MultiSelection', '=', ['Foo', 'Bar'])])), [
-                ('multiselection', '=', ['foo', 'bar']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause(
-                [('MultiSelection', '!', ['Foo', 'Bar'])])), [
-                ('multiselection', 'not in', ['foo', 'bar']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause(
-                [('MultiSelection', '!=', ['Foo', 'Bar'])])), [
-                ('multiselection', '!=', ['foo', 'bar']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Integer', None, None)])), [
-                ('integer', '=', None),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Integer', None, '3..5')])), [[
-                    ('integer', '>=', 3),
-                    ('integer', '<=', 5),
-                    ]])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Reference', None, 'foo')])), [
-                ('reference', 'ilike', '%foo%'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Reference', None, 'Spam')])), [
-                ('reference', 'ilike', '%spam%'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Reference', None, 'Spam,bar')])), [
-                ('reference.rec_name', 'ilike', '%bar%', 'spam'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Reference', None, 'Spam,')])), [
-                ('reference.rec_name', 'ilike', '%', 'spam'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Reference', None, ['foo', 'bar'])])), [
-                ('reference', 'in', ['foo', 'bar']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause(['OR',
-                    ('Name', None, 'John'), ('Name', None, 'Jane')])),
-            ['OR',
-                ('name', 'ilike', '%John%'),
-                ('name', 'ilike', '%Jane%'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Many2One', None, 'John')])), [
-                ('many2one.rec_name', 'ilike', '%John%'),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Many2One', None, ['John', 'Jane'])])), [
-                ('many2one.rec_name', 'in', ['John', 'Jane']),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Many2One', '=', None)])), [
-                ('many2one', '=', None),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause([('Many2One', '=', '')])), [
-                ('many2one', '=', None),
-                ])
-        self.assertEqual(
-            rlist(dom.parse_clause(iter([iter([['John']])]))), [
-                [('rec_name', 'ilike', '%John%')]])
-        self.assertEqual(
-            rlist(dom.parse_clause(iter([['Relation', None, "Test"]]))),
-            [('relation.rec_name', 'ilike', "%Test%")])
-        self.assertEqual(
-            rlist(dom.parse_clause(iter([['Relation.Name', None, "Test"]]))),
-            [('relation.name', 'ilike', "%Test%")])
-        self.assertEqual(
-            rlist(dom.parse_clause(iter([['Relation.M2O', None, "Foo"]]))),
-            [('relation.m2o.rec_name', 'ilike', "%Foo%")])
-        self.assertEqual(
-            rlist(dom.parse_clause(iter([['Relation.M2O.Foo', None, '42']]))),
-            [('relation.m2o.foo', '=', 42)])
-        self.assertEqual(
-            rlist(dom.parse_clause(iter([['OR']]))),
-            [('rec_name', 'ilike', "%OR%")])
-        self.assertEqual(
-            rlist(dom.parse_clause(iter([['AND']]))),
-            [('rec_name', 'ilike', "%AND%")])
+        for search_text, domain in [
+                ([('John',)], [('rec_name', 'ilike', '%John%')]),
+                ([('Name', None, None)], [('name', 'ilike', '%')]),
+                ([('Name', '', None)], [('name', 'ilike', '%')]),
+                ([('Name', '=', None)], [('name', '=', None)]),
+                ([('Name', '=', '')], [('name', '=', '')]),
+                ([('Name', None, 'Doe')], [('name', 'ilike', '%Doe%')]),
+                ([('Name', '!', 'Doe')], [('name', 'not ilike', '%Doe%')]),
+                (
+                    [('Name', None, ['John', 'Jane'])],
+                    [('name', 'in', ['John', 'Jane'])]),
+                (
+                    [('Name', '!', ['John', 'Jane'])],
+                    [('name', 'not in', ['John', 'Jane'])]),
+                ([('Selection', None, None)], [('selection', '=', None)]),
+                ([('Selection', None, '')], [('selection', '=', '')]),
+                (
+                    [('Selection', None, ['Male', 'Female'])],
+                    [('selection', 'in', ['male', 'female'])]),
+                (
+                    [('MultiSelection', None, None)],
+                    [('multiselection', '=', None)]),
+                (
+                    [('MultiSelection', None, '')],
+                    [('multiselection', 'in', [''])]),
+                (
+                    [('MultiSelection', '=', '')],
+                    [('multiselection', '=', [''])]),
+                (
+                    [('MultiSelection', '!', '')],
+                    [('multiselection', 'not in', [''])]),
+                (
+                    [('MultiSelection', '!=', '')],
+                    [('multiselection', '!=', [''])]),
+                (
+                    [('MultiSelection', None, ['Foo', 'Bar'])],
+                    [('multiselection', 'in', ['foo', 'bar'])]),
+                (
+                    [('MultiSelection', '=', ['Foo', 'Bar'])],
+                    [('multiselection', '=', ['foo', 'bar'])]),
+                (
+                    [('MultiSelection', '!', ['Foo', 'Bar'])],
+                    [('multiselection', 'not in', ['foo', 'bar'])]),
+                (
+                    [('MultiSelection', '!=', ['Foo', 'Bar'])],
+                    [('multiselection', '!=', ['foo', 'bar'])]),
+                ([('Integer', None, None)], [('integer', '=', None)]),
+                (
+                    [('Integer', None, '3..5')],
+                    [[('integer', '>=', 3), ('integer', '<=', 5)]]),
+                (
+                    [('Reference', None, 'foo')],
+                    [('reference', 'ilike', '%foo%')]),
+                (
+                    [('Reference', None, 'Spam')],
+                    [('reference', 'ilike', '%spam%')]),
+                (
+                    [('Reference', None, 'Spam,bar')],
+                    [('reference.rec_name', 'ilike', '%bar%', 'spam')]),
+                (
+                    [('Reference', None, 'Spam,')],
+                    [('reference.rec_name', 'ilike', '%', 'spam')]),
+                (
+                    [('Reference', None, ['foo', 'bar'])],
+                    [('reference', 'in', ['foo', 'bar'])]),
+                (
+                    ['OR', ('Name', None, 'John'), ('Name', None, 'Jane')],
+                    ['OR',
+                        ('name', 'ilike', '%John%'),
+                        ('name', 'ilike', '%Jane%'),
+                        ]),
+                (
+                    [('Many2One', None, 'John')],
+                    [('many2one.rec_name', 'ilike', '%John%')]),
+                (
+                    [('Many2One', None, ['John', 'Jane'])],
+                    [('many2one.rec_name', 'in', ['John', 'Jane'])]),
+                ([('Many2One', '=', None)], [('many2one', '=', None)]),
+                ([('Many2One', '=', '')], [('many2one', '=', None)]),
+                ([iter([['John']])], [[('rec_name', 'ilike', '%John%')]]),
+                (
+                    iter([['Relation', None, "Test"]]),
+                    [('relation.rec_name', 'ilike', "%Test%")]),
+                (
+                    iter([['Relation.Name', None, "Test"]]),
+                    [('relation.name', 'ilike', "%Test%")]),
+                (
+                    iter([['Relation.M2O', None, "Foo"]]),
+                    [('relation.m2o.rec_name', 'ilike', "%Foo%")]),
+                (
+                    iter([['Relation.M2O.Foo', None, '42']]),
+                    [('relation.m2o.foo', '=', 42)]),
+                (iter([['OR']]), [('rec_name', 'ilike', "%OR%")]),
+                (iter([['AND']]), [('rec_name', 'ilike', "%AND%")]),
+                ]:
+            with self.subTest(f'parse_clause({search_text})'):
+                self.assertEqual(rlist(dom.parse_clause(search_text)), domain)
 
     def test_completion_char(self):
         "Test completion char"

Reply via email to