59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
| import antlr3
 | |
| import testbase
 | |
| import unittest
 | |
| 
 | |
| class t017parser(testbase.ANTLRTest):
 | |
|     def setUp(self):
 | |
|         self.compileGrammar()
 | |
|         
 | |
|     def parserClass(self, base):
 | |
|         class TestParser(base):
 | |
|             def __init__(self, *args, **kwargs):
 | |
|                 super().__init__(*args, **kwargs)
 | |
| 
 | |
|                 self.reportedErrors = []
 | |
|         
 | |
| 
 | |
|             def emitErrorMessage(self, msg):
 | |
|                 self.reportedErrors.append(msg)
 | |
|                 
 | |
|         return TestParser
 | |
| 
 | |
| 
 | |
|     def testValid(self):
 | |
|         cStream = antlr3.StringStream("int foo;")
 | |
|         lexer = self.getLexer(cStream)
 | |
|         tStream = antlr3.CommonTokenStream(lexer)
 | |
|         parser = self.getParser(tStream)
 | |
|         parser.program()
 | |
| 
 | |
|         self.assertEqual(parser.reportedErrors, [])
 | |
| 
 | |
| 
 | |
|     def testMalformedInput1(self):
 | |
|         cStream = antlr3.StringStream('int foo() { 1+2 }')
 | |
|         lexer = self.getLexer(cStream)
 | |
|         tStream = antlr3.CommonTokenStream(lexer)
 | |
|         parser = self.getParser(tStream)
 | |
|         parser.program()
 | |
| 
 | |
|         # FIXME: currently strings with formatted errors are collected
 | |
|         # can't check error locations yet
 | |
|         self.assertEqual(len(parser.reportedErrors), 1, parser.reportedErrors)
 | |
| 
 | |
| 
 | |
|     def testMalformedInput2(self):
 | |
|         cStream = antlr3.StringStream('int foo() { 1+; 1+2 }')
 | |
|         lexer = self.getLexer(cStream)
 | |
|         tStream = antlr3.CommonTokenStream(lexer)
 | |
|         parser = self.getParser(tStream)
 | |
|         parser.program()
 | |
| 
 | |
|         # FIXME: currently strings with formatted errors are collected
 | |
|         # can't check error locations yet
 | |
|         self.assertEqual(len(parser.reportedErrors), 2, parser.reportedErrors)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     unittest.main()
 |