xref: /aosp_15_r20/external/antlr/runtime/Python/tests/t022scopes.py (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robotimport antlr3
2*16467b97STreehugger Robotimport testbase
3*16467b97STreehugger Robotimport unittest
4*16467b97STreehugger Robotimport textwrap
5*16467b97STreehugger Robot
6*16467b97STreehugger Robot
7*16467b97STreehugger Robotclass t022scopes(testbase.ANTLRTest):
8*16467b97STreehugger Robot    def setUp(self):
9*16467b97STreehugger Robot        self.compileGrammar()
10*16467b97STreehugger Robot
11*16467b97STreehugger Robot
12*16467b97STreehugger Robot    def parserClass(self, base):
13*16467b97STreehugger Robot        class TParser(base):
14*16467b97STreehugger Robot            def emitErrorMessage(self, msg):
15*16467b97STreehugger Robot                # report errors to /dev/null
16*16467b97STreehugger Robot                pass
17*16467b97STreehugger Robot
18*16467b97STreehugger Robot            def reportError(self, re):
19*16467b97STreehugger Robot                # no error recovery yet, just crash!
20*16467b97STreehugger Robot                raise re
21*16467b97STreehugger Robot
22*16467b97STreehugger Robot        return TParser
23*16467b97STreehugger Robot
24*16467b97STreehugger Robot
25*16467b97STreehugger Robot    def testa1(self):
26*16467b97STreehugger Robot        cStream = antlr3.StringStream('foobar')
27*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
28*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
29*16467b97STreehugger Robot        parser = self.getParser(tStream)
30*16467b97STreehugger Robot        parser.a()
31*16467b97STreehugger Robot
32*16467b97STreehugger Robot
33*16467b97STreehugger Robot    def testb1(self):
34*16467b97STreehugger Robot        cStream = antlr3.StringStream('foobar')
35*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
36*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
37*16467b97STreehugger Robot        parser = self.getParser(tStream)
38*16467b97STreehugger Robot
39*16467b97STreehugger Robot        try:
40*16467b97STreehugger Robot            parser.b(False)
41*16467b97STreehugger Robot            self.fail()
42*16467b97STreehugger Robot        except antlr3.RecognitionException:
43*16467b97STreehugger Robot            pass
44*16467b97STreehugger Robot
45*16467b97STreehugger Robot
46*16467b97STreehugger Robot    def testb2(self):
47*16467b97STreehugger Robot        cStream = antlr3.StringStream('foobar')
48*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
49*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
50*16467b97STreehugger Robot        parser = self.getParser(tStream)
51*16467b97STreehugger Robot        parser.b(True)
52*16467b97STreehugger Robot
53*16467b97STreehugger Robot
54*16467b97STreehugger Robot    def testc1(self):
55*16467b97STreehugger Robot        cStream = antlr3.StringStream(
56*16467b97STreehugger Robot            textwrap.dedent('''\
57*16467b97STreehugger Robot            {
58*16467b97STreehugger Robot                int i;
59*16467b97STreehugger Robot                int j;
60*16467b97STreehugger Robot                i = 0;
61*16467b97STreehugger Robot            }
62*16467b97STreehugger Robot            '''))
63*16467b97STreehugger Robot
64*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
65*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
66*16467b97STreehugger Robot        parser = self.getParser(tStream)
67*16467b97STreehugger Robot        symbols = parser.c()
68*16467b97STreehugger Robot
69*16467b97STreehugger Robot        self.failUnlessEqual(
70*16467b97STreehugger Robot            symbols,
71*16467b97STreehugger Robot            set(['i', 'j'])
72*16467b97STreehugger Robot            )
73*16467b97STreehugger Robot
74*16467b97STreehugger Robot
75*16467b97STreehugger Robot    def testc2(self):
76*16467b97STreehugger Robot        cStream = antlr3.StringStream(
77*16467b97STreehugger Robot            textwrap.dedent('''\
78*16467b97STreehugger Robot            {
79*16467b97STreehugger Robot                int i;
80*16467b97STreehugger Robot                int j;
81*16467b97STreehugger Robot                i = 0;
82*16467b97STreehugger Robot                x = 4;
83*16467b97STreehugger Robot            }
84*16467b97STreehugger Robot            '''))
85*16467b97STreehugger Robot
86*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
87*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
88*16467b97STreehugger Robot        parser = self.getParser(tStream)
89*16467b97STreehugger Robot
90*16467b97STreehugger Robot        try:
91*16467b97STreehugger Robot            parser.c()
92*16467b97STreehugger Robot            self.fail()
93*16467b97STreehugger Robot        except RuntimeError, exc:
94*16467b97STreehugger Robot            self.failUnlessEqual(exc.args[0], 'x')
95*16467b97STreehugger Robot
96*16467b97STreehugger Robot
97*16467b97STreehugger Robot    def testd1(self):
98*16467b97STreehugger Robot        cStream = antlr3.StringStream(
99*16467b97STreehugger Robot            textwrap.dedent('''\
100*16467b97STreehugger Robot            {
101*16467b97STreehugger Robot                int i;
102*16467b97STreehugger Robot                int j;
103*16467b97STreehugger Robot                i = 0;
104*16467b97STreehugger Robot                {
105*16467b97STreehugger Robot                    int i;
106*16467b97STreehugger Robot                    int x;
107*16467b97STreehugger Robot                    x = 5;
108*16467b97STreehugger Robot                }
109*16467b97STreehugger Robot            }
110*16467b97STreehugger Robot            '''))
111*16467b97STreehugger Robot
112*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
113*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
114*16467b97STreehugger Robot        parser = self.getParser(tStream)
115*16467b97STreehugger Robot        symbols = parser.d()
116*16467b97STreehugger Robot
117*16467b97STreehugger Robot        self.failUnlessEqual(
118*16467b97STreehugger Robot            symbols,
119*16467b97STreehugger Robot            set(['i', 'j'])
120*16467b97STreehugger Robot            )
121*16467b97STreehugger Robot
122*16467b97STreehugger Robot
123*16467b97STreehugger Robot    def teste1(self):
124*16467b97STreehugger Robot        cStream = antlr3.StringStream(
125*16467b97STreehugger Robot            textwrap.dedent('''\
126*16467b97STreehugger Robot            { { { { 12 } } } }
127*16467b97STreehugger Robot            '''))
128*16467b97STreehugger Robot
129*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
130*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
131*16467b97STreehugger Robot        parser = self.getParser(tStream)
132*16467b97STreehugger Robot        res = parser.e()
133*16467b97STreehugger Robot
134*16467b97STreehugger Robot        self.failUnlessEqual(res, 12)
135*16467b97STreehugger Robot
136*16467b97STreehugger Robot
137*16467b97STreehugger Robot    def testf1(self):
138*16467b97STreehugger Robot        cStream = antlr3.StringStream(
139*16467b97STreehugger Robot            textwrap.dedent('''\
140*16467b97STreehugger Robot            { { { { 12 } } } }
141*16467b97STreehugger Robot            '''))
142*16467b97STreehugger Robot
143*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
144*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
145*16467b97STreehugger Robot        parser = self.getParser(tStream)
146*16467b97STreehugger Robot        res = parser.f()
147*16467b97STreehugger Robot
148*16467b97STreehugger Robot        self.failUnlessEqual(res, None)
149*16467b97STreehugger Robot
150*16467b97STreehugger Robot
151*16467b97STreehugger Robot    def testf2(self):
152*16467b97STreehugger Robot        cStream = antlr3.StringStream(
153*16467b97STreehugger Robot            textwrap.dedent('''\
154*16467b97STreehugger Robot            { { 12 } }
155*16467b97STreehugger Robot            '''))
156*16467b97STreehugger Robot
157*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
158*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
159*16467b97STreehugger Robot        parser = self.getParser(tStream)
160*16467b97STreehugger Robot        res = parser.f()
161*16467b97STreehugger Robot
162*16467b97STreehugger Robot        self.failUnlessEqual(res, None)
163*16467b97STreehugger Robot
164*16467b97STreehugger Robot
165*16467b97STreehugger Robot
166*16467b97STreehugger Robotif __name__ == '__main__':
167*16467b97STreehugger Robot    unittest.main()
168