]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blob - parser/test_parser.py
Factor out parser.parse() into self._parse
[phdru.name/cgi-bin/blog-ru/search-tags.git] / parser / test_parser.py
1 #! /usr/bin/env python
2
3 import unittest
4
5 class TestParser(unittest.TestCase):
6     def test_01_import(self):
7         global parser
8         from parser import parser
9
10     def _parse(self, input):
11         return parser.parse(input)
12
13     def test_02_tag(self):
14         self.assertEqual(self._parse('xxx'), ('NAME', 'xxx'))
15
16     def test_03_bad_tag(self):
17         from ply.lex import LexError
18         self.assertRaises(LexError, self._parse, 'XXX')
19
20     def test_04_expression(self):
21         self.assertEqual(self._parse('!(xxx&yyy)'),
22             ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
23         )
24         self.assertEqual(self._parse('!(xxx & yyy)'),
25             ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
26         )
27         self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'),
28             ('OR', ('AND', ('AND', ('NOT', ('NAME', 'xxx')), ('NAME', 'yyy')), ('NAME', 'zzz')), ('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
52     def test_05_bad_expression(self):
53         self.assertIs(self._parse('!(xxx&yyy'), None)
54
55 if __name__ == "__main__":
56     unittest.main()