summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-08-07 06:02:46 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-08-07 06:02:46 +0000
commit8cbd8343be843e2972b0f59250c148973f26a091 (patch)
treeb0f4cb48084777294664a57c5466b83d5e218b73 /ipalib
parent2cc88a7a3233d6bd70ec174ba976d093dc7f0d98 (diff)
downloadfreeipa.git-8cbd8343be843e2972b0f59250c148973f26a091.tar.gz
freeipa.git-8cbd8343be843e2972b0f59250c148973f26a091.tar.xz
freeipa.git-8cbd8343be843e2972b0f59250c148973f26a091.zip
75: Fixed opt.__rules_iter; added corresponding unit tests
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/public.py18
-rw-r--r--ipalib/tests/test_public.py26
2 files changed, 38 insertions, 6 deletions
diff --git a/ipalib/public.py b/ipalib/public.py
index baae83e4..9467feaf 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -58,17 +58,24 @@ class opt(plugable.ReadOnly):
def __get_rules(self):
if self.__rules is None:
- self.__rules = tuple(self.__rules_iter())
+ rules = sorted(
+ self.__rules_iter(),
+ key=lambda f: getattr(f, '__name__'),
+ )
+ object.__setattr__(self, '_opt__rules', tuple(rules))
return self.__rules
rules = property(__get_rules)
def __rules_iter(self):
- for name in dir(self):
+ for name in dir(self.__class__):
if name.startswith('_'):
continue
- attr = getattr(self, name)
- if is_rule(attr):
- yield attr
+ base_attr = getattr(self.__class__, name)
+ if is_rule(base_attr):
+ attr = getattr(self, name)
+ if is_rule(attr):
+ yield attr
+
def validate(self, value):
pass
@@ -77,7 +84,6 @@ class opt(plugable.ReadOnly):
-
class cmd(plugable.Plugin):
__public__ = frozenset((
'normalize',
diff --git a/ipalib/tests/test_public.py b/ipalib/tests/test_public.py
index ef2ded17..87d6d104 100644
--- a/ipalib/tests/test_public.py
+++ b/ipalib/tests/test_public.py
@@ -68,10 +68,36 @@ class test_opt():
return public.opt
def sub(self):
+ rule = public.rule
class int_opt(self.cls()):
type = int
+ @rule
+ def rule_a(self, value):
+ if value == 'a':
+ return 'cannot be a'
+ @rule
+ def rule_b(self, value):
+ if value == 'b':
+ return 'cannot be b'
+ @rule
+ def rule_c(self, value):
+ if value == 'c':
+ return 'cannot be c'
return int_opt
+ def test_rules(self):
+ """
+ Test the rules property.
+ """
+ i = self.sub()()
+ def i_attr(l):
+ return getattr(i, 'rule_%s' % l)
+ letters = ('a', 'b', 'c')
+ rules = tuple(i_attr(l) for l in letters)
+ assert i.rules == rules
+
+
+
def test_class(self):
cls = self.cls()
assert issubclass(cls, plugable.ReadOnly)