Audio/AudioControl: Lots of fixes
[audiocontrol.git] / Node.test.py
1 import Node
2 import unittest
3
4 class Owner(object):
5     child = Node.NodeReference()
6
7 class OwnerMap(object):
8     children = Node.NodeMap()
9
10 class OwnerList(object):
11     children = Node.NodeList()
12
13 class Child(Node.Node):
14     pass
15
16 class UnitTest(unittest.TestCase):
17
18     def testNode(self):
19         owner = Owner()
20         child1 = Child()
21         child2 = Child()
22         self.assertEqual(list(child1.owners),[])
23         self.assertEqual(list(child2.owners),[])
24         self.assertEqual(owner.child,None)
25
26         owner.child = child1
27         self.assertEqual(list(child1.owners), [owner])
28         self.assertEqual(list(child2.owners), [])
29         self.assertEqual(owner.child, child1)
30
31         owner.child = child2
32         self.assertEqual(list(child1.owners), [])
33         self.assertEqual(list(child2.owners), [owner])
34         self.assertEqual(owner.child, child2)
35
36         owner.child = None
37         self.assertEqual(list(child1.owners),[])
38         self.assertEqual(list(child2.owners),[])
39         self.assertEqual(owner.child,None)
40         
41         owner.child = child1
42         self.assertEqual(list(child1.owners), [owner])
43         owner = None
44         self.assertEqual(list(child1.owners),[])
45         self.assertEqual(owner, None)
46
47
48     def testNodeMap(self):
49         owner = OwnerMap()
50         child = Child()
51         owner.children['a'] = child
52         self.assertEqual(list(child.owners),[owner])
53         del owner.children['a']
54         self.assertEqual(list(child.owners),[])
55
56         child2 = Child()
57         owner.children.setdefault('a',child)
58         owner.children['b'] = child2
59         self.assertEqual(list(child.owners),[owner])
60         self.assertEqual(list(child2.owners),[owner])
61         owner.children['a'] = owner.children['b']
62         self.assertEqual(list(child.owners),[])
63         self.assertEqual(list(child2.owners),[owner,owner])
64         del owner.children['a']
65         self.assertEqual(list(child2.owners),[owner])
66         owner.children.clear()
67         self.assertEqual(list(child2.owners),[])
68
69         owner.children = dict(a=child, b=child2)
70         self.assertEqual(list(owner.children.pop('a').owners), [])
71         self.assertEqual(list(child2.owners), [owner])
72         self.assertEqual(owner.children.popitem(),('b',child2))
73         self.assertEqual(list(child2.owners), [])
74
75         owner.children['a'] = child
76         owner.children.update(b=child2)
77         self.assertEqual(list(child2.owners), [owner])
78         self.assertEqual(list(child.owners), [owner])
79         owner.children.update(a=child2)
80         self.assertEqual(list(child.owners), [])
81         self.assertEqual(list(child2.owners),[owner,owner])
82
83         del owner
84         self.assertEqual(list(child2.owners), [])
85
86
87     def testNodeList(self):
88         owner = OwnerList()
89         child1 = Child()
90         child2 = Child()
91
92         owner.children.append(child1)
93         owner.children.append(child2)
94         self.assertEqual(owner.children, [child1,child2])
95         self.assertEqual(list(child1.owners),[owner])
96         self.assertEqual(list(child2.owners),[owner])
97
98         owner.children.extend([child1,child2])
99         self.assertEqual(owner.children, [child1,child2,child1,child2])
100         self.assertEqual(list(child1.owners),[owner,owner])
101         self.assertEqual(list(child2.owners),[owner,owner])
102
103         self.assertRaises(ValueError, self._testNodeList_1, owner)
104         self.assertEqual(owner.children, [child1,child2,child1,child2])
105         self.assertEqual(list(child1.owners),[owner,owner])
106         self.assertEqual(list(child2.owners),[owner,owner])
107
108         owner.children[1:2] = []
109         self.assertEqual(list(child1.owners), [owner,owner])
110         self.assertEqual(list(child2.owners), [owner])
111         
112         owner.children[:] = []
113         self.assertEqual(list(child1.owners), [])
114         self.assertEqual(list(child2.owners), [])
115
116         owner.children[:] = [child1,child2]
117         self.assertEqual(list(child1.owners),[owner])
118         self.assertEqual(list(child2.owners),[owner])
119
120         del owner.children[0]
121         self.assertEqual(list(child1.owners),[])
122         self.assertEqual(list(child2.owners),[owner])
123
124         del owner.children[:]
125         self.assertEqual(list(child2.owners),[])
126
127         owner.children = [child1,child1]
128         owner.children.insert(1,child2)
129         self.assertEqual(owner.children,[child1,child2,child1])
130         self.assertEqual(list(child1.owners), [owner,owner])
131         self.assertEqual(list(child2.owners), [owner])
132
133         self.assertEqual(list(owner.children.pop().owners), [owner])
134         self.assertEqual(owner.children.pop(), child2)
135         self.assertEqual(owner.children, [child1])
136
137         owner.children.append(child2)
138         self.assertEqual(list(owner.children.pop(0).owners), [])
139         self.assertEqual(owner.children, [child2])
140         owner.children.append(child1)
141         owner.children.remove(child2)
142         self.assertEqual(list(child1.owners),[owner])
143         self.assertEqual(list(child2.owners),[])
144         self.assertEqual(owner.children, [child1])
145
146         del owner
147         self.assertEqual(list(child1.owners), [])
148         
149
150     def _testNodeList_1(self, owner):
151         owner.children[::2] = []
152         
153
154 if __name__ == '__main__':
155     unittest.main()