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