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