xref: /aosp_15_r20/external/antlr/runtime/Python/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.failUnlessEqual(
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.failUnlessEqual(
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.failUnlessEqual(
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.failUnlessEqual(
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.failUnlessEqual(
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.failUnlessEqual(
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.failUnlessEqual(
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.failUnlessEqual(
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.failUnlessEqual(
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.failUnlessEqual(
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.failUnless(
122*16467b97STreehugger Robot            r.tree is None
123*16467b97STreehugger Robot            )
124*16467b97STreehugger Robot
125*16467b97STreehugger Robot
126*16467b97STreehugger Robot    def testR8(self):
127*16467b97STreehugger Robot        r = self.parse("var foo:bool", 'r8')
128*16467b97STreehugger Robot        self.failUnlessEqual(
129*16467b97STreehugger Robot            r.tree.toStringTree(),
130*16467b97STreehugger Robot            '(var bool foo)'
131*16467b97STreehugger Robot            )
132*16467b97STreehugger Robot
133*16467b97STreehugger Robot
134*16467b97STreehugger Robot    def testR9(self):
135*16467b97STreehugger Robot        r = self.parse("int foo;", 'r9')
136*16467b97STreehugger Robot        self.failUnlessEqual(
137*16467b97STreehugger Robot            r.tree.toStringTree(),
138*16467b97STreehugger Robot            '(VARDEF int foo)'
139*16467b97STreehugger Robot            )
140*16467b97STreehugger Robot
141*16467b97STreehugger Robot
142*16467b97STreehugger Robot    def testR10(self):
143*16467b97STreehugger Robot        r = self.parse("10", 'r10')
144*16467b97STreehugger Robot        self.failUnlessEqual(
145*16467b97STreehugger Robot            r.tree.toStringTree(),
146*16467b97STreehugger Robot            '10.0'
147*16467b97STreehugger Robot            )
148*16467b97STreehugger Robot
149*16467b97STreehugger Robot
150*16467b97STreehugger Robot    def testR11a(self):
151*16467b97STreehugger Robot        r = self.parse("1+2", 'r11')
152*16467b97STreehugger Robot        self.failUnlessEqual(
153*16467b97STreehugger Robot            r.tree.toStringTree(),
154*16467b97STreehugger Robot            '(EXPR (+ 1 2))'
155*16467b97STreehugger Robot            )
156*16467b97STreehugger Robot
157*16467b97STreehugger Robot
158*16467b97STreehugger Robot    def testR11b(self):
159*16467b97STreehugger Robot        r = self.parse("", 'r11')
160*16467b97STreehugger Robot        self.failUnlessEqual(
161*16467b97STreehugger Robot            r.tree.toStringTree(),
162*16467b97STreehugger Robot            'EXPR'
163*16467b97STreehugger Robot            )
164*16467b97STreehugger Robot
165*16467b97STreehugger Robot
166*16467b97STreehugger Robot    def testR12a(self):
167*16467b97STreehugger Robot        r = self.parse("foo", 'r12')
168*16467b97STreehugger Robot        self.failUnlessEqual(
169*16467b97STreehugger Robot            r.tree.toStringTree(),
170*16467b97STreehugger Robot            'foo'
171*16467b97STreehugger Robot            )
172*16467b97STreehugger Robot
173*16467b97STreehugger Robot
174*16467b97STreehugger Robot    def testR12b(self):
175*16467b97STreehugger Robot        r = self.parse("foo, bar, gnurz", 'r12')
176*16467b97STreehugger Robot        self.failUnlessEqual(
177*16467b97STreehugger Robot            r.tree.toStringTree(),
178*16467b97STreehugger Robot            'foo bar gnurz'
179*16467b97STreehugger Robot            )
180*16467b97STreehugger Robot
181*16467b97STreehugger Robot
182*16467b97STreehugger Robot    def testR13a(self):
183*16467b97STreehugger Robot        r = self.parse("int foo;", 'r13')
184*16467b97STreehugger Robot        self.failUnlessEqual(
185*16467b97STreehugger Robot            r.tree.toStringTree(),
186*16467b97STreehugger Robot            '(int foo)'
187*16467b97STreehugger Robot            )
188*16467b97STreehugger Robot
189*16467b97STreehugger Robot
190*16467b97STreehugger Robot    def testR13b(self):
191*16467b97STreehugger Robot        r = self.parse("bool foo, bar, gnurz;", 'r13')
192*16467b97STreehugger Robot        self.failUnlessEqual(
193*16467b97STreehugger Robot            r.tree.toStringTree(),
194*16467b97STreehugger Robot            '(bool foo bar gnurz)'
195*16467b97STreehugger Robot            )
196*16467b97STreehugger Robot
197*16467b97STreehugger Robot
198*16467b97STreehugger Robot    def testR14a(self):
199*16467b97STreehugger Robot        r = self.parse("1+2 int", 'r14')
200*16467b97STreehugger Robot        self.failUnlessEqual(
201*16467b97STreehugger Robot            r.tree.toStringTree(),
202*16467b97STreehugger Robot            '(EXPR (+ 1 2) int)'
203*16467b97STreehugger Robot            )
204*16467b97STreehugger Robot
205*16467b97STreehugger Robot
206*16467b97STreehugger Robot    def testR14b(self):
207*16467b97STreehugger Robot        r = self.parse("1+2 int bool", 'r14')
208*16467b97STreehugger Robot        self.failUnlessEqual(
209*16467b97STreehugger Robot            r.tree.toStringTree(),
210*16467b97STreehugger Robot            '(EXPR (+ 1 2) int bool)'
211*16467b97STreehugger Robot            )
212*16467b97STreehugger Robot
213*16467b97STreehugger Robot
214*16467b97STreehugger Robot    def testR14c(self):
215*16467b97STreehugger Robot        r = self.parse("int bool", 'r14')
216*16467b97STreehugger Robot        self.failUnlessEqual(
217*16467b97STreehugger Robot            r.tree.toStringTree(),
218*16467b97STreehugger Robot            '(EXPR int bool)'
219*16467b97STreehugger Robot            )
220*16467b97STreehugger Robot
221*16467b97STreehugger Robot
222*16467b97STreehugger Robot    def testR14d(self):
223*16467b97STreehugger Robot        r = self.parse("fooze fooze int bool", 'r14')
224*16467b97STreehugger Robot        self.failUnlessEqual(
225*16467b97STreehugger Robot            r.tree.toStringTree(),
226*16467b97STreehugger Robot            '(EXPR fooze fooze int bool)'
227*16467b97STreehugger Robot            )
228*16467b97STreehugger Robot
229*16467b97STreehugger Robot
230*16467b97STreehugger Robot    def testR14e(self):
231*16467b97STreehugger Robot        r = self.parse("7+9 fooze fooze int bool", 'r14')
232*16467b97STreehugger Robot        self.failUnlessEqual(
233*16467b97STreehugger Robot            r.tree.toStringTree(),
234*16467b97STreehugger Robot            '(EXPR (+ 7 9) fooze fooze int bool)'
235*16467b97STreehugger Robot            )
236*16467b97STreehugger Robot
237*16467b97STreehugger Robot
238*16467b97STreehugger Robot    def testR15(self):
239*16467b97STreehugger Robot        r = self.parse("7", 'r15')
240*16467b97STreehugger Robot        self.failUnlessEqual(
241*16467b97STreehugger Robot            r.tree.toStringTree(),
242*16467b97STreehugger Robot            '7 7'
243*16467b97STreehugger Robot            )
244*16467b97STreehugger Robot
245*16467b97STreehugger Robot
246*16467b97STreehugger Robot    def testR16a(self):
247*16467b97STreehugger Robot        r = self.parse("int foo", 'r16')
248*16467b97STreehugger Robot        self.failUnlessEqual(
249*16467b97STreehugger Robot            r.tree.toStringTree(),
250*16467b97STreehugger Robot            '(int foo)'
251*16467b97STreehugger Robot            )
252*16467b97STreehugger Robot
253*16467b97STreehugger Robot
254*16467b97STreehugger Robot    def testR16b(self):
255*16467b97STreehugger Robot        r = self.parse("int foo, bar, gnurz", 'r16')
256*16467b97STreehugger Robot
257*16467b97STreehugger Robot        self.failUnlessEqual(
258*16467b97STreehugger Robot            r.tree.toStringTree(),
259*16467b97STreehugger Robot            '(int foo) (int bar) (int gnurz)'
260*16467b97STreehugger Robot            )
261*16467b97STreehugger Robot
262*16467b97STreehugger Robot
263*16467b97STreehugger Robot    def testR17a(self):
264*16467b97STreehugger Robot        r = self.parse("for ( fooze ; 1 + 2 ; fooze ) fooze", 'r17')
265*16467b97STreehugger Robot        self.failUnlessEqual(
266*16467b97STreehugger Robot            r.tree.toStringTree(),
267*16467b97STreehugger Robot            '(for fooze (+ 1 2) fooze fooze)'
268*16467b97STreehugger Robot            )
269*16467b97STreehugger Robot
270*16467b97STreehugger Robot
271*16467b97STreehugger Robot    def testR18a(self):
272*16467b97STreehugger Robot        r = self.parse("for", 'r18')
273*16467b97STreehugger Robot        self.failUnlessEqual(
274*16467b97STreehugger Robot            r.tree.toStringTree(),
275*16467b97STreehugger Robot            'BLOCK'
276*16467b97STreehugger Robot            )
277*16467b97STreehugger Robot
278*16467b97STreehugger Robot
279*16467b97STreehugger Robot    def testR19a(self):
280*16467b97STreehugger Robot        r = self.parse("for", 'r19')
281*16467b97STreehugger Robot        self.failUnlessEqual(
282*16467b97STreehugger Robot            r.tree.toStringTree(),
283*16467b97STreehugger Robot            'for'
284*16467b97STreehugger Robot            )
285*16467b97STreehugger Robot
286*16467b97STreehugger Robot
287*16467b97STreehugger Robot    def testR20a(self):
288*16467b97STreehugger Robot        r = self.parse("for", 'r20')
289*16467b97STreehugger Robot        self.failUnlessEqual(
290*16467b97STreehugger Robot            r.tree.toStringTree(),
291*16467b97STreehugger Robot            'FOR'
292*16467b97STreehugger Robot            )
293*16467b97STreehugger Robot
294*16467b97STreehugger Robot
295*16467b97STreehugger Robot    def testR21a(self):
296*16467b97STreehugger Robot        r = self.parse("for", 'r21')
297*16467b97STreehugger Robot        self.failUnlessEqual(
298*16467b97STreehugger Robot            r.tree.toStringTree(),
299*16467b97STreehugger Robot            'BLOCK'
300*16467b97STreehugger Robot            )
301*16467b97STreehugger Robot
302*16467b97STreehugger Robot
303*16467b97STreehugger Robot    def testR22a(self):
304*16467b97STreehugger Robot        r = self.parse("for", 'r22')
305*16467b97STreehugger Robot        self.failUnlessEqual(
306*16467b97STreehugger Robot            r.tree.toStringTree(),
307*16467b97STreehugger Robot            'for'
308*16467b97STreehugger Robot            )
309*16467b97STreehugger Robot
310*16467b97STreehugger Robot
311*16467b97STreehugger Robot    def testR23a(self):
312*16467b97STreehugger Robot        r = self.parse("for", 'r23')
313*16467b97STreehugger Robot        self.failUnlessEqual(
314*16467b97STreehugger Robot            r.tree.toStringTree(),
315*16467b97STreehugger Robot            'FOR'
316*16467b97STreehugger Robot            )
317*16467b97STreehugger Robot
318*16467b97STreehugger Robot
319*16467b97STreehugger Robot    def testR24a(self):
320*16467b97STreehugger Robot        r = self.parse("fooze 1 + 2", 'r24')
321*16467b97STreehugger Robot        self.failUnlessEqual(
322*16467b97STreehugger Robot            r.tree.toStringTree(),
323*16467b97STreehugger Robot            '(fooze (+ 1 2))'
324*16467b97STreehugger Robot            )
325*16467b97STreehugger Robot
326*16467b97STreehugger Robot
327*16467b97STreehugger Robot    def testR25a(self):
328*16467b97STreehugger Robot        r = self.parse("fooze, fooze2 1 + 2", 'r25')
329*16467b97STreehugger Robot        self.failUnlessEqual(
330*16467b97STreehugger Robot            r.tree.toStringTree(),
331*16467b97STreehugger Robot            '(fooze (+ 1 2))'
332*16467b97STreehugger Robot            )
333*16467b97STreehugger Robot
334*16467b97STreehugger Robot
335*16467b97STreehugger Robot    def testR26a(self):
336*16467b97STreehugger Robot        r = self.parse("fooze, fooze2", 'r26')
337*16467b97STreehugger Robot        self.failUnlessEqual(
338*16467b97STreehugger Robot            r.tree.toStringTree(),
339*16467b97STreehugger Robot            '(BLOCK fooze fooze2)'
340*16467b97STreehugger Robot            )
341*16467b97STreehugger Robot
342*16467b97STreehugger Robot
343*16467b97STreehugger Robot    def testR27a(self):
344*16467b97STreehugger Robot        r = self.parse("fooze 1 + 2", 'r27')
345*16467b97STreehugger Robot        self.failUnlessEqual(
346*16467b97STreehugger Robot            r.tree.toStringTree(),
347*16467b97STreehugger Robot            '(fooze (fooze (+ 1 2)))'
348*16467b97STreehugger Robot            )
349*16467b97STreehugger Robot
350*16467b97STreehugger Robot
351*16467b97STreehugger Robot    def testR28(self):
352*16467b97STreehugger Robot        r = self.parse("foo28a", 'r28')
353*16467b97STreehugger Robot        self.failUnless(
354*16467b97STreehugger Robot            r.tree is None
355*16467b97STreehugger Robot            )
356*16467b97STreehugger Robot
357*16467b97STreehugger Robot
358*16467b97STreehugger Robot    def testR29(self):
359*16467b97STreehugger Robot        try:
360*16467b97STreehugger Robot            r = self.parse("", 'r29')
361*16467b97STreehugger Robot            self.fail()
362*16467b97STreehugger Robot        except RuntimeError:
363*16467b97STreehugger Robot            pass
364*16467b97STreehugger Robot
365*16467b97STreehugger Robot
366*16467b97STreehugger Robot# FIXME: broken upstream?
367*16467b97STreehugger Robot##     def testR30(self):
368*16467b97STreehugger Robot##         try:
369*16467b97STreehugger Robot##             r = self.parse("fooze fooze", 'r30')
370*16467b97STreehugger Robot##             self.fail(r.tree.toStringTree())
371*16467b97STreehugger Robot##         except RuntimeError:
372*16467b97STreehugger Robot##             pass
373*16467b97STreehugger Robot
374*16467b97STreehugger Robot
375*16467b97STreehugger Robot    def testR31a(self):
376*16467b97STreehugger Robot        r = self.parse("public int gnurz = 1 + 2;", 'r31', flag=0)
377*16467b97STreehugger Robot        self.failUnlessEqual(
378*16467b97STreehugger Robot            r.tree.toStringTree(),
379*16467b97STreehugger Robot            '(VARDEF gnurz public int (+ 1 2))'
380*16467b97STreehugger Robot            )
381*16467b97STreehugger Robot
382*16467b97STreehugger Robot
383*16467b97STreehugger Robot    def testR31b(self):
384*16467b97STreehugger Robot        r = self.parse("public int gnurz = 1 + 2;", 'r31', flag=1)
385*16467b97STreehugger Robot        self.failUnlessEqual(
386*16467b97STreehugger Robot            r.tree.toStringTree(),
387*16467b97STreehugger Robot            '(VARIABLE gnurz public int (+ 1 2))'
388*16467b97STreehugger Robot            )
389*16467b97STreehugger Robot
390*16467b97STreehugger Robot
391*16467b97STreehugger Robot    def testR31c(self):
392*16467b97STreehugger Robot        r = self.parse("public int gnurz = 1 + 2;", 'r31', flag=2)
393*16467b97STreehugger Robot        self.failUnlessEqual(
394*16467b97STreehugger Robot            r.tree.toStringTree(),
395*16467b97STreehugger Robot            '(FIELD gnurz public int (+ 1 2))'
396*16467b97STreehugger Robot            )
397*16467b97STreehugger Robot
398*16467b97STreehugger Robot
399*16467b97STreehugger Robot    def testR32a(self):
400*16467b97STreehugger Robot        r = self.parse("gnurz 32", 'r32', [1], flag=2)
401*16467b97STreehugger Robot        self.failUnlessEqual(
402*16467b97STreehugger Robot            r.tree.toStringTree(),
403*16467b97STreehugger Robot            'gnurz'
404*16467b97STreehugger Robot            )
405*16467b97STreehugger Robot
406*16467b97STreehugger Robot
407*16467b97STreehugger Robot    def testR32b(self):
408*16467b97STreehugger Robot        r = self.parse("gnurz 32", 'r32', [2], flag=2)
409*16467b97STreehugger Robot        self.failUnlessEqual(
410*16467b97STreehugger Robot            r.tree.toStringTree(),
411*16467b97STreehugger Robot            '32'
412*16467b97STreehugger Robot            )
413*16467b97STreehugger Robot
414*16467b97STreehugger Robot
415*16467b97STreehugger Robot    def testR32c(self):
416*16467b97STreehugger Robot        r = self.parse("gnurz 32", 'r32', [3], flag=2)
417*16467b97STreehugger Robot        self.failUnless(
418*16467b97STreehugger Robot            r.tree is None
419*16467b97STreehugger Robot            )
420*16467b97STreehugger Robot
421*16467b97STreehugger Robot
422*16467b97STreehugger Robot    def testR33a(self):
423*16467b97STreehugger Robot        r = self.parse("public private fooze", 'r33')
424*16467b97STreehugger Robot        self.failUnlessEqual(
425*16467b97STreehugger Robot            r.tree.toStringTree(),
426*16467b97STreehugger Robot            'fooze'
427*16467b97STreehugger Robot            )
428*16467b97STreehugger Robot
429*16467b97STreehugger Robot
430*16467b97STreehugger Robot    def testR34a(self):
431*16467b97STreehugger Robot        r = self.parse("public class gnurz { fooze fooze2 }", 'r34')
432*16467b97STreehugger Robot        self.failUnlessEqual(
433*16467b97STreehugger Robot            r.tree.toStringTree(),
434*16467b97STreehugger Robot            '(class gnurz public fooze fooze2)'
435*16467b97STreehugger Robot            )
436*16467b97STreehugger Robot
437*16467b97STreehugger Robot
438*16467b97STreehugger Robot    def testR34b(self):
439*16467b97STreehugger Robot        r = self.parse("public class gnurz extends bool implements int, bool { fooze fooze2 }", 'r34')
440*16467b97STreehugger Robot        self.failUnlessEqual(
441*16467b97STreehugger Robot            r.tree.toStringTree(),
442*16467b97STreehugger Robot            '(class gnurz public (extends bool) (implements int bool) fooze fooze2)'
443*16467b97STreehugger Robot            )
444*16467b97STreehugger Robot
445*16467b97STreehugger Robot
446*16467b97STreehugger Robot    def testR35(self):
447*16467b97STreehugger Robot        try:
448*16467b97STreehugger Robot            r = self.parse("{ extends }", 'r35')
449*16467b97STreehugger Robot            self.fail()
450*16467b97STreehugger Robot
451*16467b97STreehugger Robot        except RuntimeError:
452*16467b97STreehugger Robot            pass
453*16467b97STreehugger Robot
454*16467b97STreehugger Robot
455*16467b97STreehugger Robot    def testR36a(self):
456*16467b97STreehugger Robot        r = self.parse("if ( 1 + 2 ) fooze", 'r36')
457*16467b97STreehugger Robot        self.failUnlessEqual(
458*16467b97STreehugger Robot            r.tree.toStringTree(),
459*16467b97STreehugger Robot            '(if (EXPR (+ 1 2)) fooze)'
460*16467b97STreehugger Robot            )
461*16467b97STreehugger Robot
462*16467b97STreehugger Robot
463*16467b97STreehugger Robot    def testR36b(self):
464*16467b97STreehugger Robot        r = self.parse("if ( 1 + 2 ) fooze else fooze2", 'r36')
465*16467b97STreehugger Robot        self.failUnlessEqual(
466*16467b97STreehugger Robot            r.tree.toStringTree(),
467*16467b97STreehugger Robot            '(if (EXPR (+ 1 2)) fooze fooze2)'
468*16467b97STreehugger Robot            )
469*16467b97STreehugger Robot
470*16467b97STreehugger Robot
471*16467b97STreehugger Robot    def testR37(self):
472*16467b97STreehugger Robot        r = self.parse("1 + 2 + 3", 'r37')
473*16467b97STreehugger Robot        self.failUnlessEqual(
474*16467b97STreehugger Robot            r.tree.toStringTree(),
475*16467b97STreehugger Robot            '(+ (+ 1 2) 3)'
476*16467b97STreehugger Robot            )
477*16467b97STreehugger Robot
478*16467b97STreehugger Robot
479*16467b97STreehugger Robot    def testR38(self):
480*16467b97STreehugger Robot        r = self.parse("1 + 2 + 3", 'r38')
481*16467b97STreehugger Robot        self.failUnlessEqual(
482*16467b97STreehugger Robot            r.tree.toStringTree(),
483*16467b97STreehugger Robot            '(+ (+ 1 2) 3)'
484*16467b97STreehugger Robot            )
485*16467b97STreehugger Robot
486*16467b97STreehugger Robot
487*16467b97STreehugger Robot    def testR39a(self):
488*16467b97STreehugger Robot        r = self.parse("gnurz[1]", 'r39')
489*16467b97STreehugger Robot        self.failUnlessEqual(
490*16467b97STreehugger Robot            r.tree.toStringTree(),
491*16467b97STreehugger Robot            '(INDEX gnurz 1)'
492*16467b97STreehugger Robot            )
493*16467b97STreehugger Robot
494*16467b97STreehugger Robot
495*16467b97STreehugger Robot    def testR39b(self):
496*16467b97STreehugger Robot        r = self.parse("gnurz(2)", 'r39')
497*16467b97STreehugger Robot        self.failUnlessEqual(
498*16467b97STreehugger Robot            r.tree.toStringTree(),
499*16467b97STreehugger Robot            '(CALL gnurz 2)'
500*16467b97STreehugger Robot            )
501*16467b97STreehugger Robot
502*16467b97STreehugger Robot
503*16467b97STreehugger Robot    def testR39c(self):
504*16467b97STreehugger Robot        r = self.parse("gnurz.gnarz", 'r39')
505*16467b97STreehugger Robot        self.failUnlessEqual(
506*16467b97STreehugger Robot            r.tree.toStringTree(),
507*16467b97STreehugger Robot            '(FIELDACCESS gnurz gnarz)'
508*16467b97STreehugger Robot            )
509*16467b97STreehugger Robot
510*16467b97STreehugger Robot
511*16467b97STreehugger Robot    def testR39d(self):
512*16467b97STreehugger Robot        r = self.parse("gnurz.gnarz.gnorz", 'r39')
513*16467b97STreehugger Robot        self.failUnlessEqual(
514*16467b97STreehugger Robot            r.tree.toStringTree(),
515*16467b97STreehugger Robot            '(FIELDACCESS (FIELDACCESS gnurz gnarz) gnorz)'
516*16467b97STreehugger Robot            )
517*16467b97STreehugger Robot
518*16467b97STreehugger Robot
519*16467b97STreehugger Robot    def testR40(self):
520*16467b97STreehugger Robot        r = self.parse("1 + 2 + 3;", 'r40')
521*16467b97STreehugger Robot        self.failUnlessEqual(
522*16467b97STreehugger Robot            r.tree.toStringTree(),
523*16467b97STreehugger Robot            '(+ 1 2 3)'
524*16467b97STreehugger Robot            )
525*16467b97STreehugger Robot
526*16467b97STreehugger Robot
527*16467b97STreehugger Robot    def testR41(self):
528*16467b97STreehugger Robot        r = self.parse("1 + 2 + 3;", 'r41')
529*16467b97STreehugger Robot        self.failUnlessEqual(
530*16467b97STreehugger Robot            r.tree.toStringTree(),
531*16467b97STreehugger Robot            '(3 (2 1))'
532*16467b97STreehugger Robot            )
533*16467b97STreehugger Robot
534*16467b97STreehugger Robot
535*16467b97STreehugger Robot    def testR42(self):
536*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r42')
537*16467b97STreehugger Robot        self.failUnlessEqual(
538*16467b97STreehugger Robot            r.tree.toStringTree(),
539*16467b97STreehugger Robot            'gnurz gnarz gnorz'
540*16467b97STreehugger Robot            )
541*16467b97STreehugger Robot
542*16467b97STreehugger Robot
543*16467b97STreehugger Robot    def testR43(self):
544*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r43')
545*16467b97STreehugger Robot        self.failUnless(
546*16467b97STreehugger Robot            r.tree is None
547*16467b97STreehugger Robot            )
548*16467b97STreehugger Robot        self.failUnlessEqual(
549*16467b97STreehugger Robot            r.res,
550*16467b97STreehugger Robot            ['gnurz', 'gnarz', 'gnorz']
551*16467b97STreehugger Robot            )
552*16467b97STreehugger Robot
553*16467b97STreehugger Robot
554*16467b97STreehugger Robot    def testR44(self):
555*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r44')
556*16467b97STreehugger Robot        self.failUnlessEqual(
557*16467b97STreehugger Robot            r.tree.toStringTree(),
558*16467b97STreehugger Robot            '(gnorz (gnarz gnurz))'
559*16467b97STreehugger Robot            )
560*16467b97STreehugger Robot
561*16467b97STreehugger Robot
562*16467b97STreehugger Robot    def testR45(self):
563*16467b97STreehugger Robot        r = self.parse("gnurz", 'r45')
564*16467b97STreehugger Robot        self.failUnlessEqual(
565*16467b97STreehugger Robot            r.tree.toStringTree(),
566*16467b97STreehugger Robot            'gnurz'
567*16467b97STreehugger Robot            )
568*16467b97STreehugger Robot
569*16467b97STreehugger Robot
570*16467b97STreehugger Robot    def testR46(self):
571*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r46')
572*16467b97STreehugger Robot        self.failUnless(
573*16467b97STreehugger Robot            r.tree is None
574*16467b97STreehugger Robot            )
575*16467b97STreehugger Robot        self.failUnlessEqual(
576*16467b97STreehugger Robot            r.res,
577*16467b97STreehugger Robot            ['gnurz', 'gnarz', 'gnorz']
578*16467b97STreehugger Robot            )
579*16467b97STreehugger Robot
580*16467b97STreehugger Robot
581*16467b97STreehugger Robot    def testR47(self):
582*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r47')
583*16467b97STreehugger Robot        self.failUnlessEqual(
584*16467b97STreehugger Robot            r.tree.toStringTree(),
585*16467b97STreehugger Robot            'gnurz gnarz gnorz'
586*16467b97STreehugger Robot            )
587*16467b97STreehugger Robot
588*16467b97STreehugger Robot
589*16467b97STreehugger Robot    def testR48(self):
590*16467b97STreehugger Robot        r = self.parse("gnurz, gnarz, gnorz", 'r48')
591*16467b97STreehugger Robot        self.failUnlessEqual(
592*16467b97STreehugger Robot            r.tree.toStringTree(),
593*16467b97STreehugger Robot            'gnurz gnarz gnorz'
594*16467b97STreehugger Robot            )
595*16467b97STreehugger Robot
596*16467b97STreehugger Robot
597*16467b97STreehugger Robot    def testR49(self):
598*16467b97STreehugger Robot        r = self.parse("gnurz gnorz", 'r49')
599*16467b97STreehugger Robot        self.failUnlessEqual(
600*16467b97STreehugger Robot            r.tree.toStringTree(),
601*16467b97STreehugger Robot            '(gnurz gnorz)'
602*16467b97STreehugger Robot            )
603*16467b97STreehugger Robot
604*16467b97STreehugger Robot
605*16467b97STreehugger Robot    def testR50(self):
606*16467b97STreehugger Robot        r = self.parse("gnurz", 'r50')
607*16467b97STreehugger Robot        self.failUnlessEqual(
608*16467b97STreehugger Robot            r.tree.toStringTree(),
609*16467b97STreehugger Robot            '(1.0 gnurz)'
610*16467b97STreehugger Robot            )
611*16467b97STreehugger Robot
612*16467b97STreehugger Robot
613*16467b97STreehugger Robot    def testR51(self):
614*16467b97STreehugger Robot        r = self.parse("gnurza gnurzb gnurzc", 'r51')
615*16467b97STreehugger Robot        self.failUnlessEqual(
616*16467b97STreehugger Robot            r.res.toStringTree(),
617*16467b97STreehugger Robot            'gnurzb'
618*16467b97STreehugger Robot            )
619*16467b97STreehugger Robot
620*16467b97STreehugger Robot
621*16467b97STreehugger Robot    def testR52(self):
622*16467b97STreehugger Robot        r = self.parse("gnurz", 'r52')
623*16467b97STreehugger Robot        self.failUnlessEqual(
624*16467b97STreehugger Robot            r.res.toStringTree(),
625*16467b97STreehugger Robot            'gnurz'
626*16467b97STreehugger Robot            )
627*16467b97STreehugger Robot
628*16467b97STreehugger Robot
629*16467b97STreehugger Robot    def testR53(self):
630*16467b97STreehugger Robot        r = self.parse("gnurz", 'r53')
631*16467b97STreehugger Robot        self.failUnlessEqual(
632*16467b97STreehugger Robot            r.res.toStringTree(),
633*16467b97STreehugger Robot            'gnurz'
634*16467b97STreehugger Robot            )
635*16467b97STreehugger Robot
636*16467b97STreehugger Robot
637*16467b97STreehugger Robot    def testR54(self):
638*16467b97STreehugger Robot        r = self.parse("gnurza 1 + 2 gnurzb", 'r54')
639*16467b97STreehugger Robot        self.failUnlessEqual(
640*16467b97STreehugger Robot            r.tree.toStringTree(),
641*16467b97STreehugger Robot            '(+ 1 2)'
642*16467b97STreehugger Robot            )
643*16467b97STreehugger Robot
644*16467b97STreehugger Robot
645*16467b97STreehugger Robot    def testR55a(self):
646*16467b97STreehugger Robot        r = self.parse("public private 1 + 2", 'r55')
647*16467b97STreehugger Robot        self.failUnlessEqual(
648*16467b97STreehugger Robot            r.tree.toStringTree(),
649*16467b97STreehugger Robot            'public private (+ 1 2)'
650*16467b97STreehugger Robot            )
651*16467b97STreehugger Robot
652*16467b97STreehugger Robot
653*16467b97STreehugger Robot    def testR55b(self):
654*16467b97STreehugger Robot        r = self.parse("public fooze", 'r55')
655*16467b97STreehugger Robot        self.failUnlessEqual(
656*16467b97STreehugger Robot            r.tree.toStringTree(),
657*16467b97STreehugger Robot            'public fooze'
658*16467b97STreehugger Robot            )
659*16467b97STreehugger Robot
660*16467b97STreehugger Robot
661*16467b97STreehugger Robot    def testR56(self):
662*16467b97STreehugger Robot        r = self.parse("a b c d", 'r56')
663*16467b97STreehugger Robot        self.failUnlessEqual(
664*16467b97STreehugger Robot            r.tree.toStringTree(),
665*16467b97STreehugger Robot            'foo'
666*16467b97STreehugger Robot            )
667*16467b97STreehugger Robot
668*16467b97STreehugger Robot
669*16467b97STreehugger Robot    def testR57(self):
670*16467b97STreehugger Robot        r = self.parse("a b c d", 'r57')
671*16467b97STreehugger Robot        self.failUnlessEqual(
672*16467b97STreehugger Robot            r.tree.toStringTree(),
673*16467b97STreehugger Robot            'foo'
674*16467b97STreehugger Robot            )
675*16467b97STreehugger Robot
676*16467b97STreehugger Robot
677*16467b97STreehugger Robot    def testR59(self):
678*16467b97STreehugger Robot        r = self.parse("a b c fooze", 'r59')
679*16467b97STreehugger Robot        self.failUnlessEqual(
680*16467b97STreehugger Robot            r.tree.toStringTree(),
681*16467b97STreehugger Robot            '(a fooze) (b fooze) (c fooze)'
682*16467b97STreehugger Robot            )
683*16467b97STreehugger Robot
684*16467b97STreehugger Robot
685*16467b97STreehugger Robot
686*16467b97STreehugger Robotif __name__ == '__main__':
687*16467b97STreehugger Robot    unittest.main()
688*16467b97STreehugger Robot
689