import antlr3 import testbase import unittest import os import sys from io import StringIO import textwrap class t012lexerXML(testbase.ANTLRTest): def setUp(self): self.compileGrammar('t012lexerXMLLexer.g') def lexerClass(self, base): class TLexer(base): def emitErrorMessage(self, msg): # report errors to /dev/null pass def reportError(self, re): # no error recovery yet, just crash! raise re return TLexer def testValid(self): inputPath = os.path.splitext(__file__)[0] + '.input' with open(inputPath) as f: data = f.read() stream = antlr3.StringStream(data) lexer = self.getLexer(stream) while True: token = lexer.nextToken() if token.type == self.lexerModule.EOF: break output = lexer.outbuf.getvalue() outputPath = os.path.splitext(__file__)[0] + '.output' with open(outputPath) as f: testOutput = f.read() self.assertEqual(output, testOutput) def testMalformedInput1(self): input = textwrap.dedent("""\ """) stream = antlr3.StringStream(input) lexer = self.getLexer(stream) try: while True: token = lexer.nextToken() # Should raise NoViableAltException before hitting EOF if token.type == antlr3.EOF: self.fail() except antlr3.NoViableAltException as exc: self.assertEqual(exc.unexpectedType, '>') self.assertEqual(exc.charPositionInLine, 11) self.assertEqual(exc.line, 2) def testMalformedInput2(self): input = textwrap.dedent("""\ """) stream = antlr3.StringStream(input) lexer = self.getLexer(stream) try: while True: token = lexer.nextToken() # Should raise NoViableAltException before hitting EOF if token.type == antlr3.EOF: self.fail() except antlr3.MismatchedSetException as exc: self.assertEqual(exc.unexpectedType, 't') self.assertEqual(exc.charPositionInLine, 2) self.assertEqual(exc.line, 1) def testMalformedInput3(self): input = textwrap.dedent("""\ """) stream = antlr3.StringStream(input) lexer = self.getLexer(stream) try: while True: token = lexer.nextToken() # Should raise NoViableAltException before hitting EOF if token.type == antlr3.EOF: self.fail() except antlr3.NoViableAltException as exc: self.assertEqual(exc.unexpectedType, 'a') self.assertEqual(exc.charPositionInLine, 11) self.assertEqual(exc.line, 2) if __name__ == '__main__': unittest.main()