summaryrefslogtreecommitdiffstats
path: root/ipalib/tests
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-08-15 01:04:19 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-08-15 01:04:19 +0000
commitf6c2181eebf6e6bd794eaca8b78d3b35ad3be4e4 (patch)
tree4b0fc2718504736d16916445aeabde7e01ff46b7 /ipalib/tests
parent88a5b3ae2587ef71efecc1b59eb9ec94e09cacad (diff)
downloadfreeipa-f6c2181eebf6e6bd794eaca8b78d3b35ad3be4e4.tar.gz
freeipa-f6c2181eebf6e6bd794eaca8b78d3b35ad3be4e4.tar.xz
freeipa-f6c2181eebf6e6bd794eaca8b78d3b35ad3be4e4.zip
170: Added SetProxy and DictProxy classes to plugable so container emulation can be consolidated
Diffstat (limited to 'ipalib/tests')
-rw-r--r--ipalib/tests/test_plugable.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/ipalib/tests/test_plugable.py b/ipalib/tests/test_plugable.py
index ba665447a..0410bf317 100644
--- a/ipalib/tests/test_plugable.py
+++ b/ipalib/tests/test_plugable.py
@@ -117,6 +117,94 @@ def test_lock():
raises(AssertionError, f, o)
+class test_SetProxy(ClassChecker):
+ """
+ Tests the `plugable.SetProxy` class.
+ """
+ _cls = plugable.SetProxy
+
+ def test_class(self):
+ assert self.cls.__bases__ == (plugable.ReadOnly,)
+
+ def test_init(self):
+ okay = (set, frozenset, dict)
+ fail = (list, tuple)
+ for t in okay:
+ self.cls(t())
+ raises(TypeError, self.cls, t)
+ for t in fail:
+ raises(TypeError, self.cls, t())
+ raises(TypeError, self.cls, t)
+
+ def test_SetProxy(self):
+ def get_key(i):
+ return 'key_%d' % i
+
+ cnt = 10
+ target = set()
+ proxy = self.cls(target)
+ for i in xrange(cnt):
+ key = get_key(i)
+
+ # Check initial state
+ assert len(proxy) == len(target)
+ assert list(proxy) == sorted(target)
+ assert key not in proxy
+ assert key not in target
+
+ # Add and test again
+ target.add(key)
+ assert len(proxy) == len(target)
+ assert list(proxy) == sorted(target)
+ assert key in proxy
+ assert key in target
+
+
+class test_DictProxy(ClassChecker):
+ """
+ Tests the `plugable.DictProxy` class.
+ """
+ _cls = plugable.DictProxy
+
+ def test_class(self):
+ assert self.cls.__bases__ == (plugable.SetProxy,)
+
+ def test_init(self):
+ self.cls(dict())
+ raises(TypeError, self.cls, dict)
+ fail = (set, frozenset, list, tuple)
+ for t in fail:
+ raises(TypeError, self.cls, t())
+ raises(TypeError, self.cls, t)
+
+ def test_DictProxy(self):
+ def get_kv(i):
+ return (
+ 'key_%d' % i,
+ 'val_%d' % i,
+ )
+ cnt = 10
+ target = dict()
+ proxy = self.cls(target)
+ for i in xrange(cnt):
+ (key, val) = get_kv(i)
+
+ # Check initial state
+ assert len(proxy) == len(target)
+ assert list(proxy) == sorted(target)
+ assert key not in proxy
+ raises(KeyError, getitem, proxy, key)
+
+ # Add and test again
+ target[key] = val
+ assert len(proxy) == len(target)
+ assert list(proxy) == sorted(target)
+
+ # Verify TypeError is raised trying to set/del via proxy
+ raises(TypeError, setitem, proxy, key, val)
+ raises(TypeError, delitem, proxy, key)
+
+
class test_Plugin(ClassChecker):
"""
Tests the `plugable.Plugin` class.