231: Added Option2.get_default() method; added corresponding unit tests

This commit is contained in:
Jason Gerard DeRose 2008-09-02 19:05:10 +00:00
parent bc08225dcd
commit 85f7a08e5d
2 changed files with 48 additions and 2 deletions

View File

@ -86,8 +86,13 @@ class DefaultFrom(plugable.ReadOnly):
class Option2(plugable.ReadOnly):
def __init__(self, name, doc, type_, required=False, multivalue=False,
default=None, default_from=None, rules=tuple(), normalize=None):
def __init__(self, name, doc, type_,
required=False,
multivalue=False,
default=None,
default_from=None,
rules=tuple(),
normalize=None):
self.name = check_name(name)
self.doc = check_type(doc, str, 'doc')
self.type = check_isinstance(type_, ipa_types.Type, 'type_')
@ -140,6 +145,13 @@ class Option2(plugable.ReadOnly):
else:
self.__validate_scalar(value)
def get_default(self, **kw):
if self.default_from is not None:
default = self.default_from(**kw)
if default is not None:
return self.convert(default)
return self.convert(self.default)
class Option(plugable.Plugin):
"""

View File

@ -257,6 +257,40 @@ class test_Option2(ClassChecker):
assert e.value is fail_type
assert e.error == 'Must be a string'
def test_get_default(self):
"""
Tests the `public.Option2.get_default` method.
"""
name = 'greeting'
doc = 'User greeting'
type_ = ipa_types.Unicode()
default = u'Hello, world!'
default_from = public.DefaultFrom(
lambda first, last: u'Hello, %s %s!' % (first, last),
'first', 'last'
)
# Scenario 1: multivalue=False
o = self.cls(name, doc, type_,
default=default,
default_from=default_from,
)
assert o.default is default
assert o.default_from is default_from
assert o.get_default() == default
assert o.get_default(first='John', last='Doe') == 'Hello, John Doe!'
# Scenario 2: multivalue=True
o = self.cls(name, doc, type_,
default=default,
default_from=default_from,
multivalue=True,
)
assert o.default is default
assert o.default_from is default_from
assert o.get_default() == (default,)
assert o.get_default(first='John', last='Doe') == ('Hello, John Doe!',)
class test_Option(ClassChecker):
"""