]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blobdiff - parser/test_parser.py
Python 3
[phdru.name/cgi-bin/blog-ru/search-tags.git] / parser / test_parser.py
index 0a30eda4217dd655b99c272b6001151c598fd6e6..cf053b85f58393a93eb7e29ca676b8fd7dc1c070 100755 (executable)
@@ -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()