def testAncestry(self): from ast.namespace import Namespace from nine.driver import Driver driver = Driver() ns = Namespace('') driver._scanAssembly(ns, 'mscorlib') string = ns.symbols['System'].symbols['String'] object = ns.symbols['System'].symbols['Object'] assert not string.isDescendant(object) assert object.isDescendant(string), string.bases
def testGetMethods(self): 'testGetMethods: ClassDecl.getMethods' driver = Driver() ns = Namespace('') driver._scanAssembly(ns, 'bin/ClassLibrary1') class1 = ns.symbols['TestClass'].symbols['TestClass'] assert isinstance(class1, ExternalClass) names = set([func.name for func in class1.getMethods()]) expected = set(['Method', 'Method', 'StaticMethod', 'StaticMethod']) # There will be all kinds of other crud in there. None of it matters, as long as the right names are where they should be. self.failUnless(names > expected, (names, expected))
def semanticProgram(program, assemblies=[]): from ast.namespace import Namespace from ast.vartypes import Type driver = Driver() globalNs = Namespace('') for asm in assemblies: driver._scanAssembly(globalNs, asm) driver.fixPrimitives() globalScope = semantic.makeGlobalScope(globalNs.symbols) return semantic.semantic(parse(lex(program)), globalScope)
def testGetMethod(self): driver = Driver() ns = Namespace('') driver._scanAssembly(ns, 'mscorlib') console = ns.symbols['System'].symbols['Console'] writeLineStr = console.getMethod('WriteLine', (vartypes.StringType,), vartypes.VoidType) assert writeLineStr is not None nonExistent = console.getMethod('WriteLine', (vartypes.StringType,), vartypes.FloatType) assert nonExistent is None, writeLineStr toStr = console.getMethod('ToString', (), System.String) assert toStr is not None
def testScanAssembly(self): from nine.scope import Scope from ast.namespace import Namespace scope = Scope(parent=None) globalNs = Namespace('') driver = Driver() driver.addReference('bin/ClassLibrary1') driver._scanAssembly(globalNs, 'bin/ClassLibrary1') cls = globalNs.symbols['TestClass'].symbols['TestClass'] assert isinstance(cls, ExternalClass) assert cls.external self.assertEqual(cls.name, 'TestClass')
def buildProgram(name, program, assemblies=[]): exeName = name path, name = os.path.split(exeName) name, ext = os.path.splitext(name) path = path or 'bin' ext = ext or '.exe' exeName = os.path.join(path, name + ext) if os.access(exeName, os.F_OK): # Delete any pre-existing file os.unlink(exeName) driver = Driver() for asm in assemblies: driver.addReference(asm) driver.compileString(program, exeName) assert os.access(exeName, os.F_OK)
class DriverTest(unittest.TestCase): def setUp(self): self.driver = Driver() def testNewDriver(self): self.failUnless(self.driver is not None) def testCompileString(self): program = util.source(''' print 'Hello, driver test!' ''') util.runProgram('driver_hello_test', program) def testLoadAssembly(self): a = self.driver._loadAssembly('bin/ClassLibrary1') self.failUnless(a is not None, a) self.failUnlessRaises( Exception, lambda: self.driver._loadAssembly('does_not_exist') )
def testGetCtor(self): from ast.parameter import Parameter driver = Driver() ns = Namespace('') driver._scanAssembly(ns, 'mscorlib') string = ns.symbols['System'].symbols['String'] int32 = ns.symbols['System'].symbols['Int32'] char = ns.symbols['System'].symbols['Char'] c1args = ( Parameter((0,"<>"), 'a', char), Parameter((0,"<>"), 'b', int32) ) c2args = (Parameter((0,"<>"), 'b', int32),) c1 = string.getCtor(c1args) c2 = string.getCtor(c2args) assert c1 is not None assert c2 is None
def setUp(self): self.driver = Driver()
if len(args) < 2: syntax() try: options, args = getopt.gnu_getopt(sys.argv[1:], 'r:o:') except getopt.GetoptError, e: print e syntax() from nine.driver import Driver sources = args outputName = '9out' references = [] the_driver = Driver() for option, operand in options: if option == '-r': the_driver.addReference(operand) if option == '-o': outputName = operand if 0: try: the_driver.compile(sources, outputName) except error.CodeError, e: print e sys.exit(1) else: