213: Added ipa_type.Bool class; added corresponding unit tests

This commit is contained in:
Jason Gerard DeRose 2008-08-28 04:54:48 +00:00
parent d121a729aa
commit b865b30511
2 changed files with 61 additions and 0 deletions

View File

@ -81,6 +81,28 @@ class Type(ReadOnly):
return self.convert(value)
class Bool(Type):
def __init__(self, true='Yes', false='No'):
if true is None:
raise TypeError('`true` cannot be None')
if false is None:
raise TypeError('`false` cannot be None')
if true == false:
raise ValueError(
'cannot be equal: true=%r, false=%r' % (true, false)
)
self.true = true
self.false = false
super(Bool, self).__init__(bool)
def convert(self, value):
if value == self.true:
return True
if value == self.false:
return False
return None
class Int(Type):
def __init__(self, min_value=None, max_value=None):
check_min_max(min_value, max_value, 'min_value', 'max_value')

View File

@ -88,6 +88,45 @@ class test_Type(ClassChecker):
assert str(e) == 'not an allowed type: %r' % t
class test_Bool(ClassChecker):
_cls = ipa_types.Bool
def test_class(self):
assert self.cls.__bases__ == (ipa_types.Type,)
def test_init(self):
o = self.cls()
assert o.__islocked__() is True
assert read_only(o, 'type') is bool
assert read_only(o, 'name') == 'Bool'
assert read_only(o, 'true') == 'Yes'
assert read_only(o, 'false') == 'No'
keys = ('true', 'false')
val = 'some value'
for key in keys:
# Check that kwarg sets appropriate attribute:
o = self.cls(**{key: val})
assert read_only(o, key) is val
# Check that None raises TypeError:
e = raises(TypeError, self.cls, **{key: None})
assert str(e) == '`%s` cannot be None' % key
# Check that ValueError is raise if true == false:
e = raises(ValueError, self.cls, true=1L, false=1.0)
assert str(e) == 'cannot be equal: true=1L, false=1.0'
def test_call(self):
o = self.cls()
assert o(True) is True
assert o('Yes') is True
assert o(False) is False
assert o('No') is False
for value in (0, 1, 'True', 'False', 'yes', 'no'):
# value is not be converted, so None is returned
assert o(value) is None
class test_Int(ClassChecker):
_cls = ipa_types.Int