diff options
author | Sebastian Thiel <byronimo@gmail.com> | 2011-06-08 10:43:47 +0200 |
---|---|---|
committer | Sebastian Thiel <byronimo@gmail.com> | 2011-06-08 11:01:37 +0200 |
commit | ee9d6b97ad7d7bf6761161dc411258f2aa86d8c0 (patch) | |
tree | 24ca6faef1d8983dd43c3c6d54ba344025fef256 /git/test/test_util.py | |
parent | 4772fe04c38d2d0bd75d6a0f9d5905ee3ee08ae6 (diff) | |
download | gitpython-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.py | 59 |
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): |