A few tests for the SQP tokenizer

This commit is contained in:
Kovid Goyal 2018-01-18 12:43:05 +05:30
parent ac3132e541
commit cbb09f2041
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -7,7 +7,7 @@ from __future__ import absolute_import, division, print_function, unicode_litera
import operator import operator
import unittest import unittest
from calibre.utils.search_query_parser import SearchQueryParser from calibre.utils.search_query_parser import SearchQueryParser, Parser
class Tester(SearchQueryParser): class Tester(SearchQueryParser):
@ -371,6 +371,25 @@ class TestSQP(unittest.TestCase):
def test_sqp_unoptimized(self): def test_sqp_unoptimized(self):
self.do_test(False) self.do_test(False)
def test_sqp_tokenizer(self):
p = Parser()
def tokens(*a):
ans = []
for i in range(0, len(a), 2):
ans.append(({'O': Parser.OPCODE, 'W': Parser.WORD, 'Q': Parser.QUOTED_WORD}[a[i]], a[i+1]))
return ans
def t(query, *a):
self.assertEqual(tokens(*a), p.tokenize(query))
t('xxx', 'W', 'xxx')
t('"a \\" () b"', 'Q', 'a " () b')
t('“a \\"\\” () b”', 'Q', 'a "“” () b')
t('"a“b"', 'Q', 'a“b')
t('"a”b"', 'Q', 'a”b')
t('a:“b ”', 'W', 'a:', 'Q', 'b ')
def find_tests(): def find_tests():
return unittest.defaultTestLoader.loadTestsFromTestCase(TestSQP) return unittest.defaultTestLoader.loadTestsFromTestCase(TestSQP)