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

Side by Side Diff: mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittests.py

Issue 1417473002: Improves the representation of values in Mojom. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Remove some TODOs. Created 5 years, 2 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
« no previous file with comments | « mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 # 4 #
5 # The first argument of this script should be the location of both 5 # The first argument of this script should be the location of both
6 # the generated mojom_files and mojom_types modules and their dependencies. 6 # the generated mojom_files and mojom_types modules and their dependencies.
7 7
8 def _FixPath(): 8 def _FixPath():
9 import sys 9 import sys
10 # Importing mojom_files_mojom, mojom_types_mojom and mojom_translator 10 # Importing mojom_files_mojom, mojom_types_mojom and mojom_translator
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 short_name='AnEnum', 97 short_name='AnEnum',
98 source_file_info=mojom_types_mojom.SourceFileInfo( 98 source_file_info=mojom_types_mojom.SourceFileInfo(
99 file_name=file_name))) 99 file_name=file_name)))
100 graph.resolved_types['enum_key'] = mojom_types_mojom.UserDefinedType( 100 graph.resolved_types['enum_key'] = mojom_types_mojom.UserDefinedType(
101 enum_type=mojom_enum) 101 enum_type=mojom_enum)
102 102
103 mojom_const = mojom_types_mojom.DeclaredConstant( 103 mojom_const = mojom_types_mojom.DeclaredConstant(
104 decl_data=mojom_types_mojom.DeclarationData(short_name='AConst'), 104 decl_data=mojom_types_mojom.DeclarationData(short_name='AConst'),
105 type=mojom_types_mojom.Type( 105 type=mojom_types_mojom.Type(
106 simple_type=mojom_types_mojom.SimpleType.INT64), 106 simple_type=mojom_types_mojom.SimpleType.INT64),
107 value=mojom_types_mojom.ConstantOccurrence( 107 value=mojom_types_mojom.Value(
108 value=mojom_types_mojom.ConstantValue( 108 literal_value=mojom_types_mojom.LiteralValue(
109 int64_value=30))) 109 int64_value=30)))
110 graph.resolved_constants = {'const_key': mojom_const} 110 user_defined_value = mojom_types_mojom.UserDefinedValue()
111 user_defined_value.declared_constant = mojom_const
112 graph.resolved_values = {'value_key': user_defined_value}
111 113
112 mojom_file.declared_mojom_objects = mojom_files_mojom.KeysByType( 114 mojom_file.declared_mojom_objects = mojom_files_mojom.KeysByType(
113 interfaces=['interface_key'], 115 interfaces=['interface_key'],
114 structs=['struct_key'], 116 structs=['struct_key'],
115 unions=['union_key'], 117 unions=['union_key'],
116 top_level_enums=['enum_key'], 118 top_level_enums=['enum_key'],
117 top_level_constants=['const_key'] 119 top_level_constants=['value_key']
118 ) 120 )
119 121
120 mod = mojom_translator.FileTranslator(graph, file_name).Translate() 122 mod = mojom_translator.FileTranslator(graph, file_name).Translate()
121 123
122 self.assertEquals('f.mojom', mod.name) 124 self.assertEquals('f.mojom', mod.name)
123 self.assertEquals(mojom_file.file_name, mod.path) 125 self.assertEquals(mojom_file.file_name, mod.path)
124 self.assertEquals(mojom_file.module_namespace, mod.namespace) 126 self.assertEquals(mojom_file.module_namespace, mod.namespace)
125 127
126 self.assertEquals('a.mojom', mod.imports[0]['module_name']) 128 self.assertEquals('a.mojom', mod.imports[0]['module_name'])
127 self.assertEquals(imported_file.module_namespace, 129 self.assertEquals(imported_file.module_namespace,
(...skipping 24 matching lines...) Expand all
152 decl_data=mojom_types_mojom.DeclarationData( 154 decl_data=mojom_types_mojom.DeclarationData(
153 short_name='field01', 155 short_name='field01',
154 declared_ordinal=5), 156 declared_ordinal=5),
155 type=mojom_types_mojom.Type( 157 type=mojom_types_mojom.Type(
156 simple_type=mojom_types_mojom.SimpleType.BOOL)), 158 simple_type=mojom_types_mojom.SimpleType.BOOL)),
157 mojom_types_mojom.StructField( 159 mojom_types_mojom.StructField(
158 decl_data=mojom_types_mojom.DeclarationData( 160 decl_data=mojom_types_mojom.DeclarationData(
159 short_name='field02'), 161 short_name='field02'),
160 type=mojom_types_mojom.Type( 162 type=mojom_types_mojom.Type(
161 simple_type=mojom_types_mojom.SimpleType.DOUBLE), 163 simple_type=mojom_types_mojom.SimpleType.DOUBLE),
162 default_value=mojom_types_mojom.ConstantOccurrence( 164 default_value=mojom_types_mojom.DefaultFieldValue(
163 value=mojom_types_mojom.ConstantValue(double_value=15))), 165 value=mojom_types_mojom.Value(
166 literal_value=mojom_types_mojom.LiteralValue(double_value=15)))),
164 ] 167 ]
165 mojom_struct.decl_data.source_file_info = mojom_types_mojom.SourceFileInfo( 168 mojom_struct.decl_data.source_file_info = mojom_types_mojom.SourceFileInfo(
166 file_name=mojom_file.file_name) 169 file_name=mojom_file.file_name)
167 170
168 struct = module.Struct() 171 struct = module.Struct()
169 translator = mojom_translator.FileTranslator(graph, file_name) 172 translator = mojom_translator.FileTranslator(graph, file_name)
170 translator.StructFromMojom( 173 translator.StructFromMojom(
171 struct, mojom_types_mojom.UserDefinedType(struct_type=mojom_struct)) 174 struct, mojom_types_mojom.UserDefinedType(struct_type=mojom_struct))
172 175
173 self.assertEquals('FirstStruct', struct.name) 176 self.assertEquals('FirstStruct', struct.name)
(...skipping 11 matching lines...) Expand all
185 self.assertEquals(15, struct.fields[1].default) 188 self.assertEquals(15, struct.fields[1].default)
186 189
187 def test_constant(self): 190 def test_constant(self):
188 graph = mojom_files_mojom.MojomFileGraph() 191 graph = mojom_files_mojom.MojomFileGraph()
189 192
190 mojom_const = mojom_types_mojom.DeclaredConstant() 193 mojom_const = mojom_types_mojom.DeclaredConstant()
191 mojom_const.decl_data = mojom_types_mojom.DeclarationData( 194 mojom_const.decl_data = mojom_types_mojom.DeclarationData(
192 short_name='foo') 195 short_name='foo')
193 mojom_const.type = mojom_types_mojom.Type( 196 mojom_const.type = mojom_types_mojom.Type(
194 simple_type=mojom_types_mojom.SimpleType.INT64) 197 simple_type=mojom_types_mojom.SimpleType.INT64)
195 mojom_const.value = mojom_types_mojom.ConstantOccurrence() 198 mojom_const.value = mojom_types_mojom.Value()
196 mojom_const.value.value = mojom_types_mojom.ConstantValue( 199 mojom_const.value.literal_value = mojom_types_mojom.LiteralValue(
197 int64_value=20) 200 int64_value=20)
198 201
199 struct = module.Struct() 202 struct = module.Struct()
200 const = mojom_translator.FileTranslator(graph, None).ConstFromMojom( 203 const = mojom_translator.FileTranslator(graph, None).ConstFromMojom(
201 mojom_const, struct) 204 mojom_const, struct)
202 205
203 self.assertEquals(mojom_const.decl_data.short_name, const.name) 206 self.assertEquals(mojom_const.decl_data.short_name, const.name)
204 self.assertEquals(module.INT64, const.kind) 207 self.assertEquals(module.INT64, const.kind)
205 self.assertEquals(20, const.value) 208 self.assertEquals(20, const.value)
206 self.assertEquals(struct, const.parent_kind) 209 self.assertEquals(struct, const.parent_kind)
207 210
208 def test_enum(self): 211 def test_enum(self):
209 file_name = 'a.mojom' 212 file_name = 'a.mojom'
210 mojom_enum = mojom_types_mojom.MojomEnum() 213 mojom_enum = mojom_types_mojom.MojomEnum()
211 mojom_enum.decl_data = mojom_types_mojom.DeclarationData( 214 mojom_enum.decl_data = mojom_types_mojom.DeclarationData(
212 short_name='AnEnum', 215 short_name='AnEnum',
213 source_file_info=mojom_types_mojom.SourceFileInfo(file_name=file_name)) 216 source_file_info=mojom_types_mojom.SourceFileInfo(file_name=file_name))
214 value1 = mojom_types_mojom.EnumValue( 217 value1 = mojom_types_mojom.EnumValue(
215 decl_data=mojom_types_mojom.DeclarationData(short_name='val1'), 218 decl_data=mojom_types_mojom.DeclarationData(short_name='val1'),
216 value=mojom_types_mojom.ConstantOccurrence( 219 enum_type_key='AnEnum',
217 value=mojom_types_mojom.ConstantValue(int32_value=20))) 220 int_value=20)
218 value2 = mojom_types_mojom.EnumValue( 221 value2 = mojom_types_mojom.EnumValue(
219 decl_data=mojom_types_mojom.DeclarationData(short_name='val2'), 222 decl_data=mojom_types_mojom.DeclarationData(short_name='val2'),
220 value=mojom_types_mojom.ConstantOccurrence( 223 enum_type_key='AnEnum',
221 value=mojom_types_mojom.ConstantValue(int32_value=70))) 224 int_value=70)
222 mojom_enum.values = [value1, value2] 225 mojom_enum.values = [value1, value2]
223 226
224 227
225 graph = mojom_files_mojom.MojomFileGraph() 228 graph = mojom_files_mojom.MojomFileGraph()
226 enum = module.Enum() 229 enum = module.Enum()
227 translator = mojom_translator.FileTranslator(graph, file_name) 230 translator = mojom_translator.FileTranslator(graph, file_name)
228 translator.EnumFromMojom( 231 translator.EnumFromMojom(
229 enum, mojom_types_mojom.UserDefinedType(enum_type=mojom_enum), None) 232 enum, mojom_types_mojom.UserDefinedType(enum_type=mojom_enum), None)
230 233
231 self.assertEquals(translator._module, enum.module) 234 self.assertEquals(translator._module, enum.module)
232 self.assertEquals(mojom_enum.decl_data.short_name, enum.name) 235 self.assertEquals(mojom_enum.decl_data.short_name, enum.name)
233 self.assertEquals(len(mojom_enum.values), len(enum.fields)) 236 self.assertEquals(len(mojom_enum.values), len(enum.fields))
234 237
235 self.assertEquals(value1.decl_data.short_name, enum.fields[0].name) 238 self.assertEquals(value1.decl_data.short_name, enum.fields[0].name)
236 self.assertEquals(value2.decl_data.short_name, enum.fields[1].name) 239 self.assertEquals(value2.decl_data.short_name, enum.fields[1].name)
237 240
238 self.assertEquals(value1.value.value.int32_value, enum.fields[0].value) 241 self.assertEquals(value1.int_value, enum.fields[0].value)
239 self.assertEquals(value2.value.value.int32_value, enum.fields[1].value) 242 self.assertEquals(value2.int_value, enum.fields[1].value)
240 243
241 self.assertEquals(value1.value.value.int32_value, 244 self.assertEquals(value1.int_value,
242 enum.fields[0].numeric_value) 245 enum.fields[0].numeric_value)
243 self.assertEquals(value2.value.value.int32_value, 246 self.assertEquals(value2.int_value,
244 enum.fields[1].numeric_value) 247 enum.fields[1].numeric_value)
245 248
246 def test_unions(self): 249 def test_unions(self):
247 file_name = 'a.mojom' 250 file_name = 'a.mojom'
248 mojom_union = mojom_types_mojom.MojomUnion() 251 mojom_union = mojom_types_mojom.MojomUnion()
249 mojom_union.decl_data = mojom_types_mojom.DeclarationData( 252 mojom_union.decl_data = mojom_types_mojom.DeclarationData(
250 short_name='AUnion', 253 short_name='AUnion',
251 source_file_info=mojom_types_mojom.SourceFileInfo(file_name=file_name)) 254 source_file_info=mojom_types_mojom.SourceFileInfo(file_name=file_name))
252 255
253 field1 = mojom_types_mojom.UnionField( 256 field1 = mojom_types_mojom.UnionField(
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 param1.decl_data.short_name, method.response_parameters[0].name) 421 param1.decl_data.short_name, method.response_parameters[0].name)
419 422
420 def test_parameter(self): 423 def test_parameter(self):
421 # Parameters are encoded as fields in a struct. 424 # Parameters are encoded as fields in a struct.
422 mojom_param = mojom_types_mojom.StructField( 425 mojom_param = mojom_types_mojom.StructField(
423 decl_data=mojom_types_mojom.DeclarationData( 426 decl_data=mojom_types_mojom.DeclarationData(
424 short_name='param0', 427 short_name='param0',
425 declared_ordinal=5), 428 declared_ordinal=5),
426 type=mojom_types_mojom.Type( 429 type=mojom_types_mojom.Type(
427 simple_type=mojom_types_mojom.SimpleType.UINT64), 430 simple_type=mojom_types_mojom.SimpleType.UINT64),
428 default_value=mojom_types_mojom.ConstantOccurrence( 431 default_value=mojom_types_mojom.Value(
429 value=mojom_types_mojom.ConstantValue(uint64_value=20))) 432 literal_value=mojom_types_mojom.LiteralValue(uint64_value=20)))
430 433
431 graph = mojom_files_mojom.MojomFileGraph() 434 graph = mojom_files_mojom.MojomFileGraph()
432 translator = mojom_translator.FileTranslator(graph, '') 435 translator = mojom_translator.FileTranslator(graph, '')
433 param = translator.ParamFromMojom(mojom_param) 436 param = translator.ParamFromMojom(mojom_param)
434 437
435 self.assertEquals(mojom_param.decl_data.short_name, param.name) 438 self.assertEquals(mojom_param.decl_data.short_name, param.name)
436 self.assertEquals(module.UINT64, param.kind) 439 self.assertEquals(module.UINT64, param.kind)
437 self.assertEquals(mojom_param.decl_data.declared_ordinal, param.ordinal) 440 self.assertEquals(mojom_param.decl_data.declared_ordinal, param.ordinal)
438 self.assertEquals(
439 mojom_param.default_value.value.uint64_value, param.default)
440 441
441 442
442 class TestEvalConst(unittest.TestCase): 443 class TestEvalValue(unittest.TestCase):
443 444
444 def test_resolved_simple(self): 445 def test_literal_value(self):
445 mojom = mojom_types_mojom.ConstantOccurrence() 446 mojom = mojom_types_mojom.Value()
446 mojom.value = mojom_types_mojom.ConstantValue(int64_value=20) 447 mojom.literal_value = mojom_types_mojom.LiteralValue(int64_value=20)
447 448
448 graph = mojom_files_mojom.MojomFileGraph() 449 graph = mojom_files_mojom.MojomFileGraph()
449 const = mojom_translator.FileTranslator(graph, None).EvalConst(mojom) 450 const = mojom_translator.FileTranslator(graph, None).EvalValue(mojom)
450 451
451 self.assertEquals(20, const) 452 self.assertEquals(20, const)
452 453
453 def test_resolved_enum(self): 454 def test_resolved_user_defined_values(self):
454 # TODO(azani): Handle resolved enums. 455 # TODO(azani): Write this.
455 pass 456 pass
456 457
457 def test_builtin_const(self): 458 def test_builtin_const(self):
458 mojom = mojom_types_mojom.ConstantOccurrence() 459 mojom = mojom_types_mojom.Value()
459 mojom.value = mojom_types_mojom.ConstantValue()
460 460
461 graph = mojom_files_mojom.MojomFileGraph() 461 graph = mojom_files_mojom.MojomFileGraph()
462 462
463 gold = [ 463 gold = [
464 (mojom_types_mojom.BuiltinConstantValue.DOUBLE_INFINITY, 464 (mojom_types_mojom.BuiltinConstantValue.DOUBLE_INFINITY,
465 'double.INFINITY'), 465 'double.INFINITY'),
466 (mojom_types_mojom.BuiltinConstantValue.DOUBLE_NEGATIVE_INFINITY, 466 (mojom_types_mojom.BuiltinConstantValue.DOUBLE_NEGATIVE_INFINITY,
467 'double.NEGATIVE_INFINITY'), 467 'double.NEGATIVE_INFINITY'),
468 (mojom_types_mojom.BuiltinConstantValue.DOUBLE_NAN, 468 (mojom_types_mojom.BuiltinConstantValue.DOUBLE_NAN,
469 'double.DOUBLE_NAN'), 469 'double.DOUBLE_NAN'),
470 (mojom_types_mojom.BuiltinConstantValue.FLOAT_INFINITY, 470 (mojom_types_mojom.BuiltinConstantValue.FLOAT_INFINITY,
471 'float.INFINITY'), 471 'float.INFINITY'),
472 (mojom_types_mojom.BuiltinConstantValue.FLOAT_NEGATIVE_INFINITY, 472 (mojom_types_mojom.BuiltinConstantValue.FLOAT_NEGATIVE_INFINITY,
473 'float.NEGATIVE_INFINITY'), 473 'float.NEGATIVE_INFINITY'),
474 (mojom_types_mojom.BuiltinConstantValue.FLOAT_NAN, 'float.NAN'), 474 (mojom_types_mojom.BuiltinConstantValue.FLOAT_NAN, 'float.NAN'),
475 ] 475 ]
476 476
477 for mojom_builtin, string in gold: 477 for mojom_builtin, string in gold:
478 mojom.value.builtin_value = mojom_builtin 478 mojom.builtin_value = mojom_builtin
479 const = mojom_translator.FileTranslator(graph, None).EvalConst(mojom) 479 const = mojom_translator.FileTranslator(graph, None).EvalValue(mojom)
480 self.assertIsInstance(const, module.BuiltinValue) 480 self.assertIsInstance(const, module.BuiltinValue)
481 self.assertEquals(string, const.value) 481 self.assertEquals(string, const.value)
482 482
483 483
484 484
485 485
486 # TODO(azani): Set the path of modules correctly. 486 # TODO(azani): Set the path of modules correctly.
487 487
488 class TestKindFromMojom(unittest.TestCase): 488 class TestKindFromMojom(unittest.TestCase):
489 489
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 result2 = t.KindFromMojom(mojom_type) 638 result2 = t.KindFromMojom(mojom_type)
639 self.assertIs(result, result2) 639 self.assertIs(result, result2)
640 640
641 # Nullable type reference 641 # Nullable type reference
642 mojom_type.type_reference.nullable = True 642 mojom_type.type_reference.nullable = True
643 nullable_result = t.KindFromMojom(mojom_type) 643 nullable_result = t.KindFromMojom(mojom_type)
644 self.assertTrue(module.IsNullableKind(nullable_result)) 644 self.assertTrue(module.IsNullableKind(nullable_result))
645 645
646 if __name__ == '__main__': 646 if __name__ == '__main__':
647 unittest.main() 647 unittest.main()
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698