comparison Resources/CodeGeneration/stonegentool_test.py @ 687:342f3e04bfa9 am-dev

CodeGen: test cleanup + all working again + using same yaml and stimuli files
author Alain Mazy <alain@mazy.be>
date Thu, 16 May 2019 17:51:17 +0200
parents 0d42bda615a8
children
comparison
equal deleted inserted replaced
686:0d42bda615a8 687:342f3e04bfa9
85 self.assertEqual(ok4,True) 85 self.assertEqual(ok4,True)
86 self.assertEqual(a4,"map") 86 self.assertEqual(a4,"map")
87 self.assertEqual(b4,["int","vector<string>"]) 87 self.assertEqual(b4,["int","vector<string>"])
88 88
89 def test_ParseSchema(self): 89 def test_ParseSchema(self):
90 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml') 90 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'testTestStoneCodeGen.yaml')
91 obj = LoadSchema(fn) 91 obj = LoadSchema(fn)
92 # we're happy if it does not crash :) 92 # we're happy if it does not crash :)
93 CheckSchemaSchema(obj) 93 CheckSchemaSchema(obj)
94 94
95 def test_ComputeRequiredDeclarationOrder(self): 95 def test_ComputeRequiredDeclarationOrder(self):
96 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml') 96 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'testTestStoneCodeGen.yaml')
97 obj = LoadSchema(fn) 97 obj = LoadSchema(fn)
98 genOrder: str = ComputeRequiredDeclarationOrder(obj) 98 genOrder: str = ComputeRequiredDeclarationOrder(obj)
99 self.assertEqual(5,len(genOrder)) 99 self.assertEqual(5,len(genOrder))
100 self.assertEqual("A",genOrder[0]) 100 self.assertEqual("A",genOrder[0])
101 self.assertEqual("B",genOrder[1]) 101 self.assertEqual("B",genOrder[1])
108 # obj = LoadSchema(fn) 108 # obj = LoadSchema(fn)
109 # (_,genc,_) = ProcessSchema(obj) 109 # (_,genc,_) = ProcessSchema(obj)
110 110
111 def test_genEnums(self): 111 def test_genEnums(self):
112 self.maxDiff = None 112 self.maxDiff = None
113 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml') 113 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'testTestStoneCodeGen.yaml')
114 obj = LoadSchema(fn) 114 obj = LoadSchema(fn)
115 genOrder: str = ComputeRequiredDeclarationOrder(obj) 115 genOrder: str = ComputeRequiredDeclarationOrder(obj)
116 processedSchema = ProcessSchema(obj, genOrder) 116 processedSchema = ProcessSchema(obj, genOrder)
117 self.assertTrue('rootName' in processedSchema) 117 self.assertTrue('rootName' in processedSchema)
118 118
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 self.assertEqual('int32', structs['Message1']['fields']['a'].type) 130 self.assertEqual('int32', structs['Message1']['fields']['memberInt32'].type)
131 self.assertEqual('string', structs['Message1']['fields']['b'].type) 131 self.assertEqual('string', structs['Message1']['fields']['memberString'].type)
132 self.assertEqual('EnumMonth0', structs['Message1']['fields']['c'].type) 132 self.assertEqual('EnumMonth0', structs['Message1']['fields']['memberEnumMonth'].type)
133 self.assertEqual('bool', structs['Message1']['fields']['d'].type) 133 self.assertEqual('bool', structs['Message1']['fields']['memberBool'].type)
134 self.assertEqual('float32', structs['Message1']['fields']['memberFloat32'].type)
135 self.assertEqual('float64', structs['Message1']['fields']['memberFloat64'].type)
134 136
135 def test_GenerateTypeScriptEnums(self): 137 def test_GenerateTypeScriptEnums(self):
136 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml') 138 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'testTestStoneCodeGen.yaml')
137 tdico = GetTemplatingDictFromSchemaFilename(fn) 139 tdico = GetTemplatingDictFromSchemaFilename(fn)
138 template = Template(""" // end of generic methods 140 template = Template(""" // end of generic methods
139 {% for enum in enums%} export enum {{enum['name']}} { 141 {% for enum in enums%} export enum {{enum['name']}} {
140 {% for key in enum['fields']%} {{key}}, 142 {% for key in enum['fields']%} {{key}},
141 {%endfor%} }; 143 {%endfor%} };
165 167
166 """ 168 """
167 self.assertEqual(renderedCodeRef,renderedCode) 169 self.assertEqual(renderedCodeRef,renderedCode)
168 170
169 def test_GenerateCplusplusEnums(self): 171 def test_GenerateCplusplusEnums(self):
170 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml') 172 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'testTestStoneCodeGen.yaml')
171 tdico = GetTemplatingDictFromSchemaFilename(fn) 173 tdico = GetTemplatingDictFromSchemaFilename(fn)
172 template = Template(""" // end of generic methods 174 template = Template(""" // end of generic methods
173 {% for enum in enums%} enum {{enum['name']}} { 175 {% for enum in enums%} enum {{enum['name']}} {
174 {% for key in enum['fields']%} {{key}}, 176 {% for key in enum['fields']%} {{key}},
175 {%endfor%} }; 177 {%endfor%} };
199 201
200 """ 202 """
201 self.assertEqual(renderedCodeRef,renderedCode) 203 self.assertEqual(renderedCodeRef,renderedCode)
202 204
203 def test_generateTsStructType(self): 205 def test_generateTsStructType(self):
204 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml') 206 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'testTestStoneCodeGen.yaml')
205 tdico = GetTemplatingDictFromSchemaFilename(fn) 207 tdico = GetTemplatingDictFromSchemaFilename(fn)
206 ref = """ export class Message1 { 208
207 a: number;
208 b: string;
209 c: EnumMonth0;
210 d: boolean;
211 e: number;
212 f: number;
213
214 public StoneSerialize(): string {
215 let container: object = {};
216 container['type'] = 'VsolStuff.Message1';
217 container['value'] = this;
218 return JSON.stringify(container);
219 }
220 };
221
222 export class Message2 {
223 toto: string;
224 tata: Message1[];
225 tutu: string[];
226 titi: Map<string, string>;
227 lulu: Map<string, Message1>;
228
229 constructor()
230 {
231 this.tata = new Array<Message1>();
232 this.tutu = new Array<string>();
233 this.titi = new Map<string, string>();
234 this.lulu = new Map<string, Message1>();
235 }
236
237 public StoneSerialize(): string {
238 let container: object = {};
239 container['type'] = 'VsolStuff.Message2';
240 container['value'] = this;
241 return JSON.stringify(container);
242 }
243 };
244
245 """
246 # template = MakeTemplate(""" // end of generic methods 209 # template = MakeTemplate(""" // end of generic methods
247 # {% for struct in struct%} export class {{struct['name']}} { 210 # {% for struct in struct%} export class {{struct['name']}} {
248 # {% for key in struct['fields']%} {{key}}:{{struct['fields'][key]}}, 211 # {% for key in struct['fields']%} {{key}}:{{struct['fields'][key]}},
249 # {% endfor %} 212 # {% endfor %}
250 # constructor() { 213 # constructor() {
291 this.movies = new Array<MovieType>(); 254 this.movies = new Array<MovieType>();
292 } 255 }
293 256
294 public StoneSerialize(): string { 257 public StoneSerialize(): string {
295 let container: object = {}; 258 let container: object = {};
296 container['type'] = 'VsolMessages.A'; 259 container['type'] = 'TestStoneCodeGen.A';
297 container['value'] = this; 260 container['value'] = this;
298 return JSON.stringify(container); 261 return JSON.stringify(container);
299 } 262 }
300 }; 263 };
301 264
308 this.someInts = new Array<number>(); 271 this.someInts = new Array<number>();
309 } 272 }
310 273
311 public StoneSerialize(): string { 274 public StoneSerialize(): string {
312 let container: object = {}; 275 let container: object = {};
313 container['type'] = 'VsolMessages.B'; 276 container['type'] = 'TestStoneCodeGen.B';
314 container['value'] = this; 277 container['value'] = this;
315 return JSON.stringify(container); 278 return JSON.stringify(container);
316 } 279 }
317 }; 280 };
318 281
325 this.ddd = new Array<string>(); 288 this.ddd = new Array<string>();
326 } 289 }
327 290
328 public StoneSerialize(): string { 291 public StoneSerialize(): string {
329 let container: object = {}; 292 let container: object = {};
330 container['type'] = 'VsolMessages.C'; 293 container['type'] = 'TestStoneCodeGen.C';
331 container['value'] = this; 294 container['value'] = this;
332 return JSON.stringify(container); 295 return JSON.stringify(container);
333 } 296 }
334 }; 297 };
335 298
336 export class Message1 { 299 export class Message1 {
337 a:number; 300 memberInt32:number;
338 b:string; 301 memberString:string;
339 c:EnumMonth0; 302 memberEnumMonth:EnumMonth0;
340 d:boolean; 303 memberBool:boolean;
341 e:number; 304 memberFloat32:number;
342 f:number; 305 memberFloat64:number;
343 306
344 constructor() { 307 constructor() {
345 this.a = new number(); 308 this.memberInt32 = new number();
346 this.b = new string(); 309 this.memberString = new string();
347 this.c = new EnumMonth0(); 310 this.memberEnumMonth = new EnumMonth0();
348 this.d = new boolean(); 311 this.memberBool = new boolean();
349 this.e = new number(); 312 this.memberFloat32 = new number();
350 this.f = new number(); 313 this.memberFloat64 = new number();
351 } 314 }
352 315
353 public StoneSerialize(): string { 316 public StoneSerialize(): string {
354 let container: object = {}; 317 let container: object = {};
355 container['type'] = 'VsolMessages.Message1'; 318 container['type'] = 'TestStoneCodeGen.Message1';
356 container['value'] = this; 319 container['value'] = this;
357 return JSON.stringify(container); 320 return JSON.stringify(container);
358 } 321 }
359 }; 322 };
360 323
361 export class Message2 { 324 export class Message2 {
362 toto:string; 325 memberString:string;
363 tata:Array<Message1>; 326 memberStringWithDefault:string;
364 tutu:Array<string>; 327 memberVectorOfMessage1:Array<Message1>;
365 titi:Map<string, string>; 328 memberVectorOfString:Array<string>;
366 lulu:Map<string, Message1>; 329 memberMapStringString:Map<string, string>;
367 movieType:MovieType; 330 memberMapStringStruct:Map<string, Message1>;
368 331 memberMapEnumFloat:Map<CrispType, number>;
369 constructor() { 332 memberEnumMovieType:MovieType;
370 this.toto = new string(); 333 memberJson:Object;
371 this.tata = new Array<Message1>(); 334
372 this.tutu = new Array<string>(); 335 constructor() {
373 this.titi = new Map<string, string>(); 336 this.memberString = new string();
374 this.lulu = new Map<string, Message1>(); 337 this.memberStringWithDefault = new string();
375 this.movieType = new MovieType(); 338 this.memberVectorOfMessage1 = new Array<Message1>();
376 } 339 this.memberVectorOfString = new Array<string>();
377 340 this.memberMapStringString = new Map<string, string>();
378 public StoneSerialize(): string { 341 this.memberMapStringStruct = new Map<string, Message1>();
379 let container: object = {}; 342 this.memberMapEnumFloat = new Map<CrispType, number>();
380 container['type'] = 'VsolMessages.Message2'; 343 this.memberEnumMovieType = new MovieType();
344 this.memberJson = new Object();
345 }
346
347 public StoneSerialize(): string {
348 let container: object = {};
349 container['type'] = 'TestStoneCodeGen.Message2';
381 container['value'] = this; 350 container['value'] = this;
382 return JSON.stringify(container); 351 return JSON.stringify(container);
383 } 352 }
384 }; 353 };
385 354
388 self.maxDiff = None 357 self.maxDiff = None
389 self.assertEqual(renderedCodeRef, renderedCode) 358 self.assertEqual(renderedCodeRef, renderedCode)
390 359
391 def test_generateWholeTsFile(self): 360 def test_generateWholeTsFile(self):
392 schemaFile = \ 361 schemaFile = \
393 os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml') 362 os.path.join(os.path.dirname(__file__), 'test_data', 'testTestStoneCodeGen.yaml')
394 tdico = GetTemplatingDictFromSchemaFilename(schemaFile) 363 tdico = GetTemplatingDictFromSchemaFilename(schemaFile)
395 tsTemplateFile = \ 364 tsTemplateFile = \
396 os.path.join(os.path.dirname(__file__), 'template.in.ts.j2') 365 os.path.join(os.path.dirname(__file__), 'template.in.ts.j2')
397 template = MakeTemplateFromFile(tsTemplateFile) 366 template = MakeTemplateFromFile(tsTemplateFile)
398 renderedCode = template.render(**tdico) 367 renderedCode = template.render(**tdico)