Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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')
Ejemplo n.º 4
0
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))
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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')))