]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blob - parser/test_parser.py
Docs(TODO): Try Pyleri
[phdru.name/cgi-bin/blog-ru/search-tags.git] / parser / test_parser.py
1 #! /usr/bin/env python
2
3 import unittest
4 from lark import ParseError
5 from parser import parse
6
7 class TestParser(unittest.TestCase):
8     def _parse(self, input):
9         return parse(input)
10
11     def test_02_tag(self):
12         self.assertEqual(self._parse('xxx'), ('NAME', 'xxx'))
13
14     def test_03_bad_tag(self):
15         self.assertRaises(ParseError, self._parse, 'XXX')
16
17     def test_04_expression(self):
18         self.assertEqual(self._parse('!(xxx&yyy)'),
19             ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
20         )
21         self.assertEqual(self._parse('!(xxx & yyy)'),
22             ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
23         )
24         self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'),
25             ('OR', ('AND',
26                 ('NOT', ('NAME', 'xxx')),
27                 ('AND', ('NAME', 'yyy'), ('NAME', 'zzz'))),
28             ('NAME', 'ooo'))
29         )
30         self.assertEqual(self._parse('!(xxx &&  yyy)'),
31             ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
32         )
33         self.assertEqual(self._parse('!(xxx || yyy)'),
34             ('NOT', ('PARENS', ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))))
35         )
36         self.assertEqual(self._parse('xxx and yyy'),
37             ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))
38         )
39         self.assertEqual(self._parse('xxx or  yyy'),
40             ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
41         )
42         self.assertEqual(self._parse('xxx OR yyy'),
43             ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
44         )
45         self.assertEqual(self._parse('not xxx'),
46             ('NOT', ('NAME', 'xxx'))
47         )
48         self.assertEqual(self._parse('NOT xxx'),
49             ('NOT', ('NAME', 'xxx'))
50         )
51         self.assertEqual(self._parse('NOT (xxx & yyy) AND zzz | ooo'),
52             ('OR',
53                 ('AND',
54                     ('NOT',
55                         ('PARENS',
56                             ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))
57                         )
58                     ),
59                     ('NAME', 'zzz')
60                 ),
61                 ('NAME', 'ooo')
62             )
63         )
64
65     def test_05_bad_expression(self):
66         self.assertRaises(ParseError, self._parse, '!(xxx&yyy')
67
68 if __name__ == "__main__":
69     unittest.main()