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