1*16467b97STreehugger Robotimport unittest 2*16467b97STreehugger Robotimport textwrap 3*16467b97STreehugger Robotimport antlr3 4*16467b97STreehugger Robotimport antlr3.tree 5*16467b97STreehugger Robotimport stringtemplate3 6*16467b97STreehugger Robotimport testbase 7*16467b97STreehugger Robotimport sys 8*16467b97STreehugger Robotimport os 9*16467b97STreehugger Robotfrom StringIO import StringIO 10*16467b97STreehugger Robot 11*16467b97STreehugger Robot# FIXME: port other tests from TestLexer.java 12*16467b97STreehugger Robot 13*16467b97STreehugger Robotclass T(testbase.ANTLRTest): 14*16467b97STreehugger Robot def execParser(self, grammar, grammarEntry, input): 15*16467b97STreehugger Robot lexerCls, parserCls = self.compileInlineGrammar(grammar) 16*16467b97STreehugger Robot 17*16467b97STreehugger Robot cStream = antlr3.StringStream(input) 18*16467b97STreehugger Robot lexer = lexerCls(cStream) 19*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 20*16467b97STreehugger Robot parser = parserCls(tStream) 21*16467b97STreehugger Robot result = getattr(parser, grammarEntry)() 22*16467b97STreehugger Robot return result 23*16467b97STreehugger Robot 24*16467b97STreehugger Robot 25*16467b97STreehugger Robot def testRefToRuleDoesNotSetChannel(self): 26*16467b97STreehugger Robot # this must set channel of A to HIDDEN. $channel is local to rule 27*16467b97STreehugger Robot # like $type. 28*16467b97STreehugger Robot grammar = textwrap.dedent( 29*16467b97STreehugger Robot r''' 30*16467b97STreehugger Robot grammar P; 31*16467b97STreehugger Robot options { 32*16467b97STreehugger Robot language=Python; 33*16467b97STreehugger Robot } 34*16467b97STreehugger Robot a returns [foo]: A EOF { $foo = '\%s, channel=\%d' \% ($A.text, $A.channel); } ; 35*16467b97STreehugger Robot A : '-' WS I ; 36*16467b97STreehugger Robot I : '0'..'9'+ ; 37*16467b97STreehugger Robot WS : (' '|'\n') {$channel=HIDDEN;} ; 38*16467b97STreehugger Robot ''') 39*16467b97STreehugger Robot 40*16467b97STreehugger Robot found = self.execParser( 41*16467b97STreehugger Robot grammar, 'a', 42*16467b97STreehugger Robot "- 34" 43*16467b97STreehugger Robot ) 44*16467b97STreehugger Robot 45*16467b97STreehugger Robot self.failUnlessEqual("- 34, channel=0", found) 46*16467b97STreehugger Robot 47*16467b97STreehugger Robot 48*16467b97STreehugger Robotif __name__ == '__main__': 49*16467b97STreehugger Robot unittest.main() 50