| import unittest |
| import textwrap |
| import antlr3 |
| import antlr3.tree |
| import stringtemplate3 |
| import testbase |
| import sys |
| import os |
| from StringIO import StringIO |
| |
| # FIXME: port other tests from TestLexer.java |
| |
| class T(testbase.ANTLRTest): |
| def execParser(self, grammar, grammarEntry, input): |
| lexerCls, parserCls = self.compileInlineGrammar(grammar) |
| |
| cStream = antlr3.StringStream(input) |
| lexer = lexerCls(cStream) |
| tStream = antlr3.CommonTokenStream(lexer) |
| parser = parserCls(tStream) |
| result = getattr(parser, grammarEntry)() |
| return result |
| |
| |
| def testRefToRuleDoesNotSetChannel(self): |
| # this must set channel of A to HIDDEN. $channel is local to rule |
| # like $type. |
| grammar = textwrap.dedent( |
| r''' |
| grammar P; |
| options { |
| language=Python; |
| } |
| a returns [foo]: A EOF { $foo = '\%s, channel=\%d' \% ($A.text, $A.channel); } ; |
| A : '-' WS I ; |
| I : '0'..'9'+ ; |
| WS : (' '|'\n') {$channel=HIDDEN;} ; |
| ''') |
| |
| found = self.execParser( |
| grammar, 'a', |
| "- 34" |
| ) |
| |
| self.failUnlessEqual("- 34, channel=0", found) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |