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 |