1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport unittest 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport textwrap 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport antlr3 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport antlr3.tree 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport stringtemplate3 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport testbase 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport sys 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport os 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom StringIO import StringIO 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# FIXME: port other tests from TestLexer.java 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass T(testbase.ANTLRTest): 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def execParser(self, grammar, grammarEntry, input): 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexerCls, parserCls = self.compileInlineGrammar(grammar) 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream(input) 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = lexerCls(cStream) 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = parserCls(tStream) 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = getattr(parser, grammarEntry)() 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return result 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testRefToRuleDoesNotSetChannel(self): 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # this must set channel of A to HIDDEN. $channel is local to rule 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # like $type. 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver grammar = textwrap.dedent( 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r''' 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver grammar P; 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver options { 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver language=Python; 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver a returns [foo]: A EOF { $foo = '\%s, channel=\%d' \% ($A.text, $A.channel); } ; 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A : '-' WS I ; 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver I : '0'..'9'+ ; 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver WS : (' '|'\n') {$channel=HIDDEN;} ; 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ''') 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver found = self.execParser( 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver grammar, 'a', 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "- 34" 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual("- 34, channel=0", found) 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__ == '__main__': 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver unittest.main() 50