xref: /aosp_15_r20/external/antlr/runtime/Python3/tests/t042ast.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 t042ast(testbase.ANTLRTest):
7*16467b97STreehugger Robot##     def lexerClass(self, base):
8*16467b97STreehugger Robot##         class TLexer(base):
9*16467b97STreehugger Robot##             def reportError(self, re):
10*16467b97STreehugger Robot##                 # no error recovery yet, just crash!
11*16467b97STreehugger Robot##                 raise re
12*16467b97STreehugger Robot
13*16467b97STreehugger Robot##         return TLexer
14*16467b97STreehugger Robot
15*16467b97STreehugger Robot
16*16467b97STreehugger Robot    def parserClass(self, base):
17*16467b97STreehugger Robot        class TParser(base):
18*16467b97STreehugger Robot            def recover(self, input, re):
19*16467b97STreehugger Robot                # no error recovery yet, just crash!
20*16467b97STreehugger Robot                raise
21*16467b97STreehugger Robot
22*16467b97STreehugger Robot        return TParser
23*16467b97STreehugger Robot
24*16467b97STreehugger Robot
25*16467b97STreehugger Robot    def parse(self, text, method, rArgs=(), **kwargs):
26*16467b97STreehugger Robot        self.compileGrammar() #options='-trace')
27*16467b97STreehugger Robot
28*16467b97STreehugger Robot        cStream = antlr3.StringStream(text)
29*16467b97STreehugger Robot        self.lexer = self.getLexer(cStream)
30*16467b97STreehugger Robot        tStream = antlr3.CommonTokenStream(self.lexer)
31*16467b97STreehugger Robot        self.parser = self.getParser(tStream)
32*16467b97STreehugger Robot
33*16467b97STreehugger Robot        for attr, val in kwargs.items():
34*16467b97STreehugger Robot            setattr(self.parser, attr, val)
35*16467b97STreehugger Robot
36*16467b97STreehugger Robot        return getattr(self.parser, method)(*rArgs)
37*16467b97STreehugger Robot
38*16467b97STreehugger Robot
39*16467b97STreehugger Robot    def testR1(self):
40*16467b97STreehugger Robot        r = self.parse("1 + 2", 'r1')
41*16467b97STreehugger Robot        self.assertEqual(
42*16467b97STreehugger Robot            r.tree.toStringTree(),
43*16467b97STreehugger Robot            '(+ 1 2)'
44*16467b97STreehugger Robot            )
45*16467b97STreehugger Robot
46*16467b97STreehugger Robot
47*16467b97STreehugger Robot    def testR2a(self):
48*16467b97STreehugger Robot        r = self.parse("assert 2+3;", 'r2')
49*16467b97STreehugger Robot        self.assertEqual(
50*16467b97STreehugger Robot            r.tree.toStringTree(),
51*16467b97STreehugger Robot            '(assert (+ 2 3))'
52*16467b97STreehugger Robot            )
53*16467b97STreehugger Robot
54*16467b97STreehugger Robot
55*16467b97STreehugger Robot    def testR2b(self):
56*16467b97STreehugger Robot        r = self.parse("assert 2+3 : 5;", 'r2')
57*16467b97STreehugger Robot        self.assertEqual(
58*16467b97STreehugger Robot            r.tree.toStringTree(),
59*16467b97STreehugger Robot            '(assert (+ 2 3) 5)'
60*16467b97STreehugger Robot            )
61*16467b97STreehugger Robot
62*16467b97STreehugger Robot
63*16467b97STreehugger Robot    def testR3a(self):
64*16467b97STreehugger Robot        r = self.parse("if 1 fooze", 'r3')
65*16467b97STreehugger Robot        self.assertEqual(
66*16467b97STreehugger Robot            r.tree.toStringTree(),
67*16467b97STreehugger Robot            '(if 1 fooze)'
68*16467b97STreehugger Robot            )
69*16467b97STreehugger Robot
70*16467b97STreehugger Robot
71*16467b97STreehugger Robot    def testR3b(self):
72*16467b97STreehugger Robot        r = self.parse("if 1 fooze else fooze", 'r3')
73*16467b97STreehugger Robot        self.assertEqual(
74*16467b97STreehugger Robot            r.tree.toStringTree(),
75*16467b97STreehugger Robot            '(if 1 fooze fooze)'
76*16467b97STreehugger Robot            )
77*16467b97STreehugger Robot
78*16467b97STreehugger Robot
79*16467b97STreehugger Robot    def testR4a(self):
80*16467b97STreehugger Robot        r = self.parse("while 2 fooze", 'r4')
81*16467b97STreehugger Robot        self.assertEqual(
82*16467b97STreehugger Robot            r.tree.toStringTree(),
83*16467b97STreehugger Robot            '(while 2 fooze)'
84*16467b97STreehugger Robot            )
85*16467b97STreehugger Robot
86*16467b97STreehugger Robot
87*16467b97STreehugger Robot    def testR5a(self):
88*16467b97STreehugger Robot        r = self.parse("return;", 'r5')
89*16467b97STreehugger Robot        self.assertEqual(
90*16467b97STreehugger Robot            r.tree.toStringTree(),
91*16467b97STreehugger Robot            'return'
92*16467b97STreehugger Robot            )
93*16467b97STreehugger Robot
94*16467b97STreehugger Robot
95*16467b97STreehugger Robot    def testR5b(self):
96*16467b97STreehugger Robot        r = self.parse("return 2+3;", 'r5')
97*16467b97STreehugger Robot        self.assertEqual(
98*16467b97STreehugger Robot            r.tree.toStringTree(),
99*16467b97STreehugger Robot            '(return (+ 2 3))'
100*16467b97STreehugger Robot            )
101*16467b97STreehugger Robot
102*16467b97STreehugger Robot
103*16467b97STreehugger Robot    def testR6a(self):
104*16467b97STreehugger Robot        r = self.parse("3", 'r6')
105*16467b97STreehugger Robot        self.assertEqual(
106*16467b97STreehugger Robot            r.tree.toStringTree(),
107*16467b97STreehugger Robot            '3'
108*16467b97STreehugger Robot            )
109*16467b97STreehugger Robot
110*16467b97STreehugger Robot
111*16467b97STreehugger Robot    def testR6b(self):
112*16467b97STreehugger Robot        r = self.parse("3 a", 'r6')
113*16467b97STreehugger Robot        self.assertEqual(
114*16467b97STreehugger Robot            r.tree.toStringTree(),
115*16467b97STreehugger Robot            '3 a'
116*16467b97STreehugger Robot            )
117*16467b97STreehugger Robot
118*16467b97STreehugger Robot
119*16467b97STreehugger Robot    def testR7(self):
120*16467b97STreehugger Robot        r = self.parse("3", 'r7')
121*16467b97STreehugger Robot        self.assertIsNone(r.tree)
122*16467b97STreehugger Robot
123*16467b97STreehugger Robot
124*16467b97STreehugger Robot    def testR8(self):
125*16467b97STreehugger Robot        r = self.parse("var foo:bool", 'r8')
126*16467b97STreehugger Robot        self.assertEqual(
127*16467b97STreehugger Robot            r.tree.toStringTree(),
128*16467b97STreehugger Robot            '(var bool foo)'
129*16467b97STreehugger Robot            )
130*16467b97STreehugger Robot
131*16467b97STreehugger Robot
132*16467b97STreehugger Robot    def testR9(self):
133*16467b97STreehugger Robot        r = self.parse("int foo;", 'r9')
134*16467b97STreehugger Robot        self.assertEqual(
135*16467b97STreehugger Robot            r.tree.toStringTree(),
136*16467b97STreehugger Robot            '(VARDEF int foo)'
137*16467b97STreehugger Robot            )
138*16467b97STreehugger Robot
139*16467b97STreehugger Robot
140*16467b97STreehugger Robot    def testR10(self):
141*16467b97STreehugger Robot        r = self.parse("10", 'r10')
142*16467b97STreehugger Robot        self.assertEqual(
143*16467b97STreehugger Robot            r.tree.toStringTree(),
144*16467b97STreehugger Robot            '10.0'
145*16467b97STreehugger Robot            )
146*16467b97STreehugger Robot
147*16467b97STreehugger Robot
148*16467b97STreehugger Robot    def testR11a(self):
149*16467b97STreehugger Robot        r = self.parse("1+2", 'r11')
150*16467b97STreehugger Robot        self.assertEqual(
151*16467b97STreehugger Robot            r.tree.toStringTree(),
152*16467b97STreehugger Robot            '(EXPR (+ 1 2))'
153*16467b97STreehugger Robot            )
154*16467b97STreehugger Robot
155*16467b97STreehugger Robot
156*16467b97STreehugger Robot    def testR11b(self):
157*16467b97STreehugger Robot        r = self.parse("", 'r11')
158*16467b97STreehugger Robot        self.assertEqual(
159*16467b97STreehugger Robot            r.tree.toStringTree(),
160*16467b97STreehugger Robot            'EXPR'
161*16467b97STreehugger Robot            )
162*16467b97STreehugger Robot
163*16467b97STreehugger Robot
164*16467b97STreehugger Robot    def testR12a(self):
165*16467b97STreehugger Robot        r = self.parse("foo", 'r12')
166*16467b97STreehugger Robot        self.assertEqual(
167*16467b97STreehugger Robot            r.tree.toStringTree(),
168*16467b97STreehugger Robot            'foo'
169*16467b97STreehugger Robot            )
170*16467b97STreehugger Robot
171*16467b97STreehugger Robot
172*16467b97STreehugger Robot    def testR12b(self):
173*16467b97STreehugger Robot        r = self.parse("foo, bar, gnurz", 'r12')
174*16467b97STreehugger Robot        self.assertEqual(
175*16467b97STreehugger Robot            r.tree.toStringTree(),
176*16467b97STreehugger Robot            'foo bar gnurz'
177*16467b97STreehugger Robot            )
178*16467b97STreehugger Robot
179*16467b97STreehugger Robot
180*16467b97STreehugger Robot    def testR13a(self):
181*16467b97STreehugger Robot        r = self.parse("int foo;", 'r13')
182*16467b97STreehugger Robot        self.assertEqual(
183*16467b97STreehugger Robot            r.tree.toStringTree(),
184*16467b97STreehugger Robot            '(int foo)'
185*16467b97STreehugger Robot            )
186*16467b97STreehugger Robot
187*16467b97STreehugger Robot
188*16467b97STreehugger Robot    def testR13b(self):
189*16467b97STreehugger Robot        r = self.parse("bool foo, bar, gnurz;", 'r13')
190*16467b97STreehugger Robot        self.assertEqual(
191*16467b97STreehugger Robot            r.tree.toStringTree(),
192*16467b97STreehugger Robot            '(bool foo bar gnurz)'
193*16467b97STreehugger Robot            )
194*16467b97STreehugger Robot
195*16467b97STreehugger Robot
196*16467b97STreehugger Robot    def testR14a(self):
197*16467b97STreehugger Robot        r = self.parse("1+2 int", 'r14')
198*16467b97STreehugger Robot        self.assertEqual(
199*16467b97STreehugger Robot            r.tree.toStringTree(),
200*16467b97STreehugger Robot            '(EXPR (+ 1 2) int)'
201*16467b97STreehugger Robot            )
202*16467b97STreehugger Robot
203*16467b97STreehugger Robot
204*16467b97STreehugger Robot    def testR14b(self):
205*16467b97STreehugger Robot        r = self.parse("1+2 int bool", 'r14')
206*16467b97STreehugger Robot        self.assertEqual(
207*16467b97STreehugger Robot            r.tree.toStringTree(),
208*16467b97STreehugger Robot            '(EXPR (+ 1 2) int bool)'
209*16467b97STreehugger Robot            )
210*16467b97STreehugger Robot
211*16467b97STreehugger Robot
212*16467b97STreehugger Robot    def testR14c(self):
213*16467b97STreehugger Robot        r = self.parse("int bool", 'r14')
214*16467b97STreehugger Robot        self.assertEqual(
215*16467b97STreehugger Robot            r.tree.toStringTree(),
216*16467b97STreehugger Robot            '(EXPR int bool)'
217*16467b97STreehugger Robot            )
218*16467b97STreehugger Robot
219*16467b97STreehugger Robot
220*16467b97STreehugger Robot    def testR14d(self):
221*16467b97STreehugger Robot        r = self.parse("fooze fooze int bool", 'r14')
222*16467b97STreehugger Robot        self.assertEqual(
223*16467b97STreehugger Robot            r.tree.toStringTree(),
224*16467b97STreehugger Robot            '(EXPR fooze fooze int bool)'
225*16467b97STreehugger Robot            )
226*16467b97STreehugger Robot
227*16467b97STreehugger Robot
228*16467b97STreehugger Robot    def testR14e(self):
229*16467b97STreehugger Robot        r = self.parse("7+9 fooze fooze int bool", 'r14')
230*16467b97STreehugger Robot        self.assertEqual(
231*16467b97STreehugger Robot            r.tree.toStringTree(),
232*16467b97STreehugger Robot            '(EXPR (+ 7 9) fooze fooze int bool)'
233*16467b97STreehugger Robot            )
234*16467b97STreehugger Robot
235*16467b97STreehugger Robot
236*16467b97STreehugger Robot    def testR15(self):
237*16467b97STreehugger Robot        r = self.parse("7", 'r15')
238*16467b97STreehugger Robot        self.assertEqual(
239*16467b97STreehugger Robot            r.tree.toStringTree(),
240*16467b97STreehugger Robot            '7 7'
241*16467b97STreehugger Robot            )
242*16467b97STreehugger Robot
243*16467b97STreehugger Robot
244*16467b97STreehugger Robot    def testR16a(self):
245*16467b97STreehugger Robot        r = self.parse("int foo", 'r16')
246*16467b97STreehugger Robot        self.assertEqual(
247*16467b97STreehugger Robot            r.tree.toStringTree(),
248*16467b97STreehugger Robot            '(int foo)'
249*16467b97STreehugger Robot            )
250*16467b97STreehugger Robot
251*16467b97STreehugger Robot
252*16467b97STreehugger Robot    def testR16b(self):
253*16467b97STreehugger Robot        r = self.parse("int foo, bar, gnurz", 'r16')
254*16467b97STreehugger Robot
255*16467b97STreehugger Robot        self.assertEqual(
256*16467b97STreehugger Robot            r.tree.toStringTree(),
257*16467b97STreehugger Robot            '(int foo) (int bar) (int gnurz)'
258*16467b97STreehugger Robot            )
259*16467b97STreehugger Robot
260*16467b97STreehugger Robot
261*16467b97STreehugger Robot    def testR17a(self):
262*16467b97STreehugger Robot        r = self.parse("for ( fooze ; 1 + 2 ; fooze ) fooze", 'r17')
263*16467b97STreehugger Robot        self.assertEqual(
264*16467b97STreehugger Robot            r.tree.toStringTree(),
265*16467b97STreehugger Robot            '(for fooze (+ 1 2) fooze fooze)'
266*16467b97STreehugger Robot            )
267*16467b97STreehugger Robot
268*16467b97STreehugger Robot
269*16467b97STreehugger Robot    def testR18a(self):
270*16467b97STreehugger Robot        r = self.parse("for", 'r18')
271*16467b97STreehugger Robot        self.assertEqual(
272*16467b97STreehugger Robot            r.tree.toStringTree(),
273*16467b97STreehugger Robot            'BLOCK'
274*16467b97STreehugger Robot            )
275*16467b97STreehugger Robot
276*16467b97STreehugger Robot
277*16467b97STreehugger Robot    def testR19a(self):
278*16467b97STreehugger Robot        r = self.parse("for", 'r19')
279*16467b97STreehugger Robot        self.assertEqual(
280*16467b97STreehugger Robot            r.tree.toStringTree(),
281*16467b97STreehugger Robot            'for'
282*16467b97STreehugger Robot            )
283*16467b97STreehugger Robot
284*16467b97STreehugger Robot
285*16467b97STreehugger Robot    def testR20a(self):
286*16467b97STreehugger Robot        r = self.parse("for", 'r20')
287*16467b97STreehugger Robot        self.assertEqual(
288*16467b97STreehugger Robot            r.tree.toStringTree(),
289*16467b97STreehugger Robot            'FOR'
290*16467b97STreehugger Robot            )
291*16467b97STreehugger Robot
292*16467b97STreehugger Robot
293*16467b97STreehugger Robot    def testR21a(self):
294*16467b97STreehugger Robot        r = self.parse("for", 'r21')
295*16467b97STreehugger Robot        self.assertEqual(
296*16467b97STreehugger Robot            r.tree.toStringTree(),
297*16467b97STreehugger Robot            'BLOCK'
298*16467b97STreehugger Robot            )
299*16467b97STreehugger Robot
300*16467b97STreehugger Robot
301*16467b97STreehugger Robot    def testR22a(self):
302*16467b97STreehugger Robot        r = self.parse("for", 'r22')
303*16467b97STreehugger Robot        self.assertEqual(
304*16467b97STreehugger Robot            r.tree.toStringTree(),
305*16467b97STreehugger Robot            'for'
306*16467b97STreehugger Robot            )
307*16467b97STreehugger Robot
308*16467b97STreehugger Robot
309*16467b97STreehugger Robot    def testR23a(self):
310*16467b97STreehugger Robot        r = self.parse("for", 'r23')
311*16467b97STreehugger Robot        self.assertEqual(
312*16467b97STreehugger Robot            r.tree.toStringTree(),
313*16467b97STreehugger Robot            'FOR'
314*16467b97STreehugger Robot            )
315*16467b97STreehugger Robot
316*16467b97STreehugger Robot
317*16467b97STreehugger Robot    def testR24a(self):
318*16467b97STreehugger Robot        r = self.parse("fooze 1 + 2", 'r24')
319*16467b97STreehugger Robot        self.assertEqual(
320*16467b97STreehugger Robot            r.tree.toStringTree(),
321*16467b97STreehugger Robot            '(fooze (+ 1 2))'
322*16467b97STreehugger Robot            )
323*16467b97STreehugger Robot
324*16467b97STreehugger Robot
325*16467b97STreehugger Robot    def testR25a(self):
326*16467b97STreehugger Robot        r = self.parse("fooze, fooze2 1 + 2", 'r25')
327*16467b97STreehugger Robot        self.assertEqual(
328*16467b97STreehugger Robot            r.tree.toStringTree(),
329*16467b97STreehugger Robot            '(fooze (+ 1 2))'
330*16467b97STreehugger Robot            )
331*16467b97STreehugger Robot
332*16467b97STreehugger Robot
333*16467b97STreehugger Robot    def testR26a(self):
334*16467b97STreehugger Robot        r = self.parse("fooze, fooze2", 'r26')
335*16467b97STreehugger Robot        self.assertEqual(
336*16467b97STreehugger Robot            r.tree.toStringTree(),
337*16467b97STreehugger Robot            '(BLOCK fooze fooze2)'
338*16467b97STreehugger Robot            )
339*16467b97STreehugger Robot
340*16467b97STreehugger Robot
341*16467b97STreehugger Robot    def testR27a(self):
342*16467b97STreehugger Robot        r = self.parse("fooze 1 + 2", 'r27')
343*16467b97STreehugger Robot        self.assertEqual(
344*16467b97STreehugger Robot            r.tree.toStringTree(),
345*16467b97STreehugger Robot            '(fooze (fooze (+ 1 2)))'
346*16467b97STreehugger Robot            )
347*16467b97STreehugger Robot
348*16467b97STreehugger Robot
349*16467b97STreehugger Robot    def testR28(self):
350*16467b97STreehugger Robot        r = self.parse("foo28a", 'r28')
351*16467b97STreehugger Robot        self.assertIsNone(r.tree)
352*16467b97STreehugger Robot
353*16467b97STreehugger Robot
354*16467b97STreehugger Robot    def testR29(self):
355*16467b97STreehugger Robot        self.assertRaises(RuntimeError, self.parse, "", 'r29')
356*16467b97STreehugger Robot
357*16467b97STreehugger Robot
358*16467b97STreehugger Robot# FIXME: broken upstream?
359*16467b97STreehugger Robot##     def testR30(self):
360*16467b97STreehugger Robot##         try:
361*16467b97STreehugger Robot##             r = self.parse("fooze fooze", 'r30')
362*16467b97STreehugger Robot##             self.fail(r.tree.toStringTree())
363*16467b97STreehugger Robot##         except RuntimeError:
364*16467b97STreehugger Robot##             pass
365*16467b97STreehugger Robot
366*16467b97STreehugger Robot
367*16467b97STreehugger Robot    def testR31a(self):
368*16467b97STreehugger Robot        r = self.parse("public int gnurz = 1 + 2;", 'r31', flag=0)
369*16467b97STreehugger Robot        self.assertEqual(
370*16467b97STreehugger Robot            r.tree.toStringTree(),
371*16467b97STreehugger Robot            '(VARDEF gnurz public int (+ 1 2))'
372*16467b97STreehugger Robot            )
373*16467b97STreehugger Robot
374*16467b97STreehugger Robot
375*16467b97STreehugger Robot    def testR31b(self):
376*16467b97STreehugger Robot        r = self.parse("public int gnurz = 1 + 2;", 'r31', flag=1)
377*16467b97STreehugger Robot        self.assertEqual(
378*16467b97STreehugger Robot            r.tree.toStringTree(),
379*16467b97STreehugger Robot            '(VARIABLE gnurz public int (+ 1 2))'
380*16467b97STreehugger Robot            )
381*16467b97STreehugger Robot
382*16467b97STreehugger Robot
383*16467b97STreehugger Robot    def testR31c(self):
384*16467b97STreehugger Robot        r = self.parse("public int gnurz = 1 + 2;", 'r31', flag=2)
385*16467b97STreehugger Robot        self.assertEqual(
386*16467b97STreehugger Robot            r.tree.toStringTree(),
387*16467b97STreehugger Robot            '(FIELD gnurz public int (+ 1 2))'
388*16467b97STreehugger Robot            )
389*16467b97STreehugger Robot
390*16467b97STreehugger Robot
391*16467b97STreehugger Robot    def testR32a(self):
392*16467b97STreehugger Robot        r = self.parse("gnurz 32", 'r32', [1], flag=2)
393*16467b97STreehugger Robot        self.assertEqual(
394*16467b97STreehugger Robot            r.tree.toStringTree(),
395*16467b97STreehugger Robot            'gnurz'
396*16467b97STreehugger Robot            )
397*16467b97STreehugger Robot
398*16467b97STreehugger Robot
399*16467b97STreehugger Robot    def testR32b(self):
400*16467b97STreehugger Robot        r = self.parse("gnurz 32", 'r32', [2], flag=2)
401*16467b97STreehugger Robot        self.assertEqual(
402*16467b97STreehugger Robot            r.tree.toStringTree(),
403*16467b97STreehugger Robot            '32'
404*16467b97STreehugger Robot            )
405*16467b97STreehugger Robot
406*16467b97STreehugger Robot
407*16467b97STreehugger Robot    def testR32c(self):
408*16467b97STreehugger Robot        r = self.parse("gnurz 32", 'r32', [3], flag=2)
409*16467b97STreehugger Robot        self.assertIsNone(r.tree)
410*16467b97STreehugger Robot
411*16467b97STreehugger Robot
412*16467b97STreehugger Robot    def testR33a(self):
413*16467b97STreehugger Robot        r = self.parse("public private fooze", 'r33')
414*16467b97STreehugger Robot        self.assertEqual(
415*16467b97STreehugger Robot            r.tree.toStringTree(),
416*16467b97STreehugger Robot            'fooze'
417*16467b97STreehugger Robot            )
418*16467b97STreehugger Robot
419*16467b97STreehugger Robot
420*16467b97STreehugger Robot    def testR34a(self):
421*16467b97STreehugger Robot        r = self.parse("public class gnurz { fooze fooze2 }", 'r34')
422*16467b97STreehugger Robot        self.assertEqual(
423*16467b97STreehugger Robot            r.tree.toStringTree(),
424*16467b97STreehugger Robot            '(class gnurz public fooze fooze2)'
425*16467b97STreehugger Robot            )
426*16467b97STreehugger Robot
427*16467b97STreehugger Robot
428*16467b97STreehugger Robot    def testR34b(self):
429*16467b97STreehugger Robot        r = self.parse("public class gnurz extends bool implements int, bool { fooze fooze2 }", 'r34')
430*16467b97STreehugger Robot        self.assertEqual(
431*16467b97STreehugger Robot            r.tree.toStringTree(),
432*16467b97STreehugger Robot            '(class gnurz public (extends bool) (implements int bool) fooze fooze2)'
433*16467b97STreehugger Robot            )
434*16467b97STreehugger Robot
435*16467b97STreehugger Robot
436*16467b97STreehugger Robot    def testR35(self):
437*16467b97STreehugger Robot        self.assertRaises(RuntimeError, self.parse, "{ extends }", 'r35')
438*16467b97STreehugger Robot
439*16467b97STreehugger Robot
440*16467b97STreehugger Robot    def testR36a(self):
441*16467b97STreehugger Robot        r = self.parse("if ( 1 + 2 ) fooze", 'r36')
442*16467b97STreehugger Robot        self.assertEqual(
443*16467b97STreehugger Robot            r.tree.toStringTree(),
444*16467b97STreehugger Robot            '(if (EXPR (+ 1 2)) fooze)'
445*16467b97STreehugger Robot            )
446*16467b97STreehugger Robot
447*16467b97STreehugger Robot
448*16467b97STreehugger Robot    def testR36b(self):
449*16467b97STreehugger Robot        r = self.parse("if ( 1 + 2 ) fooze else fooze2", 'r36')
450*16467b97STreehugger Robot        self.assertEqual(
451*16467b97STreehugger Robot            r.tree.toStringTree(),
452*16467b97STreehugger Robot            '(if (EXPR (+ 1 2)) fooze fooze2)'
453*16467b97STreehugger Robot            )
454*16467b97STreehugger Robot
455*16467b97STreehugger Robot
456*16467b97STreehugger Robot    def testR37(self):
457*16467b97STreehugger Robot        r = self.parse("1 + 2 + 3", 'r37')
458*16467b97STreehugger Robot        self.assertEqual(
459*16467b97STreehugger Robot            r.tree.toStringTree(),
460*16467b97STreehugger Robot            '(+ (+ 1 2) 3)'
461*16467b97STreehugger Robot            )
462*16467b97STreehugger Robot
463*16467b97STreehugger Robot
464*16467b97STreehugger Robot    def testR38(self):
465*16467b97STreehugger Robot        r = self.parse("1 + 2 + 3", 'r38')
466*16467b97STreehugger Robot        self.assertEqual(
467*16467b97STreehugger Robot            r.tree.toStringTree(),
468*16467b97STreehugger Robot            '(+ (+ 1 2) 3)'
469*16467b97STreehugger Robot            )
470*16467b97STreehugger Robot
471*16467b97STreehugger Robot
472*16467b97STreehugger Robot    def testR39a(self):
473*16467b97STreehugger Robot        r = self.parse("gnurz[1]", 'r39')
474*16467b97STreehugger Robot        self.assertEqual(
475*16467b97STreehugger Robot            r.tree.toStringTree(),
476*16467b97STreehugger Robot            '(INDEX gnurz 1)'
477*16467b97STreehugger Robot            )
478*16467b97STreehugger Robot
479*16467b97STreehugger Robot
480*16467b97STreehugger Robot    def testR39b(self):
481*16467b97STreehugger Robot        r = self.parse("gnurz(2)", 'r39')
482*16467b97STreehugger Robot        self.assertEqual(
483*16467b97STreehugger Robot            r.tree.toStringTree(),
484*16467b97STreehugger Robot            '(CALL gnurz 2)'
485*16467b97STreehugger Robot            )
486*16467b97STreehugger Robot
487*16467b97STreehugger Robot
488*16467b97STreehugger Robot    def testR39c(self):
489*16467b97STreehugger Robot        r = self.parse("gnurz.gnarz", 'r39')
490*16467b97STreehugger Robot        self.assertEqual(
491*16467b97STreehugger Robot            r.tree.toStringTree(),
492*16467b97STreehugger Robot            '(FIELDACCESS gnurz gnarz)'
493*16467b97STreehugger Robot            )
494*16467b97STreehugger Robot
495*16467b97STreehugger Robot
496*16467b97STreehugger Robot    def testR39d(self):
497*16467b97STreehugger Robot        r = self.parse("gnurz.gnarz.gnorz", 'r39')
498*16467b97STreehugger Robot        self.assertEqual(
499*16467b97STreehugger Robot            r.tree.toStringTree(),
500*16467b97STreehugger Robot            '(FIELDACCESS (FIELDACCESS gnurz gnarz) gnorz)'
501*16467b97STreehugger Robot            )
502*16467b97STreehugger Robot
503*16467b97STreehugger Robot
504*16467b97STreehugger Robot    def testR40(self):
505*16467b97STreehugger Robot        r = self.parse("1 + 2 + 3;", 'r40')
506*16467b97STreehugger Robot        self.assertEqual(
507*16467b97STreehugger Robot            r.tree.toStringTree(),
508*16467b97STreehugger Robot            '(+ 1 2 3)'
509*16467b97STreehugger Robot            )
510*16467b97STreehugger Robot
511*16467b97STreehugger Robot
512*16467b97STreehugger Robot    def testR41(self):
513*16467b97STreehugger Robot        r = self.parse("1 + 2 + 3;", 'r41')
514*16467b97STreehugger Robot        self.assertEqual(
515*16467b97STreehugger Robot            r.tree.toStringTree(),
516*16467b97STreehugger Robot            '(3 (2 1))'
517*16467b97STreehugger Robot            )
518*16467b97STreehugger Robot
519*16467b97STreehugger Robot
520*16467b97STreehugger Robot    def testR42(self):
521*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r42')
522*16467b97STreehugger Robot        self.assertEqual(
523*16467b97STreehugger Robot            r.tree.toStringTree(),
524*16467b97STreehugger Robot            'gnurz gnarz gnorz'
525*16467b97STreehugger Robot            )
526*16467b97STreehugger Robot
527*16467b97STreehugger Robot
528*16467b97STreehugger Robot    def testR43(self):
529*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r43')
530*16467b97STreehugger Robot        self.assertIsNone(r.tree)
531*16467b97STreehugger Robot        self.assertEqual(
532*16467b97STreehugger Robot            r.res,
533*16467b97STreehugger Robot            ['gnurz', 'gnarz', 'gnorz']
534*16467b97STreehugger Robot            )
535*16467b97STreehugger Robot
536*16467b97STreehugger Robot
537*16467b97STreehugger Robot    def testR44(self):
538*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r44')
539*16467b97STreehugger Robot        self.assertEqual(
540*16467b97STreehugger Robot            r.tree.toStringTree(),
541*16467b97STreehugger Robot            '(gnorz (gnarz gnurz))'
542*16467b97STreehugger Robot            )
543*16467b97STreehugger Robot
544*16467b97STreehugger Robot
545*16467b97STreehugger Robot    def testR45(self):
546*16467b97STreehugger Robot        r = self.parse("gnurz", 'r45')
547*16467b97STreehugger Robot        self.assertEqual(
548*16467b97STreehugger Robot            r.tree.toStringTree(),
549*16467b97STreehugger Robot            'gnurz'
550*16467b97STreehugger Robot            )
551*16467b97STreehugger Robot
552*16467b97STreehugger Robot
553*16467b97STreehugger Robot    def testR46(self):
554*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r46')
555*16467b97STreehugger Robot        self.assertIsNone(r.tree)
556*16467b97STreehugger Robot        self.assertEqual(
557*16467b97STreehugger Robot            r.res,
558*16467b97STreehugger Robot            ['gnurz', 'gnarz', 'gnorz']
559*16467b97STreehugger Robot            )
560*16467b97STreehugger Robot
561*16467b97STreehugger Robot
562*16467b97STreehugger Robot    def testR47(self):
563*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r47')
564*16467b97STreehugger Robot        self.assertEqual(
565*16467b97STreehugger Robot            r.tree.toStringTree(),
566*16467b97STreehugger Robot            'gnurz gnarz gnorz'
567*16467b97STreehugger Robot            )
568*16467b97STreehugger Robot
569*16467b97STreehugger Robot
570*16467b97STreehugger Robot    def testR48(self):
571*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r48')
572*16467b97STreehugger Robot        self.assertEqual(
573*16467b97STreehugger Robot            r.tree.toStringTree(),
574*16467b97STreehugger Robot            'gnurz gnarz gnorz'
575*16467b97STreehugger Robot            )
576*16467b97STreehugger Robot
577*16467b97STreehugger Robot
578*16467b97STreehugger Robot    def testR49(self):
579*16467b97STreehugger Robot        r = self.parse("gnurz gnorz", 'r49')
580*16467b97STreehugger Robot        self.assertEqual(
581*16467b97STreehugger Robot            r.tree.toStringTree(),
582*16467b97STreehugger Robot            '(gnurz gnorz)'
583*16467b97STreehugger Robot            )
584*16467b97STreehugger Robot
585*16467b97STreehugger Robot
586*16467b97STreehugger Robot    def testR50(self):
587*16467b97STreehugger Robot        r = self.parse("gnurz", 'r50')
588*16467b97STreehugger Robot        self.assertEqual(
589*16467b97STreehugger Robot            r.tree.toStringTree(),
590*16467b97STreehugger Robot            '(1.0 gnurz)'
591*16467b97STreehugger Robot            )
592*16467b97STreehugger Robot
593*16467b97STreehugger Robot
594*16467b97STreehugger Robot    def testR51(self):
595*16467b97STreehugger Robot        r = self.parse("gnurza gnurzb gnurzc", 'r51')
596*16467b97STreehugger Robot        self.assertEqual(
597*16467b97STreehugger Robot            r.res.toStringTree(),
598*16467b97STreehugger Robot            'gnurzb'
599*16467b97STreehugger Robot            )
600*16467b97STreehugger Robot
601*16467b97STreehugger Robot
602*16467b97STreehugger Robot    def testR52(self):
603*16467b97STreehugger Robot        r = self.parse("gnurz", 'r52')
604*16467b97STreehugger Robot        self.assertEqual(
605*16467b97STreehugger Robot            r.res.toStringTree(),
606*16467b97STreehugger Robot            'gnurz'
607*16467b97STreehugger Robot            )
608*16467b97STreehugger Robot
609*16467b97STreehugger Robot
610*16467b97STreehugger Robot    def testR53(self):
611*16467b97STreehugger Robot        r = self.parse("gnurz", 'r53')
612*16467b97STreehugger Robot        self.assertEqual(
613*16467b97STreehugger Robot            r.res.toStringTree(),
614*16467b97STreehugger Robot            'gnurz'
615*16467b97STreehugger Robot            )
616*16467b97STreehugger Robot
617*16467b97STreehugger Robot
618*16467b97STreehugger Robot    def testR54(self):
619*16467b97STreehugger Robot        r = self.parse("gnurza 1 + 2 gnurzb", 'r54')
620*16467b97STreehugger Robot        self.assertEqual(
621*16467b97STreehugger Robot            r.tree.toStringTree(),
622*16467b97STreehugger Robot            '(+ 1 2)'
623*16467b97STreehugger Robot            )
624*16467b97STreehugger Robot
625*16467b97STreehugger Robot
626*16467b97STreehugger Robot    def testR55a(self):
627*16467b97STreehugger Robot        r = self.parse("public private 1 + 2", 'r55')
628*16467b97STreehugger Robot        self.assertEqual(
629*16467b97STreehugger Robot            r.tree.toStringTree(),
630*16467b97STreehugger Robot            'public private (+ 1 2)'
631*16467b97STreehugger Robot            )
632*16467b97STreehugger Robot
633*16467b97STreehugger Robot
634*16467b97STreehugger Robot    def testR55b(self):
635*16467b97STreehugger Robot        r = self.parse("public fooze", 'r55')
636*16467b97STreehugger Robot        self.assertEqual(
637*16467b97STreehugger Robot            r.tree.toStringTree(),
638*16467b97STreehugger Robot            'public fooze'
639*16467b97STreehugger Robot            )
640*16467b97STreehugger Robot
641*16467b97STreehugger Robot
642*16467b97STreehugger Robot    def testR56(self):
643*16467b97STreehugger Robot        r = self.parse("a b c d", 'r56')
644*16467b97STreehugger Robot        self.assertEqual(
645*16467b97STreehugger Robot            r.tree.toStringTree(),
646*16467b97STreehugger Robot            'foo'
647*16467b97STreehugger Robot            )
648*16467b97STreehugger Robot
649*16467b97STreehugger Robot
650*16467b97STreehugger Robot    def testR57(self):
651*16467b97STreehugger Robot        r = self.parse("a b c d", 'r57')
652*16467b97STreehugger Robot        self.assertEqual(
653*16467b97STreehugger Robot            r.tree.toStringTree(),
654*16467b97STreehugger Robot            'foo'
655*16467b97STreehugger Robot            )
656*16467b97STreehugger Robot
657*16467b97STreehugger Robot
658*16467b97STreehugger Robot    def testR59(self):
659*16467b97STreehugger Robot        r = self.parse("a b c fooze", 'r59')
660*16467b97STreehugger Robot        self.assertEqual(
661*16467b97STreehugger Robot            r.tree.toStringTree(),
662*16467b97STreehugger Robot            '(a fooze) (b fooze) (c fooze)'
663*16467b97STreehugger Robot            )
664*16467b97STreehugger Robot
665*16467b97STreehugger Robot
666*16467b97STreehugger Robot
667*16467b97STreehugger Robotif __name__ == '__main__':
668*16467b97STreehugger Robot    unittest.main()
669*16467b97STreehugger Robot
670