xref: /aosp_15_r20/external/antlr/runtime/Python/tests/t026actions.py (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robotimport antlr3
2*16467b97STreehugger Robotimport testbase
3*16467b97STreehugger Robotimport unittest
4*16467b97STreehugger Robot
5*16467b97STreehugger Robot
6*16467b97STreehugger Robotclass t026actions(testbase.ANTLRTest):
7*16467b97STreehugger Robot    def parserClass(self, base):
8*16467b97STreehugger Robot        class TParser(base):
9*16467b97STreehugger Robot            def __init__(self, *args, **kwargs):
10*16467b97STreehugger Robot                base.__init__(self, *args, **kwargs)
11*16467b97STreehugger Robot
12*16467b97STreehugger Robot                self._errors = []
13*16467b97STreehugger Robot                self._output = ""
14*16467b97STreehugger Robot
15*16467b97STreehugger Robot
16*16467b97STreehugger Robot            def capture(self, t):
17*16467b97STreehugger Robot                self._output += t
18*16467b97STreehugger Robot
19*16467b97STreehugger Robot
20*16467b97STreehugger Robot            def emitErrorMessage(self, msg):
21*16467b97STreehugger Robot                self._errors.append(msg)
22*16467b97STreehugger Robot
23*16467b97STreehugger Robot
24*16467b97STreehugger Robot        return TParser
25*16467b97STreehugger Robot
26*16467b97STreehugger Robot
27*16467b97STreehugger Robot    def lexerClass(self, base):
28*16467b97STreehugger Robot        class TLexer(base):
29*16467b97STreehugger Robot            def __init__(self, *args, **kwargs):
30*16467b97STreehugger Robot                base.__init__(self, *args, **kwargs)
31*16467b97STreehugger Robot
32*16467b97STreehugger Robot                self._errors = []
33*16467b97STreehugger Robot                self._output = ""
34*16467b97STreehugger Robot
35*16467b97STreehugger Robot
36*16467b97STreehugger Robot            def capture(self, t):
37*16467b97STreehugger Robot                self._output += t
38*16467b97STreehugger Robot
39*16467b97STreehugger Robot
40*16467b97STreehugger Robot            def emitErrorMessage(self, msg):
41*16467b97STreehugger Robot                self._errors.append(msg)
42*16467b97STreehugger Robot
43*16467b97STreehugger Robot
44*16467b97STreehugger Robot        return TLexer
45*16467b97STreehugger Robot
46*16467b97STreehugger Robot
47*16467b97STreehugger Robot    def setUp(self):
48*16467b97STreehugger Robot        self.compileGrammar()
49*16467b97STreehugger Robot
50*16467b97STreehugger Robot
51*16467b97STreehugger Robot    def testValid1(self):
52*16467b97STreehugger Robot        cStream = antlr3.StringStream('foobar _Ab98 \n A12sdf')
53*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
54*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
55*16467b97STreehugger Robot        parser = self.getParser(tStream)
56*16467b97STreehugger Robot        parser.prog()
57*16467b97STreehugger Robot
58*16467b97STreehugger Robot        self.assertEqual(
59*16467b97STreehugger Robot            parser._output,
60*16467b97STreehugger Robot            'init;after;finally;')
61*16467b97STreehugger Robot        self.assertEqual(
62*16467b97STreehugger Robot            lexer._output,
63*16467b97STreehugger Robot            'action;u\'foobar\' 4 1 0 -1 0 0 5;attribute;action;u\'_Ab98\' 4 1 7 -1 0 7 11;attribute;action;u\'A12sdf\' 4 2 1 -1 0 15 20;attribute;')
64*16467b97STreehugger Robot
65*16467b97STreehugger Robotif __name__ == '__main__':
66*16467b97STreehugger Robot    unittest.main()
67