3 import unittest2 as unittest
5 import digraphtools.topsort as topsort
7 import core.bits as bits
8 import core.deptools as deptools
11 class BitTests(unittest.TestCase):
13 task = bits.Task(tuple(), None, bits.TaskComplete(['fnord']))
14 task = bits.Task(('fish','heads'), None, bits.TaskComplete(['fnord']))
16 class GraphStrategyTests(unittest.TestCase):
18 class C(bits.Item): pass
19 class B(bits.Item): depends = (C,)
20 class A(bits.Item): depends = (B,C)
21 self.A,self.B,self.C = A,B,C
22 def test_get_graph(self):
23 A,B,C = self.A,self.B,self.C
24 g = deptools.GraphDependencyStrategy.get_graph(A)
25 ref = [A,[ [B,[ [C, []] ]], [C, []] ]] # Reasons to not use this representation
26 self.assertEqual(g,ref)
27 def test_iterate_item_dependencies(self):
28 toporder = deptools.GraphDependencyStrategy.iterate_item_dependencies(self.A)
29 self.assertEqual(list(toporder), [self.C,self.B,self.A])
30 def test_item_factory(self):
31 a = deptools.GraphDependencyStrategy.item_factory(self.A)
32 self.assertIsInstance(a, self.A)
33 clstoporder = deptools.GraphDependencyStrategy.iterate_item_dependencies(self.A)
34 insttoporder = deptools.GraphDependencyStrategy.iterate_item_dependencies(a)
35 for cls,inst in zip(clstoporder,insttoporder):
36 self.assertIsInstance(inst,cls)
38 class DigraphStrategyTests(unittest.TestCase):
40 class C(bits.Item): pass
41 class B(bits.Item): depends = (C,)
42 class A(bits.Item): depends = (B,C)
43 self.A,self.B,self.C = A,B,C
44 def test_iterate_item_dependencies(self):
45 toporder = deptools.DigraphDependencyStrategy.iterate_item_dependencies(self.A)
46 self.assertEqual(list(toporder), [self.C,self.B,self.A])
47 def test_item_factory(self):
48 a = deptools.DigraphDependencyStrategy.item_factory(self.A)
49 self.assertIsInstance(a, self.A)
50 clstoporder = deptools.DigraphDependencyStrategy.iterate_item_dependencies(self.A)
51 insttoporder = deptools.DigraphDependencyStrategy.iterate_item_dependencies(a)
52 for cls,inst in zip(clstoporder,insttoporder):
53 self.assertIsInstance(inst,cls)
54 def test_find_goal_nodes(self):
55 goals = deptools.DigraphDependencyStrategy.find_goal_nodes([self.A,self.B,self.C])
56 self.assertEqual(set([self.A]), goals)
58 class SimpleStrategyTests(unittest.TestCase):
60 class C(bits.Item): pass
61 class B(bits.Item): depends = (C,)
62 class A(bits.Item): depends = (B,C)
63 self.A,self.B,self.C = A,B,C
64 def test_iterate_item_dependencies(self):
65 toporder = deptools.SimpleDependencyStrategy.iterate_item_dependencies(self.A)
66 self.assertEqual(list(toporder), [self.C,self.B,self.A])
68 class TopsortTests(unittest.TestCase):
69 def test_vr_topsort(self):
71 partial_order = [(1,2), (2,3), (1,5)]
72 g = digraphtools.graph_from_edges(digraphtools.from_partial_order(partial_order))
73 grid = topsort.partial_order_to_grid(partial_order,n)
74 for le in topsort.vr_topsort(n,grid):
75 digraphtools.verify_partial_order(digraphtools.iter_partial_order(g), le)
77 class StoreTests(unittest.TestCase):
78 sample_json = '[{"name": "wake_up"}, {"depends": ["wake_up"], "name": "get_up"}, {"depends": ["get_up"], "name": "make_coffee"}, {"depends": ["make_coffee"], "name": "drink_coffee"}, {"depends": ["get_up"], "name": "make_breakfast"}, {"depends": ["make_breakfast"], "name": "eat_breakfast"}, {"depends": ["get_up", "eat_breakfast", "make_coffee"], "name": "walk_out_door"}, {"depends": ["walk_out_door", "eat_breakfast", "drink_coffee"], "name": "go_to_work", "description": "Leave to go to work"}]'
79 def _dont_test_memorystore(self):
81 ms = core.store.MemoryStore()
82 self.assertFalse(ms.exists(uuid))
83 self.assertFalse(ms.exists(uuid, 'items'))
85 self.assertTrue(ms.exists(uuid))
86 self.assertFalse(ms.exists(uuid, 'items'))
87 ms.store(uuid, 'items', self.sample_json)
88 self.assertEqual(ms.retrieve(uuid, 'items'), self.sample_json)
90 if __name__ == '__main__':