OLD | NEW |
| (Empty) |
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 import unittest | |
7 from copy import deepcopy | |
8 | |
9 from schema_util import RemoveNoDocs, DetectInlineableTypes, InlineDocs | |
10 | |
11 | |
12 class SchemaUtilTest(unittest.TestCase): | |
13 | |
14 def testRemoveNoDocs(self): | |
15 expected_nodoc = [ | |
16 { | |
17 'name': 'B', | |
18 'list': [ | |
19 { | |
20 'name': 'B2' | |
21 } | |
22 ] | |
23 }, | |
24 { | |
25 'name': 'D', | |
26 'nodoc': False | |
27 }, | |
28 { | |
29 'name': 'E', | |
30 'items1': [ | |
31 { | |
32 'name': 'E1', | |
33 'items': [ | |
34 { | |
35 'name': 'E1.3' | |
36 } | |
37 ] | |
38 }, | |
39 { | |
40 'name': 'E2' | |
41 } | |
42 ] | |
43 } | |
44 ] | |
45 | |
46 nodoc_data = [ | |
47 { | |
48 'name': 'A', | |
49 'nodoc': True | |
50 }, | |
51 { | |
52 'name': 'B', | |
53 'list': [ | |
54 { | |
55 'name': 'B1', | |
56 'nodoc': True | |
57 }, | |
58 { | |
59 'name': 'B2' | |
60 }, | |
61 { | |
62 'name': 'B3', | |
63 'nodoc': True | |
64 } | |
65 ] | |
66 }, | |
67 { | |
68 'name': 'C', | |
69 'nodoc': True | |
70 }, | |
71 { | |
72 'name': 'D', | |
73 'nodoc': False | |
74 }, | |
75 { | |
76 'name': 'E', | |
77 'dict': { | |
78 'name': 'Ed', | |
79 'nodoc': True | |
80 }, | |
81 'items1': [ | |
82 { | |
83 'name': 'E1', | |
84 'items': [ | |
85 { | |
86 'name': 'E1.1', | |
87 'nodoc': True | |
88 }, | |
89 { | |
90 'name': 'E1.2', | |
91 'nodoc': True | |
92 }, | |
93 { | |
94 'name': 'E1.3' | |
95 } | |
96 ] | |
97 }, | |
98 { | |
99 'name': 'E2' | |
100 }, | |
101 { | |
102 'name': 'E3', | |
103 'nodoc': True | |
104 } | |
105 ] | |
106 } | |
107 ] | |
108 | |
109 RemoveNoDocs(nodoc_data) | |
110 self.assertEquals(expected_nodoc, nodoc_data) | |
111 | |
112 def testInlineDocs(self): | |
113 schema = { | |
114 'namespace': 'storage', | |
115 'properties': { | |
116 'key2': { | |
117 'description': 'second key', | |
118 '$ref': 'Key' | |
119 }, | |
120 'key1': { | |
121 'description': 'first key', | |
122 '$ref': 'Key' | |
123 } | |
124 }, | |
125 'types': [ | |
126 { | |
127 'inline_doc': True, | |
128 'type': 'string', | |
129 'id': 'Key', # Should be inlined into both properties and be removed | |
130 # from types. | |
131 'description': 'This is a key.', # This description should disappear. | |
132 'marker': True # This should appear three times in the output. | |
133 }, | |
134 { | |
135 'items': { | |
136 '$ref': 'Key' | |
137 }, | |
138 'type': 'array', | |
139 'id': 'KeyList', | |
140 'description': 'A list of keys' | |
141 } | |
142 ] | |
143 } | |
144 | |
145 expected_schema = { | |
146 'namespace': 'storage', | |
147 'properties': { | |
148 'key2': { | |
149 'marker': True, | |
150 'type': 'string', | |
151 'description': 'second key' | |
152 }, | |
153 'key1': { | |
154 'marker': True, | |
155 'type': 'string', | |
156 'description': 'first key' | |
157 } | |
158 }, | |
159 'types': [ | |
160 { | |
161 'items': { | |
162 'marker': True, | |
163 'type': 'string' | |
164 }, | |
165 'type': 'array', | |
166 'id': 'KeyList', | |
167 'description': 'A list of keys' | |
168 } | |
169 ] | |
170 } | |
171 | |
172 inlined_schema = deepcopy(schema) | |
173 InlineDocs(inlined_schema, False) | |
174 self.assertEqual(expected_schema, inlined_schema) | |
175 | |
176 def testDetectInline(self): | |
177 schema = { | |
178 'types': [ | |
179 { | |
180 'id': 'Key', | |
181 'items': { | |
182 '$ref': 'Value' | |
183 } | |
184 }, | |
185 { | |
186 'id': 'Value', | |
187 'marker': True | |
188 } | |
189 ] | |
190 } | |
191 | |
192 expected_schema = { | |
193 'types': [ | |
194 { | |
195 'id': 'Key', | |
196 'items': { | |
197 'marker': True, | |
198 } | |
199 } | |
200 ] | |
201 } | |
202 | |
203 DetectInlineableTypes(schema) | |
204 InlineDocs(schema, False) | |
205 self.assertEqual(expected_schema, schema) | |
206 | |
207 | |
208 if __name__ == '__main__': | |
209 unittest.main() | |
OLD | NEW |