You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.1 KiB

import antlr3
import testbase
import unittest
import os
import sys
from cStringIO import StringIO
import difflib
class t018llstar(testbase.ANTLRTest):
def setUp(self):
self.compileGrammar()
def testValid(self):
inputPath = os.path.splitext(__file__)[0] + '.input'
cStream = antlr3.StringStream(open(inputPath).read())
lexer = self.getLexer(cStream)
tStream = antlr3.CommonTokenStream(lexer)
parser = self.getParser(tStream)
parser.program()
output = parser.output.getvalue()
outputPath = os.path.splitext(__file__)[0] + '.output'
testOutput = open(outputPath).read()
success = (output == testOutput)
if not success:
d = difflib.Differ()
r = d.compare(output.splitlines(1), testOutput.splitlines(1))
self.fail(
''.join([l.encode('ascii', 'backslashreplace') for l in r])
)
if __name__ == '__main__':
unittest.main()
## # run an infinite loop with randomly mangled input
## while True:
## print "ping"
## input = open(inputPath).read()
## import random
## input = list(input) # make it mutable
## for _ in range(3):
## p1 = random.randrange(len(input))
## p2 = random.randrange(len(input))
## c1 = input[p1]
## input[p1] = input[p2]
## input[p2] = c1
## input = ''.join(input) # back to string
## try:
## cStream = antlr3.StringStream(input)
## lexer = Lexer(cStream)
## tStream = antlr3.CommonTokenStream(lexer)
## parser = TestParser(tStream)
## parser.program()
## except antlr3.RecognitionException, exc:
## print exc
## for l in input.splitlines()[0:exc.line]:
## print l
## print ' '*exc.charPositionInLine + '^'
## except BaseException, exc:
## print '\n'.join(['%02d: %s' % (idx+1, l) for idx, l in enumerate(input.splitlines())])
## print "%s at %d:%d" % (exc, cStream.line, cStream.charPositionInLine)
## print
## raise