]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blobdiff - parser/test_lexer.py
Move parser-related code and tests to parser/
[phdru.name/cgi-bin/blog-ru/search-tags.git] / parser / test_lexer.py
diff --git a/parser/test_lexer.py b/parser/test_lexer.py
new file mode 100755 (executable)
index 0000000..ac3be81
--- /dev/null
@@ -0,0 +1,63 @@
+#! /usr/bin/env python
+
+import unittest
+
+class TestLexer(unittest.TestCase):
+    def test_01_import(self):
+        global lexer
+        from parser import lexer
+
+    def test_02_tag(self):
+        global LexToken
+        from ply.lex import LexToken
+        lexer.input('xxx')
+        tokens = list(lexer)
+        self.assertEqual(len(tokens), 1)
+        lextoken = tokens[0]
+        self.assertEqual(lextoken.type, 'NAME')
+        self.assertEqual(lextoken.value, 'xxx')
+        self.assertEqual(lextoken.lineno, 1)
+        self.assertEqual(lextoken.lexpos, 0)
+
+    def test_03_bad_tag(self):
+        from ply.lex import LexError
+        lexer.input('XXX')
+        self.assertRaises(LexError, list, lexer)
+
+    def test_04_expression(self):
+        lexer.input('!(xxx&yyy)')
+        tokens = list(lexer)
+        self.assertEqual(len(tokens), 6)
+        lextoken = tokens[0]
+        self.assertEqual(lextoken.type, 'NOT_OP')
+        self.assertEqual(lextoken.value, '!')
+        self.assertEqual(lextoken.lineno, 1)
+        self.assertEqual(lextoken.lexpos, 0)
+        lextoken = tokens[1]
+        self.assertEqual(lextoken.type, '(')
+        self.assertEqual(lextoken.value, '(')
+        self.assertEqual(lextoken.lineno, 1)
+        self.assertEqual(lextoken.lexpos, 1)
+        lextoken = tokens[2]
+        self.assertEqual(lextoken.type, 'NAME')
+        self.assertEqual(lextoken.value, 'xxx')
+        self.assertEqual(lextoken.lineno, 1)
+        self.assertEqual(lextoken.lexpos, 2)
+        lextoken = tokens[3]
+        self.assertEqual(lextoken.type, 'AND_OP')
+        self.assertEqual(lextoken.value, '&')
+        self.assertEqual(lextoken.lineno, 1)
+        self.assertEqual(lextoken.lexpos, 5)
+        lextoken = tokens[4]
+        self.assertEqual(lextoken.type, 'NAME')
+        self.assertEqual(lextoken.value, 'yyy')
+        self.assertEqual(lextoken.lineno, 1)
+        self.assertEqual(lextoken.lexpos, 6)
+        lextoken = tokens[5]
+        self.assertEqual(lextoken.type, ')')
+        self.assertEqual(lextoken.value, ')')
+        self.assertEqual(lextoken.lineno, 1)
+        self.assertEqual(lextoken.lexpos, 9)
+
+if __name__ == "__main__":
+    unittest.main()