Fix CommandParser and don't use a generator
This commit is contained in:
parent
a8c7e8ba05
commit
978013e750
@ -118,7 +118,7 @@ class CommandParser:
|
||||
new_cmd += ' '
|
||||
return new_cmd
|
||||
|
||||
def parse_all(self, text, aliases=True, *args, **kwargs):
|
||||
def _parse_all_gen(self, text, aliases=True, *args, **kwargs):
|
||||
"""Split a command on ;; and parse all parts.
|
||||
|
||||
If the first command in the commandline is a non-split one, it only
|
||||
@ -153,6 +153,10 @@ class CommandParser:
|
||||
for sub in sub_texts:
|
||||
yield self.parse(sub, *args, **kwargs)
|
||||
|
||||
def parse_all(self, *args, **kwargs):
|
||||
"""Wrapper over parse_all."""
|
||||
return list(self._parse_all_gen(*args, **kwargs))
|
||||
|
||||
def parse(self, text, *, fallback=False, keep=False):
|
||||
"""Split the commandline text into command and arguments.
|
||||
|
||||
|
@ -747,7 +747,7 @@ class Command(BaseType):
|
||||
from qutebrowser.commands import runners, cmdexc
|
||||
parser = runners.CommandParser()
|
||||
try:
|
||||
list(parser.parse_all(value))
|
||||
parser.parse_all(value)
|
||||
except cmdexc.Error as e:
|
||||
raise configexc.ValidationError(value, str(e))
|
||||
finally:
|
||||
|
@ -24,9 +24,7 @@ import pytest
|
||||
from qutebrowser.commands import runners, cmdexc
|
||||
|
||||
|
||||
class TestCommandRunner:
|
||||
|
||||
"""Tests for CommandRunner."""
|
||||
class TestCommandParser:
|
||||
|
||||
def test_parse_all(self, cmdline_test):
|
||||
"""Test parsing of commands.
|
||||
@ -36,22 +34,22 @@ class TestCommandRunner:
|
||||
Args:
|
||||
cmdline_test: A pytest fixture which provides testcases.
|
||||
"""
|
||||
cr = runners.CommandRunner(0)
|
||||
parser = runners.CommandParser()
|
||||
if cmdline_test.valid:
|
||||
list(cr.parse_all(cmdline_test.cmd, aliases=False))
|
||||
parser.parse_all(cmdline_test.cmd, aliases=False)
|
||||
else:
|
||||
with pytest.raises(cmdexc.NoSuchCommandError):
|
||||
list(cr.parse_all(cmdline_test.cmd, aliases=False))
|
||||
parser.parse_all(cmdline_test.cmd, aliases=False)
|
||||
|
||||
def test_parse_all_with_alias(self, cmdline_test, config_stub):
|
||||
config_stub.data = {'aliases': {'alias_name': cmdline_test.cmd}}
|
||||
|
||||
cr = runners.CommandRunner(0)
|
||||
parser = runners.CommandParser()
|
||||
if cmdline_test.valid:
|
||||
assert len(list(cr.parse_all("alias_name"))) > 0
|
||||
assert len(parser.parse_all("alias_name")) > 0
|
||||
else:
|
||||
with pytest.raises(cmdexc.NoSuchCommandError):
|
||||
list(cr.parse_all("alias_name"))
|
||||
parser.parse_all("alias_name")
|
||||
|
||||
@pytest.mark.parametrize('command', ['', ' '])
|
||||
def test_parse_empty_with_alias(self, command):
|
||||
@ -60,15 +58,15 @@ class TestCommandRunner:
|
||||
See https://github.com/qutebrowser/qutebrowser/issues/1690
|
||||
and https://github.com/qutebrowser/qutebrowser/issues/1773
|
||||
"""
|
||||
cr = runners.CommandRunner(0)
|
||||
parser = runners.CommandParser()
|
||||
with pytest.raises(cmdexc.NoSuchCommandError):
|
||||
list(cr.parse_all(command))
|
||||
parser.parse_all(command)
|
||||
|
||||
def test_partial_parsing(self):
|
||||
"""Test partial parsing with a runner where it's enabled.
|
||||
|
||||
The same with it being disabled is tested by test_parse_all.
|
||||
"""
|
||||
cr = runners.CommandRunner(0, partial_match=True)
|
||||
result = cr.parse('message-i')
|
||||
parser = runners.CommandParser(partial_match=True)
|
||||
result = parser.parse('message-i')
|
||||
assert result.cmd.name == 'message-info'
|
||||
|
Loading…
Reference in New Issue
Block a user