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