1from CoreFoundation import * 2from PyObjCTools.TestSupport import * 3 4class TestCFTree (TestCase): 5 def testTypes(self): 6 self.failUnlessIsCFType(CFTreeRef) 7 8 def testCreation(self): 9 context = object() 10 tree = CFTreeCreate(None, context) 11 12 self.assert_(isinstance(tree, CFTreeRef)) 13 14 self.assert_(CFTreeGetContext(tree) is context) 15 CFTreeSetContext(tree, 42) 16 self.assertEquals(CFTreeGetContext(tree), 42) 17 18 19 20 def testCreateTree(self): 21 root = CFTreeCreate(None, "root") 22 23 for child in range(10): 24 CFTreeAppendChild(root, CFTreeCreate(None, child)) 25 26 self.assertEquals(CFTreeGetContext(CFTreeGetFirstChild(root)), 0) 27 28 def compare(l, r, context): 29 return -cmp(CFTreeGetContext(l), CFTreeGetContext(r)) 30 31 CFTreeSortChildren(root, compare, None) 32 self.assertEquals(CFTreeGetContext(CFTreeGetFirstChild(root)), 9) 33 34 35 def testTypeID(self): 36 v = CFTreeGetTypeID() 37 self.failUnless(isinstance(v, (int, long))) 38 39 def testQuerying(self): 40 root = CFTreeCreate(None, "root") 41 42 for child in range(2): 43 CFTreeAppendChild(root, CFTreeCreate(None, child)) 44 45 p = CFTreeGetParent(root) 46 self.failUnless(p is None) 47 48 c = CFTreeGetFirstChild(root) 49 self.failUnless(isinstance(c, CFTreeRef)) 50 c2 = CFTreeGetChildAtIndex(root, 0) 51 self.failUnless(c is c2) 52 53 p = CFTreeGetParent(c) 54 self.failUnless(p is root) 55 56 s = CFTreeGetNextSibling(c) 57 self.failUnless(isinstance(s, CFTreeRef)) 58 p = CFTreeGetParent(s) 59 self.failUnless(p is root) 60 s2 = CFTreeGetChildAtIndex(root, 1) 61 self.failUnless(s is s2) 62 63 s = CFTreeGetNextSibling(s) 64 self.failUnless(s is None) 65 66 cnt = CFTreeGetChildCount(root) 67 self.assertEquals(cnt, 2) 68 69 cnt = CFTreeGetChildCount(c) 70 self.assertEquals(cnt, 0) 71 72 children = CFTreeGetChildren(root, None) 73 self.failUnless(isinstance(children, (list, tuple))) 74 self.assertEquals(len(children), 2) 75 76 r = CFTreeFindRoot(s2) 77 self.failUnless(r is root) 78 79 def testModification(self): 80 root = CFTreeCreate(None, "root") 81 82 for child in range(2): 83 CFTreeAppendChild(root, CFTreeCreate(None, child)) 84 85 def applyFunc(node, context): 86 context.append(CFTreeGetContext(node)) 87 88 l = [] 89 CFTreeApplyFunctionToChildren(root, applyFunc, l) 90 self.assertEquals(len(l), 2) 91 92 preChild = CFTreeCreate(None, "before") 93 postChild = CFTreeCreate(None, "after") 94 CFTreePrependChild(root, preChild) 95 CFTreeAppendChild(root, postChild) 96 97 self.assertEquals(CFTreeGetChildCount(root), 4) 98 n = CFTreeGetChildAtIndex(root, 0) 99 self.failUnless(n is preChild) 100 n = CFTreeGetChildAtIndex(root, 3) 101 self.failUnless(n is postChild) 102 103 s = CFTreeCreate(None, "sibling") 104 CFTreeInsertSibling(preChild, s) 105 n = CFTreeGetChildAtIndex(root, 1) 106 self.failUnless(n is s) 107 self.assertEquals(CFTreeGetChildCount(root), 5) 108 109 CFTreeRemove(s) 110 self.assertEquals(CFTreeGetChildCount(root), 4) 111 112 def compare(left, right, context): 113 left = CFTreeGetContext(left) 114 right = CFTreeGetContext(right) 115 return -cmp(left, right) 116 117 before = [] 118 after = [] 119 CFTreeApplyFunctionToChildren(root, applyFunc, before) 120 CFTreeSortChildren(root, compare, None) 121 CFTreeApplyFunctionToChildren(root, applyFunc, after) 122 123 before.sort() 124 before.reverse() 125 self.assertEquals(before, after) 126 127 CFTreeRemoveAllChildren(root) 128 self.assertEquals(CFTreeGetChildCount(root), 0) 129 130 131 132 133 134 135 136 137if __name__ == "__main__": 138 main() 139