File: testFunctional.py

package info (click to toggle)
zope-textindexng2 1%3A2.2.0-5
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 2,888 kB
  • ctags: 1,598
  • sloc: ansic: 6,836; python: 6,596; xml: 185; makefile: 137; sh: 41
file content (119 lines) | stat: -rw-r--r-- 4,645 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
###########################################################################
#
# TextIndexNG                The next generation TextIndex for Zope
#
# This software is governed by a license. See
# LICENSE.txt for the terms of this license.
#
###########################################################################

import os, sys, unittest

from Testing import ZopeTestCase
from Products.ZCatalog import ZCatalog 

ZopeTestCase.installProduct('ZCatalog')
ZopeTestCase.installProduct('TextIndexNG2')

class Tests(ZopeTestCase.ZopeTestCase):

    def afterSetUp(self):
        self.folder.manage_addProduct['ZCatalog'].manage_addZCatalog('catalog', 'catalog')
        self.catalog = getattr(self.folder, 'catalog')
        self.catalog.addIndex('SearchableText', 'TextIndexNG2')
        self.catalog.addIndex('PrincipiaSearchSource', 'TextIndexNG2')

    def _prepareTexts(self):
        """ import texts from 'texts' folder as DTML Document """

        from OFS.DTMLDocument import addDTMLDocument

        dirname = os.path.join(os.path.dirname(__file__), 'texts')
        files = os.listdir(dirname)
        self.num_files = 0
        for f in files:
            fname = os.path.join(dirname, f)
            if not os.path.isfile(fname): continue
            fp = open(fname) 
            addDTMLDocument(self.folder, id=f, title=f, file=fp)
            fp.close()
            self.num_files+=1

    def _indexTexts(self):
        """ index imported texts """
        for obj in [o for o in self.folder.objectValues('DTML Document') if o.getId().endswith('txt')]:
            self.catalog.catalog_object(obj, obj.absolute_url(1))
        
    def testSimple(self):
        self.assertEqual(len(self.catalog), 0)


    def testSearching(self):

        def extractIds(lst):
            r = [o.getObject().getId() for o in lst]
            r.sort()
            return r

        from OFS.DTMLDocument import addDTMLDocument
        from cStringIO import StringIO
        addDTMLDocument(self.folder, id='1.txt', file=StringIO('The quick brown fox jumps over the lazy dog'))
        addDTMLDocument(self.folder, id='2.txt', file=StringIO('dog lazy brown fox leap jumps over dog dog lazy quick'))
        self._indexTexts()
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'quick'})
        self.assertEqual(extractIds(result), ['1.txt', '2.txt'])
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'quick and leap'})
        self.assertEqual(extractIds(result), ['2.txt'])
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'quick or leap'})
        self.assertEqual(extractIds(result), ['1.txt', '2.txt'])
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : '"The quick brown fox jumps over the lazy lazy"'})
        self.assertEqual(extractIds(result), ['1.txt'])

    def testSimpleIndexing(self):
        self.assertEqual(len(self.catalog), 0)
        self._prepareTexts()
        self._indexTexts()
        self.assertEqual(len(self.catalog), self.num_files)           

    def testSimpleSearch(self):
        self.assertEqual(len(self.catalog), 0)
        self._prepareTexts()
        self._indexTexts()
        # DTML Documents have no 'SearchableText' method
        result = self.catalog.searchResults(SearchableText={'query' : 'Jesus'})
        self.assertEqual(len(result), 0) 
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'Jesus'})
        self.assertEqual(len(result), 0)
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'Mose'})
        self.assertEqual(len(result), 166)
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'Egon'})
        self.assertEqual(len(result), 0)
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'knecht mose'})
        self.assertEqual(len(result), 24)
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'knecht and mose'})
        self.assertEqual(len(result), 24)
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'knecht or mose'})
        self.assertEqual(len(result), 171)
        result = self.catalog.searchResults(PrincipiaSearchSource={'query' : 'gold and kalb'})
        self.assertEqual(len(result), 1)


def test_suite():
   return unittest.makeSuite(Tests)

def main():
   unittest.TextTestRunner().run(test_suite())

def debug():
   test_suite().debug()

def pdebug():
    import pdb
    pdb.run('debug()')
   
if __name__=='__main__':
   if len(sys.argv) > 1:
      globals()[sys.argv[1]]()
   else:
      main()