Home | History | Annotate | Download | only in tests
      1 import antlr3
      2 import testbase
      3 import unittest
      4 
      5 class t005lexer(testbase.ANTLRTest):
      6     def setUp(self):
      7         self.compileGrammar()
      8         
      9         
     10     def lexerClass(self, base):
     11         class TLexer(base):
     12             def emitErrorMessage(self, msg):
     13                 # report errors to /dev/null
     14                 pass
     15 
     16             def reportError(self, re):
     17                 # no error recovery yet, just crash!
     18                 raise re
     19 
     20         return TLexer
     21     
     22         
     23     def testValid(self):
     24         stream = antlr3.StringStream('fofoofooo')
     25         lexer = self.getLexer(stream)
     26 
     27         token = lexer.nextToken()
     28         self.assertEqual(token.type, self.lexerModule.FOO)
     29         self.assertEqual(token.start, 0)
     30         self.assertEqual(token.stop, 1)
     31         self.assertEqual(token.text, 'fo')
     32 
     33         token = lexer.nextToken()
     34         self.assertEqual(token.type, self.lexerModule.FOO)
     35         self.assertEqual(token.start, 2)
     36         self.assertEqual(token.stop, 4)
     37         self.assertEqual(token.text, 'foo')
     38 
     39         token = lexer.nextToken()
     40         self.assertEqual(token.type, self.lexerModule.FOO)
     41         self.assertEqual(token.start, 5)
     42         self.assertEqual(token.stop, 8)
     43         self.assertEqual(token.text, 'fooo')
     44 
     45         token = lexer.nextToken()
     46         self.assertEqual(token.type, self.lexerModule.EOF)
     47         
     48 
     49     def testMalformedInput1(self):
     50         stream = antlr3.StringStream('2')
     51         lexer = self.getLexer(stream)
     52 
     53         try:
     54             token = lexer.nextToken()
     55             self.fail()
     56 
     57         except antlr3.MismatchedTokenException as exc:
     58             self.assertEqual(exc.expecting, 'f')
     59             self.assertEqual(exc.unexpectedType, '2')
     60 
     61 
     62     def testMalformedInput2(self):
     63         stream = antlr3.StringStream('f')
     64         lexer = self.getLexer(stream)
     65 
     66         try:
     67             token = lexer.nextToken()
     68             self.fail()
     69 
     70         except antlr3.EarlyExitException as exc:
     71             self.assertEqual(exc.unexpectedType, antlr3.EOF)
     72             
     73 
     74 if __name__ == '__main__':
     75     unittest.main()
     76