Adding the orphaned options pages to the navigation
[chromium-blink-merge.git] / chrome / common / extensions / docs / server2 / reference_resolver_test.py
blob0e60f993f3311bb0f3acae9e7ab10f360987c869
1 #!/usr/bin/env python
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
4 # found in the LICENSE file.
6 import os
7 import unittest
9 from future import Future
10 from reference_resolver import ReferenceResolver
11 from test_object_store import TestObjectStore
12 from test_util import Server2Path
13 from third_party.json_schema_compiler.model import Namespace
16 _TEST_DATA = {
17 'baz': {
18 'namespace': 'baz',
19 'description': '',
20 'types': [
22 'id': 'baz_t1',
23 'type': 'any',
26 'id': 'baz_t2',
27 'type': 'any',
30 'id': 'baz_t3',
31 'type': 'any',
34 'functions': [
36 'name': 'baz_f1',
37 'type': 'function'
40 'name': 'baz_f2',
41 'type': 'function'
44 'name': 'baz_f3',
45 'type': 'function'
48 'events': [
50 'name': 'baz_e1',
51 'type': 'function'
54 'name': 'baz_e2',
55 'type': 'function'
58 'name': 'baz_e3',
59 'type': 'function'
62 'properties': {
63 'baz_p1': {'type': 'any'},
64 'baz_p2': {'type': 'any'},
65 'baz_p3': {'type': 'any'}
68 'bar.bon': {
69 'namespace': 'bar.bon',
70 'description': '',
71 'types': [
73 'id': 'bar_bon_t1',
74 'type': 'any',
77 'id': 'bar_bon_t2',
78 'type': 'any',
81 'id': 'bar_bon_t3',
82 'type': 'any',
85 'functions': [
87 'name': 'bar_bon_f1',
88 'type': 'function'
91 'name': 'bar_bon_f2',
92 'type': 'function'
95 'name': 'bar_bon_f3',
96 'type': 'function'
99 'events': [
101 'name': 'bar_bon_e1',
102 'type': 'function'
105 'name': 'bar_bon_e2',
106 'type': 'function'
109 'name': 'bar_bon_e3',
110 'type': 'function'
113 'properties': {
114 'bar_bon_p1': {'type': 'any'},
115 'bar_bon_p2': {'type': 'any'},
116 'bar_bon_p3': {'type': 'any'}
119 'bar': {
120 'namespace': 'bar',
121 'description': '',
122 'types': [
124 'id': 'bar_t1',
125 'type': 'any',
126 'properties': {
127 'bar_t1_p1': {
128 'type': 'any'
133 'id': 'bar_t2',
134 'type': 'any',
135 'properties': {
136 'bar_t2_p1': {
137 'type': 'any'
142 'id': 'bar_t3',
143 'type': 'any',
146 'id': 'bon',
147 'type': 'any'
150 'functions': [
152 'name': 'bar_f1',
153 'type': 'function'
156 'name': 'bar_f2',
157 'type': 'function'
160 'name': 'bar_f3',
161 'type': 'function'
164 'events': [
166 'name': 'bar_e1',
167 'type': 'function'
170 'name': 'bar_e2',
171 'type': 'function'
174 'name': 'bar_e3',
175 'type': 'function'
178 'properties': {
179 'bar_p1': {'type': 'any'},
180 'bar_p2': {'type': 'any'},
181 'bar_p3': {'$ref': 'bar_t1'}
184 'foo': {
185 'namespace': 'foo',
186 'description': '',
187 'types': [
189 'id': 'foo_t1',
190 'type': 'any',
193 'id': 'foo_t2',
194 'type': 'any',
197 'id': 'foo_t3',
198 'type': 'any',
199 'events': [
201 'name': 'foo_t3_e1',
202 'type': 'function'
207 'functions': [
209 'name': 'foo_f1',
210 'type': 'function'
213 'name': 'foo_f2',
214 'type': 'function'
217 'name': 'foo_f3',
218 'type': 'function'
221 'events': [
223 'name': 'foo_e1',
224 'type': 'function'
227 'name': 'foo_e2',
228 'type': 'function'
231 'name': 'foo_e3',
232 'type': 'function'
235 'properties': {
236 'foo_p1': {'$ref': 'foo_t3'},
237 'foo_p2': {'type': 'any'},
238 'foo_p3': {'type': 'any'}
244 class _FakePlatformBundle(object):
245 def __init__(self):
246 self.platforms = ('apps', 'extensions')
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']
260 class _FakeAPIModels(object):
261 def __init__(self, apis):
262 self._apis = apis
264 def GetNames(self):
265 return self._apis.keys()
267 def GetModel(self, name):
268 return Future(value=Namespace(self._apis[name], 'fake/path.json'))
271 class ReferenceResolverTest(unittest.TestCase):
272 def setUp(self):
273 self._base_path = Server2Path('test_data', 'test_json')
275 def _ReadLocalFile(self, filename):
276 with open(os.path.join(self._base_path, filename), 'r') as f:
277 return f.read()
279 def testGetLink(self):
280 apps_resolver = ReferenceResolver(
281 _FakePlatformBundle().GetAPIModels('apps'),
282 TestObjectStore('apps/test'))
283 extensions_resolver = ReferenceResolver(
284 _FakePlatformBundle().GetAPIModels('extensions'),
285 TestObjectStore('extensions/test'))
287 self.assertEqual({
288 'href': 'foo',
289 'text': 'foo',
290 'name': 'foo'
291 }, apps_resolver.GetLink('foo', namespace='baz'))
292 self.assertEqual({
293 'href': 'foo#type-foo_t1',
294 'text': 'foo.foo_t1',
295 'name': 'foo_t1'
296 }, apps_resolver.GetLink('foo.foo_t1', namespace='baz'))
297 self.assertEqual({
298 'href': 'baz#event-baz_e1',
299 'text': 'baz_e1',
300 'name': 'baz_e1'
301 }, apps_resolver.GetLink('baz.baz_e1', namespace='baz'))
302 self.assertEqual({
303 'href': 'baz#event-baz_e1',
304 'text': 'baz_e1',
305 'name': 'baz_e1'
306 }, apps_resolver.GetLink('baz_e1', namespace='baz'))
307 self.assertEqual({
308 'href': 'foo#method-foo_f1',
309 'text': 'foo.foo_f1',
310 'name': 'foo_f1'
311 }, apps_resolver.GetLink('foo.foo_f1', namespace='baz'))
312 self.assertEqual({
313 'href': 'foo#property-foo_p3',
314 'text': 'foo.foo_p3',
315 'name': 'foo_p3'
316 }, apps_resolver.GetLink('foo.foo_p3', namespace='baz'))
317 self.assertEqual({
318 'href': 'bar.bon#type-bar_bon_t3',
319 'text': 'bar.bon.bar_bon_t3',
320 'name': 'bar_bon_t3'
321 }, apps_resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz'))
322 self.assertEqual({
323 'href': 'bar.bon#property-bar_bon_p3',
324 'text': 'bar_bon_p3',
325 'name': 'bar_bon_p3'
326 }, apps_resolver.GetLink('bar_bon_p3', namespace='bar.bon'))
327 self.assertEqual({
328 'href': 'bar.bon#property-bar_bon_p3',
329 'text': 'bar_bon_p3',
330 'name': 'bar_bon_p3'
331 }, apps_resolver.GetLink('bar.bon.bar_bon_p3', namespace='bar.bon'))
332 self.assertEqual({
333 'href': 'bar#event-bar_e2',
334 'text': 'bar_e2',
335 'name': 'bar_e2'
336 }, apps_resolver.GetLink('bar.bar_e2', namespace='bar'))
337 self.assertEqual({
338 'href': 'bar#type-bon',
339 'text': 'bon',
340 'name': 'bon'
341 }, apps_resolver.GetLink('bar.bon', namespace='bar'))
342 self.assertEqual({
343 'href': 'foo#event-foo_t3-foo_t3_e1',
344 'text': 'foo_t3.foo_t3_e1',
345 'name': 'foo_t3_e1'
346 }, apps_resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo'))
347 self.assertEqual({
348 'href': 'foo#event-foo_t3-foo_t3_e1',
349 'text': 'foo_t3.foo_t3_e1',
350 'name': 'foo_t3_e1'
351 }, apps_resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo'))
352 self.assertEqual({
353 'href': 'foo#event-foo_t3-foo_t3_e1',
354 'text': 'foo_t3.foo_t3_e1',
355 'name': 'foo_t3_e1'
356 }, apps_resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo'))
357 self.assertEqual({
358 'href': 'bar#property-bar_t1-bar_t1_p1',
359 'text': 'bar.bar_t1.bar_t1_p1',
360 'name': 'bar_t1_p1'
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'))
368 self.assertEqual({
369 'href': 'bar#property-bar_t1-bar_t1_p1',
370 'text': 'bar_t1.bar_t1_p1',
371 'name': 'bar_t1_p1'
372 }, apps_resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar'))
373 self.assertEqual(
374 None,
375 apps_resolver.GetLink('bar.bar_p3.bar_t2_p1', namespace='bar'))
376 self.assertEqual(
377 None,
378 apps_resolver.GetLink('bar.bon.bar_e3', namespace='bar'))
379 self.assertEqual(
380 None,
381 apps_resolver.GetLink('bar_p3', namespace='baz.bon'))
382 self.assertEqual(
383 None,
384 apps_resolver.GetLink('falafel.faf', namespace='a'))
385 self.assertEqual(
386 None,
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'))
393 if __name__ == '__main__':
394 unittest.main()