4 from lark import LexError, ParseError
5 from parser import parse
7 class TestParser(unittest.TestCase):
8 def _parse(self, input):
11 def test_02_tag(self):
12 self.assertEqual(self._parse('xxx'), ('NAME', 'xxx'))
14 def test_03_bad_tag(self):
15 self.assertRaises(LexError, self._parse, 'XXX')
17 def test_04_expression(self):
18 self.assertEqual(self._parse('!(xxx&yyy)'),
19 ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
21 self.assertEqual(self._parse('!(xxx & yyy)'),
22 ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
24 self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'),
26 ('NOT', ('NAME', 'xxx')),
27 ('AND', ('NAME', 'yyy'), ('NAME', 'zzz'))),
30 self.assertEqual(self._parse('!(xxx && yyy)'),
31 ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
33 self.assertEqual(self._parse('!(xxx || yyy)'),
34 ('NOT', ('PARENS', ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))))
36 self.assertEqual(self._parse('xxx and yyy'),
37 ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))
39 self.assertEqual(self._parse('xxx or yyy'),
40 ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
42 self.assertEqual(self._parse('xxx OR yyy'),
43 ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
45 self.assertEqual(self._parse('not xxx'),
46 ('NOT', ('NAME', 'xxx'))
48 self.assertEqual(self._parse('NOT xxx'),
49 ('NOT', ('NAME', 'xxx'))
51 self.assertEqual(self._parse('NOT (xxx & yyy) AND zzz | ooo'),
56 ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))
65 def test_05_bad_expression(self):
66 self.assertRaises(ParseError, self._parse, '!(xxx&yyy')
68 if __name__ == "__main__":