X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=parser%2Ftest_parser.py;h=cf053b85f58393a93eb7e29ca676b8fd7dc1c070;hb=bee03d50e5a6c083962d5d855cea5445bc015472;hp=0a30eda4217dd655b99c272b6001151c598fd6e6;hpb=fcd51c190450165c3315ed7e4f77bc1415db3d48;p=phdru.name%2Fcgi-bin%2Fblog-ru%2Fsearch-tags.git diff --git a/parser/test_parser.py b/parser/test_parser.py index 0a30eda..cf053b8 100755 --- a/parser/test_parser.py +++ b/parser/test_parser.py @@ -1,69 +1,82 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 import unittest -from parsimonious import ParseError -from parser import compile +from lark import LexError, ParseError +from parser import parse + class TestParser(unittest.TestCase): def _parse(self, input): - return compile(input) + return parse(input) def test_02_tag(self): self.assertEqual(self._parse('xxx'), ('NAME', 'xxx')) def test_03_bad_tag(self): - self.assertRaises(ParseError, self._parse, 'XXX') + self.assertRaises(LexError, self._parse, 'XXX') def test_04_expression(self): - self.assertEqual(self._parse('!(xxx&yyy)'), + self.assertEqual( + self._parse('!(xxx&yyy)'), ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy')))) ) - self.assertEqual(self._parse('!(xxx & yyy)'), + self.assertEqual( + self._parse('!(xxx & yyy)'), ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy')))) ) - self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'), + self.assertEqual( + self._parse('!xxx&yyy&zzz|ooo'), ('OR', ('AND', - ('NOT', ('NAME', 'xxx')), - ('AND', ('NAME', 'yyy'), ('NAME', 'zzz'))), - ('NAME', 'ooo')) + ('NOT', ('NAME', 'xxx')), + ('AND', ('NAME', 'yyy'), ('NAME', 'zzz'))), + ('NAME', 'ooo')) ) - self.assertEqual(self._parse('!(xxx && yyy)'), + self.assertEqual( + self._parse('!(xxx && yyy)'), ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy')))) ) - self.assertEqual(self._parse('!(xxx || yyy)'), + self.assertEqual( + self._parse('!(xxx || yyy)'), ('NOT', ('PARENS', ('OR', ('NAME', 'xxx'), ('NAME', 'yyy')))) ) - self.assertEqual(self._parse('xxx and yyy'), + self.assertEqual( + self._parse('xxx and yyy'), ('AND', ('NAME', 'xxx'), ('NAME', 'yyy')) ) - self.assertEqual(self._parse('xxx or yyy'), + self.assertEqual( + self._parse('xxx or yyy'), ('OR', ('NAME', 'xxx'), ('NAME', 'yyy')) ) - self.assertEqual(self._parse('xxx OR yyy'), + self.assertEqual( + self._parse('xxx OR yyy'), ('OR', ('NAME', 'xxx'), ('NAME', 'yyy')) ) - self.assertEqual(self._parse('not xxx'), + self.assertEqual( + self._parse('not xxx'), ('NOT', ('NAME', 'xxx')) ) - self.assertEqual(self._parse('NOT xxx'), + self.assertEqual( + self._parse('NOT xxx'), ('NOT', ('NAME', 'xxx')) ) - self.assertEqual(self._parse('NOT (xxx & yyy) AND zzz | ooo'), + self.assertEqual( + self._parse('NOT (xxx & yyy) AND zzz | ooo'), ('OR', ('AND', ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy')) - ) - ), + ) + ), ('NAME', 'zzz') - ), + ), ('NAME', 'ooo') - ) + ) ) def test_05_bad_expression(self): self.assertRaises(ParseError, self._parse, '!(xxx&yyy') + if __name__ == "__main__": unittest.main()