xref: /aosp_15_r20/external/antlr/runtime/Python3/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        self.assertRaises(antlr3.RecognitionException, parser.b, False)
40*16467b97STreehugger Robot
41*16467b97STreehugger Robot
42*16467b97STreehugger Robot    def testb2(self):
43*16467b97STreehugger Robot        cStream = antlr3.StringStream('foobar')
44*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
45*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
46*16467b97STreehugger Robot        parser = self.getParser(tStream)
47*16467b97STreehugger Robot        parser.b(True)
48*16467b97STreehugger Robot
49*16467b97STreehugger Robot
50*16467b97STreehugger Robot    def testc1(self):
51*16467b97STreehugger Robot        cStream = antlr3.StringStream(
52*16467b97STreehugger Robot            textwrap.dedent('''\
53*16467b97STreehugger Robot            {
54*16467b97STreehugger Robot                int i;
55*16467b97STreehugger Robot                int j;
56*16467b97STreehugger Robot                i = 0;
57*16467b97STreehugger Robot            }
58*16467b97STreehugger Robot            '''))
59*16467b97STreehugger Robot
60*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
61*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
62*16467b97STreehugger Robot        parser = self.getParser(tStream)
63*16467b97STreehugger Robot        symbols = parser.c()
64*16467b97STreehugger Robot
65*16467b97STreehugger Robot        self.assertEqual(
66*16467b97STreehugger Robot            symbols,
67*16467b97STreehugger Robot            set(['i', 'j'])
68*16467b97STreehugger Robot            )
69*16467b97STreehugger Robot
70*16467b97STreehugger Robot
71*16467b97STreehugger Robot    def testc2(self):
72*16467b97STreehugger Robot        cStream = antlr3.StringStream(
73*16467b97STreehugger Robot            textwrap.dedent('''\
74*16467b97STreehugger Robot            {
75*16467b97STreehugger Robot                int i;
76*16467b97STreehugger Robot                int j;
77*16467b97STreehugger Robot                i = 0;
78*16467b97STreehugger Robot                x = 4;
79*16467b97STreehugger Robot            }
80*16467b97STreehugger Robot            '''))
81*16467b97STreehugger Robot
82*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
83*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
84*16467b97STreehugger Robot        parser = self.getParser(tStream)
85*16467b97STreehugger Robot
86*16467b97STreehugger Robot        self.assertRaisesRegex(RuntimeError, r'x', parser.c)
87*16467b97STreehugger Robot
88*16467b97STreehugger Robot
89*16467b97STreehugger Robot    def testd1(self):
90*16467b97STreehugger Robot        cStream = antlr3.StringStream(
91*16467b97STreehugger Robot            textwrap.dedent('''\
92*16467b97STreehugger Robot            {
93*16467b97STreehugger Robot                int i;
94*16467b97STreehugger Robot                int j;
95*16467b97STreehugger Robot                i = 0;
96*16467b97STreehugger Robot                {
97*16467b97STreehugger Robot                    int i;
98*16467b97STreehugger Robot                    int x;
99*16467b97STreehugger Robot                    x = 5;
100*16467b97STreehugger Robot                }
101*16467b97STreehugger Robot            }
102*16467b97STreehugger Robot            '''))
103*16467b97STreehugger Robot
104*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
105*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
106*16467b97STreehugger Robot        parser = self.getParser(tStream)
107*16467b97STreehugger Robot        symbols = parser.d()
108*16467b97STreehugger Robot
109*16467b97STreehugger Robot        self.assertEqual(
110*16467b97STreehugger Robot            symbols,
111*16467b97STreehugger Robot            set(['i', 'j'])
112*16467b97STreehugger Robot            )
113*16467b97STreehugger Robot
114*16467b97STreehugger Robot
115*16467b97STreehugger Robot    def teste1(self):
116*16467b97STreehugger Robot        cStream = antlr3.StringStream(
117*16467b97STreehugger Robot            textwrap.dedent('''\
118*16467b97STreehugger Robot            { { { { 12 } } } }
119*16467b97STreehugger Robot            '''))
120*16467b97STreehugger Robot
121*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
122*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
123*16467b97STreehugger Robot        parser = self.getParser(tStream)
124*16467b97STreehugger Robot        res = parser.e()
125*16467b97STreehugger Robot
126*16467b97STreehugger Robot        self.assertEqual(res, 12)
127*16467b97STreehugger Robot
128*16467b97STreehugger Robot
129*16467b97STreehugger Robot    def testf1(self):
130*16467b97STreehugger Robot        cStream = antlr3.StringStream(
131*16467b97STreehugger Robot            textwrap.dedent('''\
132*16467b97STreehugger Robot            { { { { 12 } } } }
133*16467b97STreehugger Robot            '''))
134*16467b97STreehugger Robot
135*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
136*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
137*16467b97STreehugger Robot        parser = self.getParser(tStream)
138*16467b97STreehugger Robot        res = parser.f()
139*16467b97STreehugger Robot
140*16467b97STreehugger Robot        self.assertIsNone(res)
141*16467b97STreehugger Robot
142*16467b97STreehugger Robot
143*16467b97STreehugger Robot    def testf2(self):
144*16467b97STreehugger Robot        cStream = antlr3.StringStream(
145*16467b97STreehugger Robot            textwrap.dedent('''\
146*16467b97STreehugger Robot            { { 12 } }
147*16467b97STreehugger Robot            '''))
148*16467b97STreehugger Robot
149*16467b97STreehugger Robot        lexer = self.getLexer(cStream)
150*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(lexer)
151*16467b97STreehugger Robot        parser = self.getParser(tStream)
152*16467b97STreehugger Robot        res = parser.f()
153*16467b97STreehugger Robot
154*16467b97STreehugger Robot        self.assertIsNone(res)
155*16467b97STreehugger Robot
156*16467b97STreehugger Robot
157*16467b97STreehugger Robot
158*16467b97STreehugger Robotif __name__ == '__main__':
159*16467b97STreehugger Robot    unittest.main()
160