diff --git a/src/common.js b/src/common.js index 35a37f194b..bb3eaf986c 100644 --- a/src/common.js +++ b/src/common.js @@ -1386,7 +1386,13 @@ }, complete_value: function(field, value) { var complete_boolean = function() { - return value ? [true] : [false]; + if ((value === null) || (value === undefined)) { + return [true, false]; + } else if (value) { + return [false]; + } else { + return [true]; + } }; var complete_selection = function() { @@ -1848,9 +1854,8 @@ return test.toLowerCase().startsWith( value.toLowerCase()); }); - } else { - return Boolean(value); } + return null; }, 'float': function() { var factor = Number(field.factor || 1); @@ -1966,10 +1971,12 @@ var converts = { 'boolean': function() { - if (value) { + if (value === false) { + return Sao.i18n.gettext('False'); + } else if (value) { return Sao.i18n.gettext('True'); } else { - return Sao.i18n.gettext('False'); + return ''; } }, 'integer': function() { diff --git a/tests/sao.js b/tests/sao.js index 314dcba88f..5d0e44f287 100644 --- a/tests/sao.js +++ b/tests/sao.js @@ -1308,7 +1308,7 @@ ['False', false], ['no', false], ['0', false], - [null, false] + [null, null], ].forEach(test_func, field); field = { @@ -1553,7 +1553,7 @@ [ [true, 'True'], [false, 'False'], - [null, 'False'] + [null, ''] ].forEach(test_func, field); field = { @@ -1812,6 +1812,15 @@ ', ' + JSON.stringify(value) + ')'); }; + field = { + 'type': 'boolean', + }; + [ + [null, [true, false]], + [true, [false]], + [false, [true]], + ].forEach(test_func, field); + field = { 'type': 'selection', 'selection': [ @@ -2536,6 +2545,21 @@ }); QUnit.ok(compare(parser.completion('Relatio'), ["Relation: ", "Relation.Name: "])); + + parser = new Sao.common.DomainParser({ + 'name': { + 'string': "Active", + 'name': 'active', + 'type': 'boolean', + }, + }); + QUnit.ok(compare(parser.completion("Act"), ["Active: "])); + QUnit.ok(compare(parser.completion("Active:"), + ["Active: ", "Active: True", "Active: False"])); + QUnit.ok(compare(parser.completion("Active: t"), + ["Active: True", "Active: False"])); + QUnit.ok(compare(parser.completion("Active: f"), + ["Active: False", "Active: True"])); }); /*