diff Resources/CodeGeneration/stonegentool_test.py @ 485:772516adcbf6 bgo-commands-codegen

Ongoing work on code generation. Enums and structs OK in ts and cpp
author bgo-osimis
date Fri, 15 Feb 2019 12:07:09 +0100
parents f58fe38c8c04
children 8e40355a172b
line wrap: on
line diff
--- a/Resources/CodeGeneration/stonegentool_test.py	Thu Feb 14 20:58:42 2019 +0100
+++ b/Resources/CodeGeneration/stonegentool_test.py	Fri Feb 15 12:07:09 2019 +0100
@@ -2,6 +2,12 @@
 EatToken,SplitListOfTypes,ParseTemplateType,LoadSchema,CheckSchemaSchema,ProcessSchema
 import unittest
 import os
+import re
+
+def RemoveDateTimeLine(s : str):
+  # regex are non-multiline by default, and $ does NOT match the end of the line
+  s2 = re.sub(r"^// autogenerated by stonegentool on .*\n","",s)
+  return s2
 
 class TestStonegentool(unittest.TestCase):
   def test_EatToken_empty(self):
@@ -89,18 +95,87 @@
   def test_GenOrderQueue(self):
     fn = os.path.join(os.path.dirname(__file__), 'test', 'test1.jsonc')
     obj = LoadSchema(fn)
-    genOrderQueue, outputStreams = ProcessSchema(obj)
+    genOrderQueue:str
+    _, _, genOrderQueue = ProcessSchema(obj)
     self.assertEqual(3,len(genOrderQueue))
     self.assertEqual("A",genOrderQueue[0])
-    self.assertEqual("B",genOrderQueue[0])
-    self.assertEqual("C",genOrderQueue[0])
-    #print(f"genOrderQueue = {genOrderQueue}")
-    #print("")
+    self.assertEqual("B",genOrderQueue[1])
+    self.assertEqual("C",genOrderQueue[2])
 
   def test_GenerateTypeScriptEnumeration(self):
     fn = os.path.join(os.path.dirname(__file__), 'test', 'test1.jsonc')
     obj = LoadSchema(fn)
-    (rootName,outputStreams) = ProcessSchema(obj)
+    (_,outputStreams,_) = ProcessSchema(obj)
+
+    tsRef = """// autogenerated by stonegentool on Fri Feb 15 07:36:51 2019
+enum MovieType
+{
+    Romcom,
+    Horror,
+    ScienceFiction,
+    Vegetables
+};
+
+class A
+{
+    public Array<string> someStrings;
+    public Array<number> someInts2;
+};
+
+class B
+{
+    public Array<A> someAs;
+    public Array<number> someInts;
+};
+
+class C
+{
+    public Array<B> someBs;
+    public Array<D> ddd;
+};
+
+"""
+    tsRef = RemoveDateTimeLine(tsRef)
+    tsActual = RemoveDateTimeLine(outputStreams['ts'].getvalue())
+
+    self.assertEqual(tsActual,tsRef)
+  
+    cppRef="""// autogenerated by stonegentool on Fri Feb 15 07:36:51 2019
+#include <cstdint>
+#include <string>
+#include <vector>
+#include <map>
+enum MovieType
+{
+    Romcom,
+    Horror,
+    ScienceFiction,
+    Vegetables
+};
+
+struct A
+{
+    std::vector<string> someStrings;
+    std::vector<int32_t> someInts2;
+};
+
+struct B
+{
+    std::vector<A> someAs;
+    std::vector<int32_t> someInts;
+};
+
+struct C
+{
+    std::vector<B> someBs;
+    std::vector<D> ddd;
+};
+
+"""  
+    cppRef = RemoveDateTimeLine(cppRef)
+    cppActual = RemoveDateTimeLine(outputStreams['cpp'].getvalue())
+
+    self.assertEqual(cppActual,cppRef)
     pass
 
   def test_GenerateCppEnumeration(self):
@@ -132,5 +207,4 @@
 #   s.split(2)
 
 if __name__ == '__main__':
-  print("")
   unittest.main()