| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import json | 6 import json |
| 7 import os | 7 import os |
| 8 import sys | 8 import sys |
| 9 import unittest | 9 import unittest |
| 10 | 10 |
| 11 from api_data_source import (_JSCModel, | 11 from api_data_source import (_JSCModel, |
| 12 _FormatValue, | 12 _FormatValue, |
| 13 _GetEventByNameFromEvents) | 13 _GetEventByNameFromEvents) |
| 14 from branch_utility import ChannelInfo | 14 from branch_utility import ChannelInfo |
| 15 from extensions_paths import CHROME_EXTENSIONS | 15 from extensions_paths import CHROME_EXTENSIONS |
| 16 from fake_host_file_system_provider import FakeHostFileSystemProvider | 16 from fake_host_file_system_provider import FakeHostFileSystemProvider |
| 17 from features_bundle import FeaturesBundle | 17 from features_bundle import FeaturesBundle |
| 18 from file_system import FileNotFoundError | 18 from file_system import FileNotFoundError |
| 19 from future import Future | 19 from future import Future |
| 20 from object_store_creator import ObjectStoreCreator | 20 from object_store_creator import ObjectStoreCreator |
| 21 from reference_resolver import ReferenceResolver | |
| 22 from server_instance import ServerInstance | 21 from server_instance import ServerInstance |
| 23 from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES) | 22 from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES) |
| 24 from test_data.api_data_source.canned_trunk_fs import CANNED_TRUNK_FS_DATA | 23 from test_data.api_data_source.canned_trunk_fs import CANNED_TRUNK_FS_DATA |
| 25 from test_file_system import TestFileSystem | 24 from test_file_system import TestFileSystem |
| 26 from test_util import Server2Path | 25 from test_util import Server2Path |
| 27 from third_party.json_schema_compiler.memoize import memoize | 26 from third_party.json_schema_compiler.memoize import memoize |
| 28 | 27 |
| 29 | 28 |
| 30 def _MakeLink(href, text): | 29 def _MakeLink(href, text): |
| 31 return '<a href="%s">%s</a>' % (href, text) | 30 return '<a href="%s">%s</a>' % (href, text) |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 CANNED_API_FILE_SYSTEM_DATA)) | 107 CANNED_API_FILE_SYSTEM_DATA)) |
| 109 self._avail_api_models = server_instance.api_models | 108 self._avail_api_models = server_instance.api_models |
| 110 self._avail_json_cache = server_instance.compiled_fs_factory.ForJson( | 109 self._avail_json_cache = server_instance.compiled_fs_factory.ForJson( |
| 111 server_instance.host_file_system_provider.GetTrunk()) | 110 server_instance.host_file_system_provider.GetTrunk()) |
| 112 self._avail_finder = server_instance.availability_finder | 111 self._avail_finder = server_instance.availability_finder |
| 113 | 112 |
| 114 def _ReadLocalFile(self, filename): | 113 def _ReadLocalFile(self, filename): |
| 115 with open(os.path.join(self._base_path, filename), 'r') as f: | 114 with open(os.path.join(self._base_path, filename), 'r') as f: |
| 116 return f.read() | 115 return f.read() |
| 117 | 116 |
| 118 def _CreateRefResolver(self, filename): | |
| 119 test_data = self._LoadJSON(filename) | |
| 120 return ReferenceResolver.Factory(_FakeAPIDataSource(test_data), | |
| 121 _FakeAPIModels(test_data), | |
| 122 ObjectStoreCreator.ForTest()).Create() | |
| 123 | |
| 124 def _LoadJSON(self, filename): | 117 def _LoadJSON(self, filename): |
| 125 return json.loads(self._ReadLocalFile(filename)) | 118 return json.loads(self._ReadLocalFile(filename)) |
| 126 | 119 |
| 127 def testCreateId(self): | 120 def testCreateId(self): |
| 128 dict_ = _JSCModel('tester', | 121 dict_ = _JSCModel('tester', |
| 129 self._api_models, | 122 self._api_models, |
| 130 self._CreateRefResolver('test_file_data_source.json'), | |
| 131 False, | 123 False, |
| 132 _FakeAvailabilityFinder(), | 124 _FakeAvailabilityFinder(), |
| 133 self._json_cache, | 125 self._json_cache, |
| 134 _FakeTemplateCache(), | 126 _FakeTemplateCache(), |
| 135 self._features_bundle, | 127 self._features_bundle, |
| 136 None).ToDict() | 128 None).ToDict() |
| 137 self.assertEquals('type-TypeA', dict_['types'][0]['id']) | 129 self.assertEquals('type-TypeA', dict_['types'][0]['id']) |
| 138 self.assertEquals('property-TypeA-b', | 130 self.assertEquals('property-TypeA-b', |
| 139 dict_['types'][0]['properties'][0]['id']) | 131 dict_['types'][0]['properties'][0]['id']) |
| 140 self.assertEquals('method-get', dict_['functions'][0]['id']) | 132 self.assertEquals('method-get', dict_['functions'][0]['id']) |
| 141 self.assertEquals('event-EventA', dict_['events'][0]['id']) | 133 self.assertEquals('event-EventA', dict_['events'][0]['id']) |
| 142 | 134 |
| 143 # TODO(kalman): re-enable this when we have a rebase option. | 135 # TODO(kalman): re-enable this when we have a rebase option. |
| 144 def DISABLED_testToDict(self): | 136 def DISABLED_testToDict(self): |
| 145 expected_json = self._LoadJSON('expected_tester.json') | 137 expected_json = self._LoadJSON('expected_tester.json') |
| 146 dict_ = _JSCModel('tester', | 138 dict_ = _JSCModel('tester', |
| 147 self._api_models, | 139 self._api_models, |
| 148 False, | 140 False, |
| 149 self._CreateRefResolver('test_file_data_source.json'), | |
| 150 _FakeAvailabilityFinder(), | 141 _FakeAvailabilityFinder(), |
| 151 self._json_cache, | 142 self._json_cache, |
| 152 _FakeTemplateCache(), | 143 _FakeTemplateCache(), |
| 153 self._features_bundle, | 144 self._features_bundle, |
| 154 None).ToDict() | 145 None).ToDict() |
| 155 self.assertEquals(expected_json, dict_) | 146 self.assertEquals(expected_json, dict_) |
| 156 | 147 |
| 157 def testFormatValue(self): | 148 def testFormatValue(self): |
| 158 self.assertEquals('1,234,567', _FormatValue(1234567)) | 149 self.assertEquals('1,234,567', _FormatValue(1234567)) |
| 159 self.assertEquals('67', _FormatValue(67)) | 150 self.assertEquals('67', _FormatValue(67)) |
| 160 self.assertEquals('234,567', _FormatValue(234567)) | 151 self.assertEquals('234,567', _FormatValue(234567)) |
| 161 | 152 |
| 162 def testFormatDescription(self): | |
| 163 dict_ = _JSCModel('ref_test', | |
| 164 self._api_models, | |
| 165 self._CreateRefResolver('ref_test_data_source.json'), | |
| 166 False, | |
| 167 _FakeAvailabilityFinder(), | |
| 168 self._json_cache, | |
| 169 _FakeTemplateCache(), | |
| 170 self._features_bundle, | |
| 171 None).ToDict() | |
| 172 self.assertEquals(_MakeLink('ref_test#type-type2', 'type2'), | |
| 173 _GetType(dict_, 'type1')['description']) | |
| 174 self.assertEquals( | |
| 175 'A %s, or %s' % (_MakeLink('ref_test#type-type3', 'type3'), | |
| 176 _MakeLink('ref_test#type-type2', 'type2')), | |
| 177 _GetType(dict_, 'type2')['description']) | |
| 178 self.assertEquals( | |
| 179 '%s != %s' % (_MakeLink('other#type-type2', 'other.type2'), | |
| 180 _MakeLink('ref_test#type-type2', 'type2')), | |
| 181 _GetType(dict_, 'type3')['description']) | |
| 182 | |
| 183 | |
| 184 def testGetApiAvailability(self): | 153 def testGetApiAvailability(self): |
| 185 api_availabilities = { | 154 api_availabilities = { |
| 186 'bluetooth': ChannelInfo('dev', CANNED_BRANCHES[28], 28), | 155 'bluetooth': ChannelInfo('dev', CANNED_BRANCHES[28], 28), |
| 187 'contextMenus': ChannelInfo('trunk', CANNED_BRANCHES['trunk'], 'trunk'), | 156 'contextMenus': ChannelInfo('trunk', CANNED_BRANCHES['trunk'], 'trunk'), |
| 188 'jsonStableAPI': ChannelInfo('stable', CANNED_BRANCHES[20], 20), | 157 'jsonStableAPI': ChannelInfo('stable', CANNED_BRANCHES[20], 20), |
| 189 'idle': ChannelInfo('stable', CANNED_BRANCHES[5], 5), | 158 'idle': ChannelInfo('stable', CANNED_BRANCHES[5], 5), |
| 190 'input.ime': ChannelInfo('stable', CANNED_BRANCHES[18], 18), | 159 'input.ime': ChannelInfo('stable', CANNED_BRANCHES[18], 18), |
| 191 'tabs': ChannelInfo('stable', CANNED_BRANCHES[18], 18) | 160 'tabs': ChannelInfo('stable', CANNED_BRANCHES[18], 18) |
| 192 } | 161 } |
| 193 for api_name, availability in api_availabilities.iteritems(): | 162 for api_name, availability in api_availabilities.iteritems(): |
| 194 model = _JSCModel(api_name, | 163 model = _JSCModel(api_name, |
| 195 self._avail_api_models, | 164 self._avail_api_models, |
| 196 None, | |
| 197 True, | 165 True, |
| 198 self._avail_finder, | 166 self._avail_finder, |
| 199 self._avail_json_cache, | 167 self._avail_json_cache, |
| 200 _FakeTemplateCache(), | 168 _FakeTemplateCache(), |
| 201 self._features_bundle, | 169 self._features_bundle, |
| 202 None) | 170 None) |
| 203 self.assertEquals(availability, model._GetApiAvailability()) | 171 self.assertEquals(availability, model._GetApiAvailability()) |
| 204 | 172 |
| 205 def testGetIntroList(self): | 173 def testGetIntroList(self): |
| 206 model = _JSCModel('tester', | 174 model = _JSCModel('tester', |
| 207 self._api_models, | 175 self._api_models, |
| 208 self._CreateRefResolver('test_file_data_source.json'), | |
| 209 False, | 176 False, |
| 210 _FakeAvailabilityFinder(), | 177 _FakeAvailabilityFinder(), |
| 211 self._json_cache, | 178 self._json_cache, |
| 212 _FakeTemplateCache(), | 179 _FakeTemplateCache(), |
| 213 self._features_bundle, | 180 self._features_bundle, |
| 214 None) | 181 None) |
| 215 expected_list = [ | 182 expected_list = [ |
| 216 { 'title': 'Description', | 183 { 'title': 'Description', |
| 217 'content': [ | 184 'content': [ |
| 218 { 'text': 'a test api' } | 185 { 'text': 'a test api' } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 # Duplicates are an error. | 238 # Duplicates are an error. |
| 272 self.assertRaises(AssertionError, _GetEventByNameFromEvents, events) | 239 self.assertRaises(AssertionError, _GetEventByNameFromEvents, events) |
| 273 | 240 |
| 274 def _FakeLoadAddRulesSchema(self): | 241 def _FakeLoadAddRulesSchema(self): |
| 275 events = self._LoadJSON('add_rules_def_test.json') | 242 events = self._LoadJSON('add_rules_def_test.json') |
| 276 return _GetEventByNameFromEvents(events) | 243 return _GetEventByNameFromEvents(events) |
| 277 | 244 |
| 278 def testAddRules(self): | 245 def testAddRules(self): |
| 279 dict_ = _JSCModel('add_rules_tester', | 246 dict_ = _JSCModel('add_rules_tester', |
| 280 self._api_models, | 247 self._api_models, |
| 281 self._CreateRefResolver('test_file_data_source.json'), | |
| 282 False, | 248 False, |
| 283 _FakeAvailabilityFinder(), | 249 _FakeAvailabilityFinder(), |
| 284 self._json_cache, | 250 self._json_cache, |
| 285 _FakeTemplateCache(), | 251 _FakeTemplateCache(), |
| 286 self._features_bundle, | 252 self._features_bundle, |
| 287 self._FakeLoadAddRulesSchema).ToDict() | 253 self._FakeLoadAddRulesSchema).ToDict() |
| 288 | 254 |
| 289 # Check that the first event has the addRulesFunction defined. | 255 # Check that the first event has the addRulesFunction defined. |
| 290 self.assertEquals('add_rules_tester', dict_['name']) | 256 self.assertEquals('add_rules_tester', dict_['name']) |
| 291 self.assertEquals('rules', dict_['events'][0]['name']) | 257 self.assertEquals('rules', dict_['events'][0]['name']) |
| 292 self.assertEquals('notable_name_to_check_for', | 258 self.assertEquals('notable_name_to_check_for', |
| 293 dict_['events'][0]['byName']['addRules'][ | 259 dict_['events'][0]['byName']['addRules'][ |
| 294 'parameters'][0]['name']) | 260 'parameters'][0]['name']) |
| 295 | 261 |
| 296 # Check that the second event has addListener defined. | 262 # Check that the second event has addListener defined. |
| 297 self.assertEquals('noRules', dict_['events'][1]['name']) | 263 self.assertEquals('noRules', dict_['events'][1]['name']) |
| 298 self.assertEquals('add_rules_tester', dict_['name']) | 264 self.assertEquals('add_rules_tester', dict_['name']) |
| 299 self.assertEquals('noRules', dict_['events'][1]['name']) | 265 self.assertEquals('noRules', dict_['events'][1]['name']) |
| 300 self.assertEquals('callback', | 266 self.assertEquals('callback', |
| 301 dict_['events'][0]['byName']['addListener'][ | 267 dict_['events'][0]['byName']['addListener'][ |
| 302 'parameters'][0]['name']) | 268 'parameters'][0]['name']) |
| 303 | 269 |
| 304 if __name__ == '__main__': | 270 if __name__ == '__main__': |
| 305 unittest.main() | 271 unittest.main() |
| OLD | NEW |