1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport os
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport sys
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport antlr3
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport testbase
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport unittest
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom cStringIO import StringIO
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport difflib
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass t020fuzzy(testbase.ANTLRTest):
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def setUp(self):
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.compileGrammar('t020fuzzyLexer.g')
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testValid(self):
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        inputPath = os.path.splitext(__file__)[0] + '.input'
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        stream = antlr3.StringStream(open(inputPath).read())
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        lexer = self.getLexer(stream)
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        while True:
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            token = lexer.nextToken()
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            if token.type == antlr3.EOF:
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                break
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        output = lexer.output.getvalue()
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        outputPath = os.path.splitext(__file__)[0] + '.output'
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        testOutput = open(outputPath).read()
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        success = (output == testOutput)
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if not success:
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            d = difflib.Differ()
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            r = d.compare(output.splitlines(1), testOutput.splitlines(1))
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            self.fail(
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                ''.join([l.encode('ascii', 'backslashreplace') for l in r])
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                )
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__ == '__main__':
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    unittest.main()
41