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