blob: 5fb5fd37ffef3b38b1cbaab16d5390652ed284af [file] [log] [blame]
Andrew Jeffery786e6a62018-05-04 23:03:50 +09301import unittest
2
3from .pathtree import PathTree
4from pprint import pprint
5
6class PathTreeTest(unittest.TestCase):
7 def test_set_depth_1(self):
8 pt = PathTree()
9 pt['/a'] = 1
10
11 def test_set_depth_2(self):
12 pt = PathTree()
13 pt['/a/b'] = 2
14
15 def test_get_no_key(self):
16 pt = PathTree()
17 with self.assertRaises(KeyError):
18 pt['/foo']
19
20 def test_get_depth_1(self):
21 pt = PathTree()
22 pt['/a'] = 1
23 self.assertEqual(1, pt['/a'])
24
25 def test_get_depth_2(self):
26 pt = PathTree()
27 pt['/a/b'] = 2
28 self.assertEqual(set(['/a', '/a/b']), set(pt.keys()))
29 self.assertEqual(2, pt['/a/b'])
30
31 def test_get_default(self):
32 self.assertEquals(1, PathTree().get('/a', 1))
33
34 def test_get_present(self):
35 pt = PathTree()
36 pt['/a'] = 1
37 self.assertEquals(1, pt.get('/a'))
38
39 def test_set_2_depth_1(self):
40 pt = PathTree()
41 pt['/a'] = 1.1
42 pt['/b'] = 1.2
43 self.assertEqual(set(['/a', '/b']), set(pt.keys()))
44 self.assertEqual(1.1, pt['/a'])
45 self.assertEqual(1.2, pt['/b'])
46
47 def test_set_2_depth_2_common_parent(self):
48 pt = PathTree()
49 pt['/a/b'] = 1.1
50 pt['/a/c'] = 1.2
51 self.assertEqual(set(['/a', '/a/b', '/a/c']), set(pt.keys()))
52 self.assertEqual(1.1, pt['/a/b'])
53 self.assertEqual(1.2, pt['/a/c'])
54
55 def test_set_2_depth_2_separate_parent(self):
56 pt = PathTree()
57 pt['/a/b'] = 1.1
58 pt['/b/c'] = 1.2
59 self.assertEqual(set(['/a', '/b', '/a/b', '/b/c']), set(pt.keys()))
60 self.assertEqual(1.1, pt['/a/b'])
61 self.assertEqual(1.2, pt['/b/c'])
62
63 def test_dumpd_empty(self):
64 pt = PathTree()
65 self.assertEquals(dict(), pt.dumpd())
66
67 def test_dumpd_populated(self):
68 pt = PathTree()
69 pt['/a/b'] = { 1 : 1.1 }
70 pt['/b/c'] = { 2 : 1.2 }
71 dump = pt.dumpd()
72 self.assertEquals(set(['/']), set(dump.keys()))
73 self.assertEquals(set(['a', 'b']), set(dump['/'].keys()))
74 self.assertEquals(set(['b']), set(dump['/']['a'].keys()))
75 self.assertEquals(set(['c']), set(dump['/']['b'].keys()))
76
77 def test_del_set_1_depth_1(self):
78 pt = PathTree()
79 pt['/a'] = 1
80 del pt['/a']
81 self.assertEquals(0, len(pt.keys()))
82
83 def test_del_set_2_depth_1(self):
84 pt = PathTree()
85 pt['/a'] = 1
86 pt['/b'] = 2
87 del pt['/a']
88 self.assertEquals(set(['/b']), set(pt.keys()))
89
90 def test_del_set_2_depth_2(self):
91 pt = PathTree()
92 pt['/a/b'] = 1
93 pt['/b/c'] = 2
94 del pt['/a/b']
95 self.assertEquals(set(['/b/c', '/b']), set(pt.keys()))
96
97 def test_setdefault_present(self):
98 pt = PathTree()
99 pt['/a'] = 1
100 self.assertEquals(1, pt.setdefault('/a', 2))
101
102 def test_setdefault_absent(self):
103 self.assertEquals(1, PathTree().setdefault('/a', 1))
104
105 def test_del_no_key(self):
106 with self.assertRaises(KeyError):
107 del PathTree()['/a']
108
109 def test_values_1(self):
110 pt = PathTree()
111 pt['/a'] = 1
112 self.assertEquals(set([1]), set(pt.values()))
113
114 def test_values_2(self):
115 pt = PathTree()
116 pt['/a'] = 1
117 pt['/b'] = 2
118 self.assertEquals(set([1, 2]), set(pt.values()))
119
120 def test_items_1(self):
121 pt = PathTree()
122 pt['/a'] = 1
123 self.assertEquals(set([('/a', 1)]), set(pt.items()))
124
125 def test_items_2(self):
126 pt = PathTree()
127 pt['/a'] = 1
128 pt['/b'] = 2
129 self.assertEquals(set([('/a', 1), ('/b', 2)]), set(pt.items()))
130
131 def test_items_depth_2(self):
132 pt = PathTree()
133 pt['/a/b'] = 1
134 self.assertEquals(set([('/a', None), ('/a/b', 1)]), set(pt.items()))
135
136 def test_dataitems_0(self):
137 pt = PathTree()
138 self.assertEquals(set(), set(pt.dataitems()))
139
140 def test_dataitems_1(self):
141 pt = PathTree()
142 pt['/b'] = 1
143 self.assertEquals(set([('/b', 1)]), set(pt.dataitems()))
144
145 def test_dataitems_2(self):
146 pt = PathTree()
147 pt['/a'] = 1
148 pt['/b/c'] = 2
149 self.assertEquals(set([('/a', 1), ('/b/c', 2)]), set(pt.dataitems()))
150
151 def test_get_children(self):
152 pt = PathTree()
153 pt['/a'] = 1
154 self.assertEquals(set(['a']), set(pt.get_children('/')))
155 self.assertEquals(set(), set(pt.get_children('/a')))
156
157 def test_get_children_nested(self):
158 pt = PathTree()
159 pt['/a/b'] = 1
160 self.assertEquals(set(['a']), set(pt.get_children('/')))
161 self.assertEquals(set(['b']), set(pt.get_children('/a')))
162 self.assertEquals(set(), set(pt.get_children('/a/b')))
163
164 def test_demote_1(self):
165 pt = PathTree()
166 pt['/a'] = 1
167 self.assertEquals([1], pt.values())
168 pt.demote('/a')
169 self.assertEquals([None], pt.values())
170
171 def test_demote_2(self):
172 pt = PathTree()
173 pt['/a'] = 1
174 pt['/b'] = 2
175 self.assertEquals(set([1, 2]), set(pt.values()))
176 pt.demote('/a')
177 self.assertEquals(set([None, 2]), set(pt.values()))
178
179 def test_demote_nested(self):
180 pt = PathTree()
181 pt['/a'] = 1
182 pt['/a/b'] = 2
183 self.assertEquals(set([1, 2]), set(pt.values()))
184 pt.demote('/a/b')
185 self.assertEquals(set([1, None]), set(pt.values()))
186
187 def test_iter(self):
188 pt = PathTree()
189 pt['/a'] = 1
190 i = iter(pt)
191 k, v = next(i)
192 self.assertEquals('/a', k)
193 self.assertEquals(1, v)
194 with self.assertRaises(StopIteration):
195 next(i)
196
197 def test_iter_2(self):
198 pt = PathTree()
199 pt['/a'] = 1
200 pt['/b'] = 2
201 i = iter(pt)
202 k, v = next(i)
203 self.assertEquals('/a', k)
204 self.assertEquals(1, v)
205 k, v = next(i)
206 self.assertEquals('/b', k)
207 self.assertEquals(2, v)
208 with self.assertRaises(StopIteration):
209 next(i)
210
211 def test_iter_2_nested(self):
212 pt = PathTree()
213 pt['/a'] = 1
214 pt['/a/b'] = 2
215 i = iter(pt)
216 k, v = next(i)
217 self.assertEquals('/a', k)
218 self.assertEquals(1, v)
219 k, v = next(i)
220 self.assertEquals('/a/b', k)
221 self.assertEquals(2, v)
222 with self.assertRaises(StopIteration):
223 next(i)
224
225 def test_keys_2_nested_depth_1(self):
226 pt = PathTree()
227 pt['/a'] = 1
228 pt['/a/b'] = 2
229 self.assertEquals(set(['/a']), set(pt.keys(depth=1)))
230
231 def test_values_2_nested_depth_1(self):
232 pt = PathTree()
233 pt['/a'] = 1
234 pt['/a/b'] = 2
235 self.assertEquals(set([1]), set(pt.values(depth=1)))
236
237 def test_items_2_nested_depth_1(self):
238 pt = PathTree()
239 pt['/a'] = 1
240 pt['/a/b'] = 2
241 self.assertEquals(set([('/a', 1)]), set(pt.items(depth=1)))
242
243 def test_dataitems_2_nested_depth_1(self):
244 pt = PathTree()
245 pt['/a'] = 1
246 pt['/a/b'] = 2
247 pt['/b'] = None
248 pt['/b/c'] = 1
249 self.assertEquals(set([('/a', 1)]), set(pt.dataitems(depth=1)))
250
251 def test_keys_2_nested_subtree(self):
252 pt = PathTree()
253 pt['/a'] = 1
254 pt['/a/b'] = 2
255 pt['/b'] = 3
256 self.assertEquals(set(['/a/b']), set(pt.keys(subtree='/a')))
257
258 def test_values_2_nested_subtree(self):
259 pt = PathTree()
260 pt['/a'] = 1
261 pt['/a/b'] = 2
262 pt['/b'] = 3
263 self.assertEquals(set([2]), set(pt.values(subtree='/a')))
264
265 def test_items_2_nested_subtree(self):
266 pt = PathTree()
267 pt['/a'] = 1
268 pt['/a/b'] = 2
269 pt['/b'] = 3
270 self.assertEquals(set([('/a/b', 2)]), set(pt.items(subtree='/a')))
271
272 def test_dataitems_2_nested_subtree(self):
273 pt = PathTree()
274 pt['/a'] = 1
275 pt['/a/b'] = 2
276 pt['/a/c'] = None
277 pt['/b'] = 3
278 self.assertEquals(set([('/a/b', 2)]), set(pt.dataitems(subtree='/a')))
279
280 def test_keys_3_nested_subtree_depth_1(self):
281 pt = PathTree()
282 pt['/a'] = 1
283 pt['/a/b'] = 2
284 pt['/a/b/c'] = 3
285 pt['/b'] = 4
286 self.assertEquals(set(['/a/b']), set(pt.keys(subtree='/a', depth=1)))
287
288 def test_values_3_nested_subtree_depth_1(self):
289 pt = PathTree()
290 pt['/a'] = 1
291 pt['/a/b'] = 2
292 pt['/a/b/c'] = 3
293 pt['/b'] = 4
294 self.assertEquals(set([2]), set(pt.values(subtree='/a', depth=1)))
295
296 def test_items_3_nested_subtree_depth_1(self):
297 pt = PathTree()
298 pt['/a'] = 1
299 pt['/a/b'] = 2
300 pt['/a/b/c'] = 3
301 pt['/b'] = 4
302 self.assertEquals(set([('/a/b', 2)]), set(pt.items(subtree='/a', depth=1)))
303
304 def test_items_3_nested_subtree_depth_1(self):
305 pt = PathTree()
306 pt['/a'] = 1
307 pt['/a/b'] = 2
308 pt['/a/b/c'] = 3
309 pt['/a/c'] = None
310 pt['/b'] = 4
311 self.assertEquals(set([('/a/b', 2)]), set(pt.dataitems(subtree='/a', depth=1)))