Add test for cmd arg types

This commit is contained in:
Florian Bruhin 2016-05-11 06:24:14 +02:00
parent bb8d0a8ee4
commit 9694374673

View File

@ -22,6 +22,7 @@
import pytest
from qutebrowser.commands import cmdutils, cmdexc, argparser, command
from qutebrowser.utils import usertypes
@pytest.fixture(autouse=True)
@ -262,6 +263,44 @@ class TestRegister:
else:
assert pos_args == [('arg', 'arg')]
Enum = usertypes.enum('Test', ['x', 'y'])
@pytest.mark.parametrize('typ, inp, expected', [
(int, '42', 42),
(int, 'x', argparser.ArgumentParserError),
(str, 'foo', 'foo'),
((str, int), 'foo', 'foo'),
((str, int), '42', 42),
(('foo', int), 'foo', 'foo'),
(('foo', int), '42', 42),
(('foo', int), 'bar', cmdexc.ArgumentTypeError),
(Enum, 'x', Enum.x),
(Enum, 'z', argparser.ArgumentParserError),
])
def test_typed_args(self, typ, inp, expected):
@cmdutils.register()
def fun(arg: typ):
"""Blah."""
pass
cmd = cmdutils.cmd_dict['fun']
if expected is argparser.ArgumentParserError:
with pytest.raises(argparser.ArgumentParserError):
cmd.parser.parse_args([inp])
return
else:
cmd.namespace = cmd.parser.parse_args([inp])
if expected is cmdexc.ArgumentTypeError:
with pytest.raises(cmdexc.ArgumentTypeError):
cmd._get_call_args(win_id=0)
else:
assert cmd._get_call_args(win_id=0) == ([expected], {})
class TestArgument: