X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=parser%2Ftest_parser.py;h=8783de50367b714a6d29fec923024f111a3c64b6;hb=HEAD;hp=4f2e1767f6d14b16e59c4d5c1a25c9de335f6269;hpb=10eee8c8713988ac4e6f8879a8222234c3ab31aa;p=phdru.name%2Fcgi-bin%2Fblog-ru%2Fsearch-tags.git diff --git a/parser/test_parser.py b/parser/test_parser.py index 4f2e176..8783de5 100755 --- a/parser/test_parser.py +++ b/parser/test_parser.py @@ -1,21 +1,18 @@ #! /usr/bin/env python import unittest +from lark import ParseError +from parser import parse class TestParser(unittest.TestCase): - def test_01_import(self): - global parser - from parser import parser - def _parse(self, input): - return parser.parse(input) + return parse(input) def test_02_tag(self): self.assertEqual(self._parse('xxx'), ('NAME', 'xxx')) def test_03_bad_tag(self): - from ply.lex import LexError - self.assertRaises(LexError, self._parse, 'XXX') + self.assertRaises(ParseError, self._parse, 'XXX') def test_04_expression(self): self.assertEqual(self._parse('!(xxx&yyy)'), @@ -25,7 +22,10 @@ class TestParser(unittest.TestCase): ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy')))) ) self.assertEqual(self._parse('!xxx&yyy&zzz|ooo'), - ('OR', ('AND', ('AND', ('NOT', ('NAME', 'xxx')), ('NAME', 'yyy')), ('NAME', 'zzz')), ('NAME', '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')))) @@ -48,9 +48,22 @@ class TestParser(unittest.TestCase): self.assertEqual(self._parse('NOT xxx'), ('NOT', ('NAME', 'xxx')) ) + 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.assertIs(self._parse('!(xxx&yyy'), None) + self.assertRaises(ParseError, self._parse, '!(xxx&yyy') if __name__ == "__main__": unittest.main()