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): | |
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 |