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