Added insert_after, insert_before, insert_first and insert_last
[joel/kofoto.git] / src / test / iomtests.py
1 #! /usr/bin/env python
2
3 import os
4 import sys
5 import unittest
6
7 if __name__ == "__main__":
8     cwd = os.getcwd()
9     libdir = unicode(os.path.realpath(
10         os.path.join(os.path.dirname(sys.argv[0]), "..", "packages")))
11     os.chdir(libdir)
12     sys.path.insert(0, libdir)
13 from kofoto.insertionorderedmapping import *
14
15 class TestInsertionOrderedMapping(unittest.TestCase):
16     def setUp(self):
17         self.iom = InsertionOrderedMapping([
18             (1, "a"),
19             (3, "c"),
20             (2, "b"),
21             ])
22
23     def tearDown(self):
24         del self.iom
25
26     def test___cmp__(self):
27         assert(cmp(self.iom, self.iom) == 0)
28         iom2 = self.iom.copy()
29         assert(cmp(self.iom, iom2) == 0)
30         del iom2[3]
31         assert(cmp(self.iom, iom2) == 1)
32         del self.iom[2]
33         del self.iom[3]
34         assert(cmp(self.iom, iom2) == -1)
35
36     def test___contains__(self):
37         assert(0 not in self.iom)
38         assert("a" not in self.iom)
39         assert(1 in self.iom)
40         assert(2 in self.iom)
41         assert(3 in self.iom)
42
43     def test___delitem__(self):
44         try:
45             del self.iom[0]
46         except KeyError:
47             pass
48         else:
49             assert False
50         assert 0 not in self.iom
51         assert len(self.iom) == 3
52         del self.iom[1]
53         assert 1 not in self.iom
54         assert len(self.iom) == 2
55         del self.iom[2]
56         del self.iom[3]
57         assert self.iom._keylist_head.next is self.iom._keylist_tail
58         assert self.iom._keylist_tail.prev is self.iom._keylist_head
59         assert len(self.iom) == 0
60
61     def test___getitem__(self):
62         try:
63             self.iom[0]
64         except KeyError:
65             pass
66         else:
67             assert False
68         assert self.iom[1] == "a"
69         assert self.iom[2] == "b"
70         assert self.iom[3] == "c"
71
72     def test___iter__(self):
73         assert list(self.iom) == [2, 3, 1]
74
75     def test___repr__(self):
76         assert \
77             repr(self.iom) == \
78             "InsertionOrderedMapping([(2, 'b'), (3, 'c'), (1, 'a')])"
79
80     def test___setitem__(self):
81         self.iom[0] = "-"
82         assert self.iom.items() == [
83             (0, "-"), (2, "b"), (3, "c"), (1, "a")]
84         self.iom[4] = "d"
85         assert self.iom.items() == [
86             (4, "d"), (0, "-"), (2, "b"), (3, "c"), (1, "a")]
87
88     def test_clear(self):
89         self.iom.clear()
90         assert 1 not in self.iom
91         assert 2 not in self.iom
92         assert 3 not in self.iom
93         assert self.iom._keylist_head.next is self.iom._keylist_tail
94         assert self.iom._keylist_tail.prev is self.iom._keylist_head
95         assert len(self.iom) == 0
96
97     def test_copy(self):
98         assert self.iom.copy() == self.iom
99
100     def test_get(self):
101         assert self.iom.get(0) is None
102         assert self.iom.get(0, "x") is "x"
103         assert self.iom.get(1) == "a"
104
105     def test_has_key(self):
106         assert not self.iom.has_key(0)
107         assert self.iom.has_key(1)
108         assert self.iom.has_key(2)
109         assert self.iom.has_key(3)
110
111     def test_insert_after(self):
112         self.iom.insert_after(1, 1, "z")
113         assert self.iom.items() == [(2, "b"), (3, "c"), (1, "z")]
114         assert len(self.iom) == 3
115         self.iom.insert_after(2, 0, "x")
116         assert self.iom.items() == [(2, "b"), (0, "x"), (3, "c"), (1, "z")]
117         assert len(self.iom) == 4
118         self.iom.insert_after(1, 0, "y")
119         assert self.iom.items() == [(2, "b"), (3, "c"), (1, "z"), (0, "y")]
120         assert len(self.iom) == 4
121         try:
122             self.iom.insert_after(5, 1, "a")
123         except KeyError:
124             pass
125         else:
126             assert False
127         assert self.iom.items() == [(2, "b"), (3, "c"), (1, "z"), (0, "y")]
128         assert len(self.iom) == 4
129
130     def test_insert_before(self):
131         self.iom.insert_before(1, 1, "z")
132         assert self.iom.items() == [(2, "b"), (3, "c"), (1, "z")]
133         assert len(self.iom) == 3
134         self.iom.insert_before(2, 0, "x")
135         assert self.iom.items() == [(0, "x"), (2, "b"), (3, "c"), (1, "z")]
136         assert len(self.iom) == 4
137         self.iom.insert_before(1, 0, "y")
138         assert self.iom.items() == [(2, "b"), (3, "c"), (0, "y"), (1, "z")]
139         assert len(self.iom) == 4
140         try:
141             self.iom.insert_before(5, 1, "a")
142         except KeyError:
143             pass
144         else:
145             assert False
146         assert self.iom.items() == [(2, "b"), (3, "c"), (0, "y"), (1, "z")]
147         assert len(self.iom) == 4
148
149     def test_insert_first(self):
150         self.iom.insert_first(0, "-")
151         assert self.iom.items() == [
152             (0, "-"), (2, "b"), (3, "c"), (1, "a")]
153         self.iom.insert_first(4, "d")
154         assert self.iom.items() == [
155             (4, "d"), (0, "-"), (2, "b"), (3, "c"), (1, "a")]
156
157     def test_insert_last(self):
158         self.iom.insert_last(0, "-")
159         assert self.iom.items() == [
160             (2, "b"), (3, "c"), (1, "a"), (0, "-")]
161         self.iom.insert_last(4, "d")
162         assert self.iom.items() == [
163             (2, "b"), (3, "c"), (1, "a"), (0, "-"), (4, "d")]
164
165     def test_items(self):
166         assert self.iom.items() == [(2, "b"), (3, "c"), (1, "a")]
167
168     def test_iteritems(self):
169         assert list(self.iom.iteritems()) == [(2, "b"), (3, "c"), (1, "a")]
170
171     def test_iterkeys(self):
172         assert list(self.iom.iterkeys()) == [2, 3, 1]
173
174     def test_itervalues(self):
175         assert list(self.iom.itervalues()) == ["b", "c", "a"]
176
177     def test_keys(self):
178         assert self.iom.keys() == [2, 3, 1]
179
180     def test_pop(self):
181         try:
182             self.iom.pop(0)
183         except KeyError:
184             pass
185         else:
186             assert False
187         assert self.iom.pop(0, "x") == "x"
188         assert self.iom.pop(1) == "a"
189         assert 1 not in self.iom
190         assert len(self.iom) == 2
191
192     def test_popitem(self):
193         assert self.iom.popitem() == (2, "b")
194         assert self.iom.popitem() == (3, "c")
195         assert self.iom.popitem() == (1, "a")
196         try:
197             self.iom.popitem()
198         except KeyError:
199             pass
200         else:
201             assert False
202
203     def test_reviteritems(self):
204         assert list(self.iom.reviteritems()) == [(1, "a"), (3, "c"), (2, "b")]
205
206     def test_reviterkeys(self):
207         assert list(self.iom.reviterkeys()) == [1, 3, 2]
208
209     def test_revitervalues(self):
210         assert list(self.iom.revitervalues()) == ["a", "c", "b"]
211
212     def test_setdefault(self):
213         assert self.iom.setdefault(0, "x") == "x"
214         assert self.iom.setdefault(1, "x") == "a"
215         assert self.iom.setdefault(4) is None
216
217     def test_update(self):
218         self.iom.update([(0, "x"), (4, "d")])
219         assert self.iom.items() == [
220             (4, "d"), (0, "x"), (2, "b"), (3, "c"), (1, "a")]
221
222     def test_values(self):
223         assert self.iom.values() == ["b", "c", "a"]
224
225 ######################################################################
226
227 if __name__ == "__main__":
228     unittest.main()