def _run_test(self, syntax, content, expected): """Utility run tests and prints extra contextual information. Args: syntax -- IDL grammar to use (either idlparser.WEBKIT_SYNTAX, WEBIDL_SYNTAX or FREMONTCUT_SYNTAX). If None, will run multiple tests, each with a different syntax. content -- input text for the parser. expected -- expected parse result. """ if syntax is None: self._run_test(idlparser.WEBIDL_SYNTAX, content, expected) self._run_test(idlparser.WEBKIT_SYNTAX, content, expected) self._run_test(idlparser.FREMONTCUT_SYNTAX, content, expected) return actual = None error = None ast = None parseResult = None try: parser = idlparser.IDLParser(syntax) ast = parser.parse(content) node = idlnode.IDLFile(ast) actual = node.to_dict() if node else None except SyntaxError, e: error = e pass
def _run_test(self, syntax, content, expected): """Utility for running a IDL parsing tests and comparing results. Program exits (sys.exit) if expected does not match actual. Args: syntax -- IDL grammar to use (either idlparser.WEBKIT_SYNTAX, WEBIDL_SYNTAX or FREMONTCUT_SYNTAX). If None, will run multiple tests, each with a different syntax. content -- input text for the parser. expected -- expected parse result. """ all_syntaxes = { idlparser.WEBIDL_SYNTAX: 'Web IDL', idlparser.WEBKIT_SYNTAX: 'WebKit', idlparser.FREMONTCUT_SYNTAX: 'FremontCut' } if syntax is None: for syntax in all_syntaxes: self._run_test(syntax, content, expected) return if syntax not in all_syntaxes: raise RuntimeError('Unexpected syntax %s' % syntax) actual = None error = None try: parser = idlparser.IDLParser(syntax) actual = parser.parse(content) except SyntaxError, e: error = e pass
def setUp(self): self._working_dir = tempfile.mkdtemp() self._output_dir = os.path.join(self._working_dir, 'output') self._database_dir = os.path.join(self._working_dir, 'database') self._auxiliary_dir = os.path.join(self._working_dir, 'auxiliary') self.assertFalse(os.path.exists(self._database_dir)) # Create database and add one interface. db = database.Database(self._database_dir) os.mkdir(self._auxiliary_dir) self.assertTrue(os.path.exists(self._database_dir)) content = """ module shapes { @A1 @A2 interface Shape { @A1 @A2 getter attribute int attr; @A1 setter attribute int attr; @A3 boolean op(); const long CONSTANT = 1; getter attribute DOMString strAttr; Shape create(); boolean compare(Shape s); Rectangle createRectangle(); void addLine(lines::Line line); void someDartType(File file); void someUnidentifiedType(UnidentifiableType t); }; }; module rectangles { @A3 interface Rectangle : @A3 shapes::Shape { void someTemplatedType(List<Shape> list); }; }; module lines { @A1 interface Line : shapes::Shape { }; }; """ parser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX) ast = parser.parse(content) idl_file = idlnode.IDLFile(ast) for module in idl_file.modules: module_name = module.id for interface in module.interfaces: db.AddInterface(interface) db.Save() self.assertTrue(self._InDatabase('Shape')) self.assertTrue(self._InDatabase('Rectangle')) self.assertTrue(self._InDatabase('Line')) self._database = database.Database(self._database_dir) self._generator = dartgenerator.DartGenerator(self._auxiliary_dir, '../templates', 'test')
def _load_idl_file(file_name, import_options): """Loads an IDL file into memory""" idl_parser = idlparser.IDLParser(import_options.idl_syntax) try: f = open(file_name, 'r') content = f.read() f.close() idl_ast = idl_parser.parse(content, defines=import_options.idl_defines) return IDLFile(idl_ast, file_name) except SyntaxError, e: raise RuntimeError('Failed to load file %s: %s' % (file_name, e))
def __init__(self, root_dir): """Initializes a Database over a given directory. Args: root_dir -- a directory. If directory does not exist, it will be created. """ self._root_dir = root_dir if not os.path.exists(root_dir): _logger.debug('creating root directory %s' % root_dir) os.makedirs(root_dir) self._all_interfaces = {} self._interfaces_to_delete = [] self._idlparser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX)
def _run_test(self, input_text, expected_text): """Parses input, renders it and compares the results""" parser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX) idl_file = idlnode.IDLFile(parser.parse(input_text)) output_text = idlrenderer.render(idl_file) if output_text != expected_text: msg = ''' EXPECTED: %s ACTUAL : %s ''' % (expected_text, output_text) self.fail(msg)
def setUp(self): self._idl_parser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX) working_dir = tempfile.mkdtemp() self._database_dir = os.path.join(working_dir, 'database') self.assertFalse(os.path.exists(self._database_dir)) # Create database and add one interface. db = database.Database(self._database_dir) interface = self._ParseInterface('interface I1 {};') db.AddInterface(interface) db.Save() self.assertTrue( os.path.exists(os.path.join(self._database_dir, 'I1.idl')))