5 class TestParser(unittest.TestCase):
6 def test_01_import(self):
8 from parser import parser
10 def _parse(self, input):
11 return parser.parse(input)
13 def test_02_tag(self):
14 self.assertEqual(self._parse('xxx'), ('NAME', 'xxx'))
16 def test_03_bad_tag(self):
17 from ply.lex import LexError
18 self.assertRaises(LexError, self._parse, 'XXX')
20 def test_04_expression(self):
21 self.assertEqual(self._parse('!(xxx&yyy)'),
22 ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
24 self.assertEqual(self._parse('!(xxx & yyy)'),
25 ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
27 self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'),
28 ('OR', ('AND', ('AND', ('NOT', ('NAME', 'xxx')), ('NAME', 'yyy')), ('NAME', 'zzz')), ('NAME', 'ooo'))
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'))
52 def test_05_bad_expression(self):
53 self.assertIs(self._parse('!(xxx&yyy'), None)
55 if __name__ == "__main__":