Fix domain parser when value is a list

review591002
(transplanted from 61d834ed6a8c49c89c29b85b3134ae28112cb9ee)
This commit is contained in:
Cédric Krier committed 2012-11-02 16:19:00 +01:00
1 parent 58bac50f46
commit 3af52d7994
1 file changed
+42 -3
+42 -3
View File
@@ -541,9 +541,15 @@ def complete_value(field, value):
yield True
def complete_selection():
test_value = value
if isinstance(value, list):
test_value = value[-1]
for svalue, test in field['selection']:
if test.lower().startswith(value.lower()):
yield svalue
if test.lower().startswith(test_value.lower()):
if test_value == value:
yield svalue
else:
yield value[:-1] + [svalue]
def complete_datetime():
yield datetime.date.today()
@@ -566,6 +572,23 @@ def complete_value(field, value):
return completes.get(field['type'], lambda: [])()
def test_complete_selection():
field = {
'type': 'selection',
'selection': [
('male', 'Male'),
('female', 'Female'),
],
}
for value, result in (
('m', ['male']),
('test', []),
('', ['male', 'female']),
(['male', 'f'], [['male', 'female']]),
):
assert list(complete_value(field, value)) == result
def parenthesize(tokens):
"Nest tokens according to parenthesis"
for token in tokens:
@@ -912,7 +935,10 @@ class DomainParser(object):
(field['name'], '<', rvalue),
])
continue
value = convert_value(field, value)
if isinstance(value, list):
value = [convert_value(field, v) for v in value]
else:
value = convert_value(field, value)
yield field['name'], operator, value
@@ -1045,6 +1071,15 @@ def test_parse_clause():
'name': 'integer',
'type': 'integer',
},
'selection': {
'string': 'Selection',
'name': 'selection',
'type': 'selection',
'selection': [
('male', 'Male'),
('female', 'Female'),
],
},
})
assert rlist(dom.parse_clause([('John',)])) == [
('rec_name', 'ilike', '%John%')]
@@ -1058,6 +1093,10 @@ def test_parse_clause():
assert rlist(dom.parse_clause([('Name', '!', ['John', 'Jane'])])) == [
('name', 'not in', ['John', 'Jane']),
]
assert rlist(dom.parse_clause([('Selection', None, ['Male', 'Female'])])) \
== [
('selection', 'in', ['male', 'female'])
]
assert rlist(dom.parse_clause([('Integer', None, '3..5')])) == [[
('integer', '>=', 3),
('integer', '<', 5),