diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-28 04:54:48 +0000 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-08-28 04:54:48 +0000 |
commit | b865b30511316f2874de6c95b648e6f653f5a46c (patch) | |
tree | a9558a12c455987995dc39ac84dd7d31c79d4af1 | |
parent | d121a729aa1b0e97dcf927bfc66eb86a73529863 (diff) | |
download | freeipa.git-b865b30511316f2874de6c95b648e6f653f5a46c.tar.gz freeipa.git-b865b30511316f2874de6c95b648e6f653f5a46c.tar.xz freeipa.git-b865b30511316f2874de6c95b648e6f653f5a46c.zip |
213: Added ipa_type.Bool class; added corresponding unit tests
-rw-r--r-- | ipalib/ipa_types.py | 22 | ||||
-rw-r--r-- | ipalib/tests/test_ipa_types.py | 39 |
2 files changed, 61 insertions, 0 deletions
diff --git a/ipalib/ipa_types.py b/ipalib/ipa_types.py index fe35a9ac..ff62af22 100644 --- a/ipalib/ipa_types.py +++ b/ipalib/ipa_types.py @@ -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') diff --git a/ipalib/tests/test_ipa_types.py b/ipalib/tests/test_ipa_types.py index f594aabf..37546d9e 100644 --- a/ipalib/tests/test_ipa_types.py +++ b/ipalib/tests/test_ipa_types.py @@ -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 |