]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blob - test_lexer.py
Add parser
[phdru.name/cgi-bin/blog-ru/search-tags.git] / test_lexer.py
1 #! /usr/bin/env python
2
3 import unittest
4
5 class TestLexer(unittest.TestCase):
6     def test_01_import(self):
7         global lexer
8         from parse_query import lexer
9
10     def test_02_tag(self):
11         global LexToken
12         from ply.lex import LexToken
13         lexer.input('xxx')
14         tokens = list(lexer)
15         self.assertEqual(len(tokens), 1)
16         lextoken = tokens[0]
17         self.assertEqual(lextoken.type, 'NAME')
18         self.assertEqual(lextoken.value, 'xxx')
19         self.assertEqual(lextoken.lineno, 1)
20         self.assertEqual(lextoken.lexpos, 0)
21
22     def test_03_bad_tag(self):
23         from ply.lex import LexError
24         lexer.input('XXX')
25         self.assertRaises(LexError, list, lexer)
26
27     def test_04_expression(self):
28         lexer.input('!(xxx&yyy)')
29         tokens = list(lexer)
30         self.assertEqual(len(tokens), 6)
31         lextoken = tokens[0]
32         self.assertEqual(lextoken.type, 'NOT_OP')
33         self.assertEqual(lextoken.value, '!')
34         self.assertEqual(lextoken.lineno, 1)
35         self.assertEqual(lextoken.lexpos, 0)
36         lextoken = tokens[1]
37         self.assertEqual(lextoken.type, '(')
38         self.assertEqual(lextoken.value, '(')
39         self.assertEqual(lextoken.lineno, 1)
40         self.assertEqual(lextoken.lexpos, 1)
41         lextoken = tokens[2]
42         self.assertEqual(lextoken.type, 'NAME')
43         self.assertEqual(lextoken.value, 'xxx')
44         self.assertEqual(lextoken.lineno, 1)
45         self.assertEqual(lextoken.lexpos, 2)
46         lextoken = tokens[3]
47         self.assertEqual(lextoken.type, 'AND_OP')
48         self.assertEqual(lextoken.value, '&')
49         self.assertEqual(lextoken.lineno, 1)
50         self.assertEqual(lextoken.lexpos, 5)
51         lextoken = tokens[4]
52         self.assertEqual(lextoken.type, 'NAME')
53         self.assertEqual(lextoken.value, 'yyy')
54         self.assertEqual(lextoken.lineno, 1)
55         self.assertEqual(lextoken.lexpos, 6)
56         lextoken = tokens[5]
57         self.assertEqual(lextoken.type, ')')
58         self.assertEqual(lextoken.value, ')')
59         self.assertEqual(lextoken.lineno, 1)
60         self.assertEqual(lextoken.lexpos, 9)
61
62 if __name__ == "__main__":
63     unittest.main()