1 2from PyObjCTools.TestSupport import * 3from SearchKit import * 4from Foundation import NSMutableData 5 6try: 7 unicode 8except NameError: 9 unicode = str 10 11try: 12 long 13except NameError: 14 long = int 15 16class TestSKSearch (TestCase): 17 def testTypes(self): 18 self.assertIsInstance(SKSearchGroupRef, objc.objc_class) 19 self.assertIsInstance(SKSearchResultsRef, objc.objc_class) 20 self.assertIsInstance(SKSearchRef, objc.objc_class) 21 22 def testConstants(self): 23 self.assertEqual(kSKSearchRanked, 0) 24 self.assertEqual(kSKSearchBooleanRanked, 1) 25 self.assertEqual(kSKSearchRequiredRanked, 2) 26 self.assertEqual(kSKSearchPrefixRanked, 3) 27 28 self.assertEqual(kSKSearchOptionDefault, 0) 29 self.assertEqual(kSKSearchOptionNoRelevanceScores, 1) 30 self.assertEqual(kSKSearchOptionSpaceMeansOR, 2) 31 self.assertEqual(kSKSearchOptionFindSimilar, 4) 32 33 def testFunctions(self): 34 self.assertIsInstance(SKSearchGroupGetTypeID(), (int, long)) 35 self.assertIsInstance(SKSearchResultsGetTypeID(), (int, long)) 36 self.assertIsInstance(SKSearchGetTypeID(), (int, long)) 37 38 data = NSMutableData.data() 39 index = SKIndexCreateWithMutableData( 40 data, "pyobjc.test", kSKIndexInverted, None) 41 self.assertIsInstance(index, SKIndexRef) 42 doc = SKDocumentCreateWithURL( 43 CFURLCreateWithFileSystemPath( 44 None, b"/Library/Documentation/Acknowledgements.rtf".decode('latin1'), 45 kCFURLPOSIXPathStyle, False)) 46 doc2 = SKDocumentCreateWithURL( 47 CFURLCreateWithFileSystemPath( 48 None, b"/Library/Documentation/iPod/Acknowledgements.rtf".decode('latin1'), 49 kCFURLPOSIXPathStyle, False)) 50 SKIndexAddDocumentWithText(index, doc, "copyright and licenses", True) 51 SKIndexAddDocumentWithText(index, doc2, "copyright and licenses for iPod", True) 52 SKIndexFlush(index) 53 54 55 grp = SKSearchGroupCreate([index]) 56 self.assertIsInstance(grp, SKSearchGroupRef) 57 58 59 l = [] 60 61 @objc.callbackFor(SKSearchResultsCreateWithQuery) 62 def callback(idx, doc, ctx): 63 l.append([idx, doc, ctx]) 64 return True 65 66 67 ctx = 10 68 69 res = SKSearchResultsCreateWithQuery( 70 grp, b"copyright".decode('latin1'), kSKSearchRequiredRanked, 2, ctx, callback) 71 self.assertIsInstance(res, SKSearchResultsRef) 72 73 res = SKSearchResultsCreateWithDocuments( 74 grp, [doc], 10, ctx, callback) 75 self.assertIsInstance(res, SKSearchResultsRef) 76 self.assertEqual(len(l), 2) 77 self.assertEqual(l[0][0], index) 78 self.assertIsInstance(l[0][1], SKDocumentRef) 79 self.assertEqual(l[0][2], ctx) 80 81 cnt = SKSearchResultsGetCount(res) 82 self.assertIsInstance(cnt, (int, long)) 83 84 if cnt == 0: 85 # XXX: For some reason this doesn't work on OSX 10.7, 86 # reason is unclear for now. 87 pass 88 return 89 90 91 self.failUnless(cnt > 0) 92 93 94 v, o1, o2, o3 = SKSearchResultsGetInfoInRange(res, CFRange(0, cnt), None, None, None) 95 self.assertIsInstance(v, int) 96 self.assertIsInstance(o1, tuple) 97 if o1: 98 self.assertIsInstance(o1[0], SKDocumentRef) 99 self.assertIsInstance(o2, tuple) 100 if o2: 101 self.assertIsInstance(o2[0], SKIndexRef) 102 self.assertIsInstance(o3, tuple) 103 if o3: 104 self.assertIsInstance(o3[0], float) 105 106 v = SKSearchResultsCopyMatchingTerms(res, 1) 107 self.assertIsInstance(v, CFArrayRef) 108 109 src = SKSearchCreate(index, "copyright", kSKSearchOptionFindSimilar) 110 self.assertIsInstance(src, SKSearchRef) 111 112 v, o1, o2, o3 = SKSearchFindMatches(src, 10, None, None, 1.0, None) 113 self.assertIsInstance(v, bool) 114 self.assertIsInstance(o1, tuple) 115 if o1: 116 self.assertIsInstance(o1[0], (int, long)) 117 self.assertIsInstance(o2, tuple) 118 if o2: 119 self.assertIsInstance(o2[0], float) 120 self.assertIsInstance(o3, (int, long)) 121 122 v1, v2 = SKIndexCopyInfoForDocumentIDs( 123 index, o3, o1, None, None) 124 if v1: 125 self.assertIsInstance(v1[0], unicode) 126 self.assertIsInstance(v2, tuple) 127 if v2: 128 self.assertIsInstance(v2[0], (int, long)) 129 130 v = SKIndexCopyDocumentRefsForDocumentIDs( 131 index, o3, o1, None) 132 self.assertIsInstance(v, tuple) 133 if v: 134 self.assertIsInstance(v[0], SKDocumentRef) 135 136 v = SKIndexCopyDocumentURLsForDocumentIDs( 137 index, o3, o1, None) 138 self.assertIsInstance(v, tuple) 139 if v: 140 self.assertIsInstance(v[0], CFURLRef) 141 142 self.assertResultIsCFRetained(SKSearchGroupCopyIndexes) 143 a = SKSearchGroupCopyIndexes(grp) 144 self.assertIsInstance(a, CFArrayRef) 145 146 SKSearchCancel(src) 147 148if __name__ == "__main__": 149 main() 150