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