Chromium Code Reviews| 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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 99 CANNED_API_FILE_SYSTEM_DATA)) | 98 CANNED_API_FILE_SYSTEM_DATA)) |
| 100 self._avail_api_models = server_instance.api_models | 99 self._avail_api_models = server_instance.api_models |
| 101 self._avail_json_cache = server_instance.compiled_fs_factory.ForJson( | 100 self._avail_json_cache = server_instance.compiled_fs_factory.ForJson( |
| 102 server_instance.host_file_system_provider.GetTrunk()) | 101 server_instance.host_file_system_provider.GetTrunk()) |
| 103 self._avail_finder = server_instance.availability_finder | 102 self._avail_finder = server_instance.availability_finder |
| 104 | 103 |
| 105 def _ReadLocalFile(self, filename): | 104 def _ReadLocalFile(self, filename): |
| 106 with open(os.path.join(self._base_path, filename), 'r') as f: | 105 with open(os.path.join(self._base_path, filename), 'r') as f: |
| 107 return f.read() | 106 return f.read() |
| 108 | 107 |
| 109 def _CreateRefResolver(self, filename): | |
| 110 test_data = self._LoadJSON(filename) | |
| 111 return ReferenceResolver.Factory(_FakeAPIDataSource(test_data), | |
| 112 _FakeAPIModels(test_data), | |
| 113 ObjectStoreCreator.ForTest()).Create() | |
| 114 | |
| 115 def _LoadJSON(self, filename): | 108 def _LoadJSON(self, filename): |
| 116 return json.loads(self._ReadLocalFile(filename)) | 109 return json.loads(self._ReadLocalFile(filename)) |
| 117 | 110 |
| 118 def testCreateId(self): | 111 def testCreateId(self): |
| 119 dict_ = _JSCModel('tester', | 112 dict_ = _JSCModel('tester', |
| 120 self._api_models, | 113 self._api_models, |
| 121 self._CreateRefResolver('test_file_data_source.json'), | |
| 122 False, | 114 False, |
| 123 _FakeAvailabilityFinder(), | 115 _FakeAvailabilityFinder(), |
| 124 self._json_cache, | 116 self._json_cache, |
| 125 _FakeTemplateCache(), | 117 _FakeTemplateCache(), |
| 126 self._features_bundle, | 118 self._features_bundle, |
| 127 None).ToDict() | 119 None).ToDict() |
| 128 self.assertEquals('type-TypeA', dict_['types'][0]['id']) | 120 self.assertEquals('type-TypeA', dict_['types'][0]['id']) |
| 129 self.assertEquals('property-TypeA-b', | 121 self.assertEquals('property-TypeA-b', |
| 130 dict_['types'][0]['properties'][0]['id']) | 122 dict_['types'][0]['properties'][0]['id']) |
| 131 self.assertEquals('method-get', dict_['functions'][0]['id']) | 123 self.assertEquals('method-get', dict_['functions'][0]['id']) |
| 132 self.assertEquals('event-EventA', dict_['events'][0]['id']) | 124 self.assertEquals('event-EventA', dict_['events'][0]['id']) |
| 133 | 125 |
| 134 # TODO(kalman): re-enable this when we have a rebase option. | 126 # TODO(kalman): re-enable this when we have a rebase option. |
| 135 def DISABLED_testToDict(self): | 127 def DISABLED_testToDict(self): |
| 136 expected_json = self._LoadJSON('expected_tester.json') | 128 expected_json = self._LoadJSON('expected_tester.json') |
| 137 dict_ = _JSCModel('tester', | 129 dict_ = _JSCModel('tester', |
| 138 self._api_models, | 130 self._api_models, |
| 139 False, | 131 False, |
| 140 self._CreateRefResolver('test_file_data_source.json'), | |
| 141 _FakeAvailabilityFinder(), | 132 _FakeAvailabilityFinder(), |
| 142 self._json_cache, | 133 self._json_cache, |
| 143 _FakeTemplateCache(), | 134 _FakeTemplateCache(), |
| 144 self._features_bundle, | 135 self._features_bundle, |
| 145 None).ToDict() | 136 None).ToDict() |
| 146 self.assertEquals(expected_json, dict_) | 137 self.assertEquals(expected_json, dict_) |
| 147 | 138 |
| 148 def testFormatValue(self): | 139 def testFormatValue(self): |
| 149 self.assertEquals('1,234,567', _FormatValue(1234567)) | 140 self.assertEquals('1,234,567', _FormatValue(1234567)) |
| 150 self.assertEquals('67', _FormatValue(67)) | 141 self.assertEquals('67', _FormatValue(67)) |
| 151 self.assertEquals('234,567', _FormatValue(234567)) | 142 self.assertEquals('234,567', _FormatValue(234567)) |
| 152 | 143 |
| 153 def testFormatDescription(self): | |
|
ahernandez
2014/03/28 19:04:52
Since we no longer format the description in JSCMo
| |
| 154 dict_ = _JSCModel('ref_test', | |
| 155 self._api_models, | |
| 156 self._CreateRefResolver('ref_test_data_source.json'), | |
| 157 False, | |
| 158 _FakeAvailabilityFinder(), | |
| 159 self._json_cache, | |
| 160 _FakeTemplateCache(), | |
| 161 self._features_bundle, | |
| 162 None).ToDict() | |
| 163 self.assertEquals(_MakeLink('ref_test.html#type-type2', 'type2'), | |
| 164 _GetType(dict_, 'type1')['description']) | |
| 165 self.assertEquals( | |
| 166 'A %s, or %s' % (_MakeLink('ref_test.html#type-type3', 'type3'), | |
| 167 _MakeLink('ref_test.html#type-type2', 'type2')), | |
| 168 _GetType(dict_, 'type2')['description']) | |
| 169 self.assertEquals( | |
| 170 '%s != %s' % (_MakeLink('other.html#type-type2', 'other.type2'), | |
| 171 _MakeLink('ref_test.html#type-type2', 'type2')), | |
| 172 _GetType(dict_, 'type3')['description']) | |
| 173 | |
| 174 | |
| 175 def testGetApiAvailability(self): | 144 def testGetApiAvailability(self): |
| 176 api_availabilities = { | 145 api_availabilities = { |
| 177 'bluetooth': ChannelInfo('dev', CANNED_BRANCHES[28], 28), | 146 'bluetooth': ChannelInfo('dev', CANNED_BRANCHES[28], 28), |
| 178 'contextMenus': ChannelInfo('trunk', CANNED_BRANCHES['trunk'], 'trunk'), | 147 'contextMenus': ChannelInfo('trunk', CANNED_BRANCHES['trunk'], 'trunk'), |
| 179 'jsonStableAPI': ChannelInfo('stable', CANNED_BRANCHES[20], 20), | 148 'jsonStableAPI': ChannelInfo('stable', CANNED_BRANCHES[20], 20), |
| 180 'idle': ChannelInfo('stable', CANNED_BRANCHES[5], 5), | 149 'idle': ChannelInfo('stable', CANNED_BRANCHES[5], 5), |
| 181 'input.ime': ChannelInfo('stable', CANNED_BRANCHES[18], 18), | 150 'input.ime': ChannelInfo('stable', CANNED_BRANCHES[18], 18), |
| 182 'tabs': ChannelInfo('stable', CANNED_BRANCHES[18], 18) | 151 'tabs': ChannelInfo('stable', CANNED_BRANCHES[18], 18) |
| 183 } | 152 } |
| 184 for api_name, availability in api_availabilities.iteritems(): | 153 for api_name, availability in api_availabilities.iteritems(): |
| 185 model = _JSCModel(api_name, | 154 model = _JSCModel(api_name, |
| 186 self._avail_api_models, | 155 self._avail_api_models, |
| 187 None, | |
| 188 True, | 156 True, |
| 189 self._avail_finder, | 157 self._avail_finder, |
| 190 self._avail_json_cache, | 158 self._avail_json_cache, |
| 191 _FakeTemplateCache(), | 159 _FakeTemplateCache(), |
| 192 self._features_bundle, | 160 self._features_bundle, |
| 193 None) | 161 None) |
| 194 self.assertEquals(availability, model._GetApiAvailability()) | 162 self.assertEquals(availability, model._GetApiAvailability()) |
| 195 | 163 |
| 196 def testGetIntroList(self): | 164 def testGetIntroList(self): |
| 197 model = _JSCModel('tester', | 165 model = _JSCModel('tester', |
| 198 self._api_models, | 166 self._api_models, |
| 199 self._CreateRefResolver('test_file_data_source.json'), | |
| 200 False, | 167 False, |
| 201 _FakeAvailabilityFinder(), | 168 _FakeAvailabilityFinder(), |
| 202 self._json_cache, | 169 self._json_cache, |
| 203 _FakeTemplateCache(), | 170 _FakeTemplateCache(), |
| 204 self._features_bundle, | 171 self._features_bundle, |
| 205 None) | 172 None) |
| 206 expected_list = [ | 173 expected_list = [ |
| 207 { 'title': 'Description', | 174 { 'title': 'Description', |
| 208 'content': [ | 175 'content': [ |
| 209 { 'text': 'a test api' } | 176 { 'text': 'a test api' } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 262 # Duplicates are an error. | 229 # Duplicates are an error. |
| 263 self.assertRaises(AssertionError, _GetEventByNameFromEvents, events) | 230 self.assertRaises(AssertionError, _GetEventByNameFromEvents, events) |
| 264 | 231 |
| 265 def _FakeLoadAddRulesSchema(self): | 232 def _FakeLoadAddRulesSchema(self): |
| 266 events = self._LoadJSON('add_rules_def_test.json') | 233 events = self._LoadJSON('add_rules_def_test.json') |
| 267 return _GetEventByNameFromEvents(events) | 234 return _GetEventByNameFromEvents(events) |
| 268 | 235 |
| 269 def testAddRules(self): | 236 def testAddRules(self): |
| 270 dict_ = _JSCModel('add_rules_tester', | 237 dict_ = _JSCModel('add_rules_tester', |
| 271 self._api_models, | 238 self._api_models, |
| 272 self._CreateRefResolver('test_file_data_source.json'), | |
| 273 False, | 239 False, |
| 274 _FakeAvailabilityFinder(), | 240 _FakeAvailabilityFinder(), |
| 275 self._json_cache, | 241 self._json_cache, |
| 276 _FakeTemplateCache(), | 242 _FakeTemplateCache(), |
| 277 self._features_bundle, | 243 self._features_bundle, |
| 278 self._FakeLoadAddRulesSchema).ToDict() | 244 self._FakeLoadAddRulesSchema).ToDict() |
| 279 | 245 |
| 280 # Check that the first event has the addRulesFunction defined. | 246 # Check that the first event has the addRulesFunction defined. |
| 281 self.assertEquals('add_rules_tester', dict_['name']) | 247 self.assertEquals('add_rules_tester', dict_['name']) |
| 282 self.assertEquals('rules', dict_['events'][0]['name']) | 248 self.assertEquals('rules', dict_['events'][0]['name']) |
| 283 self.assertEquals('notable_name_to_check_for', | 249 self.assertEquals('notable_name_to_check_for', |
| 284 dict_['events'][0]['byName']['addRules'][ | 250 dict_['events'][0]['byName']['addRules'][ |
| 285 'parameters'][0]['name']) | 251 'parameters'][0]['name']) |
| 286 | 252 |
| 287 # Check that the second event has addListener defined. | 253 # Check that the second event has addListener defined. |
| 288 self.assertEquals('noRules', dict_['events'][1]['name']) | 254 self.assertEquals('noRules', dict_['events'][1]['name']) |
| 289 self.assertEquals('add_rules_tester', dict_['name']) | 255 self.assertEquals('add_rules_tester', dict_['name']) |
| 290 self.assertEquals('noRules', dict_['events'][1]['name']) | 256 self.assertEquals('noRules', dict_['events'][1]['name']) |
| 291 self.assertEquals('callback', | 257 self.assertEquals('callback', |
| 292 dict_['events'][0]['byName']['addListener'][ | 258 dict_['events'][0]['byName']['addListener'][ |
| 293 'parameters'][0]['name']) | 259 'parameters'][0]['name']) |
| 294 | 260 |
| 295 if __name__ == '__main__': | 261 if __name__ == '__main__': |
| 296 unittest.main() | 262 unittest.main() |
| OLD | NEW |