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