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