275: Added Command.__check_args(); added basic unit tests for Command.args instance attribute

This commit is contained in:
Jason Gerard DeRose 2008-09-09 23:46:16 +00:00
parent 0453aa465f
commit 349fc660e7
2 changed files with 35 additions and 0 deletions

View File

@ -214,12 +214,39 @@ class Command(plugable.Plugin):
options = tuple()
takes_args = tuple()
def __init__(self):
self.args = plugable.NameSpace(self.__check_args(), sort=False)
def get_args(self):
return self.takes_args
def get_options(self):
return self.options
def __check_args(self):
optional = False
multivalue = False
for arg in self.get_args():
if type(arg) is str:
arg = Option(arg, '', ipa_types.Unicode(), required=True)
elif not isinstance(arg, Option):
raise TypeError(
'arg: need %r or %r; got %r' % (str, Option, arg)
)
if optional and arg.required:
raise ValueError(
'%s: required argument after optional' % arg.name
)
if multivalue:
raise ValueError(
'%s: only final argument can be multivalue' % arg.name
)
if not arg.required:
optional = True
if arg.multivalue:
multivalue = True
yield arg
def __get_Option(self):
"""
Returns the NameSpace containing the Option instances.

View File

@ -368,6 +368,14 @@ class test_Command(ClassChecker):
o = example()
assert o.get_args() is args
def test_args(self):
"""
Tests the ``Command.args`` instance attribute.
"""
ns = self.cls().args
assert type(ns) is plugable.NameSpace
assert len(ns) == 0
def test_get_options(self):
"""
Tests the `public.Command.get_options` method.