api_list_data_source_test.py revision 116680a4aac90f2aa7413d9095a592090648e557
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            'version': 5,
145            'description': u'<code>alarms</code>'
146          },
147          {
148            'name': 'app.window',
149            # Availability logic will look for a camelCase format filename
150            # (i.e. 'app.window.html') at version 20 and below, but the
151            # unix_name format above won't be found at these versions.
152            'version': 21,
153            'description': u'<code>app.window</code>'
154          },
155          {
156            'name': 'storage',
157            'last': True,
158            'version': 5,
159            'description': u'<code>storage</code>'
160          }],
161        'dev': [
162          {
163            'name': 'sockets.udp',
164            'last': True,
165            'description': u'<code>sockets.udp</code>'
166          }],
167        'beta': [],
168        'trunk': []
169        }, self._api_list.get('apps').get('chrome'))
170
171  def testExperimentalApps(self):
172    self.assertEqual([
173        {
174          'name': 'experimental.bluetooth',
175          'description': u'<code>experimental.bluetooth</code>'
176        },
177        {
178          'name': 'experimental.power',
179          'last': True,
180          'description': u'<code>experimental.power</code>'
181        }], self._api_list.get('apps').get('experimental'))
182
183  def testExtensions(self):
184    self.assertEqual({
185        'stable': [
186          {
187            'name': 'alarms',
188            'version': 5,
189            'description': u'<code>alarms</code>'
190          },
191          {
192            'name': 'browserAction',
193            # See comment above for 'app.window'.
194            'version': 21,
195            'description': u'<code>browserAction</code>'
196          },
197          {
198            'name': 'infobars',
199            'version': 5,
200            'description': u'<code>infobars</code>'
201          },
202          {
203            'name': 'storage',
204            'last': True,
205            'version': 5,
206            'description': u'<code>storage</code>'
207          }],
208        'dev': [
209          {
210            'name': 'sockets.udp',
211            'last': True,
212            'description': u'<code>sockets.udp</code>'
213          }],
214        'beta': [],
215        'trunk': []
216        }, self._api_list.get('extensions').get('chrome'))
217
218  def testExperimentalExtensions(self):
219    self.assertEqual([
220        {
221          'name': 'experimental.history',
222          'description': u'<code>experimental.history</code>'
223        },
224        {
225          'name': 'experimental.power',
226          'description': u'<code>experimental.power</code>',
227          'last': True
228        }], self._api_list.get('extensions').get('experimental'))
229
230if __name__ == '__main__':
231  unittest.main()
232