5 from grako.exceptions import FailedParse
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)
15 def _parse(self, input):
16 return parser.parse(input, semantics=TagsSemantics())
18 def test_02_tag(self):
19 self.assertEqual(self._parse('xxx'), ('NAME', 'xxx'))
21 def test_03_bad_tag(self):
22 self.assertRaises(FailedParse, self._parse, 'XXX')
24 def test_04_expression(self):
25 self.assertEqual(self._parse('!(xxx&yyy)'),
26 ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
28 self.assertEqual(self._parse('!(xxx & yyy)'),
29 ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
31 self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'),
32 ('OR', ('AND', ('AND', ('NOT', ('NAME', 'xxx')), ('NAME', 'yyy')), ('NAME', 'zzz')), ('NAME', 'ooo'))
34 self.assertEqual(self._parse('!(xxx && yyy)'),
35 ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
37 self.assertEqual(self._parse('!(xxx || yyy)'),
38 ('NOT', ('PARENS', ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))))
40 self.assertEqual(self._parse('xxx and yyy'),
41 ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))
43 self.assertEqual(self._parse('xxx or yyy'),
44 ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
46 self.assertEqual(self._parse('xxx OR yyy'),
47 ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
49 self.assertEqual(self._parse('not xxx'),
50 ('NOT', ('NAME', 'xxx'))
52 self.assertEqual(self._parse('NOT xxx'),
53 ('NOT', ('NAME', 'xxx'))
56 def test_05_bad_expression(self):
57 self.assertRaises(FailedParse, self._parse, '!(xxx&yyy')
59 if __name__ == "__main__":