- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / manifest_data_source_test.py
1 #!/usr/bin/env python
2 # Copyright 2013 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 from copy import deepcopy
7 import json
8 import unittest
9
10 from compiled_file_system import CompiledFileSystem
11 from features_bundle import FeaturesBundle
12 import manifest_data_source
13 from object_store_creator import ObjectStoreCreator
14
15
16 convert_and_annotate_docs = {
17   'name': {
18     'example': "My {{title}}",
19     'name': 'name',
20     'level': 'required'
21   },
22   'doc2': {
23     'level': 'required',
24     'name': 'doc2'
25   },
26   'doc1': {
27     'level': 'required',
28     'name': 'doc1',
29     'children': {
30       'sub1': {
31         'annotations': ['not so important'],
32         'level': 'optional',
33         'name': 'sub1'
34       },
35       'sub2': {
36         'level': 'required',
37         'name': 'sub2'
38       }
39     }
40   },
41   'doc3': {
42     'level':  'only_one',
43     'name': 'doc3'
44   },
45   'doc4': {
46     'level': 'recommended',
47     'name': 'doc4'
48   },
49   'doc5': {
50     'level': 'only_one',
51     'name': 'doc5'
52   },
53   'doc6': {
54     'level': 'optional',
55     'name': 'doc6'
56   }
57 }
58
59
60 class ManifestDataSourceTest(unittest.TestCase):
61   def testListifyAndSortDocs(self):
62     expected_docs = [
63       {
64         'level': 'required',
65         'name': 'doc1',
66         'children': [
67           {
68             'level': 'required',
69             'name': 'sub2'
70           },
71           {
72             'annotations': ['not so important'],
73             'level': 'optional',
74             'name': 'sub1'
75           }
76         ]
77       },
78       {
79         'level': 'required',
80         'name': 'doc2'
81       },
82       {
83         'level': 'required',
84         'example': '"My App"',
85         'has_example': True,
86         'name': 'name'
87       },
88       {
89         'level': 'recommended',
90         'name': 'doc4'
91       },
92       {
93         'level': 'only_one',
94         'name': 'doc3'
95       },
96       {
97         'level': 'only_one',
98         'name': 'doc5'
99       },
100       {
101         'level': 'optional',
102         'name': 'doc6'
103       }
104     ]
105
106     self.assertEqual(expected_docs, manifest_data_source._ListifyAndSortDocs(
107         deepcopy(convert_and_annotate_docs), 'App'))
108
109   def testAnnotate(self):
110     expected_docs = [
111       {
112         'level': 'required',
113         'name': 'doc1',
114         'children': [
115           {
116             'level': 'required',
117             'name': 'sub2'
118           },
119           {
120             'annotations': ['Optional', 'not so important'],
121             'level': 'optional',
122             'name': 'sub1',
123             'is_last': True
124           }
125         ]
126       },
127       {
128         'level': 'required',
129         'name': 'doc2'
130       },
131       {
132         'name': 'name',
133         'level': 'required',
134         'example': '"My App"',
135         'has_example': True
136       },
137       {
138         'annotations': ['Recommended'],
139         'level': 'recommended',
140         'name': 'doc4'
141       },
142       {
143         'annotations': ['Pick one (or none)'],
144         'level': 'only_one',
145         'name': 'doc3'
146       },
147       {
148         'level': 'only_one',
149         'name': 'doc5'
150       },
151       {
152         'annotations': ['Optional'],
153         'level': 'optional',
154         'name': 'doc6',
155         'is_last': True
156       }
157     ]
158
159     annotated = manifest_data_source._ListifyAndSortDocs(
160         deepcopy(convert_and_annotate_docs), 'App')
161     manifest_data_source._AddLevelAnnotations(annotated)
162     self.assertEqual(expected_docs, annotated)
163
164   def testExpandedExamples(self):
165     docs = {
166       'doc1': {
167         'name': 'doc1',
168         'example': {
169           'big': {
170             'nested': {
171               'json_example': ['with', 'more', 'json']
172             }
173           }
174         }
175       }
176     }
177
178     expected_docs = [
179       {
180         'name': 'doc1',
181         'children': [
182           {
183             'name': 'big',
184             'children': [
185               {
186                 'name': 'nested',
187                 'children': [
188                   {
189                     'name': 'json_example',
190                     'example': json.dumps(['with', 'more', 'json']),
191                     'has_example': True
192                   }
193                 ]
194               }
195             ]
196           }
197         ]
198       }
199     ]
200
201     self.assertEqual(
202         expected_docs, manifest_data_source._ListifyAndSortDocs(docs, 'apps'))
203
204   def testManifestDataSource(self):
205     manifest_features = {
206       'doc1': {
207         'name': 'doc1',
208         'platforms': ['apps', 'extensions'],
209         'example': {},
210         'level': 'required'
211       },
212       'doc1.sub1': {
213         'name': 'doc1.sub1',
214         'platforms': ['apps'],
215         'annotations': ['important!'],
216         'level': 'recommended'
217       },
218       'doc2': {
219         'name': 'doc2',
220         'platforms': ['extensions']
221       }
222     }
223
224     expected_app = [
225       {
226         'example': '{...}',
227         'has_example': True,
228         'level': 'required',
229         'name': 'doc1',
230         'platforms': ['apps', 'extensions'],
231         'children': [
232           {
233             'annotations': [
234               'Recommended',
235               'important!'
236             ],
237             'level': 'recommended',
238             'name': 'sub1',
239             'platforms': ['apps'],
240             'is_last': True
241           }
242         ],
243         'is_last': True
244       }
245     ]
246
247     class FakeFeaturesBundle(object):
248       def GetManifestFeatures(self):
249         return manifest_features
250
251     class FakeServerInstance(object):
252       def __init__(self):
253         self.features_bundle = FakeFeaturesBundle()
254         self.object_store_creator = ObjectStoreCreator.ForTest()
255
256     mds = manifest_data_source.ManifestDataSource(FakeServerInstance(), None)
257     self.assertEqual(expected_app, mds.get('apps'))
258
259 if __name__ == '__main__':
260   unittest.main()