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

Side by Side Diff: tools/json_schema_compiler/code_test.py

Issue 9114036: Code generation for extensions api (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: added generated files, removed trailing whitespace Created 8 years, 11 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
(Empty)
1 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import unittest
6 import model
7 import code
8 import json
9
10 class TestTypeManager(unittest.TestCase):
11 def setUp(self):
12 self.model = model.ModelT()
13 self.permissions_json = json.loads(open('test/permissions.json').read())
14 self.model.add_namespace(self.permissions_json[0], 'extensions',
15 'path/to/permissions.json', '_api')
16 self.permissions = self.model.namespaces.get('permissions')
17 self.windows_json = json.loads(open('test/windows.json').read())
18 self.model.add_namespace(self.windows_json[0], 'extensions',
19 'path/to/window.json', '_api')
20 self.windows = self.model.namespaces.get('windows')
21 self.tabs_json = json.loads(open('test/tabs.json').read())
22 self.model.add_namespace(self.tabs_json[0], 'extensions',
23 'path/to/tabs.json', '_api')
24 self.tabs = self.model.namespaces.get('tabs')
25
26 def test_resolve_generated_includes(self):
27 type_manager = code.TypeManager(self.windows, self.model)
28 self.assertEquals(type_manager.resolve_generated_includes().code,
29 ['#include "path/to/tabs_api.h"'])
30 type_manager = code.TypeManager(self.permissions, self.model)
31 self.assertEquals(type_manager.resolve_generated_includes().code,
32 [])
33
34 def test_get_type_simple(self):
35 type_manager = code.TypeManager(self.tabs, self.model)
36 self.assertEquals(type_manager.get_type(
37 self.tabs.types['Tab'].properties['id']),
38 'int')
39 self.assertEquals(type_manager.get_type(
40 self.tabs.types['Tab'].properties['status']),
41 'std::string')
42 self.assertEquals(type_manager.get_type(
43 self.tabs.types['Tab'].properties['selected']),
44 'bool')
45
46 def test_get_type_array(self):
47 type_manager = code.TypeManager(self.windows, self.model)
48 self.assertEquals(type_manager.get_type(
49 self.windows.functions['getAll'].callback.param),
50 'std::vector<Window>')
51 type_manager = code.TypeManager(self.permissions, self.model)
52 self.assertEquals(type_manager.get_type(
53 self.permissions.types['Permissions'].properties['origins']),
54 'std::vector<std::string>')
55
56 def test_get_type_local_ref(self):
57 type_manager = code.TypeManager(self.tabs, self.model)
58 self.assertEquals(type_manager.get_type(
59 self.tabs.functions['get'].callback.param),
60 'Tab')
61
62 def test_get_type_included_ref(self):
63 type_manager = code.TypeManager(self.windows, self.model)
64 self.assertEquals(type_manager.get_type(
65 self.windows.types['Window'].properties['tabs']),
66 'std::vector<tabs_api::Tab>')
67
68 def test_get_type_notfound(self):
69 prop = self.windows.types['Window'].properties['tabs'].item_type
70 prop.json_type = 'Something'
71 type_manager = code.TypeManager(self.windows, self.model)
72 self.assertRaises(KeyError, type_manager.get_type, prop)
73
74 def test_get_type_notimplemented(self):
75 prop = self.windows.types['Window'].properties['tabs'].item_type
76 prop.type = 10
77 type_manager = code.TypeManager(self.windows, self.model)
78 self.assertRaises(NotImplementedError, type_manager.get_type, prop)
79
80 def test_get_generic_type(self):
81 type_manager = code.TypeManager(self.permissions, self.model)
82 self.assertEquals(type_manager.get_generic_type(
83 self.permissions.types['Permissions'].properties['origins']),
84 'std::vector<std::string> ')
85 self.assertEquals(type_manager.get_generic_type(
86 self.permissions.functions['contains'].callback.param),
87 'bool')
88
89 def test_parameter_declaration(self):
90 type_manager = code.TypeManager(self.tabs, self.model)
91 self.assertEquals(type_manager.parameter_declaration(
92 self.tabs.functions['query'].callback.param),
93 "std::vector<Tab> result")
94 modifiers = {model.PropertyType.REF: code.ParamFormat.POINTER,
95 model.PropertyType.OBJECT: code.ParamFormat.REFERENCE,
96 model.PropertyType.ARRAY: '%(name)s %(type)s'}
97 self.assertEquals(type_manager.parameter_declaration(
98 self.tabs.functions['update'].callback.param,
99 type_modifiers=modifiers),
100 "Tab* tab")
101 self.assertEquals(type_manager.parameter_declaration(
102 self.tabs.functions['update'].params[1],
103 type_modifiers=modifiers),
104 "UpdateProperties& updateProperties")
105 self.assertEquals(type_manager.parameter_declaration(
106 self.tabs.functions['query'].callback.param,
107 type_modifiers=modifiers),
108 "result std::vector<Tab>")
109
110 def test_comment(self):
111 long_comment = ('This comment is eighty nine characters in longness, '
112 'that is, to use another word, length')
113 c = code.Code()
114 c.comment(long_comment)
115 self.assertEquals(c.to_string(),
116 '// This comment is eighty nine characters in longness, that is, to use another\n'
117 '// word, length')
118 c = code.Code()
119 c.sblock('sblock')
120 c.comment(long_comment)
121 c.eblock('eblock')
122 c.comment(long_comment)
123 self.assertEquals(c.to_string(),
124 'sblock\n'
125 ' // This comment is eighty nine characters in longness, that is, to us e\n'
126 ' // another word, length\n'
127 'eblock\n'
128 '// This comment is eighty nine characters in longness, that is, to use another\n'
129 '// word, length')
130 long_word = 'x' * 100
131 c = code.Code()
132 c.comment(long_word)
133 self.assertEquals(c.to_string(),
134 '// ' + 'x' * 77 + '\n'
135 '// ' + 'x' * 23)
136
137 class TestCppName(unittest.TestCase):
138 def test_cpp_name(self):
139 self.assertEquals(code.cpp_name('permissions'), 'Permissions')
140 self.assertEquals(code.cpp_name('updateAllTheThings'), 'UpdateAllTheThings')
141 self.assertEquals(code.cpp_name('aa.bb.cc'), 'Aa_Bb_Cc')
142
143 class TestCode(unittest.TestCase):
144 def test_append(self):
145 c = code.Code()
146 c.append('line')
147 self.assertEquals(c.to_string(), 'line')
148
149 def test_block(self):
150 c = code.Code()
151 c.append('line')
152 c.sblock('sblock')
153 c.append('inner')
154 c.append('moreinner')
155 c.sblock('moresblock')
156 c.append('inner')
157 c.eblock('out')
158 c.append('inner')
159 c.eblock('out')
160 self.assertEquals(c.to_string(),
161 'line\n'
162 'sblock\n'
163 ' inner\n'
164 ' moreinner\n'
165 ' moresblock\n'
166 ' inner\n'
167 ' out\n'
168 ' inner\n'
169 'out')
170
171 def test_add(self):
172 b = code.Code()
173 b.sblock('2')
174 b.append('2')
175 b.eblock('2')
176 c = code.Code()
177 c.sblock('1')
178 c.add(b)
179 c.append('1')
180 c.eblock('1')
181 self.assertEquals(c.to_string(),
182 '1\n'
183 ' 2\n'
184 ' 2\n'
185 ' 2\n'
186 ' 1\n'
187 '1')
188 d = code.Code()
189 a = code.Code()
190 a.add(d)
191 self.assertEquals(a.to_string(), '')
192 a.add(c)
193 self.assertEquals(a.to_string(),
194 '1\n'
195 ' 2\n'
196 ' 2\n'
197 ' 2\n'
198 ' 1\n'
199 '1')
200
201 def test_add_errors(self):
202 c = code.Code()
203 d = code.Code()
204 d.append('%s')
205 self.assertRaises(TypeError, c.add, d)
206 d = code.Code()
207 d.append('%(classname)s')
208 self.assertRaises(TypeError, c.add, d)
209 d = 'line of code'
210 self.assertRaises(TypeError, c.add, d)
211
212 def test_substitute(self):
213 c = code.Code()
214 c.append('%(var1)s %(var2)s %(var1)s')
215 c.substitute({'var1': 'one', 'var2': 'two'})
216 self.assertEquals(c.to_string(), 'one two one')
217 c.append('%(var1)s %(var2)s %(var3)s')
218 c.append('%(var1)s %(var2)s %(var3)s')
219 c.substitute({'var1': 'one', 'var2': 'two', 'var3': 'three'})
220 self.assertEquals(c.to_string(),
221 'one two one\n'
222 'one two three\n'
223 'one two three')
224
225 def test_substitute_errors(self):
226 # No unnamed placeholders allowed when substitute is run
227 c = code.Code()
228 c.append('%s %s')
229 self.assertRaises(TypeError, c.substitute, ('var1', 'one'))
230 c = code.Code()
231 c.append('%s %(var1)s')
232 self.assertRaises(TypeError, c.substitute, {'var1': 'one'})
233 c = code.Code()
234 c.append('%s %(var1)s')
235 self.assertRaises(TypeError, c.substitute, {'var1': 'one'})
236 c = code.Code()
237 c.append('%(var1)s')
238 self.assertRaises(KeyError, c.substitute, {'clearlynotvar1': 'one'})
239
240 if __name__ == '__main__':
241 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698