Fix completions for FlagList
This commit is contained in:
parent
54c417391d
commit
3be7299cb4
@ -510,7 +510,7 @@ class FlagList(List):
|
||||
# Single value completions
|
||||
for value in valid_values:
|
||||
desc = valid_values.descriptions.get(value, "")
|
||||
out.append((value, desc))
|
||||
out.append((json.dumps([value]), desc))
|
||||
|
||||
combinables = self.combinable_values
|
||||
if combinables is None:
|
||||
@ -518,7 +518,7 @@ class FlagList(List):
|
||||
# Generate combinations of each possible value combination
|
||||
for size in range(2, len(combinables) + 1):
|
||||
for combination in itertools.combinations(combinables, size):
|
||||
out.append((','.join(combination), ''))
|
||||
out.append((json.dumps(combination), ''))
|
||||
return out
|
||||
|
||||
|
||||
|
@ -278,6 +278,14 @@ class TestAll:
|
||||
with pytest.raises(configexc.ValidationError):
|
||||
klass().to_py(object())
|
||||
|
||||
def test_completion_validity(self, klass):
|
||||
"""Make sure all completions are actually valid values."""
|
||||
typ = klass()
|
||||
completions = typ.complete()
|
||||
if completions is not None:
|
||||
for value, _desc in completions:
|
||||
typ.from_str(value)
|
||||
|
||||
|
||||
class TestBaseType:
|
||||
|
||||
@ -640,24 +648,24 @@ class TestFlagList:
|
||||
def test_complete(self, klass):
|
||||
"""Test completing by doing some samples."""
|
||||
typ = klass(set_valid_values=True)
|
||||
completions = [e[0] for e in typ.complete()]
|
||||
assert 'foo' in completions
|
||||
assert 'bar' in completions
|
||||
assert 'baz' in completions
|
||||
assert 'foo,bar' in completions
|
||||
completions = [json.loads(e[0]) for e in typ.complete()]
|
||||
assert ['foo'] in completions
|
||||
assert ['bar'] in completions
|
||||
assert ['baz'] in completions
|
||||
assert ['foo', 'bar'] in completions
|
||||
for val in completions:
|
||||
assert 'baz,' not in val
|
||||
assert ',baz' not in val
|
||||
if len(val) > 1:
|
||||
assert 'baz' not in val
|
||||
|
||||
def test_complete_all_valid_values(self, klass):
|
||||
typ = klass(set_valid_values=True)
|
||||
typ.combinable_values = None
|
||||
completions = [e[0] for e in typ.complete()]
|
||||
assert 'foo' in completions
|
||||
assert 'bar' in completions
|
||||
assert 'baz' in completions
|
||||
assert 'foo,bar' in completions
|
||||
assert 'foo,baz' in completions
|
||||
completions = [json.loads(e[0]) for e in typ.complete()]
|
||||
assert ['foo'] in completions
|
||||
assert ['bar'] in completions
|
||||
assert ['baz'] in completions
|
||||
assert ['foo', 'bar'] in completions
|
||||
assert ['foo', 'baz'] in completions
|
||||
|
||||
def test_complete_no_valid_values(self, klass):
|
||||
assert klass().complete() is None
|
||||
@ -1910,18 +1918,6 @@ class TestConfirmQuit:
|
||||
with pytest.raises(configexc.ValidationError):
|
||||
klass().to_py(val)
|
||||
|
||||
def test_complete(self, klass):
|
||||
"""Test completing by doing some samples."""
|
||||
completions = [e[0] for e in klass().complete()]
|
||||
assert 'always' in completions
|
||||
assert 'never' in completions
|
||||
assert 'multiple-tabs,downloads' in completions
|
||||
for val in completions:
|
||||
assert 'always,' not in val
|
||||
assert ',always' not in val
|
||||
assert 'never,' not in val
|
||||
assert ',never' not in val
|
||||
|
||||
|
||||
class TestTimestampTemplate:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user