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