Upstream version 5.34.104.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 json
7 import os
8 import sys
9 import unittest
10
11 from file_system import FileNotFoundError
12 from reference_resolver import ReferenceResolver
13 from test_object_store import TestObjectStore
14 from test_util import Server2Path
15
16
17 class FakeAPIDataSource(object):
18   def __init__(self, json_data):
19     self._json = json_data
20
21   def get(self, key, disable_refs=False):
22     assert disable_refs, 'ReferenceResolve should be disabling refs'
23     if key not in self._json:
24       raise FileNotFoundError(key)
25     return self._json[key]
26
27
28 class FakeAPIModels(object):
29   def __init__(self, names):
30     self._names = names
31
32   def GetNames(self):
33     return self._names
34
35
36 class APIDataSourceTest(unittest.TestCase):
37   def setUp(self):
38     self._base_path = Server2Path('test_data', 'test_json')
39
40   def _ReadLocalFile(self, filename):
41     with open(os.path.join(self._base_path, filename), 'r') as f:
42       return f.read()
43
44   def testGetLink(self):
45     test_data = json.loads(self._ReadLocalFile('fake_data_source.json'))
46     resolver = ReferenceResolver(FakeAPIDataSource(test_data),
47                                  FakeAPIModels(test_data.keys()),
48                                  TestObjectStore('test'))
49     self.assertEqual({
50       'href': 'foo.html',
51       'text': 'foo',
52       'name': 'foo'
53     }, resolver.GetLink('foo', namespace='baz'))
54     self.assertEqual({
55       'href': 'foo.html#type-foo_t1',
56       'text': 'foo.foo_t1',
57       'name': 'foo_t1'
58     }, resolver.GetLink('foo.foo_t1', namespace='baz'))
59     self.assertEqual({
60       'href': 'baz.html#event-baz_e1',
61       'text': 'baz_e1',
62       'name': 'baz_e1'
63     }, resolver.GetLink('baz.baz_e1', namespace='baz'))
64     self.assertEqual({
65       'href': 'baz.html#event-baz_e1',
66       'text': 'baz_e1',
67       'name': 'baz_e1'
68     }, resolver.GetLink('baz_e1', namespace='baz'))
69     self.assertEqual({
70       'href': 'foo.html#method-foo_f1',
71       'text': 'foo.foo_f1',
72       'name': 'foo_f1'
73     }, resolver.GetLink('foo.foo_f1', namespace='baz'))
74     self.assertEqual({
75       'href': 'foo.html#property-foo_p3',
76       'text': 'foo.foo_p3',
77       'name': 'foo_p3'
78     }, resolver.GetLink('foo.foo_p3', namespace='baz'))
79     self.assertEqual({
80       'href': 'bar.bon.html#type-bar_bon_t3',
81       'text': 'bar.bon.bar_bon_t3',
82       'name': 'bar_bon_t3'
83     }, resolver.GetLink('bar.bon.bar_bon_t3', namespace='baz'))
84     self.assertEqual({
85       'href': 'bar.bon.html#property-bar_bon_p3',
86       'text': 'bar_bon_p3',
87       'name': 'bar_bon_p3'
88     }, resolver.GetLink('bar_bon_p3', namespace='bar.bon'))
89     self.assertEqual({
90       'href': 'bar.bon.html#property-bar_bon_p3',
91       'text': 'bar_bon_p3',
92       'name': 'bar_bon_p3'
93     }, resolver.GetLink('bar.bon.bar_bon_p3', namespace='bar.bon'))
94     self.assertEqual({
95       'href': 'bar.html#event-bar_e2',
96       'text': 'bar_e2',
97       'name': 'bar_e2'
98     }, resolver.GetLink('bar.bar_e2', namespace='bar'))
99     self.assertEqual({
100       'href': 'bar.html#type-bon',
101       'text': 'bon',
102       'name': 'bon'
103     }, resolver.GetLink('bar.bon', namespace='bar'))
104     self.assertEqual({
105       'href': 'foo.html#event-foo_t3-foo_t3_e1',
106       'text': 'foo_t3.foo_t3_e1',
107       'name': 'foo_t3_e1'
108     }, resolver.GetLink('foo_t3.foo_t3_e1', namespace='foo'))
109     self.assertEqual({
110       'href': 'foo.html#event-foo_t3-foo_t3_e1',
111       'text': 'foo_t3.foo_t3_e1',
112       'name': 'foo_t3_e1'
113     }, resolver.GetLink('foo.foo_t3.foo_t3_e1', namespace='foo'))
114     self.assertEqual({
115       'href': 'foo.html#event-foo_t3-foo_t3_e1',
116       'text': 'foo_t3.foo_t3_e1',
117       'name': 'foo_t3_e1'
118     }, resolver.GetLink('foo.foo_p1.foo_t3_e1', namespace='foo'))
119     self.assertEqual({
120       'href': 'bar.html#property-bar_t1-bar_t1_p1',
121       'text': 'bar.bar_t1.bar_t1_p1',
122       'name': 'bar_t1_p1'
123     }, resolver.GetLink('bar.bar_p3.bar_t1_p1', namespace='foo'))
124     self.assertEqual({
125       'href': 'bar.html#property-bar_t1-bar_t1_p1',
126       'text': 'bar_t1.bar_t1_p1',
127       'name': 'bar_t1_p1'
128     }, resolver.GetLink('bar_p3.bar_t1_p1', namespace='bar'))
129     self.assertEqual(
130         None,
131         resolver.GetLink('bar.bar_p3.bar_t2_p1', namespace='bar'))
132     self.assertEqual(
133         None,
134         resolver.GetLink('bar.bon.bar_e3', namespace='bar'))
135     self.assertEqual(
136         None,
137         resolver.GetLink('bar_p3', namespace='baz.bon'))
138     self.assertEqual(
139         None,
140         resolver.GetLink('falafel.faf', namespace='a'))
141     self.assertEqual(
142         None,
143         resolver.GetLink('bar_p3', namespace='foo'))
144     self.assertEqual(
145         'Hello <a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>, '
146             '<a href="bar.bon.html#property-bar_bon_p3">Bon Bon</a>, '
147             '<a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>',
148         resolver.ResolveAllLinks(
149             'Hello $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
150             namespace='bar.bon'))
151     self.assertEqual(
152         'I like <a href="bar.html#property-bar_t1-bar_t1_p1">food</a>.',
153         resolver.ResolveAllLinks('I like $ref:[bar.bar_p3.bar_t1_p1 food].',
154                                  namespace='foo'))
155     self.assertEqual(
156         'Ref <a href="foo.html">It\'s foo!</a>',
157         resolver.ResolveAllLinks('Ref $ref:[foo It\'s foo!]', namespace='bar'))
158     self.assertEqual(
159         'Ref <a href="bar.html#type-bon">Bon</a>',
160         resolver.ResolveAllLinks('Ref $ref:[bar.bon Bon]', namespace='bar'))
161
162     # Different kinds of whitespace can be significant inside <pre> tags.
163     self.assertEqual(
164         '<pre><a href="bar.html#type-bon">bar.bon</a>({\nkey: value})',
165         resolver.ResolveAllLinks('<pre>$ref:[bar.bon]({\nkey: value})',
166                                  namespace='baz'))
167
168     # Allow bare "$ref:foo.bar." at the end of a string.
169     self.assertEqual(
170         '<a href="bar.html#type-bon">bar.bon</a>.',
171         resolver.ResolveAllLinks('$ref:bar.bon.',
172                                  namespace='baz'))
173
174     # If a request is provided it should construct an appropriate relative link.
175     self.assertEqual(
176         'Hi <a href="../../bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>, '
177             '<a href="../../bar.bon.html#property-bar_bon_p3">Bon Bon</a>, '
178             '<a href="../../bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>',
179         resolver.ResolveAllLinks(
180             'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
181             relative_to='big/long/path/bar.html',
182             namespace='bar.bon'))
183     self.assertEqual(
184         'Hi <a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>, '
185             '<a href="bar.bon.html#property-bar_bon_p3">Bon Bon</a>, '
186             '<a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>',
187         resolver.ResolveAllLinks(
188             'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
189             relative_to='',
190             namespace='bar.bon'))
191     self.assertEqual(
192         'Hi <a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>, '
193             '<a href="bar.bon.html#property-bar_bon_p3">Bon Bon</a>, '
194             '<a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>',
195         resolver.ResolveAllLinks(
196             'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
197             relative_to='bar.html',
198             namespace='bar.bon'))
199     self.assertEqual(
200         'Hi <a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>, '
201             '<a href="bar.bon.html#property-bar_bon_p3">Bon Bon</a>, '
202             '<a href="bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>',
203         resolver.ResolveAllLinks(
204             'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
205             relative_to='foo/bar.html',
206             namespace='bar.bon'))
207     self.assertEqual(
208         'Hi <a href="../bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>, '
209             '<a href="../bar.bon.html#property-bar_bon_p3">Bon Bon</a>, '
210             '<a href="../bar.bon.html#property-bar_bon_p3">bar_bon_p3</a>',
211         resolver.ResolveAllLinks(
212             'Hi $ref:bar_bon_p3, $ref:[bar_bon_p3 Bon Bon], $ref:bar_bon_p3',
213             relative_to='foo/baz/bar.html',
214             namespace='bar.bon'))
215
216 if __name__ == '__main__':
217   unittest.main()