]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blobdiff - parser/test_parser.py
Use parsimonious instead of grako
[phdru.name/cgi-bin/blog-ru/search-tags.git] / parser / test_parser.py
index 029fbd6fe576dd84e126f18739280b8e83b886d0..0a30eda4217dd655b99c272b6001151c598fd6e6 100755 (executable)
@@ -1,25 +1,18 @@
 #! /usr/bin/env python
 
-
 import unittest
-from grako.exceptions import FailedParse
-
+from parsimonious import ParseError
+from parser import compile
 
 class TestParser(unittest.TestCase):
-    def test_01_import(self):
-        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())
+        return compile(input)
 
     def test_02_tag(self):
         self.assertEqual(self._parse('xxx'), ('NAME', 'xxx'))
 
     def test_03_bad_tag(self):
-        self.assertRaises(FailedParse, self._parse, 'XXX')
+        self.assertRaises(ParseError, self._parse, 'XXX')
 
     def test_04_expression(self):
         self.assertEqual(self._parse('!(xxx&yyy)'),
@@ -55,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.assertRaises(FailedParse, self._parse, '!(xxx&yyy')
+        self.assertRaises(ParseError, self._parse, '!(xxx&yyy')
 
 if __name__ == "__main__":
     unittest.main()