From ec8838b41aa536b8ac76679cf3ff1d572ff66f75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Mon, 16 Sep 2019 23:59:43 +0200 Subject: [PATCH] Improve completion on boolean - Do not convert None to False - Complete with the opposite or both values issue8620 review254181002 --- tryton/common/domain_parser.py | 46 +++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/tryton/common/domain_parser.py b/tryton/common/domain_parser.py index 3714565e2b..4a181d0e0a 100644 --- a/tryton/common/domain_parser.py +++ b/tryton/common/domain_parser.py @@ -237,8 +237,6 @@ def convert_value(field, value, context=None): return any(test.lower().startswith(value.lower()) for test in ( _('y'), _('Yes'), _('True'), _('t'), '1')) - else: - return bool(value) def convert_float(): factor = float(field.get('factor', 1)) @@ -332,7 +330,7 @@ def test_convert_boolean(): ('False', False), ('no', False), ('0', False), - (None, False), + (None, None), ): assert convert_value(field, value) == result @@ -487,7 +485,12 @@ def format_value(field, value, target=None, context=None): context = {} def format_boolean(): - return _('True') if value else _('False') + if value is False: + return _("False") + elif value: + return _("True") + else: + return '' def format_integer(): factor = float(field.get('factor', 1)) @@ -580,7 +583,7 @@ def test_format_boolean(): for value, result in ( (True, 'True'), (False, 'False'), - (None, 'False'), + (None, ''), ): assert format_value(field, value) == result @@ -738,7 +741,10 @@ def complete_value(field, value): "Complete value for field" def complete_boolean(): - if value: + if value is None: + yield True + yield False + elif value: yield False else: yield True @@ -788,6 +794,18 @@ def complete_value(field, value): return completes.get(field['type'], lambda: [])() +def test_complete_boolean(): + field = { + 'type': 'boolean', + } + for value, result in [ + (None, [True, False]), + (True, [False]), + (False, [True]), + ]: + assert list(complete_value(field, value)) == result + + def test_complete_selection(): field = { 'type': 'selection', @@ -1674,6 +1692,22 @@ def test_completion(): assert list(dom.completion('Relatio')) == [ 'Relation: ', 'Relation.Name: '] + dom = DomainParser({ + 'name': { + 'string': "Active", + 'name': 'active', + 'type': 'boolean', + }, + }) + + assert list(dom.completion("Act")) == ["Active: "] + assert list(dom.completion("Active:")) == [ + "Active: ", "Active: True", "Active: False"] + assert list(dom.completion("Active: t")) == [ + "Active: True", "Active: False"] + assert list(dom.completion("Active: f")) == [ + "Active: False", "Active: True"] + if __name__ == '__main__': for name in list(globals()):