1from CoreFoundation import *
2import unittest
3
4class TestCFTree (unittest.TestCase):
5    def testCreation(self):
6        context = (1,2,3)
7
8        tree = CFTreeCreate(None, context)
9        self.assert_(isinstance(tree, CFTreeRef))
10
11        for child in ("aap", "noot", "mies"):
12            node = CFTreeCreate(None, child)
13            CFTreeAppendChild(tree, node)
14
15        self.assertEquals(CFTreeGetChildCount(tree), 3)
16
17    def testGetContext(self):
18        context = (1,2,3)
19
20        tree = CFTreeCreate(None, context)
21        self.assert_(isinstance(tree, CFTreeRef))
22
23        self.assert_(CFTreeGetContext(tree, None) is context)
24
25
26    def testSetContext(self):
27        context = (1,2,3)
28
29        tree = CFTreeCreate(None, context)
30        self.assert_(isinstance(tree, CFTreeRef))
31
32        CFTreeSetContext(tree, "fubar")
33        self.assertEquals(CFTreeGetContext(tree, None), "fubar")
34
35    def testApplyFunction(self):
36        context = (1,2,3)
37
38        tree = CFTreeCreate(None, context)
39        self.assert_(isinstance(tree, CFTreeRef))
40
41        for child in ("aap", "noot", "mies"):
42            node = CFTreeCreate(None, child)
43            CFTreeAppendChild(tree, node)
44
45        childvalues = []
46        contexts = []
47
48        def function(value, context):
49            childvalues.append(value)
50            contexts.append(context)
51
52        CFTreeApplyFunctionToChildren(tree, function, (42,))
53
54        self.assertEquals(childvalues, ('aap', 'noot', 'mies'))
55        self.assertEquals(contexts, ((42,), (42,), (42,)))
56
57    def testSortChildren(self):
58        context = (1,2,3)
59
60        tree = CFTreeCreate(None, context)
61        self.assert_(isinstance(tree, CFTreeRef))
62
63        for child in ("mies", "noot", "aap"):
64            node = CFTreeCreate(None, child)
65            CFTreeAppendChild(tree, node)
66
67        childvalues = []
68        contexts = []
69
70        def compare(l, r, context):
71            return cmp(CFTreeGetContext(l), CFTreeGetContext(r))
72        CFTreeSortChildren(tree, compare, (32,))
73
74        def function(value, context):
75            childvalues.append(value)
76            contexts.append(context)
77        CFTreeApplyFunctionToChildren(tree, function, (42,))
78
79        self.assertEquals(childvalues, ('aap', 'noot', 'mies'))
80        self.assertEquals(contexts, ((42,), (42,), (42,)))
81
82if __name__ == "__main__":
83    unittest.main()
84