#! /usr/bin/env python
+
import unittest
+from grako.exceptions import FailedParse
+
class TestParser(unittest.TestCase):
def test_01_import(self):
- global parser
- from parser import parser
+ global parser, TagsSemantics
+ from parser import TagsParser
+ from build_ast import TagsSemantics
+ parser = TagsParser(parseinfo=False)
+
+ def _parse(self, input):
+ return parser.parse(input, semantics=TagsSemantics())
def test_02_tag(self):
- self.assertEqual(parser.parse('xxx'), ('NAME', 'xxx'))
+ self.assertEqual(self._parse('xxx'), ('NAME', 'xxx'))
def test_03_bad_tag(self):
- from ply.lex import LexError
- self.assertRaises(LexError, parser.parse, 'XXX')
+ self.assertRaises(FailedParse, self._parse, 'XXX')
def test_04_expression(self):
- self.assertEqual(parser.parse('!(xxx&yyy)'),
+ self.assertEqual(self._parse('!(xxx&yyy)'),
('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
)
- self.assertEqual(parser.parse('!(xxx & yyy)'),
+ self.assertEqual(self._parse('!(xxx & yyy)'),
('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
)
- self.assertEqual(parser.parse('!xxx&yyy&zzz|ooo'),
- ('OR', ('AND', ('AND', ('NOT', ('NAME', 'xxx')), ('NAME', 'yyy')), ('NAME', 'zzz')), ('NAME', 'ooo'))
+ self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'),
+ ('OR', ('AND',
+ ('NOT', ('NAME', 'xxx')),
+ ('AND', ('NAME', 'yyy'), ('NAME', 'zzz'))),
+ ('NAME', 'ooo'))
)
- self.assertEqual(parser.parse('!(xxx && yyy)'),
+ self.assertEqual(self._parse('!(xxx && yyy)'),
('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
)
- self.assertEqual(parser.parse('!(xxx || yyy)'),
+ self.assertEqual(self._parse('!(xxx || yyy)'),
('NOT', ('PARENS', ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))))
)
- self.assertEqual(parser.parse('xxx and yyy'),
+ self.assertEqual(self._parse('xxx and yyy'),
('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))
)
- self.assertEqual(parser.parse('xxx or yyy'),
+ self.assertEqual(self._parse('xxx or yyy'),
('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
)
+ self.assertEqual(self._parse('xxx OR yyy'),
+ ('OR', ('NAME', 'xxx'), ('NAME', 'yyy'))
+ )
+ self.assertEqual(self._parse('not xxx'),
+ ('NOT', ('NAME', 'xxx'))
+ )
+ self.assertEqual(self._parse('NOT xxx'),
+ ('NOT', ('NAME', 'xxx'))
+ )
def test_05_bad_expression(self):
- self.assertIs(parser.parse('!(xxx&yyy'), None)
+ self.assertRaises(FailedParse, self._parse, '!(xxx&yyy')
if __name__ == "__main__":
unittest.main()