1*16467b97STreehugger Robotimport antlr3 2*16467b97STreehugger Robotimport testbase 3*16467b97STreehugger Robotimport unittest 4*16467b97STreehugger Robotimport textwrap 5*16467b97STreehugger Robot 6*16467b97STreehugger Robot 7*16467b97STreehugger Robotclass t022scopes(testbase.ANTLRTest): 8*16467b97STreehugger Robot def setUp(self): 9*16467b97STreehugger Robot self.compileGrammar() 10*16467b97STreehugger Robot 11*16467b97STreehugger Robot 12*16467b97STreehugger Robot def parserClass(self, base): 13*16467b97STreehugger Robot class TParser(base): 14*16467b97STreehugger Robot def emitErrorMessage(self, msg): 15*16467b97STreehugger Robot # report errors to /dev/null 16*16467b97STreehugger Robot pass 17*16467b97STreehugger Robot 18*16467b97STreehugger Robot def reportError(self, re): 19*16467b97STreehugger Robot # no error recovery yet, just crash! 20*16467b97STreehugger Robot raise re 21*16467b97STreehugger Robot 22*16467b97STreehugger Robot return TParser 23*16467b97STreehugger Robot 24*16467b97STreehugger Robot 25*16467b97STreehugger Robot def testa1(self): 26*16467b97STreehugger Robot cStream = antlr3.StringStream('foobar') 27*16467b97STreehugger Robot lexer = self.getLexer(cStream) 28*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 29*16467b97STreehugger Robot parser = self.getParser(tStream) 30*16467b97STreehugger Robot parser.a() 31*16467b97STreehugger Robot 32*16467b97STreehugger Robot 33*16467b97STreehugger Robot def testb1(self): 34*16467b97STreehugger Robot cStream = antlr3.StringStream('foobar') 35*16467b97STreehugger Robot lexer = self.getLexer(cStream) 36*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 37*16467b97STreehugger Robot parser = self.getParser(tStream) 38*16467b97STreehugger Robot 39*16467b97STreehugger Robot self.assertRaises(antlr3.RecognitionException, parser.b, False) 40*16467b97STreehugger Robot 41*16467b97STreehugger Robot 42*16467b97STreehugger Robot def testb2(self): 43*16467b97STreehugger Robot cStream = antlr3.StringStream('foobar') 44*16467b97STreehugger Robot lexer = self.getLexer(cStream) 45*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 46*16467b97STreehugger Robot parser = self.getParser(tStream) 47*16467b97STreehugger Robot parser.b(True) 48*16467b97STreehugger Robot 49*16467b97STreehugger Robot 50*16467b97STreehugger Robot def testc1(self): 51*16467b97STreehugger Robot cStream = antlr3.StringStream( 52*16467b97STreehugger Robot textwrap.dedent('''\ 53*16467b97STreehugger Robot { 54*16467b97STreehugger Robot int i; 55*16467b97STreehugger Robot int j; 56*16467b97STreehugger Robot i = 0; 57*16467b97STreehugger Robot } 58*16467b97STreehugger Robot ''')) 59*16467b97STreehugger Robot 60*16467b97STreehugger Robot lexer = self.getLexer(cStream) 61*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 62*16467b97STreehugger Robot parser = self.getParser(tStream) 63*16467b97STreehugger Robot symbols = parser.c() 64*16467b97STreehugger Robot 65*16467b97STreehugger Robot self.assertEqual( 66*16467b97STreehugger Robot symbols, 67*16467b97STreehugger Robot set(['i', 'j']) 68*16467b97STreehugger Robot ) 69*16467b97STreehugger Robot 70*16467b97STreehugger Robot 71*16467b97STreehugger Robot def testc2(self): 72*16467b97STreehugger Robot cStream = antlr3.StringStream( 73*16467b97STreehugger Robot textwrap.dedent('''\ 74*16467b97STreehugger Robot { 75*16467b97STreehugger Robot int i; 76*16467b97STreehugger Robot int j; 77*16467b97STreehugger Robot i = 0; 78*16467b97STreehugger Robot x = 4; 79*16467b97STreehugger Robot } 80*16467b97STreehugger Robot ''')) 81*16467b97STreehugger Robot 82*16467b97STreehugger Robot lexer = self.getLexer(cStream) 83*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 84*16467b97STreehugger Robot parser = self.getParser(tStream) 85*16467b97STreehugger Robot 86*16467b97STreehugger Robot self.assertRaisesRegex(RuntimeError, r'x', parser.c) 87*16467b97STreehugger Robot 88*16467b97STreehugger Robot 89*16467b97STreehugger Robot def testd1(self): 90*16467b97STreehugger Robot cStream = antlr3.StringStream( 91*16467b97STreehugger Robot textwrap.dedent('''\ 92*16467b97STreehugger Robot { 93*16467b97STreehugger Robot int i; 94*16467b97STreehugger Robot int j; 95*16467b97STreehugger Robot i = 0; 96*16467b97STreehugger Robot { 97*16467b97STreehugger Robot int i; 98*16467b97STreehugger Robot int x; 99*16467b97STreehugger Robot x = 5; 100*16467b97STreehugger Robot } 101*16467b97STreehugger Robot } 102*16467b97STreehugger Robot ''')) 103*16467b97STreehugger Robot 104*16467b97STreehugger Robot lexer = self.getLexer(cStream) 105*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 106*16467b97STreehugger Robot parser = self.getParser(tStream) 107*16467b97STreehugger Robot symbols = parser.d() 108*16467b97STreehugger Robot 109*16467b97STreehugger Robot self.assertEqual( 110*16467b97STreehugger Robot symbols, 111*16467b97STreehugger Robot set(['i', 'j']) 112*16467b97STreehugger Robot ) 113*16467b97STreehugger Robot 114*16467b97STreehugger Robot 115*16467b97STreehugger Robot def teste1(self): 116*16467b97STreehugger Robot cStream = antlr3.StringStream( 117*16467b97STreehugger Robot textwrap.dedent('''\ 118*16467b97STreehugger Robot { { { { 12 } } } } 119*16467b97STreehugger Robot ''')) 120*16467b97STreehugger Robot 121*16467b97STreehugger Robot lexer = self.getLexer(cStream) 122*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 123*16467b97STreehugger Robot parser = self.getParser(tStream) 124*16467b97STreehugger Robot res = parser.e() 125*16467b97STreehugger Robot 126*16467b97STreehugger Robot self.assertEqual(res, 12) 127*16467b97STreehugger Robot 128*16467b97STreehugger Robot 129*16467b97STreehugger Robot def testf1(self): 130*16467b97STreehugger Robot cStream = antlr3.StringStream( 131*16467b97STreehugger Robot textwrap.dedent('''\ 132*16467b97STreehugger Robot { { { { 12 } } } } 133*16467b97STreehugger Robot ''')) 134*16467b97STreehugger Robot 135*16467b97STreehugger Robot lexer = self.getLexer(cStream) 136*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 137*16467b97STreehugger Robot parser = self.getParser(tStream) 138*16467b97STreehugger Robot res = parser.f() 139*16467b97STreehugger Robot 140*16467b97STreehugger Robot self.assertIsNone(res) 141*16467b97STreehugger Robot 142*16467b97STreehugger Robot 143*16467b97STreehugger Robot def testf2(self): 144*16467b97STreehugger Robot cStream = antlr3.StringStream( 145*16467b97STreehugger Robot textwrap.dedent('''\ 146*16467b97STreehugger Robot { { 12 } } 147*16467b97STreehugger Robot ''')) 148*16467b97STreehugger Robot 149*16467b97STreehugger Robot lexer = self.getLexer(cStream) 150*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 151*16467b97STreehugger Robot parser = self.getParser(tStream) 152*16467b97STreehugger Robot res = parser.f() 153*16467b97STreehugger Robot 154*16467b97STreehugger Robot self.assertIsNone(res) 155*16467b97STreehugger Robot 156*16467b97STreehugger Robot 157*16467b97STreehugger Robot 158*16467b97STreehugger Robotif __name__ == '__main__': 159*16467b97STreehugger Robot unittest.main() 160