annotate Resources/CodeGeneration/stonegentool_test.py @ 724:5b16242cdc93

Fixed truncation warning
author Benjamin Golinvaux <bgo@osimis.io>
date Tue, 21 May 2019 10:39:14 +0200
parents 84af39146e76
children 0d42bda615a8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
1 #
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
2 # 1 2 3 4 5 6 7 8
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
3 # 345678901234567890123456789012345678901234567890123456789012345678901234567890
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
4 #
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
5
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
6 from stonegentool import \
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
7 EatToken,SplitListOfTypes,ParseTemplateType,ProcessSchema, \
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
8 CheckSchemaSchema,LoadSchema,trim,ComputeRequiredDeclarationOrder, \
628
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
9 GetTemplatingDictFromSchemaFilename,MakeTemplate,MakeTemplateFromFile,LoadSchemaFromString,GetTemplatingDictFromSchema
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
10 import unittest
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
11 import os
485
772516adcbf6 Ongoing work on code generation. Enums and structs OK in ts and cpp
bgo-osimis
parents: 482
diff changeset
12 import re
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
13 import pprint
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
14 from jinja2 import Template
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
15
485
772516adcbf6 Ongoing work on code generation. Enums and structs OK in ts and cpp
bgo-osimis
parents: 482
diff changeset
16 def RemoveDateTimeLine(s : str):
772516adcbf6 Ongoing work on code generation. Enums and structs OK in ts and cpp
bgo-osimis
parents: 482
diff changeset
17 # regex are non-multiline by default, and $ does NOT match the end of the line
772516adcbf6 Ongoing work on code generation. Enums and structs OK in ts and cpp
bgo-osimis
parents: 482
diff changeset
18 s2 = re.sub(r"^// autogenerated by stonegentool on .*\n","",s)
772516adcbf6 Ongoing work on code generation. Enums and structs OK in ts and cpp
bgo-osimis
parents: 482
diff changeset
19 return s2
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
20
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
21 class TestStonegentool(unittest.TestCase):
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
22 def test_EatToken_empty(self):
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
23 c = r""
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
24 a,b = EatToken(c)
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
25 self.assertEqual(a,r"")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
26 self.assertEqual(b,r"")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
27
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
28 def test_EatToken_simpleNonTemplate(self):
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
29 c = r"int32"
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
30 a,b = EatToken(c)
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
31 self.assertEqual(a,r"int32")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
32 self.assertEqual(b,r"")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
33
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
34 def test_EatToken_simpleTemplate(self):
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
35 c = r"vector<string>"
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
36 a,b = EatToken(c)
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
37 self.assertEqual(a,r"vector<string>")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
38 self.assertEqual(b,r"")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
39
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
40 def test_EatToken_complexTemplate(self):
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
41 c = r"vector<map<int64,string>>,vector<map<int32,string>>"
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
42 a,b = EatToken(c)
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
43 self.assertEqual(a,r"vector<map<int64,string>>")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
44 self.assertEqual(b,r"vector<map<int32,string>>")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
45
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
46 def test_EatToken_complexTemplates(self):
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
47 c = r"vector<map<vector<string>,map<int32,string>>>,map<int32,string>,map<map<int32,string>,string>"
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
48 a,b = EatToken(c)
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
49 self.assertEqual(a,r"vector<map<vector<string>,map<int32,string>>>")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
50 self.assertEqual(b,r"map<int32,string>,map<map<int32,string>,string>")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
51 a,b = EatToken(b)
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
52 self.assertEqual(a,r"map<int32,string>")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
53 self.assertEqual(b,r"map<map<int32,string>,string>")
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
54
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
55 def test_SplitListOfTypes(self):
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
56 c = r"vector<map<vector<string>,map<int32,string>>>,map<int32,string>,map<map<int32,string>,string>"
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
57 lot = SplitListOfTypes(c)
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
58 self.assertEqual(3,len(lot))
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
59 self.assertEqual("vector<map<vector<string>,map<int32,string>>>",lot[0])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
60 self.assertEqual("map<int32,string>",lot[1])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
61 self.assertEqual("map<map<int32,string>,string>",lot[2])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
62
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
63 def test_SplitListOfTypes_bogus(self):
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
64 c = r"vector<map<vector<string>,map<int32,string>>,map<int32,string>,map<map<int32,string>,string"
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
65 self.assertRaises(Exception,SplitListOfTypes,c) # the argument c must be passed to assertRaises, not as a normal call of SplitListOfTypes
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
66
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
67 def test_ParseTemplateType_true(self):
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
68 c = "map<vector<map<int,vector<string>>>,map<vector<int>,vector<string>>>"
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
69 (ok,a,b) = ParseTemplateType(c)
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
70 self.assertEqual(ok,True)
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
71 self.assertEqual(a,"map")
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
72 self.assertEqual(b,["vector<map<int,vector<string>>>","map<vector<int>,vector<string>>"])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
73
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
74 (ok2,a2,b2) = ParseTemplateType(b[0])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
75 self.assertEqual(ok2,True)
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
76 self.assertEqual(a2,"vector")
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
77 self.assertEqual(b2,["map<int,vector<string>>"])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
78
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
79 (ok3,a3,b3) = ParseTemplateType(b[1])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
80 self.assertEqual(ok3,True)
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
81 self.assertEqual(a3,"map")
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
82 self.assertEqual(b3,["vector<int>","vector<string>"])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
83
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
84 (ok4,a4,b4) = ParseTemplateType(b2[0])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
85 self.assertEqual(ok4,True)
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
86 self.assertEqual(a4,"map")
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
87 self.assertEqual(b4,["int","vector<string>"])
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
88
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
89 def test_ParseSchema(self):
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
90 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml')
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
91 obj = LoadSchema(fn)
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
92 # we're happy if it does not crash :)
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
93 CheckSchemaSchema(obj)
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
94
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
95 def test_ComputeRequiredDeclarationOrder(self):
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
96 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml')
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
97 obj = LoadSchema(fn)
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
98 genOrder: str = ComputeRequiredDeclarationOrder(obj)
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
99 self.assertEqual(5,len(genOrder))
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
100 self.assertEqual("A",genOrder[0])
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
101 self.assertEqual("B",genOrder[1])
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
102 self.assertEqual("C",genOrder[2])
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
103 self.assertEqual("Message1",genOrder[3])
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
104 self.assertEqual("Message2",genOrder[4])
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
105
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
106 # def test_GeneratePreambleEnumerationAndStructs(self):
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
107 # fn = os.path.join(os.path.dirname(__file__), 'test', 'test1.jsonc')
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
108 # obj = LoadSchema(fn)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
109 # (_,genc,_) = ProcessSchema(obj)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
110
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
111 def test_genEnums(self):
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
112 self.maxDiff = None
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
113 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml')
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
114 obj = LoadSchema(fn)
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
115 genOrder: str = ComputeRequiredDeclarationOrder(obj)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
116 processedSchema = ProcessSchema(obj, genOrder)
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
117 self.assertTrue('rootName' in processedSchema)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
118
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
119 structs = {}
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
120 for v in processedSchema['structs']:
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
121 structs[v['name']] = v
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
122 enums = {}
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
123 for v in processedSchema['enums']:
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
124 enums[v['name']] = v
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
125
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
126 self.assertTrue('C' in structs)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
127 self.assertTrue('someBs' in structs['C']['fields'])
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
128 self.assertTrue('CrispType' in enums)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
129 self.assertTrue('Message1' in structs)
628
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
130 self.assertEqual('int32', structs['Message1']['fields']['a'].type)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
131 self.assertEqual('string', structs['Message1']['fields']['b'].type)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
132 self.assertEqual('EnumMonth0', structs['Message1']['fields']['c'].type)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
133 self.assertEqual('bool', structs['Message1']['fields']['d'].type)
485
772516adcbf6 Ongoing work on code generation. Enums and structs OK in ts and cpp
bgo-osimis
parents: 482
diff changeset
134
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
135 def test_GenerateTypeScriptEnums(self):
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
136 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml')
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
137 tdico = GetTemplatingDictFromSchemaFilename(fn)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
138 template = Template(""" // end of generic methods
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
139 {% for enum in enums%} export enum {{enum['name']}} {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
140 {% for key in enum['fields']%} {{key}},
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
141 {%endfor%} };
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
142
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
143 {%endfor%}""")
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
144 renderedCode = template.render(**tdico)
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
145 renderedCodeRef = """ // end of generic methods
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
146 export enum MovieType {
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
147 RomCom,
485
772516adcbf6 Ongoing work on code generation. Enums and structs OK in ts and cpp
bgo-osimis
parents: 482
diff changeset
148 Horror,
772516adcbf6 Ongoing work on code generation. Enums and structs OK in ts and cpp
bgo-osimis
parents: 482
diff changeset
149 ScienceFiction,
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
150 Vegetables,
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
151 };
485
772516adcbf6 Ongoing work on code generation. Enums and structs OK in ts and cpp
bgo-osimis
parents: 482
diff changeset
152
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
153 export enum CrispType {
486
8e40355a172b Unit tests OK for preambles, enums and structs in both TS and C++
bgo-osimis
parents: 485
diff changeset
154 SaltAndPepper,
8e40355a172b Unit tests OK for preambles, enums and structs in both TS and C++
bgo-osimis
parents: 485
diff changeset
155 CreamAndChives,
8e40355a172b Unit tests OK for preambles, enums and structs in both TS and C++
bgo-osimis
parents: 485
diff changeset
156 Paprika,
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
157 Barbecue,
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
158 };
486
8e40355a172b Unit tests OK for preambles, enums and structs in both TS and C++
bgo-osimis
parents: 485
diff changeset
159
627
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
160 export enum EnumMonth0 {
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
161 January,
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
162 February,
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
163 March,
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
164 };
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
165
486
8e40355a172b Unit tests OK for preambles, enums and structs in both TS and C++
bgo-osimis
parents: 485
diff changeset
166 """
491
8e7e151ef472 Unit tests pass for enum generation
bgo-osimis
parents: 489
diff changeset
167 self.assertEqual(renderedCodeRef,renderedCode)
486
8e40355a172b Unit tests OK for preambles, enums and structs in both TS and C++
bgo-osimis
parents: 485
diff changeset
168
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
169 def test_GenerateCplusplusEnums(self):
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
170 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml')
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
171 tdico = GetTemplatingDictFromSchemaFilename(fn)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
172 template = Template(""" // end of generic methods
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
173 {% for enum in enums%} enum {{enum['name']}} {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
174 {% for key in enum['fields']%} {{key}},
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
175 {%endfor%} };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
176
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
177 {%endfor%}""")
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
178 renderedCode = template.render(**tdico)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
179 renderedCodeRef = """ // end of generic methods
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
180 enum MovieType {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
181 RomCom,
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
182 Horror,
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
183 ScienceFiction,
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
184 Vegetables,
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
185 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
186
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
187 enum CrispType {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
188 SaltAndPepper,
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
189 CreamAndChives,
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
190 Paprika,
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
191 Barbecue,
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
192 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
193
627
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
194 enum EnumMonth0 {
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
195 January,
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
196 February,
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
197 March,
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
198 };
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
199
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
200 """
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
201 self.assertEqual(renderedCodeRef,renderedCode)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
202
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
203 def test_generateTsStructType(self):
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
204 fn = os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml')
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
205 tdico = GetTemplatingDictFromSchemaFilename(fn)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
206 ref = """ export class Message1 {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
207 a: number;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
208 b: string;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
209 c: EnumMonth0;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
210 d: boolean;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
211 public StoneSerialize(): string {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
212 let container: object = {};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
213 container['type'] = 'VsolStuff.Message1';
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
214 container['value'] = this;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
215 return JSON.stringify(container);
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
216 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
217 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
218
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
219 export class Message2 {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
220 toto: string;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
221 tata: Message1[];
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
222 tutu: string[];
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
223 titi: Map<string, string>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
224 lulu: Map<string, Message1>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
225
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
226 constructor()
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
227 {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
228 this.tata = new Array<Message1>();
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
229 this.tutu = new Array<string>();
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
230 this.titi = new Map<string, string>();
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
231 this.lulu = new Map<string, Message1>();
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
232 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
233
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
234 public StoneSerialize(): string {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
235 let container: object = {};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
236 container['type'] = 'VsolStuff.Message2';
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
237 container['value'] = this;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
238 return JSON.stringify(container);
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
239 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
240 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
241
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
242 """
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
243 # template = MakeTemplate(""" // end of generic methods
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
244 # {% for struct in struct%} export class {{struct['name']}} {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
245 # {% for key in struct['fields']%} {{key}}:{{struct['fields'][key]}},
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
246 # {% endfor %}
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
247 # constructor() {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
248 # {% for key in struct['fields']%}
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
249 # {% if NeedsConstruction(struct['fields']['key'])}
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
250 # {{key}} = new {{CanonToTs(struct['fields']['key'])}};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
251 # {% end if %}
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
252 # {% endfor %}
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
253 # }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
254 # {% endfor %}
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
255 # public StoneSerialize(): string {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
256 # let container: object = {};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
257 # container['type'] = '{{rootName}}.{{struct['name']}}';
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
258 # container['value'] = this;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
259 # return JSON.stringify(container);
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
260 # } };""")
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
261 template = MakeTemplate(""" // end of generic methods
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
262 {% for struct in structs%} export class {{struct['name']}} {
628
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
263 {% for key in struct['fields']%} {{key}}:{{CanonToTs(struct['fields'][key]['type'])}};
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
264 {% endfor %}
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
265 constructor() {
628
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
266 {% for key in struct['fields']%} this.{{key}} = new {{CanonToTs(struct['fields'][key]['type'])}}();
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
267 {% endfor %} }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
268
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
269 public StoneSerialize(): string {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
270 let container: object = {};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
271 container['type'] = '{{rootName}}.{{struct['name']}}';
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
272 container['value'] = this;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
273 return JSON.stringify(container);
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
274 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
275 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
276
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
277 {% endfor %}""")
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
278 renderedCode = template.render(**tdico)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
279 renderedCodeRef = """ // end of generic methods
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
280 export class A {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
281 someStrings:Array<string>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
282 someInts2:Array<number>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
283 movies:Array<MovieType>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
284
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
285 constructor() {
627
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
286 this.someStrings = new Array<string>();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
287 this.someInts2 = new Array<number>();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
288 this.movies = new Array<MovieType>();
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
289 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
290
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
291 public StoneSerialize(): string {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
292 let container: object = {};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
293 container['type'] = 'VsolMessages.A';
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
294 container['value'] = this;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
295 return JSON.stringify(container);
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
296 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
297 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
298
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
299 export class B {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
300 someAs:Array<A>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
301 someInts:Array<number>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
302
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
303 constructor() {
627
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
304 this.someAs = new Array<A>();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
305 this.someInts = new Array<number>();
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
306 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
307
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
308 public StoneSerialize(): string {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
309 let container: object = {};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
310 container['type'] = 'VsolMessages.B';
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
311 container['value'] = this;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
312 return JSON.stringify(container);
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
313 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
314 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
315
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
316 export class C {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
317 someBs:Array<B>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
318 ddd:Array<string>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
319
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
320 constructor() {
627
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
321 this.someBs = new Array<B>();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
322 this.ddd = new Array<string>();
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
323 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
324
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
325 public StoneSerialize(): string {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
326 let container: object = {};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
327 container['type'] = 'VsolMessages.C';
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
328 container['value'] = this;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
329 return JSON.stringify(container);
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
330 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
331 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
332
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
333 export class Message1 {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
334 a:number;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
335 b:string;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
336 c:EnumMonth0;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
337 d:boolean;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
338
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
339 constructor() {
627
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
340 this.a = new number();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
341 this.b = new string();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
342 this.c = new EnumMonth0();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
343 this.d = new boolean();
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
344 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
345
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
346 public StoneSerialize(): string {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
347 let container: object = {};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
348 container['type'] = 'VsolMessages.Message1';
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
349 container['value'] = this;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
350 return JSON.stringify(container);
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
351 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
352 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
353
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
354 export class Message2 {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
355 toto:string;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
356 tata:Array<Message1>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
357 tutu:Array<string>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
358 titi:Map<string, string>;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
359 lulu:Map<string, Message1>;
627
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
360 movieType:MovieType;
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
361
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
362 constructor() {
627
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
363 this.toto = new string();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
364 this.tata = new Array<Message1>();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
365 this.tutu = new Array<string>();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
366 this.titi = new Map<string, string>();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
367 this.lulu = new Map<string, Message1>();
b7fd0471281c fix CodeGeneration unit tests
Alain Mazy <alain@mazy.be>
parents: 515
diff changeset
368 this.movieType = new MovieType();
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
369 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
370
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
371 public StoneSerialize(): string {
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
372 let container: object = {};
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
373 container['type'] = 'VsolMessages.Message2';
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
374 container['value'] = this;
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
375 return JSON.stringify(container);
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
376 }
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
377 };
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
378
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
379 """
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
380 # print(renderedCode)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
381 self.maxDiff = None
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
382 self.assertEqual(renderedCodeRef, renderedCode)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
383
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
384 def test_generateWholeTsFile(self):
494
fc17251477d6 TS and CPP tests OK. Ongoing code for C++ program that reads list of serialized messages in N files. Requires conan
bgo-osimis
parents: 493
diff changeset
385 schemaFile = \
fc17251477d6 TS and CPP tests OK. Ongoing code for C++ program that reads list of serialized messages in N files. Requires conan
bgo-osimis
parents: 493
diff changeset
386 os.path.join(os.path.dirname(__file__), 'test_data', 'test1.yaml')
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
387 tdico = GetTemplatingDictFromSchemaFilename(schemaFile)
494
fc17251477d6 TS and CPP tests OK. Ongoing code for C++ program that reads list of serialized messages in N files. Requires conan
bgo-osimis
parents: 493
diff changeset
388 tsTemplateFile = \
515
1dbf2d9ed1e4 Added .j2 extension to the Jinja2 template files to allow for a better syntax highlighting experience (a.o. in vscode)
Benjamin Golinvaux <bgo@osimis.io>
parents: 494
diff changeset
389 os.path.join(os.path.dirname(__file__), 'template.in.ts.j2')
493
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
390 template = MakeTemplateFromFile(tsTemplateFile)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
391 renderedCode = template.render(**tdico)
6fbf2eae7c88 All unit tests pass for generation, including handler and dispatcher
bgo-osimis
parents: 491
diff changeset
392 print(renderedCode)
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
393
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
394 def test_GenerateTypeScriptHandlerInterface(self):
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
395 pass
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
396
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
397 def test_GenerateCppHandlerInterface(self):
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
398 pass
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
399
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
400 def test_GenerateTypeScriptDispatcher(self):
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
401 pass
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
402
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
403 def test_GenerateCppDispatcher(self):
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
404 pass
473
628941d63b8c Ongoing work. Parsing tests work
bgo-osimis
parents: 472
diff changeset
405
628
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
406 def test_StringDefaultValueInTs(self):
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
407 schema = LoadSchemaFromString("""
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
408 rootName: MyTest
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
409 struct Toto:
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
410 withoutDefault: string
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
411 withDefault: string = \"tutu\"
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
412 """)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
413 tdico = GetTemplatingDictFromSchema(schema)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
414
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
415 tsTemplateFile = os.path.join(os.path.dirname(__file__), 'template.in.ts.j2')
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
416 template = MakeTemplateFromFile(tsTemplateFile)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
417 renderedCode = template.render(**tdico)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
418 self.assertIn("withDefault = \"tutu\"", renderedCode)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
419 # print(renderedCode)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
420
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
421 cppTemplateFile = os.path.join(os.path.dirname(__file__), 'template.in.h.j2')
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
422 template = MakeTemplateFromFile(cppTemplateFile)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
423 renderedCode = template.render(**tdico)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
424 print(renderedCode)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
425 self.assertIn("withDefault = \"tutu\"", renderedCode)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
426
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
427
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
428 def test_EnumDefaultValue(self):
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
429 schema = LoadSchemaFromString("""
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
430 rootName: MyTest
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
431 enum MyEnum:
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
432 - Toto
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
433 - Tutu
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
434 struct Toto:
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
435 withoutDefault: MyEnum
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
436 withDefault: MyEnum = Toto
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
437 """)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
438 tdico = GetTemplatingDictFromSchema(schema)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
439
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
440 tsTemplateFile = os.path.join(os.path.dirname(__file__), 'template.in.ts.j2')
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
441 template = MakeTemplateFromFile(tsTemplateFile)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
442 renderedCode = template.render(**tdico)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
443 # print(renderedCode)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
444 self.assertIn("withDefault = MyEnum.Toto", renderedCode)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
445
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
446 tsTemplateFile = os.path.join(os.path.dirname(__file__), 'template.in.h.j2')
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
447 template = MakeTemplateFromFile(tsTemplateFile)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
448 renderedCode = template.render(**tdico)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
449 self.assertIn("withDefault = MyTest::MyEnum_Toto", renderedCode)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
450 # print(renderedCode)
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
451
84af39146e76 CodeGeneration: support default values
Alain Mazy <alain@mazy.be>
parents: 627
diff changeset
452
472
3db3289e1c25 Ongoing codegen work
bgo-osimis
parents: 471
diff changeset
453 # def test(self):
471
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
454 # s = 'hello world'
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
455 # self.assertEqual(s.split(), ['hello', 'world'])
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
456 # # check that s.split fails when the separator is not a string
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
457 # with self.assertRaises(TypeError):
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
458 # s.split(2)
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
459
125c19b294e3 Ongoing codegen work
bgo-osimis
parents:
diff changeset
460 if __name__ == '__main__':
474
38997ceb9bc6 Ongoing work on message code generation
bgo-osimis
parents: 473
diff changeset
461 unittest.main()
486
8e40355a172b Unit tests OK for preambles, enums and structs in both TS and C++
bgo-osimis
parents: 485
diff changeset
462