X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=parser%2Ftest_parser.py;h=029fbd6fe576dd84e126f18739280b8e83b886d0;hb=refs%2Fheads%2Fgrako;hp=a8d52270a9c52a0fa8dca6bb9186c889e17b1929;hpb=2167fc0e09f4343c0fe67c8c754e29a41769e684;p=phdru.name%2Fcgi-bin%2Fblog-ru%2Fsearch-tags.git diff --git a/parser/test_parser.py b/parser/test_parser.py index a8d5227..029fbd6 100755 --- a/parser/test_parser.py +++ b/parser/test_parser.py @@ -1,35 +1,63 @@ #! /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)'), + self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'), + ('OR', ('AND', + ('NOT', ('NAME', 'xxx')), + ('AND', ('NAME', 'yyy'), ('NAME', 'zzz'))), + ('NAME', 'ooo')) + ) + 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)'), + ('NOT', ('PARENS', ('OR', ('NAME', 'xxx'), ('NAME', 'yyy')))) + ) + self.assertEqual(self._parse('xxx and yyy'), + ('AND', ('NAME', 'xxx'), ('NAME', '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()