xref: /aosp_15_r20/external/antlr/runtime/Python/tests/t046rewrite.py (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robotimport unittest
2*16467b97STreehugger Robotimport textwrap
3*16467b97STreehugger Robotimport antlr3
4*16467b97STreehugger Robotimport testbase
5*16467b97STreehugger Robot
6*16467b97STreehugger Robotclass T(testbase.ANTLRTest):
7*16467b97STreehugger Robot    def testRewrite(self):
8*16467b97STreehugger Robot        self.compileGrammar()
9*16467b97STreehugger Robot
10*16467b97STreehugger Robot        input = textwrap.dedent(
11*16467b97STreehugger Robot            '''\
12*16467b97STreehugger Robot            method foo() {
13*16467b97STreehugger Robot              i = 3;
14*16467b97STreehugger Robot              k = i;
15*16467b97STreehugger Robot              i = k*4;
16*16467b97STreehugger Robot            }
17*16467b97STreehugger Robot
18*16467b97STreehugger Robot            method bar() {
19*16467b97STreehugger Robot              j = i*2;
20*16467b97STreehugger Robot            }
21*16467b97STreehugger Robot            ''')
22*16467b97STreehugger Robot
23*16467b97STreehugger Robot        cStream = antlr3.StringStream(input)
24*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
25*16467b97STreehugger Robot        tStream = antlr3.TokenRewriteStream(lexer)
26*16467b97STreehugger Robot        parser = self.getParser(tStream)
27*16467b97STreehugger Robot        parser.program()
28*16467b97STreehugger Robot
29*16467b97STreehugger Robot        expectedOutput = textwrap.dedent('''\
30*16467b97STreehugger Robot        public class Wrapper {
31*16467b97STreehugger Robot        public void foo() {
32*16467b97STreehugger Robot        int k;
33*16467b97STreehugger Robot        int i;
34*16467b97STreehugger Robot          i = 3;
35*16467b97STreehugger Robot          k = i;
36*16467b97STreehugger Robot          i = k*4;
37*16467b97STreehugger Robot        }
38*16467b97STreehugger Robot
39*16467b97STreehugger Robot        public void bar() {
40*16467b97STreehugger Robot        int j;
41*16467b97STreehugger Robot          j = i*2;
42*16467b97STreehugger Robot        }
43*16467b97STreehugger Robot        }
44*16467b97STreehugger Robot
45*16467b97STreehugger Robot        ''')
46*16467b97STreehugger Robot
47*16467b97STreehugger Robot        self.failUnlessEqual(
48*16467b97STreehugger Robot            str(tStream),
49*16467b97STreehugger Robot            expectedOutput
50*16467b97STreehugger Robot            )
51*16467b97STreehugger Robot
52*16467b97STreehugger Robot
53*16467b97STreehugger Robotif __name__ == '__main__':
54*16467b97STreehugger Robot    unittest.main()
55*16467b97STreehugger Robot
56