Esempio n. 1
0
    def testGenerateErrorMessages(self):
        schema = idl_schema.Load('test/idl_generate_error_messages.idl')[0]
        self.assertEquals('idl_generate_error_messages', schema['namespace'])
        self.assertTrue(schema['compiler_options'].get(
            'generate_error_messages', False))

        schema = idl_schema.Load('test/idl_basics.idl')[0]
        self.assertEquals('idl_basics', schema['namespace'])
        self.assertFalse(schema['compiler_options'].get(
            'generate_error_messages', False))
Esempio n. 2
0
 def testNonSpecificPlatformsNamespace(self):
     schema = idl_schema.Load(
         'test/idl_namespace_non_specific_platforms.idl')[0]
     self.assertEquals('idl_namespace_non_specific_platforms',
                       schema['namespace'])
     expected = None
     self.assertEquals(expected, schema['platforms'])
  def testUnionsWithCallbacks(self):
    schema = idl_schema.Load('test/idl_function_types.idl')[0]

    blah_params = getParams(schema, 'blah')
    expected = [{
                 'type': 'function', 'name': 'callback', 'parameters': [{
                   'name': 'x',
                   'choices': [
                     {'type': 'integer'},
                     {'type': 'string'}
                   ]}
                 ]
               }]
    self.assertEquals(expected, blah_params)

    badabish_params = getParams(schema, 'badabish')
    expected = [{
                 'type': 'function', 'name': 'callback', 'parameters': [{
                   'name': 'x', 'optional': True, 'choices': [
                     {'type': 'integer'},
                     {'type': 'string'}
                   ]
                 }]
               }]

    self.assertEquals(expected, badabish_params)
Esempio n. 4
0
    def testReservedWords(self):
        schema = idl_schema.Load('test/idl_reserved_words.idl')[0]

        foo_type = getType(schema, 'Foo')
        self.assertEquals([{
            'name': 'float'
        }, {
            'name': 'DOMString'
        }], foo_type['enum'])

        enum_type = getType(schema, 'enum')
        self.assertEquals([{
            'name': 'callback'
        }, {
            'name': 'namespace'
        }], enum_type['enum'])

        dictionary = getType(schema, 'dictionary')
        self.assertEquals('integer', dictionary['properties']['long']['type'])

        mytype = getType(schema, 'MyType')
        self.assertEquals('string', mytype['properties']['interface']['type'])

        params = getParams(schema, 'static')
        self.assertEquals('Foo', params[0]['$ref'])
        self.assertEquals('enum', params[1]['$ref'])
Esempio n. 5
0
 def testProperties(self):
     schema = idl_schema.Load('test/idl_properties.idl')[0]
     self.assertEquals(
         OrderedDict([
             ('first',
              OrderedDict([
                  ('description', 'Integer property.'),
                  ('jsexterns', None),
                  ('type', 'integer'),
                  ('value', 42),
              ])),
             ('second',
              OrderedDict([
                  ('description', 'Double property.'),
                  ('jsexterns', None),
                  ('type', 'number'),
                  ('value', 42.1),
              ])),
             ('third',
              OrderedDict([
                  ('description', 'String property.'),
                  ('jsexterns', None),
                  ('type', 'string'),
                  ('value', 'hello world'),
              ])),
             ('fourth',
              OrderedDict([
                  ('description', 'Unvalued property.'),
                  ('jsexterns', None),
                  ('type', 'integer'),
              ])),
         ]), schema.get('properties'))
Esempio n. 6
0
    def setUp(self):
        self.models = defaultdict(model.Model)

        self.forbidden_json = CachedLoad('test/forbidden.json')
        self.forbidden = self.models['forbidden'].AddNamespace(
            self.forbidden_json[0], 'path/to/forbidden.json')
        self.permissions_json = CachedLoad('test/permissions.json')
        self.permissions = self.models['permissions'].AddNamespace(
            self.permissions_json[0], 'path/to/permissions.json')
        self.windows_json = CachedLoad('test/windows.json')
        self.windows = self.models['windows'].AddNamespace(
            self.windows_json[0], 'path/to/window.json')
        self.tabs_json = CachedLoad('test/tabs.json')
        self.tabs = self.models['tabs'].AddNamespace(self.tabs_json[0],
                                                     'path/to/tabs.json')
        self.browser_action_json = CachedLoad('test/browser_action.json')
        self.browser_action = self.models['browser_action'].AddNamespace(
            self.browser_action_json[0], 'path/to/browser_action.json')
        self.font_settings_json = CachedLoad('test/font_settings.json')
        self.font_settings = self.models['font_settings'].AddNamespace(
            self.font_settings_json[0], 'path/to/font_settings.json')
        self.dependency_tester_json = CachedLoad('test/dependency_tester.json')
        self.dependency_tester = self.models['dependency_tester'].AddNamespace(
            self.dependency_tester_json[0], 'path/to/dependency_tester.json')
        self.content_settings_json = CachedLoad('test/content_settings.json')
        self.content_settings = self.models['content_settings'].AddNamespace(
            self.content_settings_json[0], 'path/to/content_settings.json')
        self.objects_movable_idl = idl_schema.Load('test/objects_movable.idl')
        self.objects_movable = self.models['objects_movable'].AddNamespace(
            self.objects_movable_idl[0],
            'path/to/objects_movable.idl',
            include_compiler_options=True)
Esempio n. 7
0
    def testObjectTypesWithOptionalFields(self):
        schema = idl_schema.Load('test/idl_object_types.idl')[0]

        baz_type = getType(schema, 'BazType')
        self.assertEquals(True, baz_type['properties']['x']['optional'])
        self.assertEquals('integer', baz_type['properties']['x']['type'])
        self.assertEquals(True, baz_type['properties']['foo']['optional'])
        self.assertEquals('FooType', baz_type['properties']['foo']['$ref'])
Esempio n. 8
0
def parse_idl_file(path):
    """ Load the specified file and parse it as IDL.

  Args:
    path: Path to a file containing JSON-encoded data.
  """
    api_def = idl_schema.Load(path)
    return api_def
Esempio n. 9
0
 def testSpecificImplementNamespace(self):
     schema = idl_schema.Load(
         'test/idl_namespace_specific_implement.idl')[0]
     self.assertEquals('idl_namespace_specific_implement',
                       schema['namespace'])
     expected = 'idl_namespace_specific_implement.idl'
     self.assertEquals(expected,
                       schema['compiler_options']['implemented_in'])
Esempio n. 10
0
 def testSpecificImplementOnChromeOSNamespace(self):
     schema = idl_schema.Load(
         'test/idl_namespace_specific_implement_chromeos.idl')[0]
     self.assertEquals('idl_namespace_specific_implement_chromeos',
                       schema['namespace'])
     expected_implemented_path = 'idl_namespace_specific_implement_chromeos.idl'
     expected_platform = ['chromeos']
     self.assertEquals(expected_implemented_path,
                       schema['compiler_options']['implemented_in'])
     self.assertEquals(expected_platform, schema['platforms'])
Esempio n. 11
0
    def testObjectTypesInFunctions(self):
        schema = idl_schema.Load('test/idl_object_types.idl')[0]

        params = getParams(schema, 'objectFunction1')
        self.assertEquals('object', params[0]['type'])
        self.assertEquals('any', params[0]['additionalProperties']['type'])
        self.assertEquals('ImageData', params[0]['isInstanceOf'])

        params = getParams(schema, 'objectFunction2')
        self.assertEquals('any', params[0]['type'])
Esempio n. 12
0
def load_schema(schema):
    schema_filename, schema_extension = os.path.splitext(schema)

    if schema_extension == '.json':
        api_defs = json_schema.Load(schema)
    elif schema_extension == '.idl':
        api_defs = idl_schema.Load(schema)
    else:
        sys.exit("Did not recognize file extension %s for schema %s" %
                 (schema_extension, schema))

    return api_defs
Esempio n. 13
0
  def testUnionsWithFunctions(self):
    schema = idl_schema.Load('test/idl_function_types.idl')[0]

    union_params = getParams(schema, 'union_params')
    expected = [{
                 'name': 'x',
                 'choices': [
                   {'type': 'integer'},
                   {'type': 'string'}
                 ]
               }]

    self.assertEquals(expected, union_params)
Esempio n. 14
0
  def testFunctionWithPromise(self):
    schema = idl_schema.Load('test/idl_function_types.idl')[0]

    promise_function = getFunction(schema, 'promise_supporting')
    expected = OrderedDict([
        ('parameters', []),
        ('returns_async', {
            'name': 'callback',
            'parameters': [{'name': 'x', 'type': 'integer'}]
        }),
        ('name', 'promise_supporting'),
        ('type', 'function')
    ])
    self.assertEquals(expected, promise_function)
Esempio n. 15
0
    def testObjectTypesWithUnions(self):
        schema = idl_schema.Load('test/idl_object_types.idl')[0]

        union_type = getType(schema, 'UnionType')
        expected = {
            'type': 'object',
            'id': 'UnionType',
            'properties': {
                'x': {
                    'name': 'x',
                    'optional': True,
                    'choices': [
                        {
                            'type': 'integer'
                        },
                        {
                            '$ref': 'FooType'
                        },
                    ]
                },
                'y': {
                    'name':
                    'y',
                    'choices': [{
                        'type': 'string'
                    }, {
                        'type': 'object',
                        'additionalProperties': {
                            'type': 'any'
                        }
                    }]
                },
                'z': {
                    'name':
                    'z',
                    'choices': [{
                        'type': 'object',
                        'isInstanceOf': 'ImageData',
                        'additionalProperties': {
                            'type': 'any'
                        }
                    }, {
                        'type': 'integer'
                    }]
                }
            },
        }

        self.assertEquals(expected, union_type)
Esempio n. 16
0
 def testArrayOfCallbacks(self):
     schema = idl_schema.Load('test/idl_function_types.idl')[0]
     expected = [{
         'type': 'array',
         'name': 'callbacks',
         'items': {
             'type': 'function',
             'name': 'MyCallback',
             'parameters': [{
                 'type': 'integer',
                 'name': 'x'
             }]
         }
     }]
     self.assertEquals(expected, getParams(schema, 'whatever'))
Esempio n. 17
0
    def LoadSchema(self, schema):
        '''Load a schema definition. The schema parameter must be a file name
    with the full path relative to the root.'''
        schema_filename, schema_extension = os.path.splitext(schema)

        schema_path = os.path.join(self._root, schema)
        if schema_extension == '.json':
            api_defs = json_schema.Load(schema_path)
        elif schema_extension == '.idl':
            api_defs = idl_schema.Load(schema_path)
        else:
            sys.exit('Did not recognize file extension %s for schema %s' %
                     (schema_extension, schema))

        return api_defs
Esempio n. 18
0
  def LoadSchema(self, schema):
    schema_filename, schema_extension = os.path.splitext(schema)

    if schema_extension == '.json':
      api_defs = json_schema.Load(schema)
    elif schema_extension == '.idl':
      api_defs = idl_schema.Load(schema)
    else:
      sys.exit('Did not recognize file extension %s for schema %s' %
               (schema_extension, schema))
    if len(api_defs) != 1:
      sys.exit('File %s has multiple schemas. Files are only allowed to contain'
               'a single schema.' % schema)

    return api_defs
Esempio n. 19
0
    def LoadSchema(self, schema):
        '''Load a schema definition. The schema parameter must be a file name
    with the full path relative to the root.'''
        _, schema_extension = os.path.splitext(schema)

        schema_path = os.path.join(self._root, schema)
        if schema_extension == '.json':
            api_defs = json_schema.Load(schema_path)
        elif schema_extension == '.idl':
            api_defs = idl_schema.Load(schema_path)
        else:
            sys.exit('Did not recognize file extension %s for schema %s' %
                     (schema_extension, schema))

        # TODO(devlin): This returns a list. Does it need to? Is it ever > 1?
        return api_defs
Esempio n. 20
0
 def testSerializableFunctionType(self):
   schema = idl_schema.Load('test/idl_object_types.idl')[0]
   object_type = getType(schema, 'SerializableFunctionObject')
   expected = {
                'type': 'object',
                'id': 'SerializableFunctionObject',
                'properties': {
                  'func': {
                    'name': 'func',
                    'serializableFunction': True,
                    'type': 'function',
                    'parameters': []
                  }
                }
              }
   self.assertEquals(expected, object_type)
    def LoadSchema(self, schema):
        '''Load a schema definition. The schema parameter must be a file name
    without any path component - the file is loaded from the path defined by
    the real_path argument passed to the constructor.'''
        schema_filename, schema_extension = os.path.splitext(schema)

        schema_path = os.path.join(self._real_path, schema)
        if schema_extension == '.json':
            api_defs = json_schema.Load(schema_path)
        elif schema_extension == '.idl':
            api_defs = idl_schema.Load(schema_path)
        else:
            sys.exit('Did not recognize file extension %s for schema %s' %
                     (schema_extension, schema))

        return api_defs
Esempio n. 22
0
    def testObjectTypes(self):
        schema = idl_schema.Load('test/idl_object_types.idl')[0]

        foo_type = getType(schema, 'FooType')
        self.assertEquals('object', foo_type['type'])
        self.assertEquals('integer', foo_type['properties']['x']['type'])
        self.assertEquals('object', foo_type['properties']['y']['type'])
        self.assertEquals(
            'any', foo_type['properties']['y']['additionalProperties']['type'])
        self.assertEquals('object', foo_type['properties']['z']['type'])
        self.assertEquals(
            'any', foo_type['properties']['z']['additionalProperties']['type'])
        self.assertEquals('Window',
                          foo_type['properties']['z']['isInstanceOf'])

        bar_type = getType(schema, 'BarType')
        self.assertEquals('object', bar_type['type'])
        self.assertEquals('any', bar_type['properties']['x']['type'])
Esempio n. 23
0
  def testUnionsWithModifiers(self):
    schema = idl_schema.Load('test/idl_object_types.idl')[0]

    union_type = getType(schema, 'ModifiedUnionType')
    expected = {
                 'type': 'object',
                 'id': 'ModifiedUnionType',
                 'properties': {
                   'x': {
                     'name': 'x',
                     'nodoc': True,
                     'choices': [
                       {'type': 'integer'},
                       {'type': 'string'}
                     ]
                   }
                 }
               }

    self.assertEquals(expected, union_type)
Esempio n. 24
0
 def testAllPlatformsNamespace(self):
     schema = idl_schema.Load('test/idl_namespace_all_platforms.idl')[0]
     self.assertEquals('idl_namespace_all_platforms', schema['namespace'])
     expected = ['chromeos', 'chromeos_touch', 'linux', 'mac', 'win']
     self.assertEquals(expected, schema['platforms'])
Esempio n. 25
0
 def testNoManifestKeys(self):
   schema = idl_schema.Load('test/idl_properties.idl')[0]
   self.assertIsNone(schema.get('manifest_keys'))
Esempio n. 26
0
def parse_idl_file(path):
    """ Load the specified file and parse it as IDL.

  Args:
    path: Path to a file containing JSON-encoded data.
  """
    api_def = idl_schema.Load(path)
    for namespace_def in api_def:
        namespace_dot = namespace_def['namespace'] + '.'
        types = dict((type_['id'], type_)
                     for type_ in namespace_def.get('types', []) if type_)

        def SubstituteInlineDoc(prop):
            prop_ref_type = prop.get('$ref', '')
            type_obj = types.get(namespace_dot + prop_ref_type,
                                 types.get(prop_ref_type, {}))
            if not type_obj:
                return
            if 'properties' in type_obj:
                del prop['$ref']
                prop['properties'] = dict(type_obj['properties'])
                prop['type'] = 'object'
                for sub_prop in prop['properties'].values():
                    if isinstance(sub_prop, dict):
                        if 'nodoc' in sub_prop:
                            del sub_prop['nodoc']
                        if 'name' in sub_prop:
                            del sub_prop['name']
            elif 'enum' in type_obj and 'type' in type_obj:
                del prop['$ref']
                prop['type'] = type_obj['type']
                prop['enum'] = type_obj['enum']

        def FixReferences(prop):
            # Strip namespace_dot from $ref names.
            if prop.get('$ref', '').startswith(namespace_dot):
                prop['$ref'] = prop['$ref'][len(namespace_dot):]
            if (prop.get('type', '') == 'array' and prop.get('items', {}).get(
                    '$ref', '').startswith(namespace_dot)):
                prop['items']['$ref'] = prop['items']['$ref'][len(namespace_dot
                                                                  ):]
            if prop.get('inline_doc', False):
                del prop['inline_doc']
                SubstituteInlineDoc(prop)
                if 'items' in prop:
                    SubstituteInlineDoc(prop['items'])

        for type_ in namespace_def.get('types', []):
            if type_.get('id', '').startswith(namespace_dot):
                type_['id'] = type_['id'][len(namespace_dot):]
            for prop in type_.get('properties', {}).values():
                FixReferences(prop)
        for func in namespace_def.get('functions', []):
            for param in func.get('parameters', []):
                FixReferences(param)
                for cb_param in param.get('parameters', []):
                    FixReferences(cb_param)
        for event in namespace_def.get('events', []):
            for param in event.get('parameters', []):
                FixReferences(param)
    return api_def
Esempio n. 27
0
 def testChromeOSPlatformsNamespace(self):
     schema = idl_schema.Load('test/idl_namespace_chromeos.idl')[0]
     self.assertEquals('idl_namespace_chromeos', schema['namespace'])
     expected = ['chromeos']
     self.assertEquals(expected, schema['platforms'])
Esempio n. 28
0
 def setUp(self):
     loaded = idl_schema.Load('test/idl_basics.idl')
     self.assertEquals(1, len(loaded))
     self.assertEquals('idl_basics', loaded[0]['namespace'])
     self.idl_basics = loaded[0]
     self.maxDiff = None