]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blobdiff - parser/test_parser.py
Move parser-related code and tests to parser/
[phdru.name/cgi-bin/blog-ru/search-tags.git] / parser / test_parser.py
diff --git a/parser/test_parser.py b/parser/test_parser.py
new file mode 100755 (executable)
index 0000000..3e54f5c
--- /dev/null
@@ -0,0 +1,31 @@
+#! /usr/bin/env python
+
+import unittest
+
+class TestParser(unittest.TestCase):
+    def test_01_import(self):
+        global parser
+        from parser import parser
+
+    def test_02_tag(self):
+        self.assertEqual(parser.parse('xxx'), ('NAME', 'xxx'))
+
+    def test_03_bad_tag(self):
+        from ply.lex import LexError
+        self.assertRaises(LexError, parser.parse, 'XXX')
+
+    def test_04_expression(self):
+        self.assertEqual(parser.parse('!(xxx&yyy)'),
+            ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
+        )
+
+    def test_05_bad_expression(self):
+        self.assertIs(parser.parse('!(xxx&yyy'), None)
+
+    def test_06_expression2(self):
+        self.assertEqual(parser.parse('!xxx&yyy&zzz|ooo'),
+            ('OR', ('AND', ('AND', ('NOT', ('NAME', 'xxx')), ('NAME', 'yyy')), ('NAME', 'zzz')), ('NAME', 'ooo'))
+        )
+
+if __name__ == "__main__":
+    unittest.main()