|
8 | 8 | from test.testlib import * |
9 | 9 | from git import * |
10 | 10 | import git.base as base |
| 11 | +from itertools import chain |
11 | 12 |
|
12 | 13 | class TestBase(object): |
13 | 14 |
|
14 | 15 | type_tuples = ( ("blob", "8741fc1d09d61f02ffd8cded15ff603eff1ec070"), |
15 | 16 | ("tree", "3a6a5e3eeed3723c09f1ef0399f81ed6b8d82e79"), |
16 | | - ("commit", "4251bd59fb8e11e40c40548cba38180a9536118c") ) |
| 17 | + ("commit", "4251bd59fb8e11e40c40548cba38180a9536118c"), |
| 18 | + ("tag", "e56a60e8e9cd333cfba0140a77cd12b0d9398f10") ) |
17 | 19 |
|
18 | 20 | def setup(self): |
19 | 21 | self.repo = Repo(GIT_REPO) |
20 | 22 |
|
21 | | - def test_base(self): |
22 | | - # test interface of base classes |
23 | | - fcreators = (self.repo.blob, self.repo.tree, self.repo.commit ) |
| 23 | + def test_base_object(self): |
| 24 | + # test interface of base object classes |
| 25 | + fcreators = (self.repo.blob, self.repo.tree, self.repo.commit, lambda id: TagObject(self.repo,id) ) |
24 | 26 | assert len(fcreators) == len(self.type_tuples) |
25 | | - for fcreator, (typename, hexsha) in zip(fcreators, self.type_tuples): |
| 27 | + |
| 28 | + s = set() |
| 29 | + num_objs = 0 |
| 30 | + num_index_objs = 0 |
| 31 | + for fcreator, (typename, hexsha) in zip(fcreators, self.type_tuples): |
26 | 32 | item = fcreator(hexsha) |
| 33 | + num_objs += 1 |
27 | 34 | assert item.id == hexsha |
28 | 35 | assert item.type == typename |
29 | 36 | assert item.size |
| 37 | + assert item.data |
| 38 | + assert item == item |
| 39 | + assert not item != item |
| 40 | + assert str(item) == item.id |
| 41 | + assert repr(item) |
| 42 | + s.add(item) |
| 43 | + |
| 44 | + if isinstance(item, base.IndexObject): |
| 45 | + num_index_objs += 1 |
| 46 | + if hasattr(item,'path'): # never runs here |
| 47 | + assert not item.path.startswith("/") # must be relative |
| 48 | + assert isinstance(item.mode, int) |
| 49 | + # END index object check |
30 | 50 | # END for each object type to create |
31 | 51 |
|
32 | | - assert False,"TODO: Test for all types" |
| 52 | + # each has a unique sha |
| 53 | + assert len(s) == num_objs |
| 54 | + assert num_index_objs == 2 |
| 55 | + |
33 | 56 |
|
34 | 57 | def test_tags(self): |
35 | 58 | # tag refs can point to tag objects or to commits |
36 | | - assert False, "TODO: Tag handling" |
| 59 | + s = set() |
| 60 | + ref_count = 0 |
| 61 | + for ref in chain(self.repo.tags, self.repo.heads): |
| 62 | + ref_count += 1 |
| 63 | + assert isinstance(ref, base.Ref) |
| 64 | + assert str(ref) == ref.name |
| 65 | + assert repr(ref) |
| 66 | + assert ref == ref |
| 67 | + assert not ref != ref |
| 68 | + s.add(ref) |
| 69 | + # END for each ref |
| 70 | + assert len(s) == ref_count |
37 | 71 |
|
38 | 72 | def test_get_type_by_name(self): |
39 | 73 | for tname in base.Object.TYPES: |
|
0 commit comments