示例#1
0
class SimpleTests(unittest.TestCase):
    def setUp(self):
        """Call before every test case."""
        self.parser = ProgramParser()
        self.program = Program()
        self.program.name="TestProgram"
        
    def testNormalProg(self):
        self.parser.loadFromFile("normal.stdl")
        self.program.tokens=self.parser.tokens
        gen=self.program.populate()
        try:
            typ,imp=gen.next()
            gen.next()
        except StopIteration:
            pass
        else:
            self.fail('Why has execution stopped')
        assert typ=='imp',typ
        assert imp==['imports.stdl'],imp
        imports=self.program.initParams.params["imports"][0]
        assert imports=="imports.stdl",imports
        
    def testDefectiveProg1(self):
        self.parser.loadFromFile("defective1.stdl")
        self.program.tokens=self.parser.tokens
        self.assertRaises(SemanticInitException,self.program.populate().next)
        
    def testDuplicates(self):
        test1=Test()
        test2=Test()
        test3=Test()
        test4=Test()
        test1.test="a"
        test2.test="b"
        test3.test="b"
        test4.test="a"
        self.program.children=[test1,test2,test3,test4]
        duplicates=self.program.getDuplicates()
        assert ' a ' in duplicates
        assert ' b ' in duplicates
    
    #-------------------------- Integration tests -------------------------------------------------
    def testGetCode1(self):
        self.parser.loadFromFile('normal.stdl')
        self.program.tokens=self.parser.tokens
        gen=self.program.populate()
        try:
            typ,imp=gen.next()
            gen.next()
        except StopIteration:
            pass
        else:
            self.fail('Why has execution stopped')
        c,code=self.program.getCode()
        assert 'returns >= 2' in code
        assert 'c2.add(new Point(-1,-1));' in code
        assert 'c1.add(new Point(-1,1));' in code
        
    def testGetCode2(self):
        self.parser.loadFromFile('..\\examples\\dateCheck.stdl')
        self.program.tokens=self.parser.tokens
        gen=self.program.populate()
        try:
            typ,imp=gen.next()
        except StopIteration:
            pass
        else:
            self.fail('Why has execution stopped')
        c,code=self.program.getCode()
        assert 'day = 28' in code
        assert 'assert returns ==  true' in code
        assert 'month = 6' in code