-#! /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)
-
- def test_05_expression_2(self):
- lexer.input('xxx and yyy')
- tokens = list(lexer)
- self.assertEqual(len(tokens), 5)
- lextoken = tokens[0]
- self.assertEqual(lextoken.type, 'NAME')
- self.assertEqual(lextoken.value, 'xxx')
- self.assertEqual(lextoken.lineno, 1)
- self.assertEqual(lextoken.lexpos, 0)
- lextoken = tokens[1]
- self.assertEqual(lextoken.type, 'SP1')
- self.assertEqual(lextoken.value, ' ')
- self.assertEqual(lextoken.lineno, 1)
- self.assertEqual(lextoken.lexpos, 3)
- lextoken = tokens[2]
- self.assertEqual(lextoken.type, 'OP_WORD')
- self.assertEqual(lextoken.value, 'and')
- self.assertEqual(lextoken.lineno, 1)
- self.assertEqual(lextoken.lexpos, 4)
- lextoken = tokens[3]
- self.assertEqual(lextoken.type, 'SP1')
- self.assertEqual(lextoken.value, ' ')
- self.assertEqual(lextoken.lineno, 1)
- self.assertEqual(lextoken.lexpos, 7)
- lextoken = tokens[4]
- self.assertEqual(lextoken.type, 'NAME')
- self.assertEqual(lextoken.value, 'yyy')
- self.assertEqual(lextoken.lineno, 1)
- self.assertEqual(lextoken.lexpos, 9)
-
-if __name__ == "__main__":
- unittest.main()