blob: 5ac1ae90db7640b25705a977bac63dd0b1ad1de6 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import unittest
import json
from api_list_data_source import APIListDataSource
from api_models import ContentScriptAPI
from extensions_paths import CHROME_EXTENSIONS
from server_instance import ServerInstance
from test_file_system import TestFileSystem
def _ToTestData(obj):
'''Transforms |obj| into test data by turning a list of files into an object
mapping that file to its contents (derived from its name).
'''
return dict((name, name) for name in obj)
def _ToTestFeatures(names):
'''Transforms a list of strings into a minimal JSON features object.
'''
def platforms_to_extension_types(platforms):
return ['platform_app' if platform == 'apps' else 'extension'
for platform in platforms]
features = dict((name, {
'name': name,
'extension_types': platforms_to_extension_types(platforms),
'contexts': context
}) for name, platforms, context in names)
features['sockets.udp']['channel'] = 'dev'
return features
def _ToTestAPIData(names):
api_data = dict((name, [{'namespace': name, 'description': description}])
for name, description in names)
return api_data
def _ToTestAPISchema(names, apis):
for name, json_file in names:
apis['api'][json_file] = json.dumps(_TEST_API_DATA[name])
return apis
_TEST_API_FEATURES = _ToTestFeatures([
('alarms', ['apps', 'extensions'], ['content_script']),
('app.window', ['apps'], []),
('browserAction', ['extensions'], []),
('experimental.bluetooth', ['apps'], []),
('experimental.history', ['extensions'], []),
('experimental.power', ['apps', 'extensions'], []),
('extension', ['extensions'], ['content_script']),
('extension.onRequest', ['extensions'], ['content_script']),
('extension.sendNativeMessage', ['extensions'], []),
('extension.sendRequest', ['extensions'], ['content_script']),
('infobars', ['extensions'], []),
('something_internal', ['apps'], []),
('something_else_internal', ['extensions'], []),
('storage', ['apps', 'extensions'], []),
('sockets.udp', ['apps', 'extensions'], [])
])
_TEST_API_DATA = _ToTestAPIData([
('alarms', u'<code>alarms</code>'),
('app.window', u'<code>app.window</code>'),
('browserAction', u'<code>browserAction</code>'),
('experimental.bluetooth', u'<code>experimental.bluetooth</code>'),
('experimental.history', u'<code>experimental.history</code>'),
('experimental.power', u'<code>experimental.power</code>'),
('extension', u'<code>extension</code>'),
('infobars', u'<code>infobars</code>'),
('something_internal', u'<code>something_internal</code>'),
('something_else_internal', u'<code>something_else_internal</code>'),
('storage', u'<code>storage</code>'),
('sockets.udp', u'<code>sockets.udp</code>')
])
_TEST_API_SCHEMA = [
('alarms', 'alarms.json'),
('app.window', 'app_window.json'),
('browserAction', 'browser_action.json'),
('experimental.bluetooth', 'experimental_bluetooth.json'),
('experimental.history', 'experimental_history.json'),
('experimental.power', 'experimental_power.json'),
('extension', 'extension.json'),
('infobars', 'infobars.json'),
('something_internal', 'something_internal.json'),
('something_else_internal', 'something_else_internal.json'),
('storage', 'storage.json'),
('sockets.udp', 'sockets_udp.json')
]
_TEST_DATA = _ToTestAPISchema(_TEST_API_SCHEMA, {
'api': {
'_api_features.json': json.dumps(_TEST_API_FEATURES),
'_manifest_features.json': '{}',
'_permission_features.json': '{}',
},
'docs': {
'templates': {
'json': {
'api_availabilities.json': '{}',
'manifest.json': '{}',
'permissions.json': '{}',
},
'public': {
'apps': _ToTestData([
'alarms.html',
'app_window.html',
'experimental_bluetooth.html',
'experimental_power.html',
'storage.html',
'sockets_udp.html'
]),
'extensions': _ToTestData([
'alarms.html',
'browserAction.html',
'experimental_history.html',
'experimental_power.html',
'extension.html',
'infobars.html',
'storage.html',
'sockets_udp.html'
]),
},
},
},
})
class APIListDataSourceTest(unittest.TestCase):
def setUp(self):
server_instance = ServerInstance.ForTest(
TestFileSystem(_TEST_DATA, relative_to=CHROME_EXTENSIONS))
# APIListDataSource takes a request but doesn't use it,
# so put None
self._api_list = APIListDataSource(server_instance, None)
self.maxDiff = None
def testApps(self):
self.assertEqual({
'stable': [
{
'name': 'alarms',
'version': 5,
'description': u'<code>alarms</code>'
},
{
'name': 'app.window',
# Availability logic will look for a camelCase format filename
# (i.e. 'app.window.html') at version 20 and below, but the
# unix_name format above won't be found at these versions.
'version': 21,
'description': u'<code>app.window</code>'
},
{
'name': 'storage',
'last': True,
'version': 5,
'description': u'<code>storage</code>'
}],
'dev': [
{
'name': 'sockets.udp',
'last': True,
'description': u'<code>sockets.udp</code>'
}],
'beta': [],
'trunk': []
}, self._api_list.get('apps').get('chrome'))
def testExperimentalApps(self):
self.assertEqual([
{
'name': 'experimental.bluetooth',
'description': u'<code>experimental.bluetooth</code>'
},
{
'name': 'experimental.power',
'last': True,
'description': u'<code>experimental.power</code>'
}], self._api_list.get('apps').get('experimental'))
def testExtensions(self):
self.assertEqual({
'stable': [
{
'name': 'alarms',
'version': 5,
'description': u'<code>alarms</code>'
},
{
'name': 'browserAction',
# See comment above for 'app.window'.
'version': 21,
'description': u'<code>browserAction</code>'
},
{
'name': 'extension',
'version': 5,
'description': u'<code>extension</code>'
},
{
'name': 'infobars',
'version': 5,
'description': u'<code>infobars</code>'
},
{
'name': 'storage',
'last': True,
'version': 5,
'description': u'<code>storage</code>'
}],
'dev': [
{
'name': 'sockets.udp',
'last': True,
'description': u'<code>sockets.udp</code>'
}],
'beta': [],
'trunk': []
}, self._api_list.get('extensions').get('chrome'))
def testExperimentalExtensions(self):
self.assertEqual([
{
'name': 'experimental.history',
'description': u'<code>experimental.history</code>'
},
{
'name': 'experimental.power',
'description': u'<code>experimental.power</code>',
'last': True
}], self._api_list.get('extensions').get('experimental'))
def testContentScripts(self):
self.assertEqual([{
'name': 'alarms',
},
{
'name': 'extension',
'restrictedTo': [{
'node': 'onRequest',
'first': True
},
{
'node': 'sendRequest',
'last': True
}]
}], self._api_list.get('contentScripts'))
if __name__ == '__main__':
unittest.main()