api_list_data_source_test.py revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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 self._factory = APIListDataSource.Factory( 135 server_instance.compiled_fs_factory, 136 server_instance.host_file_system_provider.GetTrunk(), 137 server_instance.features_bundle, 138 server_instance.object_store_creator, 139 server_instance.api_models, 140 server_instance.availability_finder, 141 server_instance.api_categorizer) 142 self.maxDiff = None 143 144 def testApps(self): 145 api_list = self._factory.Create() 146 self.assertEqual({ 147 'stable': [ 148 { 149 'name': 'alarms', 150 'platforms': ['apps', 'extensions'], 151 'version': 5, 152 'description': u'<code>alarms</code>' 153 }, 154 { 155 'name': 'app.window', 156 'platforms': ['apps'], 157 # Availability logic will look for a camelCase format filename 158 # (i.e. 'app.window.html') at version 20 and below, but the 159 # unix_name format above won't be found at these versions. 160 'version': 21, 161 'description': u'<code>app.window</code>' 162 }, 163 { 164 'name': 'storage', 165 'platforms': ['apps', 'extensions'], 166 'last': True, 167 'version': 5, 168 'description': u'<code>storage</code>' 169 }], 170 'dev': [ 171 { 172 'name': 'sockets.udp', 173 'platforms': ['apps', 'extensions'], 174 'last': True, 175 'description': u'<code>sockets.udp</code>' 176 }], 177 'beta': [], 178 'trunk': [] 179 }, api_list.get('apps').get('chrome')) 180 181 def testExperimentalApps(self): 182 api_list = self._factory.Create() 183 self.assertEqual([ 184 { 185 'name': 'experimental.bluetooth', 186 'platforms': ['apps'], 187 'description': u'<code>experimental.bluetooth</code>' 188 }, 189 { 190 'name': 'experimental.power', 191 'platforms': ['apps', 'extensions'], 192 'last': True, 193 'description': u'<code>experimental.power</code>' 194 }], api_list.get('apps').get('experimental')) 195 196 def testExtensions(self): 197 api_list = self._factory.Create() 198 self.assertEqual({ 199 'stable': [ 200 { 201 'name': 'alarms', 202 'platforms': ['apps', 'extensions'], 203 'version': 5, 204 'description': u'<code>alarms</code>' 205 }, 206 { 207 'name': 'browserAction', 208 'platforms': ['extensions'], 209 # See comment above for 'app.window'. 210 'version': 21, 211 'description': u'<code>browserAction</code>' 212 }, 213 { 214 'name': 'infobars', 215 'platforms': ['extensions'], 216 'version': 5, 217 'description': u'<code>infobars</code>' 218 }, 219 { 220 'name': 'storage', 221 'platforms': ['apps', 'extensions'], 222 'last': True, 223 'version': 5, 224 'description': u'<code>storage</code>' 225 }], 226 'dev': [ 227 { 228 'name': 'sockets.udp', 229 'platforms': ['apps', 'extensions'], 230 'last': True, 231 'description': u'<code>sockets.udp</code>' 232 }], 233 'beta': [], 234 'trunk': [] 235 }, api_list.get('extensions').get('chrome')) 236 237 def testExperimentalExtensions(self): 238 api_list = self._factory.Create() 239 self.assertEqual([ 240 { 241 'name': 'experimental.history', 242 'platforms': ['extensions'], 243 'description': u'<code>experimental.history</code>' 244 }, 245 { 246 'name': 'experimental.power', 247 'platforms': ['apps', 'extensions'], 248 'description': u'<code>experimental.power</code>', 249 'last': True 250 }], api_list.get('extensions').get('experimental')) 251 252if __name__ == '__main__': 253 unittest.main() 254