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'),
33 ('NOT', ('NAME', 'xxx')),
34 ('AND', ('NAME', 'yyy'), ('NAME', 'zzz'))),
37 self.assertEqual(self._parse('!(xxx && yyy)'),
38 ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
40 self.assertEqual(self._parse('!(xxx || yyy)'),
41 ('NOT', ('PARENS', ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))))
43 self.assertEqual(self._parse('xxx and yyy'),
44 ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))
46 self.assertEqual(self._parse('xxx or yyy'),
47 ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
49 self.assertEqual(self._parse('xxx OR yyy'),
50 ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
52 self.assertEqual(self._parse('not xxx'),
53 ('NOT', ('NAME', 'xxx'))
55 self.assertEqual(self._parse('NOT xxx'),
56 ('NOT', ('NAME', 'xxx'))
59 def test_05_bad_expression(self):
60 self.assertRaises(FailedParse, self._parse, '!(xxx&yyy')
62 if __name__ == "__main__":