Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: chrome/common/extensions/docs/server2/manifest_data_source_test.py

Issue 16410002: Docserver manifest follow up (rewrite) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gen-manifest-try-2
Patch Set: more idiomatic/less explicit copying Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 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 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import json 6 from copy import deepcopy
7 import unittest 7 import unittest
8 8
9 from compiled_file_system import CompiledFileSystem 9 import manifest_data_source
10 from manifest_data_source import ManifestDataSource 10
11 from object_store_creator import ObjectStoreCreator 11 convert_and_annotate_docs = {
12 from test_file_system import TestFileSystem 12 'name': {
13 13 'example': "My {{title}}",
14 file_system = TestFileSystem({ 14 'name': 'name',
15 "_manifest_features.json": json.dumps({ 15 'level': 'required'
16 'req0': { 16 },
17 'extension_types': ['platform_app', 'extension'] 17 'doc2': {
18 }, 18 'level': 'required',
19 'req1': { 19 'name': 'doc2'
20 'extension_types': 'all' 20 },
21 }, 21 'doc1': {
22 'opt0': { 22 'level': 'required',
23 'extension_types': ['extension'] 23 'name': 'doc1',
24 }, 24 'children': {
25 'opt1': { 25 'sub1': {
26 'extension_types': ['hosted_app'] 26 'annotations': ['not so important'],
27 }, 27 'level': 'optional',
28 'free0': { 28 'name': 'sub1'
29 'extension_types': ['platform_app'] 29 },
30 }, 30 'sub2': {
31 'free1': { 31 'level': 'required',
32 'extension_types': ['platform_app', 'hosted_app', 'extension'] 32 'name': 'sub2'
33 }, 33 }
34 'only0': {
35 'extension_types': 'all'
36 },
37 'only1': {
38 'extension_types': ['platform_app']
39 },
40 'rec0': {
41 'extension_types': ['extension']
42 },
43 'rec1': {
44 'extension_types': ['platform_app', 'extension']
45 } 34 }
46 }), 35 },
47 "manifest.json": json.dumps({ 36 'doc3': {
48 'required': [ 37 'level': 'only_one',
49 { 38 'name': 'doc3'
50 'name': 'req0', 39 },
51 'example': 'Extension' 40 'doc4': {
52 }, 41 'level': 'recommended',
53 {'name': 'req1'} 42 'name': 'doc4'
54 ], 43 },
55 'only_one': [ 44 'doc5': {
56 {'name': 'only0'}, 45 'level': 'only_one',
57 {'name': 'only1'} 46 'name': 'doc5'
58 ], 47 },
59 'recommended': [ 48 'doc6': {
60 {'name': 'rec0'}, 49 'level': 'optional',
61 {'name': 'rec1'} 50 'name': 'doc6'
62 ], 51 }
63 'optional': [ 52 }
64 {'name': 'opt0'}, 53
65 {'name': 'opt1'} 54 class ManifestDataSourceTest(unittest.TestCase):
55 def testListifyAndSortDocs(self):
56 expected_docs = [
57 {
58 'level': 'required',
59 'name': 'doc1',
60 'children': [
61 {
62 'level': 'required',
63 'name': 'sub2'
64 },
65 {
66 'annotations': ['not so important'],
67 'level': 'optional',
68 'name': 'sub1'
69 }
70 ]
71 },
72 {
73 'level': 'required',
74 'name': 'doc2'
75 },
76 {
77 'level': 'required',
78 'example': '"My App"',
79 'has_example': True,
80 'name': 'name'
81 },
82 {
83 'level': 'recommended',
84 'name': 'doc4'
85 },
86 {
87 'level': 'only_one',
88 'name': 'doc3'
89 },
90 {
91 'level': 'only_one',
92 'name': 'doc5'
93 },
94 {
95 'level': 'optional',
96 'name': 'doc6'
97 }
66 ] 98 ]
67 }) 99
68 }) 100 self.assertEqual(expected_docs, manifest_data_source._ListifyAndSortDocs(
69 101 deepcopy(convert_and_annotate_docs), 'App'))
70 class ManifestDataSourceTest(unittest.TestCase): 102
71 def testCreateManifestData(self): 103 def testAnnotate(self):
72 expected_extensions = { 104 expected_docs = [
73 'required': [ 105 {
74 { 106 'level': 'required',
75 'name': 'req0', 107 'name': 'doc1',
76 'example': 'Extension' 108 'children': [
77 }, 109 {
78 {'name': 'req1'} 110 'level': 'required',
79 ], 111 'name': 'sub2'
80 'recommended': [ 112 },
81 {'name': 'rec0'}, 113 {
82 {'name': 'rec1'} 114 'annotations': ['Optional', 'not so important'],
83 ], 115 'level': 'optional',
84 'only_one': [ 116 'name': 'sub1',
85 {'name': 'only0'} 117 'is_last': True
86 ], 118 }
87 'optional': [ 119 ]
88 {'name': 'free1'}, 120 },
89 { 121 {
90 'name': 'opt0', 122 'level': 'required',
91 'is_last': True 123 'name': 'doc2'
124 },
125 {
126 'name': 'name',
127 'level': 'required',
128 'example': '"My App"',
129 'has_example': True
130 },
131 {
132 'annotations': ['Recommended'],
133 'level': 'recommended',
134 'name': 'doc4'
135 },
136 {
137 'annotations': ['Pick one (or none)'],
138 'level': 'only_one',
139 'name': 'doc3'
140 },
141 {
142 'level': 'only_one',
143 'name': 'doc5'
144 },
145 {
146 'annotations': ['Optional'],
147 'level': 'optional',
148 'name': 'doc6',
149 'is_last': True
150 }
151 ]
152
153 annotated = manifest_data_source._ListifyAndSortDocs(
154 deepcopy(convert_and_annotate_docs), 'App')
155 manifest_data_source._AddLevelAnnotations(annotated)
156 self.assertEqual(expected_docs, annotated)
157
158 def testRestructureChildren(self):
159 docs = {
160 'doc1.sub2': {
161 'name': 'doc1.sub2'
162 },
163 'doc1': {
164 'name': 'doc1'
165 },
166 'doc2': {
167 'name': 'doc2'
168 },
169 'doc1.sub1.subsub1': {
170 'name': 'doc1.sub1.subsub1'
171 },
172 'doc1.sub1': {
173 'name': 'doc1.sub1'
174 }
175 }
176
177 expected_docs = {
178 'doc1': {
179 'name': 'doc1',
180 'children': {
181 'sub1': {
182 'name': 'sub1',
183 'children': {
184 'subsub1': {
185 'name' :'subsub1'
186 }
187 }
188 },
189 'sub2': {
190 'name': 'sub2'
191 }
92 } 192 }
93 ] 193 },
194 'doc2': {
195 'name': 'doc2'
196 }
94 } 197 }
95 198
96 expected_apps = { 199 self.assertEqual(
97 'required': [ 200 expected_docs, manifest_data_source._RestructureChildren(docs))
98 {
99 'name': 'req0',
100 'example': 'Application'
101 },
102 {'name': 'req1'}
103 ],
104 'recommended': [
105 {'name': 'rec1'}
106 ],
107 'only_one': [
108 {'name': 'only0'},
109 {'name': 'only1'}
110 ],
111 'optional': [
112 {'name': 'free0'},
113 {
114 'name': 'free1',
115 'is_last': True
116 }
117 ]
118 }
119
120 mds = ManifestDataSource(
121 CompiledFileSystem.Factory(file_system, ObjectStoreCreator.ForTest()),
122 file_system, 'manifest.json', '_manifest_features.json')
123
124 self.assertEqual(expected_extensions, mds.get('extensions'))
125 self.assertEqual(expected_apps, mds.get('apps'))
126 201
127 if __name__ == '__main__': 202 if __name__ == '__main__':
128 unittest.main() 203 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698