5ac1ae90db7640b25705a977bac63dd0b1ad1de6
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / api_list_data_source_test.py
1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 import unittest
7 import json
8
9 from api_list_data_source import APIListDataSource
10 from api_models import ContentScriptAPI
11 from extensions_paths import CHROME_EXTENSIONS
12 from server_instance import ServerInstance
13 from test_file_system import TestFileSystem
14
15
16 def _ToTestData(obj):
17   '''Transforms |obj| into test data by turning a list of files into an object
18   mapping that file to its contents (derived from its name).
19   '''
20   return dict((name, name) for name in obj)
21
22
23 def _ToTestFeatures(names):
24   '''Transforms a list of strings into a minimal JSON features object.
25   '''
26   def platforms_to_extension_types(platforms):
27     return ['platform_app' if platform == 'apps' else 'extension'
28             for platform in platforms]
29   features = dict((name, {
30                      'name': name,
31                      'extension_types': platforms_to_extension_types(platforms),
32                      'contexts': context
33                    }) for name, platforms, context in names)
34   features['sockets.udp']['channel'] = 'dev'
35   return features
36
37
38 def _ToTestAPIData(names):
39   api_data = dict((name, [{'namespace': name, 'description': description}])
40               for name, description in names)
41   return api_data
42
43
44 def _ToTestAPISchema(names, apis):
45   for name, json_file in names:
46     apis['api'][json_file] = json.dumps(_TEST_API_DATA[name])
47   return apis
48
49
50 _TEST_API_FEATURES = _ToTestFeatures([
51   ('alarms', ['apps', 'extensions'], ['content_script']),
52   ('app.window', ['apps'], []),
53   ('browserAction', ['extensions'], []),
54   ('experimental.bluetooth', ['apps'], []),
55   ('experimental.history', ['extensions'], []),
56   ('experimental.power', ['apps', 'extensions'], []),
57   ('extension', ['extensions'], ['content_script']),
58   ('extension.onRequest', ['extensions'], ['content_script']),
59   ('extension.sendNativeMessage', ['extensions'], []),
60   ('extension.sendRequest', ['extensions'], ['content_script']),
61   ('infobars', ['extensions'], []),
62   ('something_internal', ['apps'], []),
63   ('something_else_internal', ['extensions'], []),
64   ('storage', ['apps', 'extensions'], []),
65   ('sockets.udp', ['apps', 'extensions'], [])
66 ])
67
68
69 _TEST_API_DATA = _ToTestAPIData([
70   ('alarms', u'<code>alarms</code>'),
71   ('app.window', u'<code>app.window</code>'),
72   ('browserAction', u'<code>browserAction</code>'),
73   ('experimental.bluetooth', u'<code>experimental.bluetooth</code>'),
74   ('experimental.history', u'<code>experimental.history</code>'),
75   ('experimental.power', u'<code>experimental.power</code>'),
76   ('extension', u'<code>extension</code>'),
77   ('infobars', u'<code>infobars</code>'),
78   ('something_internal', u'<code>something_internal</code>'),
79   ('something_else_internal', u'<code>something_else_internal</code>'),
80   ('storage', u'<code>storage</code>'),
81   ('sockets.udp', u'<code>sockets.udp</code>')
82 ])
83
84
85 _TEST_API_SCHEMA = [
86   ('alarms', 'alarms.json'),
87   ('app.window', 'app_window.json'),
88   ('browserAction', 'browser_action.json'),
89   ('experimental.bluetooth', 'experimental_bluetooth.json'),
90   ('experimental.history', 'experimental_history.json'),
91   ('experimental.power', 'experimental_power.json'),
92   ('extension', 'extension.json'),
93   ('infobars', 'infobars.json'),
94   ('something_internal', 'something_internal.json'),
95   ('something_else_internal', 'something_else_internal.json'),
96   ('storage', 'storage.json'),
97   ('sockets.udp', 'sockets_udp.json')
98 ]
99
100
101 _TEST_DATA = _ToTestAPISchema(_TEST_API_SCHEMA, {
102   'api': {
103     '_api_features.json': json.dumps(_TEST_API_FEATURES),
104     '_manifest_features.json': '{}',
105     '_permission_features.json': '{}',
106   },
107   'docs': {
108     'templates': {
109       'json': {
110         'api_availabilities.json': '{}',
111         'manifest.json': '{}',
112         'permissions.json': '{}',
113       },
114       'public': {
115         'apps': _ToTestData([
116           'alarms.html',
117           'app_window.html',
118           'experimental_bluetooth.html',
119           'experimental_power.html',
120           'storage.html',
121           'sockets_udp.html'
122         ]),
123         'extensions': _ToTestData([
124           'alarms.html',
125           'browserAction.html',
126           'experimental_history.html',
127           'experimental_power.html',
128           'extension.html',
129           'infobars.html',
130           'storage.html',
131           'sockets_udp.html'
132         ]),
133       },
134     },
135   },
136 })
137
138
139 class APIListDataSourceTest(unittest.TestCase):
140   def setUp(self):
141     server_instance = ServerInstance.ForTest(
142         TestFileSystem(_TEST_DATA, relative_to=CHROME_EXTENSIONS))
143     # APIListDataSource takes a request but doesn't use it,
144     # so put None
145     self._api_list = APIListDataSource(server_instance, None)
146     self.maxDiff = None
147
148   def testApps(self):
149     self.assertEqual({
150         'stable': [
151           {
152             'name': 'alarms',
153             'version': 5,
154             'description': u'<code>alarms</code>'
155           },
156           {
157             'name': 'app.window',
158             # Availability logic will look for a camelCase format filename
159             # (i.e. 'app.window.html') at version 20 and below, but the
160             # unix_name format above won't be found at these versions.
161             'version': 21,
162             'description': u'<code>app.window</code>'
163           },
164           {
165             'name': 'storage',
166             'last': True,
167             'version': 5,
168             'description': u'<code>storage</code>'
169           }],
170         'dev': [
171           {
172             'name': 'sockets.udp',
173             'last': True,
174             'description': u'<code>sockets.udp</code>'
175           }],
176         'beta': [],
177         'trunk': []
178         }, self._api_list.get('apps').get('chrome'))
179
180   def testExperimentalApps(self):
181     self.assertEqual([
182         {
183           'name': 'experimental.bluetooth',
184           'description': u'<code>experimental.bluetooth</code>'
185         },
186         {
187           'name': 'experimental.power',
188           'last': True,
189           'description': u'<code>experimental.power</code>'
190         }], self._api_list.get('apps').get('experimental'))
191
192   def testExtensions(self):
193     self.assertEqual({
194         'stable': [
195           {
196             'name': 'alarms',
197             'version': 5,
198             'description': u'<code>alarms</code>'
199           },
200           {
201             'name': 'browserAction',
202             # See comment above for 'app.window'.
203             'version': 21,
204             'description': u'<code>browserAction</code>'
205           },
206           {
207             'name': 'extension',
208             'version': 5,
209             'description': u'<code>extension</code>'
210           },
211           {
212             'name': 'infobars',
213             'version': 5,
214             'description': u'<code>infobars</code>'
215           },
216           {
217             'name': 'storage',
218             'last': True,
219             'version': 5,
220             'description': u'<code>storage</code>'
221           }],
222         'dev': [
223           {
224             'name': 'sockets.udp',
225             'last': True,
226             'description': u'<code>sockets.udp</code>'
227           }],
228         'beta': [],
229         'trunk': []
230         }, self._api_list.get('extensions').get('chrome'))
231
232   def testExperimentalExtensions(self):
233     self.assertEqual([
234         {
235           'name': 'experimental.history',
236           'description': u'<code>experimental.history</code>'
237         },
238         {
239           'name': 'experimental.power',
240           'description': u'<code>experimental.power</code>',
241           'last': True
242         }], self._api_list.get('extensions').get('experimental'))
243
244   def testContentScripts(self):
245     self.assertEqual([{
246       'name': 'alarms',
247     },
248     {
249       'name': 'extension',
250       'restrictedTo': [{
251         'node': 'onRequest',
252         'first': True
253       },
254       {
255         'node': 'sendRequest',
256         'last': True
257       }]
258     }], self._api_list.get('contentScripts'))
259
260 if __name__ == '__main__':
261   unittest.main()