Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / reference_resolver_test.py
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.
5
6 import os
7 import unittest
8
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
14
15
16 _TEST_DATA = {
17   'baz': {
18     'namespace': 'baz',
19     'description': '',
20     'types': [
21       {
22         'id': 'baz_t1',
23         'type': 'any',
24       },
25       {
26         'id': 'baz_t2',
27         'type': 'any',
28       },
29       {
30         'id': 'baz_t3',
31         'type': 'any',
32       }
33     ],
34     'functions': [
35       {
36         'name': 'baz_f1',
37         'type': 'function'
38       },
39       {
40         'name': 'baz_f2',
41         'type': 'function'
42       },
43       {
44         'name': 'baz_f3',
45         'type': 'function'
46       }
47     ],
48     'events': [
49       {
50         'name': 'baz_e1',
51         'type': 'function'
52       },
53       {
54         'name': 'baz_e2',
55         'type': 'function'
56       },
57       {
58         'name': 'baz_e3',
59         'type': 'function'
60       }
61     ],
62     'properties': {
63       'baz_p1': {'type': 'any'},
64       'baz_p2': {'type': 'any'},
65       'baz_p3': {'type': 'any'}
66     }
67   },
68   'bar.bon': {
69     'namespace': 'bar.bon',
70     'description': '',
71     'types': [
72       {
73         'id': 'bar_bon_t1',
74         'type': 'any',
75       },
76       {
77         'id': 'bar_bon_t2',
78         'type': 'any',
79       },
80       {
81         'id': 'bar_bon_t3',
82         'type': 'any',
83       }
84     ],
85     'functions': [
86       {
87         'name': 'bar_bon_f1',
88         'type': 'function'
89       },
90       {
91         'name': 'bar_bon_f2',
92         'type': 'function'
93       },
94       {
95         'name': 'bar_bon_f3',
96         'type': 'function'
97       }
98     ],
99     'events': [
100       {
101         'name': 'bar_bon_e1',
102         'type': 'function'
103       },
104       {
105         'name': 'bar_bon_e2',
106         'type': 'function'
107       },
108       {
109         'name': 'bar_bon_e3',
110         'type': 'function'
111       }
112     ],
113     'properties': {
114       'bar_bon_p1': {'type': 'any'},
115       'bar_bon_p2': {'type': 'any'},
116       'bar_bon_p3': {'type': 'any'}
117     }
118   },
119   'bar': {
120     'namespace': 'bar',
121     'description': '',
122     'types': [
123       {
124         'id': 'bar_t1',
125         'type': 'any',
126         'properties': {
127           'bar_t1_p1': {
128             'type': 'any'
129           }
130         }
131       },
132       {
133         'id': 'bar_t2',
134         'type': 'any',
135         'properties': {
136           'bar_t2_p1': {
137             'type': 'any'
138           }
139         }
140       },
141       {
142         'id': 'bar_t3',
143         'type': 'any',
144       },
145       {
146         'id': 'bon',
147         'type': 'any'
148       }
149     ],
150     'functions': [
151       {
152         'name': 'bar_f1',
153         'type': 'function'
154       },
155       {
156         'name': 'bar_f2',
157         'type': 'function'
158       },
159       {
160         'name': 'bar_f3',
161         'type': 'function'
162       }
163     ],
164     'events': [
165       {
166         'name': 'bar_e1',
167         'type': 'function'
168       },
169       {
170         'name': 'bar_e2',
171         'type': 'function'
172       },
173       {
174         'name': 'bar_e3',
175         'type': 'function'
176       }
177     ],
178     'properties': {
179       'bar_p1': {'type': 'any'},
180       'bar_p2': {'type': 'any'},
181       'bar_p3': {'$ref': 'bar_t1'}
182     }
183   },
184   'foo': {
185     'namespace': 'foo',
186     'description': '',
187     'types': [
188       {
189         'id': 'foo_t1',
190         'type': 'any',
191       },
192       {
193         'id': 'foo_t2',
194         'type': 'any',
195       },
196       {
197         'id': 'foo_t3',
198         'type': 'any',
199         'events': [
200           {
201             'name': 'foo_t3_e1',
202             'type': 'function'
203           }
204         ]
205       }
206     ],
207     'functions': [
208       {
209         'name': 'foo_f1',
210         'type': 'function'
211       },
212       {
213         'name': 'foo_f2',
214         'type': 'function'
215       },
216       {
217         'name': 'foo_f3',
218         'type': 'function'
219       }
220     ],
221     'events': [
222       {
223         'name': 'foo_e1',
224         'type': 'function'
225       },
226       {
227         'name': 'foo_e2',
228         'type': 'function'
229       },
230       {
231         'name': 'foo_e3',
232         'type': 'function'
233       }
234     ],
235     'properties': {
236       'foo_p1': {'$ref': 'foo_t3'},
237       'foo_p2': {'type': 'any'},
238       'foo_p3': {'type': 'any'}
239     }
240   }
241 }
242
243
244 class _FakeAPIModels(object):
245   def __init__(self, apis):
246     self._apis = apis
247
248   def GetNames(self):
249     return self._apis.keys()
250
251   def GetModel(self, name):
252     return Future(value=Namespace(self._apis[name], 'fake/path.json'))
253
254
255 class ReferenceResolverTest(unittest.TestCase):
256   def setUp(self):
257     self._base_path = Server2Path('test_data', 'test_json')
258
259   def _ReadLocalFile(self, filename):
260     with open(os.path.join(self._base_path, filename), 'r') as f:
261       return f.read()
262
263   def testGetLink(self):
264     resolver = ReferenceResolver(_FakeAPIModels(_TEST_DATA),
265                                  TestObjectStore('test'))
266     self.assertEqual({
267       'href': 'foo',
268       'text': 'foo',
269       'name': 'foo'
270     }, resolver.GetLink('foo', namespace='baz'))
271     self.assertEqual({
272       'href': 'foo#type-foo_t1',
273       'text': 'foo.foo_t1',
274       'name': 'foo_t1'
275     }, resolver.GetLink('foo.foo_t1', namespace='baz'))
276     self.assertEqual({
277       'href': 'baz#event-baz_e1',
278       'text': 'baz_e1',
279       'name': 'baz_e1'
280     }, resolver.GetLink('baz.baz_e1', namespace='baz'))
281     self.assertEqual({
282       'href': 'baz#event-baz_e1',
283       'text': 'baz_e1',
284       'name': 'baz_e1'
285     }, resolver.GetLink('baz_e1', namespace='baz'))
286     self.assertEqual({
287       'href': 'foo#method-foo_f1',
288       'text': 'foo.foo_f1',
289       'name': 'foo_f1'
290     }, resolver.GetLink('foo.foo_f1', namespace='baz'))
291     self.assertEqual({
292       'href': 'foo#property-foo_p3',
293       'text': 'foo.foo_p3',
294       'name': 'foo_p3'
295     }, resolver.GetLink('foo.foo_p3', namespace='baz'))
296     self.assertEqual({
297       'href': 'bar.bon#type-bar_bon_t3',
298       'text': 'bar.bon.bar_bon_t3',
299       'name': 'bar_bon_t3'
300     }, resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz'))
301     self.assertEqual({
302       'href': 'bar.bon#property-bar_bon_p3',
303       'text': 'bar_bon_p3',
304       'name': 'bar_bon_p3'
305     }, resolver.GetLink('bar_bon_p3', namespace='bar.bon'))
306     self.assertEqual({
307       'href': 'bar.bon#property-bar_bon_p3',
308       'text': 'bar_bon_p3',
309       'name': 'bar_bon_p3'
310     }, resolver.GetLink('bar.bon.bar_bon_p3', namespace='bar.bon'))
311     self.assertEqual({
312       'href': 'bar#event-bar_e2',
313       'text': 'bar_e2',
314       'name': 'bar_e2'
315     }, resolver.GetLink('bar.bar_e2', namespace='bar'))
316     self.assertEqual({
317       'href': 'bar#type-bon',
318       'text': 'bon',
319       'name': 'bon'
320     }, resolver.GetLink('bar.bon', namespace='bar'))
321     self.assertEqual({
322       'href': 'foo#event-foo_t3-foo_t3_e1',
323       'text': 'foo_t3.foo_t3_e1',
324       'name': 'foo_t3_e1'
325     }, resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo'))
326     self.assertEqual({
327       'href': 'foo#event-foo_t3-foo_t3_e1',
328       'text': 'foo_t3.foo_t3_e1',
329       'name': 'foo_t3_e1'
330     }, resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo'))
331     self.assertEqual({
332       'href': 'foo#event-foo_t3-foo_t3_e1',
333       'text': 'foo_t3.foo_t3_e1',
334       'name': 'foo_t3_e1'
335     }, resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo'))
336     self.assertEqual({
337       'href': 'bar#property-bar_t1-bar_t1_p1',
338       'text': 'bar.bar_t1.bar_t1_p1',
339       'name': 'bar_t1_p1'
340     }, resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo'))
341     self.assertEqual({
342       'href': 'bar#property-bar_t1-bar_t1_p1',
343       'text': 'bar_t1.bar_t1_p1',
344       'name': 'bar_t1_p1'
345     }, resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar'))
346     self.assertEqual(
347         None,
348         resolver.GetLink('bar.bar_p3.bar_t2_p1', namespace='bar'))
349     self.assertEqual(
350         None,
351         resolver.GetLink('bar.bon.bar_e3', namespace='bar'))
352     self.assertEqual(
353         None,
354         resolver.GetLink('bar_p3', namespace='baz.bon'))
355     self.assertEqual(
356         None,
357         resolver.GetLink('falafel.faf', namespace='a'))
358     self.assertEqual(
359         None,
360         resolver.GetLink('bar_p3', namespace='foo'))
361
362 if __name__ == '__main__':
363   unittest.main()