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