183: Added public.DefaultFrom class; added corresponding unit tests

This commit is contained in:
Jason Gerard DeRose 2008-08-22 20:07:17 +00:00
parent b0ec8fe551
commit cad924168e
2 changed files with 56 additions and 0 deletions

View File

@ -25,6 +25,7 @@ and UI all use.
import re
import inspect
import plugable
from plugable import lock
import errors
@ -39,6 +40,26 @@ def is_rule(obj):
return callable(obj) and getattr(obj, RULE_FLAG, False) is True
class DefaultFrom(plugable.ReadOnly):
def __init__(self, callback, *keys):
assert callable(callback), 'not a callable: %r' % callback
self.callback = callback
self.keys = keys
lock(self)
def __call__(self, **kw):
vals = tuple(kw.get(k, None) for k in self.keys)
if None in vals:
return None
try:
ret = self.callback(*vals)
except Exception:
return None
if isinstance(ret, basestring):
return ret
return None
class option(plugable.Plugin):
"""
The option class represents a kw argument from a command.

View File

@ -63,6 +63,41 @@ def test_is_rule():
assert not is_rule(call(None))
class test_DefaltFrom(ClassChecker):
"""
Tests the `public.DefaltFrom` class.
"""
_cls = public.DefaultFrom
def test_class(self):
assert self.cls.__bases__ == (plugable.ReadOnly,)
def test_init(self):
def callback(*args):
return args
keys = ('givenname', 'sn')
o = self.cls(callback, *keys)
assert read_only(o, 'callback') is callback
assert read_only(o, 'keys') == keys
def test_call(self):
def callback(givenname, sn):
return givenname[0] + sn[0]
keys = ('givenname', 'sn')
o = self.cls(callback, *keys)
kw = dict(
givenname='John',
sn='Public',
hello='world',
)
assert o(**kw) == 'JP'
assert o() is None
for key in ('givenname', 'sn'):
kw_copy = dict(kw)
del kw_copy[key]
assert o(**kw_copy) is None
class test_option(ClassChecker):
"""
Tests the `public.option` class.