Пример #1
0
    def _LoadInterfaceFile(self, interface_name):
        """Loads an interface from the database.

    Returns:
      An IDLInterface instance or None if the interface is not found.
    Args:
      interface_name -- the name of the interface.
    """
        file_name = self._FilePath(interface_name)
        _logger.info('loading %s' % file_name)
        if not os.path.exists(file_name):
            return None

        f = open(file_name, 'r')
        content = f.read()
        f.close()

        # Parse file:
        idl_file = idlnode.IDLFile(self._idlparser.parse(content), file_name)

        if not idl_file.interfaces:
            raise RuntimeError('No interface found in %s' % file_name)
        elif len(idl_file.interfaces) > 1:
            raise RuntimeError('Expected one interface in %s' % file_name)

        interface = idl_file.interfaces[0]
        self._all_interfaces[interface_name] = interface
        return interface
Пример #2
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
Пример #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')
Пример #4
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)
Пример #5
0
 def _ParseInterface(self, content):
     ast = self._idl_parser.parse(content)
     return idlnode.IDLFile(ast).interfaces[0]