301: Command.args_to_kw() now raises ArgumentError if more args than max_args are given

This commit is contained in:
Jason Gerard DeRose 2008-09-18 23:53:23 +00:00
parent e0b900894f
commit f29c827d06
2 changed files with 24 additions and 2 deletions

View File

@ -388,6 +388,14 @@ class Command(plugable.Plugin):
yield None
def args_to_kw(self, *values):
if self.max_args is not None and len(values) > self.max_args:
if self.max_args == 0:
raise errors.ArgumentError(self, 'takes no arguments')
if self.max_args == 1:
raise errors.ArgumentError(self, 'takes at most 1 argument')
raise errors.ArgumentError(self,
'takes at most %d arguments' % len(self.args)
)
return dict(self.__args_to_kw_iter(values))
def __args_to_kw_iter(self, values):

View File

@ -600,6 +600,9 @@ class test_Command(ClassChecker):
assert str(e) == 'example takes at least 2 arguments'
def test_args_to_kw(self):
"""
Test the `public.Command.args_to_kw` method.
"""
o = self.get_instance(args=('one', 'two?'))
assert o.args_to_kw(1) == dict(one=1)
assert o.args_to_kw(1, 2) == dict(one=1, two=2)
@ -614,9 +617,21 @@ class test_Command(ClassChecker):
assert o.args_to_kw(1, 2) == dict(one=1, two=(2,))
assert o.args_to_kw(1, 2, 3) == dict(one=1, two=(2, 3))
o = self.get_instance()
e = raises(errors.ArgumentError, o.args_to_kw, 1)
assert str(e) == 'example takes no arguments'
o = self.get_instance(args=('one?',))
e = raises(errors.ArgumentError, o.args_to_kw, 1, 2)
assert str(e) == 'example takes at most 1 argument'
o = self.get_instance(args=('one', 'two?'))
e = raises(errors.ArgumentError, o.args_to_kw, 1, 2, 3)
assert str(e) == 'example takes at most 2 arguments'
def test_kw_to_args(self):
"""
Tests the `public.Command.kw_to_arg` method.
Tests the `public.Command.kw_to_args` method.
"""
o = self.get_instance(args=('one', 'two?'))
assert o.kw_to_args() == (None, None)
@ -627,7 +642,6 @@ class test_Command(ClassChecker):
('One', 'Two')
class test_Object(ClassChecker):
"""
Tests the `public.Object` class.