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