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()