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