comparison Resources/CodeGeneration/stonegentool_test.py @ 628:84af39146e76 am-dev

CodeGeneration: support default values
author Alain Mazy <alain@mazy.be>
date Wed, 08 May 2019 16:32:57 +0200
parents b7fd0471281c
children 0d42bda615a8
comparison
equal deleted inserted replaced
627:b7fd0471281c 628:84af39146e76
4 # 4 #
5 5
6 from stonegentool import \ 6 from stonegentool import \
7 EatToken,SplitListOfTypes,ParseTemplateType,ProcessSchema, \ 7 EatToken,SplitListOfTypes,ParseTemplateType,ProcessSchema, \
8 CheckSchemaSchema,LoadSchema,trim,ComputeRequiredDeclarationOrder, \ 8 CheckSchemaSchema,LoadSchema,trim,ComputeRequiredDeclarationOrder, \
9 GetTemplatingDictFromSchemaFilename,MakeTemplate,MakeTemplateFromFile 9 GetTemplatingDictFromSchemaFilename,MakeTemplate,MakeTemplateFromFile,LoadSchemaFromString,GetTemplatingDictFromSchema
10 import unittest 10 import unittest
11 import os 11 import os
12 import re 12 import re
13 import pprint 13 import pprint
14 from jinja2 import Template 14 from jinja2 import Template
125 125
126 self.assertTrue('C' in structs) 126 self.assertTrue('C' in structs)
127 self.assertTrue('someBs' in structs['C']['fields']) 127 self.assertTrue('someBs' in structs['C']['fields'])
128 self.assertTrue('CrispType' in enums) 128 self.assertTrue('CrispType' in enums)
129 self.assertTrue('Message1' in structs) 129 self.assertTrue('Message1' in structs)
130 message1Struct = structs['Message1'] 130 self.assertEqual('int32', structs['Message1']['fields']['a'].type)
131 self.assertDictEqual(message1Struct, 131 self.assertEqual('string', structs['Message1']['fields']['b'].type)
132 { 132 self.assertEqual('EnumMonth0', structs['Message1']['fields']['c'].type)
133 'name':'Message1', 133 self.assertEqual('bool', structs['Message1']['fields']['d'].type)
134 '__meta__': {'handleInCpp': False, 'handleInTypescript': False},
135 'fields': {
136 'a': 'int32',
137 'b': 'string',
138 'c': 'EnumMonth0',
139 'd': 'bool'
140 }
141 })
142 134
143 def test_GenerateTypeScriptEnums(self): 135 def test_GenerateTypeScriptEnums(self):
144 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml') 136 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml')
145 tdico = GetTemplatingDictFromSchemaFilename(fn) 137 tdico = GetTemplatingDictFromSchemaFilename(fn)
146 template = Template(""" // end of generic methods 138 template = Template(""" // end of generic methods
266 # container['value'] = this; 258 # container['value'] = this;
267 # return JSON.stringify(container); 259 # return JSON.stringify(container);
268 # } };""") 260 # } };""")
269 template = MakeTemplate(""" // end of generic methods 261 template = MakeTemplate(""" // end of generic methods
270 {% for struct in structs%} export class {{struct['name']}} { 262 {% for struct in structs%} export class {{struct['name']}} {
271 {% for key in struct['fields']%} {{key}}:{{CanonToTs(struct['fields'][key])}}; 263 {% for key in struct['fields']%} {{key}}:{{CanonToTs(struct['fields'][key]['type'])}};
272 {% endfor %} 264 {% endfor %}
273 constructor() { 265 constructor() {
274 {% for key in struct['fields']%} this.{{key}} = new {{CanonToTs(struct['fields'][key])}}(); 266 {% for key in struct['fields']%} this.{{key}} = new {{CanonToTs(struct['fields'][key]['type'])}}();
275 {% endfor %} } 267 {% endfor %} }
276 268
277 public StoneSerialize(): string { 269 public StoneSerialize(): string {
278 let container: object = {}; 270 let container: object = {};
279 container['type'] = '{{rootName}}.{{struct['name']}}'; 271 container['type'] = '{{rootName}}.{{struct['name']}}';
409 pass 401 pass
410 402
411 def test_GenerateCppDispatcher(self): 403 def test_GenerateCppDispatcher(self):
412 pass 404 pass
413 405
406 def test_StringDefaultValueInTs(self):
407 schema = LoadSchemaFromString("""
408 rootName: MyTest
409 struct Toto:
410 withoutDefault: string
411 withDefault: string = \"tutu\"
412 """)
413 tdico = GetTemplatingDictFromSchema(schema)
414
415 tsTemplateFile = os.path.join(os.path.dirname(__file__), 'template.in.ts.j2')
416 template = MakeTemplateFromFile(tsTemplateFile)
417 renderedCode = template.render(**tdico)
418 self.assertIn("withDefault = \"tutu\"", renderedCode)
419 # print(renderedCode)
420
421 cppTemplateFile = os.path.join(os.path.dirname(__file__), 'template.in.h.j2')
422 template = MakeTemplateFromFile(cppTemplateFile)
423 renderedCode = template.render(**tdico)
424 print(renderedCode)
425 self.assertIn("withDefault = \"tutu\"", renderedCode)
426
427
428 def test_EnumDefaultValue(self):
429 schema = LoadSchemaFromString("""
430 rootName: MyTest
431 enum MyEnum:
432 - Toto
433 - Tutu
434 struct Toto:
435 withoutDefault: MyEnum
436 withDefault: MyEnum = Toto
437 """)
438 tdico = GetTemplatingDictFromSchema(schema)
439
440 tsTemplateFile = os.path.join(os.path.dirname(__file__), 'template.in.ts.j2')
441 template = MakeTemplateFromFile(tsTemplateFile)
442 renderedCode = template.render(**tdico)
443 # print(renderedCode)
444 self.assertIn("withDefault = MyEnum.Toto", renderedCode)
445
446 tsTemplateFile = os.path.join(os.path.dirname(__file__), 'template.in.h.j2')
447 template = MakeTemplateFromFile(tsTemplateFile)
448 renderedCode = template.render(**tdico)
449 self.assertIn("withDefault = MyTest::MyEnum_Toto", renderedCode)
450 # print(renderedCode)
451
452
414 # def test(self): 453 # def test(self):
415 # s = 'hello world' 454 # s = 'hello world'
416 # self.assertEqual(s.split(), ['hello', 'world']) 455 # self.assertEqual(s.split(), ['hello', 'world'])
417 # # check that s.split fails when the separator is not a string 456 # # check that s.split fails when the separator is not a string
418 # with self.assertRaises(TypeError): 457 # with self.assertRaises(TypeError):