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 os | 6 import os |
7 import unittest | 7 import unittest |
8 | 8 |
9 from future import Future | 9 from future import Future |
10 from reference_resolver import ReferenceResolver | 10 from reference_resolver import ReferenceResolver |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 ], | 234 ], |
235 'properties': { | 235 'properties': { |
236 'foo_p1': {'$ref': 'foo_t3'}, | 236 'foo_p1': {'$ref': 'foo_t3'}, |
237 'foo_p2': {'type': 'any'}, | 237 'foo_p2': {'type': 'any'}, |
238 'foo_p3': {'type': 'any'} | 238 'foo_p3': {'type': 'any'} |
239 } | 239 } |
240 } | 240 } |
241 } | 241 } |
242 | 242 |
243 | 243 |
| 244 class _FakePlatformBundle(object): |
| 245 def __init__(self): |
| 246 self.platforms = ('apps', 'extensions') |
| 247 |
| 248 def GetAPIModels(self, platform): |
| 249 if platform == 'apps': |
| 250 return _FakeAPIModels(_TEST_DATA) |
| 251 # Only includes some of the data in the 'extensions' APIModels. |
| 252 # ReferenceResolver will have to look at other platforms to resolve 'foo'. |
| 253 return _FakeAPIModels({ |
| 254 'bar': _TEST_DATA['bar'], |
| 255 'bar.bon': _TEST_DATA['bar.bon'], |
| 256 'baz': _TEST_DATA['baz'] |
| 257 }) |
| 258 |
| 259 |
244 class _FakeAPIModels(object): | 260 class _FakeAPIModels(object): |
245 def __init__(self, apis): | 261 def __init__(self, apis): |
246 self._apis = apis | 262 self._apis = apis |
247 | 263 |
248 def GetNames(self): | 264 def GetNames(self): |
249 return self._apis.keys() | 265 return self._apis.keys() |
250 | 266 |
251 def GetModel(self, name): | 267 def GetModel(self, name): |
252 return Future(value=Namespace(self._apis[name], 'fake/path.json')) | 268 return Future(value=Namespace(self._apis[name], 'fake/path.json')) |
253 | 269 |
254 | 270 |
255 class ReferenceResolverTest(unittest.TestCase): | 271 class ReferenceResolverTest(unittest.TestCase): |
256 def setUp(self): | 272 def setUp(self): |
257 self._base_path = Server2Path('test_data', 'test_json') | 273 self._base_path = Server2Path('test_data', 'test_json') |
258 | 274 |
259 def _ReadLocalFile(self, filename): | 275 def _ReadLocalFile(self, filename): |
260 with open(os.path.join(self._base_path, filename), 'r') as f: | 276 with open(os.path.join(self._base_path, filename), 'r') as f: |
261 return f.read() | 277 return f.read() |
262 | 278 |
263 def testGetLink(self): | 279 def testGetLink(self): |
264 resolver = ReferenceResolver(_FakeAPIModels(_TEST_DATA), | 280 apps_resolver = ReferenceResolver( |
265 TestObjectStore('test')) | 281 _FakePlatformBundle().GetAPIModels('apps'), |
| 282 TestObjectStore('apps/test')) |
| 283 extensions_resolver = ReferenceResolver( |
| 284 _FakePlatformBundle().GetAPIModels('extensions'), |
| 285 TestObjectStore('extensions/test')) |
| 286 |
266 self.assertEqual({ | 287 self.assertEqual({ |
267 'href': 'foo', | 288 'href': 'foo', |
268 'text': 'foo', | 289 'text': 'foo', |
269 'name': 'foo' | 290 'name': 'foo' |
270 }, resolver.GetLink('foo', namespace='baz')) | 291 }, apps_resolver.GetLink('foo', namespace='baz')) |
271 self.assertEqual({ | 292 self.assertEqual({ |
272 'href': 'foo#type-foo_t1', | 293 'href': 'foo#type-foo_t1', |
273 'text': 'foo.foo_t1', | 294 'text': 'foo.foo_t1', |
274 'name': 'foo_t1' | 295 'name': 'foo_t1' |
275 }, resolver.GetLink('foo.foo_t1', namespace='baz')) | 296 }, apps_resolver.GetLink('foo.foo_t1', namespace='baz')) |
276 self.assertEqual({ | 297 self.assertEqual({ |
277 'href': 'baz#event-baz_e1', | 298 'href': 'baz#event-baz_e1', |
278 'text': 'baz_e1', | 299 'text': 'baz_e1', |
279 'name': 'baz_e1' | 300 'name': 'baz_e1' |
280 }, resolver.GetLink('baz.baz_e1', namespace='baz')) | 301 }, apps_resolver.GetLink('baz.baz_e1', namespace='baz')) |
281 self.assertEqual({ | 302 self.assertEqual({ |
282 'href': 'baz#event-baz_e1', | 303 'href': 'baz#event-baz_e1', |
283 'text': 'baz_e1', | 304 'text': 'baz_e1', |
284 'name': 'baz_e1' | 305 'name': 'baz_e1' |
285 }, resolver.GetLink('baz_e1', namespace='baz')) | 306 }, apps_resolver.GetLink('baz_e1', namespace='baz')) |
286 self.assertEqual({ | 307 self.assertEqual({ |
287 'href': 'foo#method-foo_f1', | 308 'href': 'foo#method-foo_f1', |
288 'text': 'foo.foo_f1', | 309 'text': 'foo.foo_f1', |
289 'name': 'foo_f1' | 310 'name': 'foo_f1' |
290 }, resolver.GetLink('foo.foo_f1', namespace='baz')) | 311 }, apps_resolver.GetLink('foo.foo_f1', namespace='baz')) |
291 self.assertEqual({ | 312 self.assertEqual({ |
292 'href': 'foo#property-foo_p3', | 313 'href': 'foo#property-foo_p3', |
293 'text': 'foo.foo_p3', | 314 'text': 'foo.foo_p3', |
294 'name': 'foo_p3' | 315 'name': 'foo_p3' |
295 }, resolver.GetLink('foo.foo_p3', namespace='baz')) | 316 }, apps_resolver.GetLink('foo.foo_p3', namespace='baz')) |
296 self.assertEqual({ | 317 self.assertEqual({ |
297 'href': 'bar.bon#type-bar_bon_t3', | 318 'href': 'bar.bon#type-bar_bon_t3', |
298 'text': 'bar.bon.bar_bon_t3', | 319 'text': 'bar.bon.bar_bon_t3', |
299 'name': 'bar_bon_t3' | 320 'name': 'bar_bon_t3' |
300 }, resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz')) | 321 }, apps_resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz')) |
301 self.assertEqual({ | 322 self.assertEqual({ |
302 'href': 'bar.bon#property-bar_bon_p3', | 323 'href': 'bar.bon#property-bar_bon_p3', |
303 'text': 'bar_bon_p3', | 324 'text': 'bar_bon_p3', |
304 'name': 'bar_bon_p3' | 325 'name': 'bar_bon_p3' |
305 }, resolver.GetLink('bar_bon_p3', namespace='bar.bon')) | 326 }, apps_resolver.GetLink('bar_bon_p3', namespace='bar.bon')) |
306 self.assertEqual({ | 327 self.assertEqual({ |
307 'href': 'bar.bon#property-bar_bon_p3', | 328 'href': 'bar.bon#property-bar_bon_p3', |
308 'text': 'bar_bon_p3', | 329 'text': 'bar_bon_p3', |
309 'name': 'bar_bon_p3' | 330 'name': 'bar_bon_p3' |
310 }, resolver.GetLink('bar.bon.bar_bon_p3', namespace='bar.bon')) | 331 }, apps_resolver.GetLink('bar.bon.bar_bon_p3', namespace='bar.bon')) |
311 self.assertEqual({ | 332 self.assertEqual({ |
312 'href': 'bar#event-bar_e2', | 333 'href': 'bar#event-bar_e2', |
313 'text': 'bar_e2', | 334 'text': 'bar_e2', |
314 'name': 'bar_e2' | 335 'name': 'bar_e2' |
315 }, resolver.GetLink('bar.bar_e2', namespace='bar')) | 336 }, apps_resolver.GetLink('bar.bar_e2', namespace='bar')) |
316 self.assertEqual({ | 337 self.assertEqual({ |
317 'href': 'bar#type-bon', | 338 'href': 'bar#type-bon', |
318 'text': 'bon', | 339 'text': 'bon', |
319 'name': 'bon' | 340 'name': 'bon' |
320 }, resolver.GetLink('bar.bon', namespace='bar')) | 341 }, apps_resolver.GetLink('bar.bon', namespace='bar')) |
321 self.assertEqual({ | 342 self.assertEqual({ |
322 'href': 'foo#event-foo_t3-foo_t3_e1', | 343 'href': 'foo#event-foo_t3-foo_t3_e1', |
323 'text': 'foo_t3.foo_t3_e1', | 344 'text': 'foo_t3.foo_t3_e1', |
324 'name': 'foo_t3_e1' | 345 'name': 'foo_t3_e1' |
325 }, resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo')) | 346 }, apps_resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo')) |
326 self.assertEqual({ | 347 self.assertEqual({ |
327 'href': 'foo#event-foo_t3-foo_t3_e1', | 348 'href': 'foo#event-foo_t3-foo_t3_e1', |
328 'text': 'foo_t3.foo_t3_e1', | 349 'text': 'foo_t3.foo_t3_e1', |
329 'name': 'foo_t3_e1' | 350 'name': 'foo_t3_e1' |
330 }, resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo')) | 351 }, apps_resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo')) |
331 self.assertEqual({ | 352 self.assertEqual({ |
332 'href': 'foo#event-foo_t3-foo_t3_e1', | 353 'href': 'foo#event-foo_t3-foo_t3_e1', |
333 'text': 'foo_t3.foo_t3_e1', | 354 'text': 'foo_t3.foo_t3_e1', |
334 'name': 'foo_t3_e1' | 355 'name': 'foo_t3_e1' |
335 }, resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo')) | 356 }, apps_resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo')) |
336 self.assertEqual({ | 357 self.assertEqual({ |
337 'href': 'bar#property-bar_t1-bar_t1_p1', | 358 'href': 'bar#property-bar_t1-bar_t1_p1', |
338 'text': 'bar.bar_t1.bar_t1_p1', | 359 'text': 'bar.bar_t1.bar_t1_p1', |
339 'name': 'bar_t1_p1' | 360 'name': 'bar_t1_p1' |
340 }, resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo')) | 361 }, apps_resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo')) |
| 362 # Test extensions_resolver. |
| 363 self.assertEqual({ |
| 364 'href': 'bar#property-bar_t1-bar_t1_p1', |
| 365 'text': 'bar.bar_t1.bar_t1_p1', |
| 366 'name': 'bar_t1_p1' |
| 367 }, extensions_resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo')) |
341 self.assertEqual({ | 368 self.assertEqual({ |
342 'href': 'bar#property-bar_t1-bar_t1_p1', | 369 'href': 'bar#property-bar_t1-bar_t1_p1', |
343 'text': 'bar_t1.bar_t1_p1', | 370 'text': 'bar_t1.bar_t1_p1', |
344 'name': 'bar_t1_p1' | 371 'name': 'bar_t1_p1' |
345 }, resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar')) | 372 }, apps_resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar')) |
346 self.assertEqual( | 373 self.assertEqual( |
347 None, | 374 None, |
348 resolver.GetLink('bar.bar_p3.bar_t2_p1', namespace='bar')) | 375 apps_resolver.GetLink('bar.bar_p3.bar_t2_p1', namespace='bar')) |
349 self.assertEqual( | 376 self.assertEqual( |
350 None, | 377 None, |
351 resolver.GetLink('bar.bon.bar_e3', namespace='bar')) | 378 apps_resolver.GetLink('bar.bon.bar_e3', namespace='bar')) |
352 self.assertEqual( | 379 self.assertEqual( |
353 None, | 380 None, |
354 resolver.GetLink('bar_p3', namespace='baz.bon')) | 381 apps_resolver.GetLink('bar_p3', namespace='baz.bon')) |
355 self.assertEqual( | 382 self.assertEqual( |
356 None, | 383 None, |
357 resolver.GetLink('falafel.faf', namespace='a')) | 384 apps_resolver.GetLink('falafel.faf', namespace='a')) |
358 self.assertEqual( | 385 self.assertEqual( |
359 None, | 386 None, |
360 resolver.GetLink('bar_p3', namespace='foo')) | 387 apps_resolver.GetLink('bar_p3', namespace='foo')) |
| 388 # Exists in apps but not extensions. |
| 389 self.assertEqual( |
| 390 None, |
| 391 extensions_resolver.GetLink('foo.foo_p3', namespace='baz')) |
361 | 392 |
362 if __name__ == '__main__': | 393 if __name__ == '__main__': |
363 unittest.main() | 394 unittest.main() |
OLD | NEW |