summaryrefslogtreecommitdiff
path: root/git/test/test_util.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2011-06-08 10:43:47 +0200
committerSebastian Thiel <byronimo@gmail.com>2011-06-08 11:01:37 +0200
commitee9d6b97ad7d7bf6761161dc411258f2aa86d8c0 (patch)
tree24ca6faef1d8983dd43c3c6d54ba344025fef256 /git/test/test_util.py
parent4772fe04c38d2d0bd75d6a0f9d5905ee3ee08ae6 (diff)
downloadgitpython-ee9d6b97ad7d7bf6761161dc411258f2aa86d8c0.tar.gz
util: Added test for iterable list, and implemented __contains__ and __del__ functionality
Diffstat (limited to 'git/test/test_util.py')
-rw-r--r--git/test/test_util.py59
1 files changed, 58 insertions, 1 deletions
diff --git a/git/test/test_util.py b/git/test/test_util.py
index f737e660..7cfcad3f 100644
--- a/git/test/test_util.py
+++ b/git/test/test_util.py
@@ -20,10 +20,20 @@ from git.util import (
to_bin_sha,
NULL_HEX_SHA,
LockedFD,
- Actor
+ Actor,
+ IterableList
)
+class TestIterableMember(object):
+ """A member of an iterable list"""
+ __slots__ = ("name", "prefix_name")
+
+ def __init__(self, name):
+ self.name = name
+ self.prefix_name = name
+
+
class TestUtils(TestBase):
def setup(self):
self.testdict = {
@@ -203,6 +213,53 @@ class TestUtils(TestBase):
self.fail("expected OSError")
# END handle exceptions
+ def test_iterable_list(self):
+ for args in (('name',), ('name', 'prefix_')):
+ l = IterableList('name')
+
+ m1 = TestIterableMember('one')
+ m2 = TestIterableMember('two')
+
+ l.extend((m1, m2))
+
+ assert len(l) == 2
+
+ # contains works with name and identity
+ assert m1.name in l
+ assert m2.name in l
+ assert m2 in l
+ assert m2 in l
+ assert 'invalid' not in l
+
+ # with string index
+ assert l[m1.name] is m1
+ assert l[m2.name] is m2
+
+ # with int index
+ assert l[0] is m1
+ assert l[1] is m2
+
+ # with getattr
+ assert l.one is m1
+ assert l.two is m2
+
+ # test exceptions
+ self.failUnlessRaises(AttributeError, getattr, l, 'something')
+ self.failUnlessRaises(IndexError, l.__getitem__, 'something')
+
+ # delete by name and index
+ self.failUnlessRaises(IndexError, l.__delitem__, 'something')
+ del(l[m2.name])
+ assert len(l) == 1
+ assert m2.name not in l and m1.name in l
+ del(l[0])
+ assert m1.name not in l
+ assert len(l) == 0
+
+ self.failUnlessRaises(IndexError, l.__delitem__, 0)
+ self.failUnlessRaises(IndexError, l.__delitem__, 'something')
+ #END for each possible mode
+
class TestActor(TestBase):
def test_from_string_should_separate_name_and_email(self):