PyLucene 3.4.0-1 import
[pylucene.git] / test / test_PythonQueryParser.py
1 # ====================================================================
2 #   Licensed under the Apache License, Version 2.0 (the "License");
3 #   you may not use this file except in compliance with the License.
4 #   You may obtain a copy of the License at
5 #
6 #       http://www.apache.org/licenses/LICENSE-2.0
7 #
8 #   Unless required by applicable law or agreed to in writing, software
9 #   distributed under the License is distributed on an "AS IS" BASIS,
10 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 #   See the License for the specific language governing permissions and
12 #   limitations under the License.
13 # ====================================================================
14
15 from unittest import TestCase, main
16 from lucene import *
17
18
19 class BooleanTestMixin(object):
20
21     def getBooleanQuery(self, clauses, disableCoord):
22
23         extra_query = TermQuery(Term("all", "extra_clause"))
24         extra_clause = BooleanClause(extra_query, BooleanClause.Occur.SHOULD)
25         clauses.add(extra_clause)
26                                              
27         return super(BooleanTestMixin, self).getBooleanQuery(clauses,
28                                                              disableCoord)
29
30
31 class PythonQueryParserTestCase(TestCase):
32
33     def testOverrideBooleanQuery(self):
34
35         class TestQueryParser(BooleanTestMixin, PythonQueryParser):
36             def getFieldQuery_quoted(_self, field, queryText, quoted):
37                 return super(TestQueryParser, _self).getFieldQuery_quoted_super(field, queryText, quoted)
38         
39         qp = TestQueryParser(Version.LUCENE_CURRENT, 'all',
40                              StandardAnalyzer(Version.LUCENE_CURRENT))
41         q = qp.parse("foo bar")
42         self.assertEquals(str(q), "all:foo all:bar all:extra_clause")
43
44
45 class PythonMultiFieldQueryParserTestCase(TestCase):
46
47     def testOverrideBooleanQuery(self):
48
49         class TestQueryParser(BooleanTestMixin, PythonMultiFieldQueryParser):
50             def getFieldQuery_quoted(_self, field, queryText, quoted):
51                 return super(TestQueryParser, _self).getFieldQuery_quoted_super(field, queryText, quoted)
52
53         qp = TestQueryParser(Version.LUCENE_CURRENT, ['one', 'two'],
54                              StandardAnalyzer(Version.LUCENE_CURRENT))
55         q = qp.parse(Version.LUCENE_CURRENT, "foo bar", ['one', 'two'],
56                      [BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD],
57                      StandardAnalyzer(Version.LUCENE_CURRENT))
58         self.assertEquals(str(q), "(one:foo one:bar) (two:foo two:bar)")
59
60
61 if __name__ == "__main__":
62     import sys
63     initVM()
64     if '-loop' in sys.argv:
65         sys.argv.remove('-loop')
66         while True:
67             try:
68                 main()
69             except:
70                 pass
71     else:
72          main()