109: Cleanups in cmd; added unit tests for cmd.validate()

This commit is contained in:
Jason Gerard DeRose
2008-08-11 19:11:26 +00:00
parent 8a6ece2ffb
commit 5313e5a491
2 changed files with 35 additions and 5 deletions

View File

@@ -46,13 +46,12 @@ class option(plugable.Plugin):
__public__ = frozenset((
'normalize',
'validate',
'default',
'validate',
'required',
'type',
))
__rules = None
type = unicode
required = False
@@ -94,10 +93,11 @@ class option(plugable.Plugin):
tuple is lazily initialized the first time the property is accessed.
"""
if self.__rules is None:
self.__rules = tuple(sorted(
rules = tuple(sorted(
self.__rules_iter(),
key=lambda f: getattr(f, '__name__'),
))
object.__setattr__(self, '_option__rules', rules)
return self.__rules
rules = property(__get_rules)
@@ -132,6 +132,7 @@ class cmd(plugable.Plugin):
'normalize',
'default',
'validate',
'execute',
'__call__',
'get_doc',
'options',
@@ -196,7 +197,18 @@ class cmd(plugable.Plugin):
def validate(self, **kw):
for (key, value) in kw.items():
if key in self.options:
self.options.validate(value)
self.options[key].validate(value)
def execute(self, **kw)
pass
def print_n_call(self, method, kw):
print '%s.%s(%s)' % (
self.name,
method,
' '.join('%s=%r' % (k, v) for (k, v) in kw.items()),
)
getattr(self, method)(**kw)
def __call__(self, **kw):
kw = self.normalize(**kw)

View File

@@ -170,7 +170,7 @@ class test_cmd(ClassChecker):
@public.rule
def my_rule(self, value):
if value != self.name:
return 'must equal %s' % name
return 'must equal %r' % self.name
def default(self, **kw):
return kw['default_from']
@@ -249,6 +249,24 @@ class test_cmd(ClassChecker):
assert sub.default(**no_fill) == {}
assert sub.default(**fill) == default
def test_validate(self):
"""
Tests the `validate` method.
"""
assert 'validate' in self.cls.__public__ # Public
sub = self.subcls()
for name in ('option0', 'option1'):
okay = {
name: name,
'another_option': 'some value',
}
fail = {
name: 'whatever',
'another_option': 'some value',
}
sub.validate(**okay)
raises(errors.RuleError, sub.validate, **fail)
def test_obj():
cls = public.obj