6905d5802453c9da084a9110aa63be3ed9e78007
[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.keys() == [0, 2, 3, 1]
83         self.iom[4] = "d"
84         assert self.iom.keys() == [4, 0, 2, 3, 1]
85
86     def test_clear(self):
87         self.iom.clear()
88         assert 1 not in self.iom
89         assert 2 not in self.iom
90         assert 3 not in self.iom
91         assert self.iom._keylist_head.next is self.iom._keylist_tail
92         assert self.iom._keylist_tail.prev is self.iom._keylist_head
93         assert len(self.iom) == 0
94
95     def test_copy(self):
96         assert self.iom.copy() == self.iom
97
98     def test_get(self):
99         assert self.iom.get(0) is None
100         assert self.iom.get(0, "x") is "x"
101         assert self.iom.get(1) == "a"
102
103     def test_has_key(self):
104         assert not self.iom.has_key(0)
105         assert self.iom.has_key(1)
106         assert self.iom.has_key(2)
107         assert self.iom.has_key(3)
108
109     def test_items(self):
110         assert self.iom.items() == [(2, "b"), (3, "c"), (1, "a")]
111
112     def test_iteritems(self):
113         assert list(self.iom.iteritems()) == [(2, "b"), (3, "c"), (1, "a")]
114
115     def test_iterkeys(self):
116         assert list(self.iom.iterkeys()) == [2, 3, 1]
117
118     def test_itervalues(self):
119         assert list(self.iom.itervalues()) == ["b", "c", "a"]
120
121     def test_keys(self):
122         assert self.iom.keys() == [2, 3, 1]
123
124     def test_pop(self):
125         try:
126             self.iom.pop(0)
127         except KeyError:
128             pass
129         else:
130             assert False
131         assert self.iom.pop(0, "x") == "x"
132         assert self.iom.pop(1) == "a"
133         assert 1 not in self.iom
134         assert len(self.iom) == 2
135
136     def test_popitem(self):
137         assert self.iom.popitem() == (2, "b")
138         assert self.iom.popitem() == (3, "c")
139         assert self.iom.popitem() == (1, "a")
140         try:
141             self.iom.popitem()
142         except KeyError:
143             pass
144         else:
145             assert False
146
147     def test_reviteritems(self):
148         assert list(self.iom.reviteritems()) == [(1, "a"), (3, "c"), (2, "b")]
149
150     def test_reviterkeys(self):
151         assert list(self.iom.reviterkeys()) == [1, 3, 2]
152
153     def test_revitervalues(self):
154         assert list(self.iom.revitervalues()) == ["a", "c", "b"]
155
156     def test_setdefault(self):
157         assert self.iom.setdefault(0, "x") == "x"
158         assert self.iom.setdefault(1, "x") == "a"
159         assert self.iom.setdefault(4) is None
160
161     def test_update(self):
162         self.iom.update([(0, "x"), (4, "d")])
163         assert self.iom.items() == [
164             (4, "d"), (0, "x"), (2, "b"), (3, "c"), (1, "a")]
165
166     def test_values(self):
167         assert self.iom.values() == ["b", "c", "a"]
168
169 ######################################################################
170
171 if __name__ == "__main__":
172     unittest.main()