--- /dev/null
+#! /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()