From d754f69f7d97661a32797d2c2888f05443d538f7 Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 7 May 2024 18:40:36 +0300 Subject: [PATCH 01/69] change gitignore --- .gitignore | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/.gitignore b/.gitignore index 23188cb..ec1298b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,138 @@ TestResults StaterV/bu **/.svn FBDK/FBParser/exp + +.idea +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.svclog +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml +*.azurePubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +packages/ +## TODO: If the tool you use requires repositories.config, also uncomment the next line +!packages/repositories.config + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +![Ss]tyle[Cc]op.targets +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml + +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store + +_NCrunch* \ No newline at end of file From c6d2a42720c607686d067fcfa9e2f5512e7267aa Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 7 May 2024 21:43:22 +0300 Subject: [PATCH 02/69] Add parsing .slx --- SLXParser/Data/BaseNode.cs | 8 + SLXParser/Data/Chart.cs | 24 ++ SLXParser/Data/Data.cs | 29 ++ SLXParser/Data/Machine.cs | 8 + SLXParser/Data/State.cs | 30 ++ SLXParser/Data/Stateflow.cs | 7 + SLXParser/Data/Transition.cs | 26 ++ SLXParser/Parser.cs | 610 +++++++++++++++++++++++++++ SLXParser/Program.cs | 13 + SLXParser/Properties/AssemblyInfo.cs | 35 ++ SLXParser/SLXParser.csproj | 73 ++++ SLXParser/Utils/Color.cs | 16 + SLXParser/Utils/Point2D.cs | 14 + SLXParser/packages.config | 4 + Stater.sln | 7 + 15 files changed, 904 insertions(+) create mode 100644 SLXParser/Data/BaseNode.cs create mode 100644 SLXParser/Data/Chart.cs create mode 100644 SLXParser/Data/Data.cs create mode 100644 SLXParser/Data/Machine.cs create mode 100644 SLXParser/Data/State.cs create mode 100644 SLXParser/Data/Stateflow.cs create mode 100644 SLXParser/Data/Transition.cs create mode 100644 SLXParser/Parser.cs create mode 100644 SLXParser/Program.cs create mode 100644 SLXParser/Properties/AssemblyInfo.cs create mode 100644 SLXParser/SLXParser.csproj create mode 100644 SLXParser/Utils/Color.cs create mode 100644 SLXParser/Utils/Point2D.cs create mode 100644 SLXParser/packages.config diff --git a/SLXParser/Data/BaseNode.cs b/SLXParser/Data/BaseNode.cs new file mode 100644 index 0000000..4055189 --- /dev/null +++ b/SLXParser/Data/BaseNode.cs @@ -0,0 +1,8 @@ +namespace SLXParser.Data +{ + public class BaseNode + { + // id или SSID + public int Id { get; set; } + } +} \ No newline at end of file diff --git a/SLXParser/Data/Chart.cs b/SLXParser/Data/Chart.cs new file mode 100644 index 0000000..14be3eb --- /dev/null +++ b/SLXParser/Data/Chart.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using SLXParser.Utils; + +namespace SLXParser.Data +{ + public class Chart : BaseNode + { + public string Name { get; set; } + public (Point2D, Point2D) WindowPosition { get; set; } + public (Point2D, Point2D) ViewLimits { get; set; } + public float ZoomFactor { get; set; } + public Color StateColor { get; set; } + public Color StateLabelColor { get; set; } + public Color TransitionColor { get; set; } + public Color TransitionLabelColor { get; set; } + public Color JunctionColor { get; set; } + public Color ChartColor { get; set; } + public int ViewObj { get; set; } + public bool Visible { get; set; } + + public static List ChildrenState => new List(); + public static List ChildrenData => new List(); + } +} \ No newline at end of file diff --git a/SLXParser/Data/Data.cs b/SLXParser/Data/Data.cs new file mode 100644 index 0000000..3e3b0aa --- /dev/null +++ b/SLXParser/Data/Data.cs @@ -0,0 +1,29 @@ +namespace SLXParser.Data +{ + public class Data : BaseNode + { + public string Name { get; set; } + public string Scope { get; set; } + public Props Props => new Props(); + public string DataType { get; set; } + } + + public class Props + { + public string Frame { get; set; } + + // Type + public string TypeMethod { get; set; } + public string TypePrimitive { get; set; } + public int TypeWordLength { get; set; } + + // Type Fixpt + public string TypeFixptScalingMode { get; set; } + public int TypeFixptFractionLength { get; set; } + public string TypeFixptSlope { get; set; } + public int TypeFixptBias { get; set; } + + // Unit + public string UnitName { get; set; } + } +} \ No newline at end of file diff --git a/SLXParser/Data/Machine.cs b/SLXParser/Data/Machine.cs new file mode 100644 index 0000000..ebeb559 --- /dev/null +++ b/SLXParser/Data/Machine.cs @@ -0,0 +1,8 @@ +namespace SLXParser.Data +{ + public class Machine : BaseNode + { + public Chart Chart { get; set; } + public string Created { get; set; } + } +} \ No newline at end of file diff --git a/SLXParser/Data/State.cs b/SLXParser/Data/State.cs new file mode 100644 index 0000000..0fac43d --- /dev/null +++ b/SLXParser/Data/State.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using SLXParser.Utils; + +namespace SLXParser.Data +{ + public class State : BaseNode + { + public string LabelString { get; set; } + public (Point2D, Point2D) Position { get; set; } + public int FontSize { get; set; } + public bool Visible { get; set; } + public int Subviewer { get; set; } + public string Type { get; set; } + public string Decomposition { get; set; } + public int ExecutionOrder { get; set; } + + public static ActiveStateOutput ActiveStateOutput => new ActiveStateOutput(); + + public List ChildrenState => new List(); + public List ChildrenTransition => new List(); + } + + public class ActiveStateOutput + { + public bool UseCustomName { get; set; } + public string CustomName { get; set; } + public bool UseCustomEnumTypeName { get; set; } + public string EnumTypeName { get; set; } + } +} \ No newline at end of file diff --git a/SLXParser/Data/Stateflow.cs b/SLXParser/Data/Stateflow.cs new file mode 100644 index 0000000..5b0a7a0 --- /dev/null +++ b/SLXParser/Data/Stateflow.cs @@ -0,0 +1,7 @@ +namespace SLXParser.Data +{ + public class Stateflow + { + public Machine Machine { get; set; } + } +} \ No newline at end of file diff --git a/SLXParser/Data/Transition.cs b/SLXParser/Data/Transition.cs new file mode 100644 index 0000000..ed63695 --- /dev/null +++ b/SLXParser/Data/Transition.cs @@ -0,0 +1,26 @@ +using SLXParser.Utils; + +namespace SLXParser.Data +{ + public class Transition : BaseNode + { + public string LabelString { get; set; } + + public (Point2D, Point2D) LabelPosition { get; set; } + public int FontSize { get; set; } + + public Address Src { get; set; } + public Address Dst { get; set; } + public Point2D MidPoint { get; set; } + public (Point2D, Point2D) DataLimits { get; set; } + public int Subviewer { get; set; } + public string DrawStyle { get; set; } + public int ExecutionOrder { get; set; } + } + + public class Address + { + public int SSID { get; set; } + public (Point2D, Point2D, Point2D, Point2D) Intersection { get; set; } + } +} \ No newline at end of file diff --git a/SLXParser/Parser.cs b/SLXParser/Parser.cs new file mode 100644 index 0000000..fb660eb --- /dev/null +++ b/SLXParser/Parser.cs @@ -0,0 +1,610 @@ +using System; +using System.IO; +using System.Xml; +using SLXParser.Data; +using SLXParser.Utils; + +namespace SLXParser +{ + public class Parser + { + private readonly string inFile; + private readonly string zipPath; + + public Parser(string path) + { + if (!File.Exists(path)) + { + throw new InvalidOperationException("Файл не найден"); + } + + inFile = path; + var parentDir = Directory.GetParent(inFile); + + if (parentDir == null) + { + throw new InvalidOperationException("Не удалось выбрать папку для распаковки"); + } + + zipPath = Path.Combine(parentDir.ToString(), "slx_parser.temp"); + } + + public Stateflow Parse() + { + System.IO.Compression.ZipFile.ExtractToDirectory(inFile, zipPath); + + var simulinkPath = Path.Combine(zipPath, "simulink", "stateflow.xml"); + + if (!File.Exists(simulinkPath)) + { + Directory.Delete(zipPath, true); + throw new InvalidOperationException("Не удалось найти файл от stateflow"); + } + + try + { + return ParseFile(simulinkPath); + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } + finally + { + Directory.Delete(zipPath, true); + } + } + + private Stateflow ParseFile(string file) + { + var xDoc = new XmlDocument(); + xDoc.Load(file); + var xRoot = xDoc.DocumentElement; + if (xRoot == null) + { + throw new InvalidOperationException("Проблема парсинга stateflow xml"); + } + + if (xRoot.Name != "Stateflow") + { + throw new InvalidOperationException("Главный элемент не является Stateflow"); + } + + return ParseStateflow(xRoot); + } + + private Stateflow ParseStateflow(XmlNode xmlNode) + { + var stateflow = new Stateflow(); + + foreach (XmlNode node in xmlNode.ChildNodes) + { + if (node.Name == "machine") + { + stateflow.Machine = ParseMachine(node); + } + } + + return stateflow; + } + + private Machine ParseMachine(XmlNode xmlNode) + { + var machine = new Machine + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "created": + machine.Created = node.Value; + break; + } + + break; + } + case "Children": + foreach (XmlNode childrenNode in xmlNode.ChildNodes) + { + if (childrenNode.Name == "chart") + { + machine.Chart = ParseChart(childrenNode); + } + } + + break; + } + } + + return machine; + } + + private Chart ParseChart(XmlNode xmlNode) + { + var chart = new Chart + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "name": + chart.Name = node.Value; + break; + case "windowPosition": + chart.WindowPosition = Parse4Point(node.Value); + break; + case "viewLimits": + chart.ViewLimits = Parse4Point(node.Value); + break; + case "zoomFactor": + chart.ZoomFactor = float.Parse(node.Value); + break; + case "stateColor": + chart.StateColor = ParseColor(node.Value); + break; + case "stateLabelColor": + chart.StateLabelColor = ParseColor(node.Value); + break; + case "transitionColor": + chart.TransitionColor = ParseColor(node.Value); + break; + case "transitionLabelColor": + chart.TransitionLabelColor = ParseColor(node.Value); + break; + case "junctionColor": + chart.JunctionColor = ParseColor(node.Value); + break; + case "chartColor": + chart.ChartColor = ParseColor(node.Value); + break; + case "viewObj": + chart.ViewObj = int.Parse(node.Value); + break; + case "visible": + chart.Visible = bool.Parse(node.Value); + break; + } + + break; + } + case "Children": + foreach (XmlNode childrenNode in xmlNode.ChildNodes) + { + switch (childrenNode.Name) + { + case "state": + Chart.ChildrenState.Add(ParseState(childrenNode)); + break; + case "data": + Chart.ChildrenData.Add(ParseData(childrenNode)); + break; + } + } + + break; + } + } + + chart.WindowPosition = (new Point2D(2, 2), new Point2D(1, 2)); + + return chart; + } + + private State ParseState(XmlNode xmlNode) + { + var state = new State + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "labelString": + state.LabelString = node.Value; + break; + case "position": + state.Position = Parse4Point(node.Value); + break; + case "fontSize": + state.FontSize = int.Parse(node.Value); + break; + case "visible": + state.Visible = bool.Parse(node.Value); + break; + case "subviewer": + state.Subviewer = int.Parse(node.Value); + break; + case "type": + state.Type = node.Value; + break; + case "decomposition": + state.Decomposition = node.Value; + break; + case "executionOrder": + state.ExecutionOrder = int.Parse(node.Value); + break; + } + + break; + } + case "activeStateOutput": + { + foreach (XmlNode childrenNode in xmlNode.ChildNodes) + { + if (childrenNode.Name == "P") + { + var name = childrenNode.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "useCustomName": + State.ActiveStateOutput.UseCustomName = bool.Parse(node.Value); + break; + case "customName": + State.ActiveStateOutput.CustomName = node.Value; + break; + case "useCustomEnumTypeName": + State.ActiveStateOutput.UseCustomEnumTypeName = bool.Parse(node.Value); + break; + case "enumTypeName": + State.ActiveStateOutput.EnumTypeName = node.Value; + break; + } + } + } + + break; + } + case "Children": + foreach (XmlNode childrenNode in xmlNode.ChildNodes) + { + switch (childrenNode.Name) + { + case "state": + state.ChildrenState.Add(ParseState(childrenNode)); + break; + case "transition": + state.ChildrenTransition.Add(ParseTransition(childrenNode)); + break; + } + } + + break; + } + } + + return state; + } + + + private Transition ParseTransition(XmlNode xmlNode) + { + var transition = new Transition + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "labelString": + transition.LabelString = node.Value; + break; + case "labelPosition": + transition.LabelPosition = Parse4Point(node.Value); + break; + case "fontSize": + transition.FontSize = int.Parse(node.Value); + break; + case "midPoint": + transition.MidPoint = ParsePoint(node.Value); + break; + case "dataLimits": + transition.DataLimits = Parse4Point(node.Value); + break; + case "subviewer": + transition.Subviewer = int.Parse(node.Value); + break; + case "drawStyle": + transition.DrawStyle = node.Value; + break; + case "executionOrder": + transition.ExecutionOrder = int.Parse(node.Value); + break; + } + + break; + } + case "src": + transition.Src = ParseAddress(node); + break; + case "dst": + transition.Dst = ParseAddress(node); + break; + } + } + + return transition; + } + + private static Address ParseAddress(XmlNode xmlNode) + { + var address = new Address(); + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "SSID": + address.SSID = int.Parse(node.Value); + break; + case "intersection": + address.Intersection = Parse8Point(node.Value); + break; + } + + break; + } + } + } + + return address; + } + + + private static Data.Data ParseData(XmlNode xmlNode) + { + var data = new Data.Data + { + Id = ParseId(xmlNode), + Name = ParseName(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "scope": + data.Scope = node.Value; + break; + case "dataType": + data.DataType = node.Value; + break; + } + + break; + } + case "props": + foreach (XmlNode childrenNode in xmlNode.ChildNodes) + { + switch (childrenNode.Name) + { + case "P": + { + var name = childrenNode.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "frame": + data.Props.Frame = childrenNode.Value; + break; + } + + break; + } + case "type": + { + foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) + { + if (childrenNode2.Name == "P") + { + var name = childrenNode2.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "method": + data.Props.TypeMethod = childrenNode2.Value; + break; + case "primitive": + data.Props.TypePrimitive = childrenNode2.Value; + break; + case "wordLength": + data.Props.TypeWordLength = int.Parse(childrenNode2.Value); + break; + } + + break; + } + + switch (childrenNode2.Name) + { + case "fixpt": + { + foreach (XmlNode childrenNode3 in childrenNode.ChildNodes) + { + if (childrenNode3.Name == "P") + { + var name = childrenNode3.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "scalingMode": + data.Props.TypeFixptScalingMode = childrenNode3.Value; + break; + case "fractionLength": + data.Props.TypeFixptFractionLength = + int.Parse(childrenNode3.Value); + break; + case "slope": + data.Props.TypeFixptSlope = childrenNode3.Value; + break; + case "bias": + data.Props.TypeFixptBias = + int.Parse(childrenNode3.Value); + break; + } + } + } + + break; + } + } + } + + break; + } + case "unit": + { + foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) + { + if (childrenNode2.Name == "P") + { + var name = childrenNode.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "frame": + data.Props.UnitName = childrenNode.Value; + break; + } + } + } + + break; + } + } + } + + break; + } + } + + return data; + } + + private static int ParseId(XmlNode xmlNode) + { + var id = xmlNode.Attributes?["id"].Value; + var ssid = xmlNode.Attributes?["SSID"].Value; + if (id != null) return int.Parse(id); + if (ssid != null) return int.Parse(ssid); + return -1; + } + + + private static string ParseName(XmlNode xmlNode) + { + var name = xmlNode.Attributes?["name"].Value; + return name ?? ""; + } + + private static Point2D ParsePoint(string line) + { + line = line.Substring(1, line.Length - 1); + var numbers = line.Split(' '); + + var x1 = float.Parse(numbers[0]); + var y1 = float.Parse(numbers[1]); + + return new Point2D(x1, y1); + } + + private static (Point2D, Point2D) Parse4Point(string line) + { + line = line.Substring(1, line.Length - 1); + var numbers = line.Split(' '); + + var x1 = float.Parse(numbers[0]); + var y1 = float.Parse(numbers[1]); + var x2 = float.Parse(numbers[2]); + var y2 = float.Parse(numbers[3]); + + return (new Point2D(x1, y1), new Point2D(x2, y2)); + } + + private static (Point2D, Point2D, Point2D, Point2D) Parse8Point(string line) + { + line = line.Substring(1, line.Length - 1); + var numbers = line.Split(' '); + + var x1 = float.Parse(numbers[0]); + var y1 = float.Parse(numbers[1]); + var x2 = float.Parse(numbers[2]); + var y2 = float.Parse(numbers[3]); + var x3 = float.Parse(numbers[2]); + var y3 = float.Parse(numbers[3]); + var x4 = float.Parse(numbers[2]); + var y4 = float.Parse(numbers[3]); + + return (new Point2D(x1, y1), new Point2D(x2, y2), new Point2D(x3, y3), new Point2D(x4, y4)); + } + + private static Color ParseColor(string line) + { + line = line.Substring(1, line.Length - 1); + var numbers = line.Split(' '); + + var r = (int)(double.Parse(numbers[0]) * 256); + var g = (int)(double.Parse(numbers[1]) * 256); + var b = (int)(double.Parse(numbers[2]) * 256); + + return new Color(r, g, b); + } + } +} \ No newline at end of file diff --git a/SLXParser/Program.cs b/SLXParser/Program.cs new file mode 100644 index 0000000..1e5ef7c --- /dev/null +++ b/SLXParser/Program.cs @@ -0,0 +1,13 @@ +namespace SLXParser +{ + internal class Program + { + public static void Main(string[] args) + { + const string path = "./BR_GATES_HDL.slx"; + + var parser = new Parser(path); + var stateflow = parser.Parse(); + } + } +} \ No newline at end of file diff --git a/SLXParser/Properties/AssemblyInfo.cs b/SLXParser/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..83cdc11 --- /dev/null +++ b/SLXParser/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SLXParser")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SLXParser")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3917F540-90B0-4DBB-9B3F-95967F2549B7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/SLXParser/SLXParser.csproj b/SLXParser/SLXParser.csproj new file mode 100644 index 0000000..80fc397 --- /dev/null +++ b/SLXParser/SLXParser.csproj @@ -0,0 +1,73 @@ + + + + + Debug + AnyCPU + {3917F540-90B0-4DBB-9B3F-95967F2549B7} + Exe + Properties + SLXParser + SLXParser + v4.8 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SLXParser/Utils/Color.cs b/SLXParser/Utils/Color.cs new file mode 100644 index 0000000..079c59f --- /dev/null +++ b/SLXParser/Utils/Color.cs @@ -0,0 +1,16 @@ +namespace SLXParser.Utils +{ + public class Color + { + public int R { get; set; } + public int G { get; set; } + public int B { get; set; } + + public Color(int r, int g, int b) + { + R = r; + G = g; + B = b; + } + } +} \ No newline at end of file diff --git a/SLXParser/Utils/Point2D.cs b/SLXParser/Utils/Point2D.cs new file mode 100644 index 0000000..669a4f7 --- /dev/null +++ b/SLXParser/Utils/Point2D.cs @@ -0,0 +1,14 @@ +namespace SLXParser.Utils +{ + public class Point2D + { + public float X { get; set; } + public float Y { get; set; } + + public Point2D(float x, float y) + { + X = x; + Y = y; + } + } +} \ No newline at end of file diff --git a/SLXParser/packages.config b/SLXParser/packages.config new file mode 100644 index 0000000..becd077 --- /dev/null +++ b/SLXParser/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Stater.sln b/Stater.sln index ad663f5..de6f530 100644 --- a/Stater.sln +++ b/Stater.sln @@ -49,6 +49,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FBDK", "FBDK\FBDK.csproj", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CFuncGenerator", "CFuncGenerator\CFuncGenerator.csproj", "{EA67DB8A-BB10-4343-87A0-E91EDD783C8B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SLXParser", "SLXParser\SLXParser.csproj", "{3917F540-90B0-4DBB-9B3F-95967F2549B7}" +EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = Stater.vsmdi @@ -130,6 +132,10 @@ Global {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Debug|Any CPU.Build.0 = Debug|Any CPU {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Release|Any CPU.ActiveCfg = Release|Any CPU {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Release|Any CPU.Build.0 = Release|Any CPU + {3917F540-90B0-4DBB-9B3F-95967F2549B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3917F540-90B0-4DBB-9B3F-95967F2549B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3917F540-90B0-4DBB-9B3F-95967F2549B7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3917F540-90B0-4DBB-9B3F-95967F2549B7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -146,5 +152,6 @@ Global {5E9FF3AA-0784-4B4A-BCD2-9CCBC39D4D66} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {09FED13A-1642-496C-AE3F-F0A2770BE9A2} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {EA67DB8A-BB10-4343-87A0-E91EDD783C8B} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} + {3917F540-90B0-4DBB-9B3F-95967F2549B7} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} EndGlobalSection EndGlobal From 701f2945e0e91d76c1800af805723f7460645e5c Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 21 Jun 2024 22:12:44 +0300 Subject: [PATCH 03/69] BugFix slx parser --- SLXParser/BR_GATES_HDL.slx | Bin 0 -> 22601 bytes SLXParser/Data/Chart.cs | 4 +- SLXParser/Data/Data.cs | 2 +- SLXParser/Data/State.cs | 7 +- SLXParser/Parser.cs | 179 ++++++++++++++++++++----------------- SLXParser/Program.cs | 11 ++- SLXParser/SLXParser.csproj | 3 + 7 files changed, 114 insertions(+), 92 deletions(-) create mode 100644 SLXParser/BR_GATES_HDL.slx diff --git a/SLXParser/BR_GATES_HDL.slx b/SLXParser/BR_GATES_HDL.slx new file mode 100644 index 0000000000000000000000000000000000000000..ec512fa26929bb63167abf7ed5ad9695361d53a5 GIT binary patch literal 22601 zcmaI7Q?O`3v#q&o+k4rzZQHhOYcJcjZQHhO+g`o@+tGc_>ArCv>ZN8rROYCPs`{5%6HT_Ke+=JBy)}CU{Eht^B z%(*QWFd(Dy0eE*pqy{o`s4XF{7Ci3GNA!A1Sr zdxAcqzIO+RNr`7ls2B^@lM?Rp{zeL<_6-QMbgCy9C%L$I6&25BYVx+GR2|aIS@fxK zY4`%m{|}As?xz<<{%IrjPbb{}u91z~|6e7OSOHmJ1{jfAB$L^qYaoIo3AgP4c?xj) z@a1sQ`a<@msq68;VHj$gcb;Fn*jNxID@l^#sZCQ9ZO$lJAxHS7E z=m=FYv&U_x;noRIt4Q(+FL6ybEHr{Y_oTogm`im;@AbBhAe+i2j(2r6XiO999(mZe1S*r_ zk6Et5wN&o;c3wFm;LNqKb4a0fg$ppdSfE{V>vU(1hX$w%#~ed_AexYZvQ!e zsmD-I4+sDN2*>~cX#YJoXLA=DLt6t2Yg&6-vupQvt|Yy;-i6FK9TY~*IO}f6bt2)F z1QR5~uqy(X5COZ-o~Ww?60MfBlKv!<5c&jq7*eg2esweIpxMRSUB11~_L|xDn#Zim zo*Abar<>1qz1mNg9CxQh@T;o8Di|1;s}Qh`*ns+1JHA;E?n`T4G(h0UTEMm3fB=Ro zJ3gYH8Tq7ufYL>IwNDBA{txCWi4}KZ+en~Tq+?k$m_@0WNT<%mDnAuI4en0nZ_!w- zp0;sg=WO)QHW&s3#&)$zAR^Y)v?%W(urAiYOSOH;dD-RrJ?ZQXwEI!EBTT#Zx?UZ$ z;w@Zxz5$pWoNBf=-y#1 z$lE}JLrRqIoJc1fXGU`h+tD-9(zxqeRP8T#cbAro^{ubEdO55@%PMPJ3v8rAub0`w zB&77-`bBJY)}VHFDPEZTx5NFC;WS7M2>G9?XdJJAbL1q`#b*wICj7(pO~Yqp3ugTj zubHLa^mp!4l2D+rFQe_zhbS@Z|SiQ}E31cf86fIOS9z21V zF7q}x3hDA1`SG#S@%^stoOMpStE8o-MimzqJH&q+_maV@pB=B9f;=Pr_}tnM6_sc3 zGEbF1m+k^)AfBJOgOAT+Jeuz2YiL+6h(e@yrxfqO6t*=zEbqiQ81u#<>5_ZhZLlV{ z%@BKjx?+K(CgdbO_N~1IwzRmu5!MwKH92c2DS^SEFp$Kh><(?QF*hyY&Pv@WE7DOi z-gCO$Xlsgw#AIe-Ls(!Xgau96g0hM4a+mQ04RK&T=~5VfDtW6MEDej@j5}@Q#DKjP zOHGQ6N~EIl-tH|c51hLNgt=JzPM8`Q1!c{_`$JkIbRPr;L`JR|c6)7?xgCV!i@!zs?CCvjGxDBGi36t5ssk__9tn9O83-FcBT|FmqD`%-PR&&;YMWDbx zb4yyXm$HNc`Z9X;5FEOi>WGaPfl0=*B_`3pS74!C}yt;NI-h?KyKwOtsx6&l|+o zY-SjmO;;MXC72BrpR+`r8AGRPF#Bg{k9HE=X*?#fzQ!p_{@=YX3?nQe6*HMaM>USY zr}vBMz=JXcL>k|Ln2ofz$P>w?S*i)lTjzNch1Da>#W{saTJj*fH{|81RAzxl_&RL2 z#?SO zTS*z&QcSJKR?dOXfk$0|r-%z0 zg@mM+UzOqh0v|$1HB=~@u}D4w%2#ogvN%7GVPFRdf-OfvfCA;RzhLt=ejhI+%Sw7@mPB_bV8QxMV8M84A~8W1(qBIil4o;NEjut zn~USUX*sg&_R2dbTF-M)c(DIrhe;#g1U;x2;NvUx?%cxzzPf4z1y!p!tXlWci6?x- z!>vM;yDQ%OAeDb^dqz(ME#C!etc%Jr;6znb9sh3kD?_zMX33JCcm9lyO}&jjAJsiKYw-^ZX@W@rd?&# zF8X1Kz&EbYcblYXz^Zww)dW*^VvpAd6J!yPMEVtmpLU2OZ|x#(Nj;HuysPZvQ4p0# zBiVqI+J6c;U0j>BLIK*Eaa7)ET`o&vw=WCSguEdkO}ip$2iR>+*O~0ilypLldoD6_ zeV<1PEve+Lp=3zH#B(P?LPBbopM#G(9m18Ph{>QQJ2y6(mmB%~zWigW*ke_-OplM$ zxqZ3CxCWol`icjAOZmrYO(;;_i8jEHYvvahfyJ;uw@_OIo{lIyzeKvfVNH&+1_u$q zLYEK;YG>ES39&pRB+&1MHOqsfsd$IANCOsLxLozVy&NSFL$!oHsW3RV;?P&UKc1WB zWj-@nUc#4d!}f@x7ow9`=#R=T;ipR=vQJBIP(R9@VnIbWuH-$$%K3MO>Yxq$Qm_S1 z6O-*G#^*1-?A)6dOlBj)!%YYf9%y&p#iI#-lbTxyV_4_1?!<1N1LRozjA>~J00oeQ zN^{H#zEWpya+CeKKZ281UJKs!g}CgED(H4g3*qgL6I9zc2N9zM$5jhjsQ^WWUIviO zNlrmR7WoS*M$Au}6GqdRf%lf@&PL4-wGFygy*%}}R)IavXqN-zx2s%GnN zE@a=iX9MDzjlMUI7U1tBG4Tm?#cV%u$DiC-B`!-LYU5ZW4QGc&ec&QbP7gkK@H#rn z(%GWn9!hHhW*HfEQ`}+-uO2hXt%UL^^P8e`M0)*jT~bI5|8Aus|2=Q)ncb_aDXlU( z7N7(yb6a3xZy*OgN636!*xuACOsE6+WwpFT)!2xz zpKrdO>?o?Zcb7gMy-Ym0@Yjzghnrl}z{-G^7vbxqs55n3glQ;R#qOG zpxb{16S@(?UtM2c-yIsl8Buo^5fQTkt^CEp#U(|6K=OhM|5n8C5<)d;Ky5G|JC{xf zGX(su(hLSmN;bUeKGI|7%y9PLjC-UtWXs@0i(gZ0lN{zs=l@_F8UXdBl93b2iPwll z;JLjjdhaq4J%ohv1xo_kNtd#q?mB2Ck{ytaWRZcwmBG0OrIZkyz+Mha>`FErMs02e z9`lpj0JH!~!q{`>w}FSK|9rS0)L62rA!K)b%6z#O9=Zif=zcSeuojWiS1`_8bf}XH zoH}hs=gAo4;fx^wvdq7I*gs86a}N&wcx^pdjv)YCI5aP)XU6Y6I5@1W!23`EdN-9U zpoTq~0pAbZ1+qx$UU(W3#NYYhuX70=E)XIIvt z!>`t+bW^D~QE+ahs^Yqs39)vaP90AWr>))xn9;kV#zLmycGSnYMz7abWBk$PFu{w5 zv1uO7+IGgokkB6snL??jux!lfJVC(O&sk@-rQ}aM$1h>Jw6BYr``&f$d~@>x;T)*# z)Ke-l-D`WdLuhgGgkeR9-dWg(P3j5ft*iZ_Dw(*)=l&uSQu>6r-S5H8_^e9~u;#88 z?<9m27LVSe8if;@6Bd-HxkPS5aZbWISX`QIds3AwH0o?ja)hy6{LzuICp)d76XK|x zQxe513}niaf7VG2O&x1=vk_vpV>B7w89bP~csw73GXoA+TqOXoLHV@mHI3dlV1+z? z4;B{I%*;sO&r#wTYEsG}7Tu|1=H0;+rxr0h1TzSA*pyy~<9;3MfOm{gz2C>n#fF&f z5Q%nBej&Q;M@@jCfzDTn=K?e((^`RHp?DZru;T5|DQA38M9fLbW>2x(E#$-Vlo&29 z?yg@uUYFrGO6douVujXK(33|bn!H#_Trw(eyIl}JUFkii0@HvTJ5sIXyU zFeMeG;YR-%{4(3HouAILQZC|HqSgC;6F3JBzssRL6hWu0UU(b;pz6Ved#(klk!a!U z=FNC{hCHWBKHXz&2SCM+f!JQCF}l5~>kAP$I1|5mOsVYo>Sw7*4wt9h{24M1db4-F z+r{RI6hV03>{~)IG&2Frm_*#n$QE68!3jfB6b~7RP?k&IA~(?Z znH;W2W-(2Ku-M&DFe*!@Y3uFh>#}K-OPM%jO-D%yre4{JrG<%$I}FHgW@jlGf)pbK z!{?%Ku(l$GZ~j|_837TT6oyfi)eLHm8xaVvE*E3k`r8HsZ0xqip;bIp3oeG~thGPO zg0NxgI)jbo9asSWE=!>M+s*Cchs5Vr+vN?iR`6q3;yrNJK%+zbicKhbe+ zV(dy5-{{=6-Tu0U-B0>HD>O<|18aX*l|QZGDC47>*%S?p7Zw4#-cqBzwzKk*R`guo zglE0$9%%QVgnw8?MFmc%)H9S39y}Zz)b6v1eYyHv|| zZ(9_zfHNYW$`!D-#B-CW%e)6#N^cI})*>hZrG0O}zOTruXY%Tl_Z^b|0o0~c-$EHx zkN71WIku$9+a}Djv!GXMb0f0V?@!p6ng!q$q;(Av((%Gkod%+bK+KhWoz$I9uDHDUKu ztuCo!X?uALt^75rfM&d5q@qELSBj};Lwf==K5vLcFyR0gpTf*EaqDDK zIHfb-Mzj~(UewQPeRBf&*?ZE(*Rss4Iz$k6n}yo!Q;7&>>Ll;J^}cgH+DhJQKdq*f z4A7raZ;|}aEn-064%xd$g*TDsyWGKOt0mLLovP8Uh1U;-l7=|COb$)D1qD^m20f-}4DTubZcGZ=zL8s=YqfF^qHJ%l|8w-W&(BA0mN052omMo$ccz)cj=IAu&u!_ctXC^Y zmUX1MQMGf^vN(Q`S1OKj?2;2?YQVpuk`lx?NQ7+tbE! zcz1ySK**)qp)?%$W`R9tndr-@y&R8}7y#f+^zpwJ>=3if>-)yGZMsw04s#^?{Zsa{ z@VpSq$lGzF8E8`&ORvuEUpQaesQn=()+DIOrXNApQ12bFCw9r>>n&E1tD5%wK9M%XmMnyEeJa zzT>ni`eC41<>1^3bh9dAQ!0SRZN3p}wJCN44xlHRm=Oz{Hy5$3HFhTIN34D_)BGW> zc9?lQ3|+?{Heob6=d@}|8#jR;cX`EoC69N5Rq9MRqSR-TsX^DCOPL9QS)GO)rwp>l zjh>u;LqKWU@-}%OU0^h2)pf3C?gVoU^qh^_A7kBgIzz2Kgl*QLR%sdLw5UznL5oJc z-jU?V?jlKxTRf*CI=&5dA{5X3+_t~7^v@`(064N?tSmBkVI#aOH}0(06hE(HHZGbt zc~pFAnU`HJt7_qzZsf7e2UA#az7##1+Uruk&j(zjt-OSA8j5wV-jS!$dg#D|K%OQZ z7>I?6#DCu~k8X=0*g0LqIb|ZT7FRi>?6D91KIh?hWe57c9k9Krg#yk*t%$a(Z;iNN zhAaKA;G-Q%i_3YcS*|2s@?DeoM?cHV#$}ewImxFrr(|QurQCX=b5-!ECVmaq2RfEv9(8J+#;|Wv z8nnxAQR9xJL{$#20PgZM!=$VS%7^RtKvB(+$upmzNdm4e!Q1MDi9l!nNmXv3(hpyA zTXMTb7%vm%Cxdb5Mu8cUh%Pphmy!w^fZfQtN` zxFWVf;n2H}S7(Dv1+%Ywi<( zcA4eGm#XXoHYyt!fU=P+ih%fGfcQr8Cr>;qknxVx{yoVr6gxexE0BT1qJe#RcpC<^ zX(#aY-JfqCi;hw6Gdrbxt%Zc3lfZGlY6*+dLi(8M9oQLo19)Bx@sx5xmA|qo6Xf7L z+PmG-$I2iThjxYp&@zdGo-?}*H{lj+b5~P65N7vfRgv)cPFmP~(=uMo7c}KrZKBVN z%YsxI^;-3Mf)_5OVtaB1=t-}tC0jhQLOc*&E$=q$M%HbbU1tU9<%PD^iD)cA*u@{% zjT5uPbHIbKOqhei3+#@Q4~b+)zwwpBDP-6ggooF?qizC%UxdSDHep%KUhnGjBiI({ zjELATLXs=)_Ho$oTH+i!ZI*9}sG8X%ni3M)(n3=6v=v66^&5gIJSco7iA=uj6)54k zR|BsQd&eMJ@FTYxHF0wHpsJe7m0;7B#W!u%oZ698NTB^y6p$fcqCEo$4(fwucrFBs zO-jc*IC_PhDP!k6gGQmj9--SWTha-SuC`p+CvbY- z>i}ePo5b`bqx$-e;+6iowdB%wQtIDRIZ=s=5b>?g8k{P2k_X zkBM#~8Uvuiy|S3KNd>XirMb}+>9d;MXlS2zm&=mh0+S3-b%|2UE0ak`k%ziiFa-`C zNn@`?&1;-HRMKWoN~v2X0^p4Z2oBH+a6aA`SzsoqE_%91iiW4`KfrS}y3*j4R{)$9 zbv~XnrA1D<6kyKR;B;>2%pL*6un z)p*t2d69PCBEnV3Z4wMni(N4|;pMWQ5k;$Xj^%^=k*5^@z=XsZjpH74Vf$I9Bj=|(m z=V$#2Gkl#R*V0Mg3MMhvka=%=!oV$SaVK5g=;`vra_Mz?Bf;T&rZC($-nZjO%~$74 z62>b3<0Gf5|I71*C;h}Xq$9YVg4}B;r!Nw~F3_4cUmJ0`R$FT0UzpK)2coxp1i3U% z1kQGGyQqJPh3e%u^D?*?ZG6ISe-i`=!^qV9XY#ffg)>wvl5;J^7PNH;I!)N!e1hD% zST@EToyV}*T%q-dzq{D1A4;L9F5Kvi)0^hz4A|Y?lMy~yZ|g6L9+Kpv2i<%PQQix`aj0i4#4ChG>VT;(2gv- zt7w>NOpTq?jmF-qz`Qav?@{a}4Qqq*!+Xo8!-~|~pk(9Bnp&aAqCug_2 zV$J%%`g-9CrrBRfnK8H9$>d8Ue!y9$Rz1wp6U zh6rQ zt3@Fm^{uY+d*^o&ecg{FXF0LKWUqIgh<_2@Do6#tsl~M*WrOvZbJUH5k`lY=JSL{i z0;W2RltQ2U0s_^7sHJNnI+IuLkXP`&=zk$cgcAZ5ftr7xreL9eB31(^GN1a<5K*F^ zr>q`!@+#c;DGv7olR0XwOCc3ij$G5`)FZ$LT!HDaZ#D6S+!UE#B!YnBvczVDm9Ea= zdX~hEk~%%}2odhr5F#kuNk8CS#)u30cBAq$;G1U1dA$$AH)kIC@{BJESKx0Cpf|;R zU@^rMm4&DL+iW>fFGyVW=Egl9rAGwyOb7-F3S~p>>PHN|`aAZUoH+=3^owC9$7RUd z31BEJJi1y|J04Pyo9T6v1FPx0PO)>K@ENaQ=;(B7LKV+#ZEvCwt8b((x2tYSw>4yL z6^nF7nAo?i#p#BsCHrw(=n<`T|-R}Bskd=VD;VqQ%$-9f0@;Uv zDxV{`3b}BiTGiD$C9kGWZCN%gubz$D-|GG20M3Pmmrd7vrQ3IVZmOC^2F%z%H)bMB zQQSzTTl_1{Dzru_tIkfcv|ohV_}!qkq0nU4?aH*$1fsOGtF8uFq7F5d{TjpkZnBXFQya? zLknlLq1>GW@}b4_V&?*q2@K*8SF!%iHvvlUFdRAuNgs=ml*(~+uyOx!IC%Q8{KD)uU~y z<88{!h9kv$e)J=o$x%`wM5fwMKj21PO8?J?U+$5{euhTdYk>6rh(P0+RPRUebPYv3 z8YcbWv(?*U1C#0v;;(LEgWJJSUA9MQQJhWYqrATkao;jg2073I&X>-|^y+7%@HO}J zsG;R%Iq}wtBqz~s6NP_KUlJ1xYxM?nk+zqSd>0hYfL}KNek`oMa_TKYh9%_0Xo@-GPonUwUs1s)3nV1qB2y9Bbs^!qmaihl#yKv5q8kvh0h3P1 zFv~b|*n{jN*i6GtMO-hO)VVh~!^d*N2MeIf5*@zM*{L}{Im?G{rwwS>GAp)>*u1_d z56!$-2rWuOW$nW9lRy(xv(-1IBU{n-@5`v*KKDo#9C}%sx$odF#D2U5AF>Jk;`vyn z^?F(Tu63vMT9rb3eLb8J->>`<0GgTrz?wnl{0));Bolge@d3IuZeO8cW2B7gvLX}He~M@ zcl%0^HY68fyS6OnSE_}yymfefNFqw95&YJVXaFf=KCp^Pys%ZGFY zzfC4!8tGAGAxTu(I#qTh zQIuH|2|D>Y35DnIg--4d|B`ej+gE#OJ(oLDBU}mA!`X1~Er$Ga+A4paJyv`4h2(3p zZfuiit(H-wSw?(ukDtzb{DQ6m%aJNyhPLooS{Z!C^7E$iMDWblh}rwe_g^UPKW41E z`y?>)e@>-)3jhH0|Bm8}>}*Xf%#=)=>Hh=bs&#DausITbdU^#B0tdJC6V}G3tijmk z1yibo!N<{-9D%M34dl0z{*gG#HS6IWJwFv=Hz^txy`xULaO%~;RKxlm^`hUm&BqkC z7v*E=h}rE+H??gz)bgn`b-x=l&*vAVSG(@sFNQe7;T6c`?p|k3zb(375vA>SSAU(~ zmm8s0raj`>+p!ei8&Yd6d(xbp=`tT$A)&4wND6C8uNkW+fhX^2+ln~;*D_nI}?bpC;^O|MIH zxU(A-QI*zLE3W?C#bMETZz7MAOL$erQj7fcoFAV!qf)1dY2(^j-;STVb25y-P9QS$ zf;BieT|O%jSHxskDUCR9bk{}n-y|w-PoXJ>RppFvTjOdNqH(1unSd>SWJWawUZ^>R~;i@LI($JNTMJy%3bkuBO%iPA13 zTy^RQ0e!ePqE>YzSgm`@3vmvRI?DTV>Z7md*LoObY7`%3)_#9HdA#Ocaw&QKY0 zVAN2pkNP*??*`@9851O60?*x?ZK3g_Cy0?8yfg$tL1&*pr#irEwl~C{>C0ZGR~31?M+F@II}o#rU`g~ZtL0N%dWaE!px6MKy1H-xyZOHL9f(v z(yjPKc1-@aD2mXvbulN~?)bo<#HB_%7=3Ane8J65%&OI7-1(Yqdv%tNQ7<^>by1@Z z9=YCDBZsb>)RX~5)>G);<{^!nlO){X@0p5R4xNC5rrmvR9I)#!fTVaK#Ac_pm@y6< zE`U-z>eA*oq7ffLr3C_&?R~B_f8C3E0G%c>oYSY2@a0+Dw^MgV1E)KwA`X6EyY=4a z1v{+2i|!>)5{zFZa28-mkBR;#iwZ<@Fp6tAd~S=dfP-E{B&EVf-(Ml;sD<1?!y*j; zwqUuZO=FXwSCuTx_nOAIn8GanzDg$eCC*gKQhJ$f6>B1g(*-?9dNoKQVgW(M1%Oz6 zr{s6IV`q=D@asP(px{8zWdf2>r)YrSvy6b#llsMsVNiW#IRiiLcE-gbId*N*xhKq2 z3;tw!6ChY5DAcVj|Ng~{)-d+JhDRWl(yVhwa28N0+Hw#<`35Mr=3v)@nAWbNLES#h z=$-Vjg!;iMJ;YoFj%P3~1QYv$0k{ql&Mf+=^xgg8fw&jD3||5;)2TCV^cxEkkMEz1 zO1aRym<rdW$2J!a0PKE z*!mwpr%DAj$Pw&FmD|mwFk6zF&kt+b85%#mcz|;bN(!-%Qx@Ye@c@>k0+r@zlRb7TM=v3`X7Mzc%c*Be4yLkQ(3dMlq6JEW+KXCT}_Rt-tgT ziz^6n)t5=;;&;QqdbQ?R89tR`;yK{FjkIn%dKWaL%6V_E4zruAQl&OgHZO$c>%#{} zC>aGP0ojV-5>7gFlpZv}^r6Mn3YZ|Kx4o<2#$=h3g=~rvH55W!%uY_&gu8ROhRTGa z1a~`)rWO`WGV=>W4_N{67IL`?^(dw;#=+?K^wugnMIvK zXOf44se)CJFEu`efK1O@dd1lFJfY!ZFovHZJUMQ3;o8IWKV3uAo4Zy zR2l|CMo8kuQ{~dHt2V4RElwzsZdYHnl&_Ilb}o?AZf^`}TG7Bi<+2smZb5!&F9!c3 z+n5ieCSMi(JwAW`1kD@MA!|@*P&$jn8l^BfnrQFIV*@({4X7D7vL~fc+J58$jZPdf z&0HCL&Ze598LU>x&C1`6Njg&3o%>xm_Ke2jd$S#FW=2Cmkel!oZt5o&8dddoibV=| z5ED4P1Hxc&j;WcY5;e!(LfpJ%Y?M&J0)$WD>CWCLO*#m<#+*S^a9%=pK)QlnrGhJr z9p{*t;3k>LjH&G#`K>;o9HO{?1!HY10taVKD27MTNIG2g3KLw*UeWCg&-grfd(g9{ z?F+Fn<>N5)FLMkmz4sr{r42iBzc7@qJcLRsej{ZDfI?uaV6PPx0A(dhpzZJ}q9n&? zEfj<>dbqD>V5~n2IEh1W_x|Sg1Yq{O6l@bPWE`;FLHGg$DAWDpLczZMSNs%Ewo7dE z6p9*vB950)pvO+|s?^xUhWzZ{X%LV?5}atA4D1G&G&W%Y>v#3D9(=veHZF94g^IDP9J9dDAk#e_@5kj?7C-A{z+qh#wT4V zIDi-1o{O+2Fs4kQMqUXbcktO#Ac$3rEYINJ%h{3EP=XcCJq)g^cJo-UXn?adJsoNd zKPX-0=|kPmg4~hv*5_O75(oz}ZD0N}DxLgZ&d~aAq7LkKf!RbT-4NeUPeGmdqUUig z4%az6;(FeT>AX-c8k4IM7cU#KI!pGU*2!!=!T=M=O2`UfBjWzn(<2u1JVc#=F*{Zm zFlpe1+sK{eIF2GBARL79qRBaXjfM1#oj8l78HxAl^(9HH{w<&{tjgWhR|yXF3C%WJ z?A*OZ0df*ZbnE2=Iwh@Rv;DHt>g$?7r=0LC>Oh?(OtLsM3f*8@oDU**wDJx}Z1t+j z7BZLb=7ad?VgdtHn!q0?ZHWy`aa~rYT6Boe^rHsDhFFphDbQ?B93fXBLpI^uWgk7M zEE9!0%G;hd+(pzOALw5Pk`-n=Fh>b}Nq`+cid9eXrvhOewpWr!$S?Km*TnI>&J^D? zmA^2`EMu)A12}v1?n9_((bTV7+&2)JKCV7BP^OCzB@tR@bM zlz```6_2ZLfS9sc1WziV;o)2Aab*v6+d77_qgKF(fo3zi7Z94bP0v$ksSo#oWAO^C z(EylQxY_wbBg{SmR2Cak^&4PKsNgd+uc3MRE+S)fP@g6mdLm6zBB8_=jB3;)N|uH; z`IW(8Y5z9aT;ux;(!RFigpIUiGOkzOzSc~0?hx&$94{7$T?-iO_< zQT1=<&v>$V-;#H*_#b4j;E%K=s+G}yhlRKJDe{HEg}*IULg>Ip8XLu4%DX(QH7`)m zmLWAvZCxtMU*llXHGWvTA(oo3E0KCzdLDNuV{d(*z-VAVa7CC~7(XMEG91$va~j0; z@;WzVLl4rSQ)hv?5R)^`Qh1(TY4)5Zg*l0IDimUKyjOH%+?0CBmgbKuCOe^wB$pe; zsyis{UFwtppvDVF)Z|RblHVFdPYNNr<7C2qCr99u&m(+TQR(%rB<->qv9_is~nJm zPHye}*EMf*E9TcS%`-^Mf>S#p-(t zyxS)W$=9+?$9>i_kt!AMog&6yFr*)yO7e%JT!#d_V&)=PeWy)hcoo5fTC8+Y#KAk- zeyr42G%|SpvwI}8Fw@c^f^bfFfE5Y-6^*OOy6*J#`vKS8hk3ehtTrh$H`cM0l|Zc@ zENYM-&TwRu?_V^O7alaH2<|XS8R|qtcc^5=E=xy_i{@?(?E$@L?QS%W&ge^Lu%dB4#=-!f>y!p#s(AHhbbk1qM4;og=!lmm$c)}@355*HrF4T=WZFL z*Pi8)1Y6>7d(T^BL5_^ux?G^t$g=yocj&PV*$HIS_1j2*+cx{5V#R*!*vywPamh4; zZk)L1$ZsO3ee4B3@#&lx37(f9XwJ}#9$S!imkf=VJ!0K18W!o7jCz{0CE1SRkIMBA z8$o^ru5uu>pfW|Zv>?h}8oVdn@q%dp6MfrYR8c6ZJEOhheaZ>%5@3#UlM{yU$vnLe zvp0m3w&(M;VfniLM$lUE{hZ6?+|)w1{ulns=Lmo~L~R9oJEpigh@EioX%ufd^)Bhf zO==kZ$j!2CRITf_v_8i%Aj$`%;;yE&-op~5o{Oaz8_UJ7s<)W_s%|y-4IJ;$ozbi! z(EWCRoeJG~Xc7K7Wg5FH*m4&UPJo(V)YN_){r>L5K<$^-fuf z)SJeFBi8~l8p__cC{Few_Ozr&D;^#khiz-W7lRTL_sQ@^-sT~2W(=p#D#px4QQx+! zVdk3PXxPi%Z|)0Y@3$j}*=+3kZk@XTzJ(GC2s2ZCGD52+w_ zk_D%NbmwfC`a)8yk8_9&*p#;N)!xj{u zAYaLx(e#G-D-A>5LRI|HM{>;&$V-q+^O`J3^^7XMltvFc-0S2w*$7>-9uUy)+ z{o|YR4lEQjyQE%Nw34E5*^B-E5C+ZgwT} z;$G$uaqpSu<37rNrp)z&B5$GCRbg+Z&yY~gwru6j*$yK+m@d#9CPydP4Vkb1Ix#`L z7@icGvf#pQ#VOg9kYL%(<-QRTJSgRo3Hu#*gAMmCA4hHVl%%pZ+rAnTLZfa=y_0I7 zDh>0`e6!eN)ei;dpkZY7W%OvavKhSHVb5--1>wR*jhD2YsQQ?_>0DCF!lzET?EsfN z?A1ApIQ!sYrud}OS$_R0>AT{hrm5`kYls4FrCgk8gi94rCzb`Qc?cx4IHbDA96L~3 zmpDG(=L~?>qxIc?ba8mM)>eub*_}dDEt8fCgU}P>Y2VN8j0cvKkWP9KVEN>B5Oeo9 zIk`ux!Bhs}b%oMSX0o|g_jeWkjn&fTCal5}r_<=u$S3!spvu?&sj@r2&eSuzEf3cJ zE^c48s2SARAt@tK7$bDc|Auq-uuqDB)N=JwzxXUu`FFh+4pQtU@}c>Gm2q^H%d1w*|%p$Oq{Py3+?vXMA`5`Wm!b%lW(BD>d?a{P>M6 z!HH4M$oBS)1|QA5NJpL!`tc@z=8p|Nsq8DRlKnbJnZDRAt0j6N=N@Kdj$ErPj*V7YB*YZf1S#C2A}(%stLna@DcDbQk0QVo zT-ie#8C0<0Gn-XStbo95Hb<0j(Jnp#r?y-x-^0a!wo6cso?b5*mQLZ~ zF{zw3xSDYrU}DXgya|?^(pBoKr?O(T(Y4Gg!RkVhG2TIpc|nC)t#Mz|rlwV_yU2xP z4)CYK!>#~M6~|l)SSmM0>=>1o5O?ydj$h5$);YcJ0&}ZLdv$^p4;roLGp!2w4<;6T zJsQl5)u9IgD>g2)JsVyh_I6fuP+1CIMOdUc3uaoIg1OH|Q1LzpfD3u5$2(T-C>#EJ z9M*oUF`FAC_2c8h3s{Yq5>}Flw?-oD=d--QUu7Z9{8rY_m+xFaHkf}C_XxE$ym3E} zA@Z1Bf&|`AG3=R|`K*1Eja1I-WmTM)ESC12FCNcdknJ-m`K*Riq#If#h~*f1x5&yp z@E9pl+V6j}gNywd;yNo1-26`_*3QFVO>)+QHpo z*(q#HM4oH-TT_d*#9;p*_~}TKxp>H)+VJXm_k{fR(D3TH>?DW;^3j~?P5DIv{j`hrM0NiKVT zKKV932v#T;b{BTTk3sjK>n7rL>)13b0P4T{%W|c& zua&telVAqbpW=)>l24=G?xtl27~5s3TYudVJ|Z44JWn=f4|b;^-c}a00Z-UBZhX%K zVrhRq^p9?y7pbE0k_IFq3aNGTsehlRSbe-q+#{VJx;%&S)a>YR?C<~>IvcK~sNO1r zk9a+Sn{x{<>*aBjgxA3b^m^5e^RqKnK)t~6l?Ytkxv-z7X_;j&u{UQo8Q?5n9Ll%O z6LZQ~0jD=}kD%WdH4CMZbKW2Cu9f;!I18lknzCiEr|S*suF&A%8l)?a#MPROyseon zXr4(kF*S=wTKs|aAO9+RykA_N&F}NMt^(yTy{Cl%|`OWAd&vKTh07I|DSML z&u?(g;~$jH|2MGyw{TkGUw`_4_;h1^?bx&exfBiM%+ze73gZ%!yrTHD)QsHtlvJw< zC5^;lvwTDAVS~fWtkk45ye!TAl+wL>Rkq%ij#lIES6~vxE$ug#Go89-I#Iq2LH6nDmI9h&(sj=LOQO|*kc6j&rLlGe za$eES+$~C|%OHjGVCVTv>0I`%j2pw>n*-JD99fW#<-hd<1FCstxS4!|lTbU(V8?)t z{Hd5xMGtTxNHjW@>$MjUsd>DUFb!&zijIJ>$>6)H2LNdALOQ?ypGrRYt0tzx0RX@` z|KE+&|F1>Z$=Sf!#MIi(?SJ`$b+nu|M^JrNYuEM@d5i?ShJnJ1qNt@JN?M8{oHwG# zmidW^2~Pg6KF$Ivs&4J$3?QI%!vN9<(n@zL<+z z;cX3HH~`k`l*Wno-5^V_y#Ki>W_~8+-j41E({+-D{)X_B3;P>Sz@_DD*hv!skVgrcQxTLz|V&HMXca zE{YF3qzVUu_lh{pbKSPQ7Oa1e$qT7`vtF&`)kMOws(GzEcj`(fiSFFX5j?NSMkm%} zf|=sA@zrcI!^;qTj-{AC-C%A@Na}QL4|e$k&JKQ|hDxY5bRnBp{vm|1Zd7y6bas}4 z#-qt59m8^`aAwD8w~Sw%x^JHc9LQY%w$A+f(00tU@iQCzZb_T#{pIlyDWeka>Yo;Y zn#Nz03+A>31vk;tD(#Zc1F_j5(I{M}te?#U?RN{#$@JZ_OxbX)ke>97q01vjjYCZJ z!)TII3@XrY^iJK=ZA!MzF0#NWu~c4PM79o0%S(d=JAlvGo-<%KzE|!K`b={gK7801 zC`-fsG~hwZnb*!2Fo<~`FCDJ+oAC0#Un}AxvPMj2$cW zv`4K6pppK)cHWK;dKngGG-omA(K%8%KT2vQT$L(5yUOPB@0PtrqJ^=qh#r(F+9Cx;59qe{orcuJbQVsk#3n%bB^Ifb+-c{Xk=HWb93Co#)jS?U>Ke^ZS$ZGqw96|}6r0_7{$g$} zobbeg+SGIMDH5#^$*Ns#X?O8&$kY6QV{ zK{(+wZc3V#Nir9p-BVhEN+a=3lZm`7uQEJq4pmSyiJ}f|S0OF3F~jaW$2ycVDT;H7 zLqrrCKfk9)M5W;(*EyXkp`^MpjyIfy$AGLdb1e zma{MM0-=f64Y3++t0MW6;}@yTDM%4J+cO@Baj$uqu|wS~P_BCd;u%5wLrsp=qnmhy z_p`;K9qM=o38(C>V5S`ESRpNgqetH~p~fpYoE-^dRhs^q zs&2IxQ_#jsZNJtV3dm}&DcbBSMtq~AQ=NjJKX?PrE~7wz>ZVkm0cfaoJU&jf?=0fB z39~3?)lDBCptNz);h<1(Ap>wD!4~zuuKJ}96%7_Sl#NdpNGLOkd)YXKhO!#y zKBhvK7IEo$D}azmp2mo)l;G)i#Y^3)37`$Vv3Pc2R#oq#GtGvWHQ~DyJGK*bYbL6) z^patGtt;-C)Bv0%OR#=^1#N|H7Y9I>FO5%m*@yR1l^IEa^La6D-*ixZYTytl;wBa% z8y`E;4KZtE`-dKVXWH*ulJ2Jzih!rL3JAK8YZ6g$*kovoX3f;EO-a7i#~sUDDgT)3 z76lbWRaBKhJl!U@1h^@;l4kJ^>cl-tU*JoSnkTA-4oMSxW+N7B^G=3|SM#~B0-Xv` z?0OJo--hIC=cU2mnV~ZgU@)&ib)+CYdTsximj<3-bBte<>kBaIU~tcybNIRGP!Wew7+5MN2n8DVxJn^6%%NxliHYUrLR!vdD># zm`sk@8jt#!XfBYDQ?*pe>H*`{u^WzS*mUh5L|JDBO%s*Ets^5JRLKb@4>9Jbpqo2q zQzMyEqY<_HLnEUpGurwn!N(aXwkf|RxSI8%JI5=%FV$zo+{aLULdYa4ahuLN!+Mu zPcJ}QBWb1Pu2^dvK_>6rWng(~Y_y|piO;`Hv`VgB9P*BirXeD@@jL-o65R4qnK3=D z2tV?#nd74@V{EV5sJUg{c>WYI1rhL7I_l|oV-RV{fIXjZ?quU&0BPJX?C1V6aI~gC zX!$9GYnV=1LHg*akeG-e0iUzZG{t#yxY;a+*0PL><#m!8>A9t&jm26@Ry;MhFz3Aq zNA9DOZ>4O(QWM{wgC0py1Rj+UV76||J``tk>G>3Hgar70kXzU~B8tFN9>n60C>A!f>_v6^Kr zkf`F#{Uq_j=Xw!zd51~QtW-Nh_qeVBf4a$v%U(1 zCAA5?_A|2Ua}-~>mA_PQ7gB9LDtCxrq3Hk;4JW_-58INO$>n_ea5wGe6$tTFjb282@Z~LfH$==i<0TQcFIuxA2niP> zb)y%ebYm8@Jw1*LPcFN;35BT+zU_=33C#s33i)}Rg>(1BQh6TEy&+AQ&S&8Os+ zwFR_B-1BvoQi!*>5C4#OaeuRQVU6?^Lo8h#widk9cU~{fiwEZ3dR-;6e9ck$!sUF5 zgQg&S4VQC_$6V3-HXK~}AsOc$8vz#NM^^$MS^kysi85Pq8=()}XXK=N`<%5dwHPtL zOme&lhmp%iYa_UGsou7?%k!67wE2R2r&{NG`$ZmVTAF$iPvCN4S-Q2Xs$or284KG8$=yLW)*8e_gaY? zIf+72p`^1c!E6|R)@tX~`OrQ;xY!FqSJ4=sP0zkEf4Kdo&2+Fi=-`n5hl@W44>3`a zNszgDP{tljXPnb>L>@Qx3spamf#Jzqw=2r-_<>RARj2qU2xaN?>{~$uIUM_T8MpNE zP7wG0WVh?K?IO>o;7VIO_r;F-OoKB_yMwtSN#9LwJK}tJ?b~Q@d$+4mmU}4TM7A(y zX$wCo4Yv?_-*re7CTbipIios-L(0sETTTcGW^MG@8T8N<;ZU~tTe9R~DpN7*gm6Tk z*tIa$=?3;G$oo)#xrN}zaBfB0K~!6L=o0q~UA4k36BX*|t;j@Xh;YxegY28~B%7Kf z*liPI@B2?UKd9Gibt83kJ@qz4xX#bFqoSHEiBjGQH0w=X3|V4Uc^ehNf$jSQ5IH$z zD0+w|(xGMNsWJFjiDwVcxLIw;`E^Kh-?k%n;AqKSKIjPxJArN01`ixqxqC|NG?y^8r|igan$*BA6xTw@Kq-pmZT5uF##WK^&}S;ht{}H`p?q$t zFvME;JthLfC`Fo_W&Or8BHYKdl~~Mit%=W)n1P{?@8%84P5Qn+h=5z~(?kP~pN^KB zY%#shd)r86$Wz}7Tu+H_vT4@RK{4T5n3JNxWMr{La4~yh4F74m7|~FH#rl+1sxcz= z!2}6i?LaRolF-9?5)jwng3DG1lc^%4LCqxzB168rJM!rmQqEiWXjDe0(YFZmD|)V7 zvIo3hM%y8QMQj#4{ES~h#-R7=g7D~zy;Z~#jhlkH)1)2VIouWWz%`eEqON4@!U?=iH=d;F^63 z7@4i&sQxJ)->|nQk6-6JY& z@tc%|=N=29A?e1dgw@uy4y7VaZ{O)gV9O}H*etNwe=Q-pZ5Y3Gj%340_j}2SAxr(9ZY_1 zR*sOATO5;cjC#Zr-xeyXuaHTVc#xBL?swl&>3)e`XN4L0ld!P%{0i}1(d%DvzQ3pY zueg`Sw!;QITCg7NaeBTu3S~8zJD1D_(u1I0lqw;gMvp<_;X#EF5dN5Vw)N^d^V7Uf zPZoG9Yf7Owp?$ zSfS5$V!*94mZ3GYF{K9p2(Ezj$8Q@aRfPCS2mX4fYzf0vh6ck zRZqTMH?jU6b-yZWGa3#es$tN2K~u5^DgR7o|C^( zd9c3!Pt-pgDDN`=F1T9rmt(jnn{@U*G-@8G*KK literal 0 HcmV?d00001 diff --git a/SLXParser/Data/Chart.cs b/SLXParser/Data/Chart.cs index 14be3eb..a6d84ba 100644 --- a/SLXParser/Data/Chart.cs +++ b/SLXParser/Data/Chart.cs @@ -18,7 +18,7 @@ public class Chart : BaseNode public int ViewObj { get; set; } public bool Visible { get; set; } - public static List ChildrenState => new List(); - public static List ChildrenData => new List(); + public List ChildrenState = new List(); + public List ChildrenData = new List(); } } \ No newline at end of file diff --git a/SLXParser/Data/Data.cs b/SLXParser/Data/Data.cs index 3e3b0aa..da6c9de 100644 --- a/SLXParser/Data/Data.cs +++ b/SLXParser/Data/Data.cs @@ -4,7 +4,7 @@ public class Data : BaseNode { public string Name { get; set; } public string Scope { get; set; } - public Props Props => new Props(); + public Props Props = new Props(); public string DataType { get; set; } } diff --git a/SLXParser/Data/State.cs b/SLXParser/Data/State.cs index 0fac43d..efc4d1c 100644 --- a/SLXParser/Data/State.cs +++ b/SLXParser/Data/State.cs @@ -14,10 +14,9 @@ public class State : BaseNode public string Decomposition { get; set; } public int ExecutionOrder { get; set; } - public static ActiveStateOutput ActiveStateOutput => new ActiveStateOutput(); - - public List ChildrenState => new List(); - public List ChildrenTransition => new List(); + public static ActiveStateOutput ActiveStateOutput = new ActiveStateOutput(); + public List ChildrenState = new List(); + public List ChildrenTransition = new List(); } public class ActiveStateOutput diff --git a/SLXParser/Parser.cs b/SLXParser/Parser.cs index fb660eb..3db8326 100644 --- a/SLXParser/Parser.cs +++ b/SLXParser/Parser.cs @@ -1,5 +1,7 @@ using System; +using System.Globalization; using System.IO; +using System.Linq; using System.Xml; using SLXParser.Data; using SLXParser.Utils; @@ -108,14 +110,14 @@ private Machine ParseMachine(XmlNode xmlNode) case null: continue; case "created": - machine.Created = node.Value; + machine.Created = node.InnerText; break; } break; } case "Children": - foreach (XmlNode childrenNode in xmlNode.ChildNodes) + foreach (XmlNode childrenNode in node.ChildNodes) { if (childrenNode.Name == "chart") { @@ -149,55 +151,55 @@ private Chart ParseChart(XmlNode xmlNode) case null: continue; case "name": - chart.Name = node.Value; + chart.Name = node.InnerText; break; case "windowPosition": - chart.WindowPosition = Parse4Point(node.Value); + chart.WindowPosition = Parse4Point(node.InnerText); break; case "viewLimits": - chart.ViewLimits = Parse4Point(node.Value); + chart.ViewLimits = Parse4Point(node.InnerText); break; case "zoomFactor": - chart.ZoomFactor = float.Parse(node.Value); + chart.ZoomFactor = float.Parse(node.InnerText, CultureInfo.InvariantCulture); break; case "stateColor": - chart.StateColor = ParseColor(node.Value); + chart.StateColor = ParseColor(node.InnerText); break; case "stateLabelColor": - chart.StateLabelColor = ParseColor(node.Value); + chart.StateLabelColor = ParseColor(node.InnerText); break; case "transitionColor": - chart.TransitionColor = ParseColor(node.Value); + chart.TransitionColor = ParseColor(node.InnerText); break; case "transitionLabelColor": - chart.TransitionLabelColor = ParseColor(node.Value); + chart.TransitionLabelColor = ParseColor(node.InnerText); break; case "junctionColor": - chart.JunctionColor = ParseColor(node.Value); + chart.JunctionColor = ParseColor(node.InnerText); break; case "chartColor": - chart.ChartColor = ParseColor(node.Value); + chart.ChartColor = ParseColor(node.InnerText); break; case "viewObj": - chart.ViewObj = int.Parse(node.Value); + chart.ViewObj = int.Parse(node.InnerText); break; case "visible": - chart.Visible = bool.Parse(node.Value); + chart.Visible = ParseBool(node.InnerText); break; } break; } case "Children": - foreach (XmlNode childrenNode in xmlNode.ChildNodes) + foreach (XmlNode childrenNode in node.ChildNodes) { switch (childrenNode.Name) { case "state": - Chart.ChildrenState.Add(ParseState(childrenNode)); + chart.ChildrenState.Add(ParseState(childrenNode)); break; case "data": - Chart.ChildrenData.Add(ParseData(childrenNode)); + chart.ChildrenData.Add(ParseData(childrenNode)); break; } } @@ -205,9 +207,7 @@ private Chart ParseChart(XmlNode xmlNode) break; } } - - chart.WindowPosition = (new Point2D(2, 2), new Point2D(1, 2)); - + return chart; } @@ -230,28 +230,28 @@ private State ParseState(XmlNode xmlNode) case null: continue; case "labelString": - state.LabelString = node.Value; + state.LabelString = node.InnerText; break; case "position": - state.Position = Parse4Point(node.Value); + state.Position = Parse4Point(node.InnerText); break; case "fontSize": - state.FontSize = int.Parse(node.Value); + state.FontSize = int.Parse(node.InnerText); break; case "visible": - state.Visible = bool.Parse(node.Value); + state.Visible = ParseBool(node.InnerText); break; case "subviewer": - state.Subviewer = int.Parse(node.Value); + state.Subviewer = int.Parse(node.InnerText); break; case "type": - state.Type = node.Value; + state.Type = node.InnerText; break; case "decomposition": - state.Decomposition = node.Value; + state.Decomposition = node.InnerText; break; case "executionOrder": - state.ExecutionOrder = int.Parse(node.Value); + state.ExecutionOrder = int.Parse(node.InnerText); break; } @@ -259,7 +259,7 @@ private State ParseState(XmlNode xmlNode) } case "activeStateOutput": { - foreach (XmlNode childrenNode in xmlNode.ChildNodes) + foreach (XmlNode childrenNode in node.ChildNodes) { if (childrenNode.Name == "P") { @@ -269,16 +269,16 @@ private State ParseState(XmlNode xmlNode) case null: continue; case "useCustomName": - State.ActiveStateOutput.UseCustomName = bool.Parse(node.Value); + State.ActiveStateOutput.UseCustomName = ParseBool(node.InnerText); break; case "customName": - State.ActiveStateOutput.CustomName = node.Value; + State.ActiveStateOutput.CustomName = node.InnerText; break; case "useCustomEnumTypeName": - State.ActiveStateOutput.UseCustomEnumTypeName = bool.Parse(node.Value); + State.ActiveStateOutput.UseCustomEnumTypeName = ParseBool(node.InnerText); break; case "enumTypeName": - State.ActiveStateOutput.EnumTypeName = node.Value; + State.ActiveStateOutput.EnumTypeName = node.InnerText; break; } } @@ -287,12 +287,14 @@ private State ParseState(XmlNode xmlNode) break; } case "Children": - foreach (XmlNode childrenNode in xmlNode.ChildNodes) + foreach (XmlNode childrenNode in node.ChildNodes) { switch (childrenNode.Name) { case "state": + Console.WriteLine("State"); state.ChildrenState.Add(ParseState(childrenNode)); + Console.WriteLine(state.ChildrenState.Count); break; case "transition": state.ChildrenTransition.Add(ParseTransition(childrenNode)); @@ -327,28 +329,28 @@ private Transition ParseTransition(XmlNode xmlNode) case null: continue; case "labelString": - transition.LabelString = node.Value; + transition.LabelString = node.InnerText; break; case "labelPosition": - transition.LabelPosition = Parse4Point(node.Value); + transition.LabelPosition = Parse4Point(node.InnerText); break; case "fontSize": - transition.FontSize = int.Parse(node.Value); + transition.FontSize = int.Parse(node.InnerText); break; case "midPoint": - transition.MidPoint = ParsePoint(node.Value); + transition.MidPoint = ParsePoint(node.InnerText); break; case "dataLimits": - transition.DataLimits = Parse4Point(node.Value); + transition.DataLimits = Parse4Point(node.InnerText); break; case "subviewer": - transition.Subviewer = int.Parse(node.Value); + transition.Subviewer = int.Parse(node.InnerText); break; case "drawStyle": - transition.DrawStyle = node.Value; + transition.DrawStyle = node.InnerText; break; case "executionOrder": - transition.ExecutionOrder = int.Parse(node.Value); + transition.ExecutionOrder = int.Parse(node.InnerText); break; } @@ -381,10 +383,10 @@ private static Address ParseAddress(XmlNode xmlNode) case null: continue; case "SSID": - address.SSID = int.Parse(node.Value); + address.SSID = int.Parse(node.InnerText); break; case "intersection": - address.Intersection = Parse8Point(node.Value); + address.Intersection = Parse8Point(node.InnerText); break; } @@ -417,17 +419,17 @@ private static Data.Data ParseData(XmlNode xmlNode) case null: continue; case "scope": - data.Scope = node.Value; + data.Scope = node.InnerText; break; case "dataType": - data.DataType = node.Value; + data.DataType = node.InnerText; break; } break; } case "props": - foreach (XmlNode childrenNode in xmlNode.ChildNodes) + foreach (XmlNode childrenNode in node.ChildNodes) { switch (childrenNode.Name) { @@ -439,7 +441,7 @@ private static Data.Data ParseData(XmlNode xmlNode) case null: continue; case "frame": - data.Props.Frame = childrenNode.Value; + data.Props.Frame = childrenNode.InnerText; break; } @@ -457,13 +459,13 @@ private static Data.Data ParseData(XmlNode xmlNode) case null: continue; case "method": - data.Props.TypeMethod = childrenNode2.Value; + data.Props.TypeMethod = childrenNode2.InnerText; break; case "primitive": - data.Props.TypePrimitive = childrenNode2.Value; + data.Props.TypePrimitive = childrenNode2.InnerText; break; case "wordLength": - data.Props.TypeWordLength = int.Parse(childrenNode2.Value); + data.Props.TypeWordLength = int.Parse(childrenNode2.InnerText); break; } @@ -474,7 +476,7 @@ private static Data.Data ParseData(XmlNode xmlNode) { case "fixpt": { - foreach (XmlNode childrenNode3 in childrenNode.ChildNodes) + foreach (XmlNode childrenNode3 in childrenNode2.ChildNodes) { if (childrenNode3.Name == "P") { @@ -484,18 +486,18 @@ private static Data.Data ParseData(XmlNode xmlNode) case null: continue; case "scalingMode": - data.Props.TypeFixptScalingMode = childrenNode3.Value; + data.Props.TypeFixptScalingMode = childrenNode3.InnerText; break; case "fractionLength": data.Props.TypeFixptFractionLength = - int.Parse(childrenNode3.Value); + int.Parse(childrenNode3.InnerText); break; case "slope": - data.Props.TypeFixptSlope = childrenNode3.Value; + data.Props.TypeFixptSlope = childrenNode3.InnerText; break; case "bias": data.Props.TypeFixptBias = - int.Parse(childrenNode3.Value); + int.Parse(childrenNode3.InnerText); break; } } @@ -514,13 +516,13 @@ private static Data.Data ParseData(XmlNode xmlNode) { if (childrenNode2.Name == "P") { - var name = childrenNode.Attributes?["Name"].Value; + var name = childrenNode2.Attributes?["Name"].Value; switch (name) { case null: continue; case "frame": - data.Props.UnitName = childrenNode.Value; + data.Props.UnitName = childrenNode2.InnerText; break; } } @@ -540,10 +542,13 @@ private static Data.Data ParseData(XmlNode xmlNode) private static int ParseId(XmlNode xmlNode) { - var id = xmlNode.Attributes?["id"].Value; - var ssid = xmlNode.Attributes?["SSID"].Value; - if (id != null) return int.Parse(id); - if (ssid != null) return int.Parse(ssid); + var id = xmlNode.Attributes?["id"]; + if (id != null) return int.Parse(id.Value); + var name = xmlNode.Attributes?["Name"]; + if (name != null && name.Value == "SSID") + { + return int.Parse(xmlNode.InnerText); + } return -1; } @@ -556,55 +561,61 @@ private static string ParseName(XmlNode xmlNode) private static Point2D ParsePoint(string line) { - line = line.Substring(1, line.Length - 1); + line = line.Substring(1, line.Length - 2); var numbers = line.Split(' '); - var x1 = float.Parse(numbers[0]); - var y1 = float.Parse(numbers[1]); + var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); + var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); return new Point2D(x1, y1); } private static (Point2D, Point2D) Parse4Point(string line) { - line = line.Substring(1, line.Length - 1); + line = line.Substring(1, line.Length - 2); + var numbers = line.Split(' '); - var x1 = float.Parse(numbers[0]); - var y1 = float.Parse(numbers[1]); - var x2 = float.Parse(numbers[2]); - var y2 = float.Parse(numbers[3]); + var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); + var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); + var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); + var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); return (new Point2D(x1, y1), new Point2D(x2, y2)); } private static (Point2D, Point2D, Point2D, Point2D) Parse8Point(string line) { - line = line.Substring(1, line.Length - 1); + line = line.Substring(1, line.Length - 2); var numbers = line.Split(' '); - - var x1 = float.Parse(numbers[0]); - var y1 = float.Parse(numbers[1]); - var x2 = float.Parse(numbers[2]); - var y2 = float.Parse(numbers[3]); - var x3 = float.Parse(numbers[2]); - var y3 = float.Parse(numbers[3]); - var x4 = float.Parse(numbers[2]); - var y4 = float.Parse(numbers[3]); + + var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); + var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); + var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); + var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); + var x3 = float.Parse(numbers[4], CultureInfo.InvariantCulture); + var y3 = float.Parse(numbers[5], CultureInfo.InvariantCulture); + var x4 = float.Parse(numbers[6], CultureInfo.InvariantCulture); + var y4 = float.Parse(numbers[7], CultureInfo.InvariantCulture); return (new Point2D(x1, y1), new Point2D(x2, y2), new Point2D(x3, y3), new Point2D(x4, y4)); } private static Color ParseColor(string line) { - line = line.Substring(1, line.Length - 1); + line = line.Substring(1, line.Length - 2); var numbers = line.Split(' '); - var r = (int)(double.Parse(numbers[0]) * 256); - var g = (int)(double.Parse(numbers[1]) * 256); - var b = (int)(double.Parse(numbers[2]) * 256); + var r = (int)(double.Parse(numbers[0], CultureInfo.InvariantCulture) * 256); + var g = (int)(double.Parse(numbers[1], CultureInfo.InvariantCulture) * 256); + var b = (int)(double.Parse(numbers[2], CultureInfo.InvariantCulture) * 256); return new Color(r, g, b); } + + private static bool ParseBool(string line) + { + return line == "1"; + } } } \ No newline at end of file diff --git a/SLXParser/Program.cs b/SLXParser/Program.cs index 1e5ef7c..78f697d 100644 --- a/SLXParser/Program.cs +++ b/SLXParser/Program.cs @@ -1,4 +1,10 @@ -namespace SLXParser +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using SLXParser.Data; + +namespace SLXParser { internal class Program { @@ -8,6 +14,9 @@ public static void Main(string[] args) var parser = new Parser(path); var stateflow = parser.Parse(); + + Console.WriteLine(stateflow.Machine.Chart.ChildrenState); + Console.WriteLine(stateflow.Machine.Chart.ChildrenState.Count); } } } \ No newline at end of file diff --git a/SLXParser/SLXParser.csproj b/SLXParser/SLXParser.csproj index 80fc397..b62b9d2 100644 --- a/SLXParser/SLXParser.csproj +++ b/SLXParser/SLXParser.csproj @@ -61,6 +61,9 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Stater/App.axaml.cs b/src/Stater/App.axaml.cs new file mode 100644 index 0000000..593b48c --- /dev/null +++ b/src/Stater/App.axaml.cs @@ -0,0 +1,33 @@ +using Avalonia; +using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Data.Core; +using Avalonia.Data.Core.Plugins; +using Avalonia.Markup.Xaml; +using Stater.ViewModels; +using Stater.Views; + +namespace Stater; + +public partial class App : Application +{ + public override void Initialize() + { + AvaloniaXamlLoader.Load(this); + } + + public override void OnFrameworkInitializationCompleted() + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + { + // Line below is needed to remove Avalonia data validation. + // Without this line you will get duplicate validations from both Avalonia and CT + BindingPlugins.DataValidators.RemoveAt(0); + desktop.MainWindow = new MainWindow + { + DataContext = new MainWindowViewModel(), + }; + } + + base.OnFrameworkInitializationCompleted(); + } +} \ No newline at end of file diff --git a/src/Stater/Assets/avalonia-logo.ico b/src/Stater/Assets/avalonia-logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..da8d49ff9b94e52778f5324a1b87dd443a698b57 GIT binary patch literal 176111 zcmeDk2S5|a7VMr~?`&u9?L6D5r)O_~sMvcwdp~TLayYQR=&jt)Ayzj1|ar_qzjj>}3?t6{b(C9x>L&LzJ@V=g=#=Jw20UVfL=lL2M z{~gmTy4MTV(6|w$snH9bK-Q3=ARS!FJP09mMIup;tn{o!d3kv!@^W%);OYRUBb<*& zUfu&ZAL5yllVg^Vkuh1CsZc0vmX(z?KQA};38YPiymH{ogEL>rnVXlJ_Y}Vu#0Z*Z zXJ>DO??NCgJkKTk#1sX_t1C|tlgWFD>4bgc>I_5jV7WPYGW!B~zVr%7^rTZC!#6?c{Pd1_ zIeFIbAU9KzPF`JjK#u*jl^h+ik(i9#LoR9kM=p*!K(3EAAonMnB2VL3`nrudy<`&NuX{dHBmskjyxgulTMQtE3Ohgoyr@s&2vplOB)Vp ze6g71$V6hl<|45ib%@-XX-qtiKP3U?F2rNcJ@R0RF?IT1cn$exVcoK!f1QW^)&ly{ z3AmSFJ)>R+k*BM#kUJAklKT@+kp}>?{lwGck?uL-bKHT5m?`)zmK~l0c(=2&s|j@& z40U)+@FF@h54?V(MG?laiB_b6A`x{u%op_95uY zW1-*KL%t#^|D0TsDM}~l+*GQ*ST{KEPYl%i81@@|ef=8vJsu$;A$77+Q~Lrw4nRI0 zkd6gsDx7I>3SrDdK|i|(V{0j!&2A<8Z9xti8u*N)q%=z9^M8XrJqz;M2Ito zsTq@?%nl@y)Rm@J$CU}0xWj1xrz(d5Byxx8h6%MGM1z`VI>EECaN>OQtsQ_HOm0cSY;4uk#> zo|l~y0eFvtdp3OIm6MrmoGM5ilg>+Tr>sqgfkBP<`1ty1DQRu8g=s@zE?JSAlluzF zpgK9!tx^Z%g3O-fKBfwplZ21Pz=E=#)4O4lkeR48$b^**d-mC0@{*Wv!9}3Zo ziHWHPYh@S2HI&U)Rxr-H(LQ0s{fZ-bcFdMI9JkdK4TP>??!5IIGk1zkwgp1W|T+_51`MJ_tvk-iShpsgTd>mb@2Efo5{(cTgmBR z{}7YmJITfI2Z`&y_o#Up=Vs~o;l#5NS;82hVfpYvGaUMxAXzXlJ1g6!L_&BVWb=vn z!XxC+pfyU%HvMxqF&nX$T!ZykTCVh3M)|dQ3A}dcsp)e8c4{Gzt%H~=B&W1?t5o*I zkq5|)F^5$uAMhVi2!BI~Kr$dVJJ(jWT>K4bh{cNIDwl0B>R)0t_NYqbOWR+KFG?15 z%ScOG1!W^$SnRkkSHA?lEoK}cyqM24jP!#vu9!SsV?k`j9WPP7&oM`7vZ5=LAC2uV zWTgzs$;vua^a6e$y(eIC$+f@F6zk__{@g*>Vezs_i~Ytr*lB<6_tO67vFl#3ba(^f zkB#Mv`QpEFv$CzE3DN|q#Ac5kef1?@Ouk+=4?S`1yyT@$Gr}xip#5tH0^%66L>Gezin; zXnz5gpPC{V2Xr3NXw>oHkw;PaNVf(&dQZ(QIKJPTm7GVU-$}30j-N`D|H;fn`nu=} z{XY`R7jyU{VcxkeeUUDbkau@p5r;E2gcFrWZq7F%(z(Tc^+jnirB|P04kgNuxa(6Q zJo{S$m#jldZ~}3hcdI46`{ib5Un-f95SJtOsd-Jd>^tL65W5LR zC18~;7k|5LvnBbkUdtc(Ik^r<*J1hau9hTO(mG9)HWkKXiHR*2*7Rqat`)(pYS}NA zS&~cvvKS?fv<#7CNd}+ap|E^S!eaddbWh)$?Ci58Qp1B>T>FndA*z=BX7@dk1w4|X zBR4nqep-rfFpo}ejOF72>1v9_;uc7g0&V(1(RcWap?n&G>|mIOkp}~psiRi zHUVd?aeP91i~~A#KCBn|Fn?c$b<-Z!?gzk2T?JWyA0Xs0TftV%!Ss)N}l7JjS#1jpNwR;TWh{xfL5WqSHeYXqDr!BFM zQM|JXFk@Thf`}j!P9dC3INjkiC_JGe*lra*F(3DWvnEqRqb`)u1j_0NWsU(c1wnZz zh*&jN!1*o8DWKX_d1&Hz#r})3SmcvF2B5|c&LgQnU!)|a^aMJ4WGYuM3*ejr@Xt zFpBf@bK!S3Ji~WNPfQ0V9+_~az?|crCKRucBnt+J6B1e=3<~O}^bs*2HDcUi>Lt;W ze!;dD@`RJ2&Ie(fzk~dX1l&-ksyxzREj}hlP9A`GS6W%Q7dY3@VO>X>66t!Vw*j0id=OdKwG7!3B;>J@yXrfs#)R|YM}{dZB_*9XF&qzcc71!0v+NB&q@++RafN_ zIRlU2!e=G_RieT&58xwBx)Z%_a!hh-n1}yNOHDHX*m)%~`w9=B9$XmXdNS25_LHhR zon9B|F_8a^&d$iTfM+G-0AHc%RFP2sd_If2q*$e8Zg6aK7@St(Wd5k!tXyQWziNL` z&`!BHzsgj(=qIGD3G-ufkZTXkOiwq1`&DqZ*kQfne@!;WM3OBYLa!#&Q=WgdV|LUZ*e z_x4(l3DZ%q80wmfel$b9%O3CB&2dz_D_cMjE*mHmGBIif!Avg6( z%EMHye;(AI!(S}h{!q6XLRgzoZUS_ulcKuHJ_9)y=r8Y*g9BHWyY48@H3zweY<=Z_ zm)8DJ4~Zm2v`Du8us+qrH38`8&F~)Accn*GdM3HK>1-wHzMowB>tN;T&zBU{A9*9B zi>Ub~C-oz;hDp_}wIUQ14{RzyMNij*CBm(hDs9&jV?|kvG8tVQp=$!vk zTm6%1w1y}zM%h_uZJ*3wkwZh)mao5$+)K&Y%tvCMDUkJ{zWmx~eYMmd>Z^$~rGzJ( z1Z`ice8YN&d6{*;F!2EKyz+vi&{>px2=!7T7M}#$dlB1t#+0rf>yC0W`7tYdU)uPE zdZqy{OU*yN7QVFw*mp#d#Q=-azQc)5EVJ(SHkgxikh3d0aBX{U>_FAsYRr+!)IUSQ z6;bp9&1^OUW+aL1D0{Vbj zf1{(Ln{e6OVZevnm*y|M0=Goz9`nF90%?LPOO8`|6Zv)3WaKWwk1ch*mu5*_QSSI? z{)JN8Kg`yv*f(-FIbyDuqJLNs5kI560_gg;vT15$Es9Agwf-MZl}ZBS0bRcm>yP{i$c(1s=j0Vr z9?;zVi`5S154zENu35f2>ySh*S( zzs;0n?&h*sD5BON8bmWJEUX3CqK$vTOrU3wCZKev>#q}< zwI^k_iux@2LqGC%-+l66Qh{xyY+sT8t;nW9rV7}v_+o*0dP-bMTdY4GEML}7{CM_n zKm(z?LFs|=gBw!~DSfwWyCW?ot-I~`@4rSJ2OsF3 zg4zQPKo7!==l+_?6V3+sO0^G*^Nu7}$LLe^yL`J>rtSz!m`$lP4^}@9+K_lKCUv?IjMtB3|xN4sO)(LSOqX)yHfPpM#+g7R3XUoo8>@{pA5 zgrB+qa3CzL{`fBRz7M%Q-jM3=m2G#NZ;-|ei)YLfdm-Y|a-XC3TYR_tJVx zuaLe_*UsrG;fof-cgh!WY37Ajq{m`k(2RrP>6WI?~# zo66?*L;WdySE{}k-q%2VIv>)5z1nuTFJZf=O4)hYxlm6b5y$Z;S*I%BC`gl=nVES` z#N`e}It|{Js^gczLrs)tfu3n#mLy|8v_XYnP*9)pJjwwc;S$I>N3wy(D!0B4#sbRG z1&PT6!FFsrz@R#VTb^1fNDF191C4N6%n^@3Jp>Kp%8;zoej{yr*((9P9pZtqyB0|n z$@2&bimvn{;A7)5Q`5I1O`HmHsfyNJ3I|jO?AB8napE{#VP2Y)ot}9C+DEA!bwvSy zJhMOs;t2X}Jzi2$pV*)RJvG#$-0d!{yYvcms)1_;^2%rr4RhH%u#>ZcG6fZ_Z_#)8 z`58ddIHPVF`pciZL|%KeeJjfzM_M;kuTUOkFM_yWMYB2pt?>uYfit0>o(2BKAKt4x z#sTh3)E}dLCg@}r;TT056Vyppw!f4G55j?S0m6YaEa>9u#p2ipSkQdhky zk`MAgXcL8NJL>;%?1@>dpK;#C6Xo0SwD{&oU!e^J!mX}4Lq2c-4*5m7v4*+28H+XSA1MF(@3#Vg;)9VrT6Yo4Gmc3 zrB^221E(RqQg8z2M8Vy$usz^Pwa*yjXW`I?s{w!mH^d#X!z+B)1h3G5lz|p80NacL zf3mUg2_y&bJHg){$B!1M+7>{4E6#gp`-t-(i^1xMHU}IgX9U>4O$HiZrija50yd`q zr1C@tU`Kuh^vVz5yq6(Pznzhqb~!yY%`81F{XDFHre&U~nWpfqsYH}&n#vcQPvr~D zAWw@lN!m4uP<%X-0N|~Axn=%+>SyKB>HMatcH&O#_icsgnqbIZj+Oj{$oyG~1 zh4a8J>}XDA)-zb|B4BMsJEPJWVw^VBcR-POEbwc-%1`2Jr$ndpi1v+c0@b@2`d}cB#nZw%mj+*H?+|wE>j@z5 z;Ke5O5hd|;V9cHexW5=5SDD5EfAC9SKR2i}7?r()a&dn9DLx|pS6%{pcp5)-BeZEy zW$N>#zXiL4IDS&HjxrdPJx9I=`#YP-?u;~gra0XM`bjls8|L@WUXuxrM9de%o84(539=gDy^nN!7{ zfUJq6#3T`>ZzQ3=3n3hO0!ia5pGqVwA*Fvp9aL#&VLX&FD+NC4M)L5=-D@IUgL0*m z_>{3gzuA?UX(f1jAho4620L1t)u!abZP#LU zKVF9+W(??p$~rl|s=2@c{3qq$Eq04BEl^efbj@J!T!n1R*??E;?H7ptkad)e z7REtP20PjjV_XE|;RQAzXTg5OdWkWKat|izhCf{>K2Z!{nHxZ(ChA?2qvN}y&kev{ zZr=cmzwki+I{9z#XPd_I!j3-FXpf9~b$h+DW#S(DhN}2a7pIp7e=U@agB{NVnCpw# zj+D~Hi(W;(4<<)PZz2E6*e_QGcJq<@6vik}G!|5bU!oX(#63mhM6-X(5KH#KeYyJm zJBasjXz&`f!jAsjHlVv#1h4!vRpHM_R{}riW>T2UHpnXiT}vxMstP}x&f0%ffgf>?a$B@Hg;)Y;vy-m^*i;gX`%zV}V+;dZ@Sj%%ul%#hz>jnu z%7a0sJppvusCQ85U=;9$s^JG%DH{uJT+$!e8ClkaC&+9@05{ErE$&3GN z$ioeniREN{Ds}~qcPZWxcC?AVJKO(*_G6m&ys=%Kvl#pX%wiemWtFp#j znSPiAKJp|Ot3>`lyMj2c2=Zj(6{^omVW;fpsu+Hn9jy-fnTXi@ML_QqcSe)1XyLu< z<)`I>{UyXd!gyP%91)IwW68} z<{79=)4sc0s?E2;B9j7Q$gPQnR2-9gRSZAMgh9_a6m;h$d=(T`PQ>A>4EvKk*U`C3 zQ8r~hi*WEGx5pY1b;F-7krd;9P**|mdD%JW!>sUtaZ&6!J2HV>TX|X`A1CEyOh@k_ zVs<4=5unKDU~_5*@lqA7ck<6v?f;+~IVHpLXvENBT8lWmDImk87Xwn}CMhzGJUVfU zSnn|-9#&2S{V34i#A=O6F&Qh!C zj1{a1UioLSFN?XFD9sl7|5aJ|(bfd?le3}!mk>g67>UL3E`=Sh7grW67q3s-mylhY zAGwE$7p$}r<#?eePMAFGcpqu+t5U8Izwnkk{21#4=C~5}!QvEwQuuFdHKEFTe)LW; zxs6nIf$^5rakyi=G8N=syl{oXw?q|E1tL>f_)#B*dP^Ap3hi2D{e5KdAM6a`U|1Kf z%{fl_{$QV%!j5tqL7c+uO4O&U2N;`775HW1d6$|cKbgB%7XG;KxV9qDYXJUB1Z%`~ zPXe-8^W{g1`T@>`u2-K@WrV*f@OzSn9pyH`4=WuGi?X#<1$K<%2jjO?xTPcZx zVYa3FLrUAmX%U73Df<9eGC)@i(e6JVXak0EQ$WV=Tv`s;4%o)Xzqpz_BBrDED1}|h z$01Ks(IZQoL7wWB?$0WP-}g-EzD?3Pz!+!YTK^e(4UO=3;A_TY4a&~Sx-Lyu+BG{p zi<}?5w@lbkc40f~3`t8Vv8}(e^Kq zk=Rqj6a1r6CXndyu4~2SI%%Jm;vHd^@~}_-zFe+0fI1TN9g*U;tm~tx=U~$T)kL)r zAI}bX9a;F%?y+zUz%{T04Wy_|qTGUu@m};xl!YJdcoM)@u8;>(ZPJGRd4IJT_{|l}b&BvVg&kuoBOh1b zLwAFqk2mgpkinNwelFrzE{Syp9}$DcN@GjUVkQ&ud=qDBGxcCam;h4ij0{P0^7 zZPqyPoc`czcd{sb89x#O7)oVUieR^eSj#BOLwOd)L&bd=l)MRVPkf*toS;j2jRA}m1LF!<~g-4vkp&@ZzD{4fS$z?UK( z^q!#mS`MF-6jEYF3J!51pV&+@Dw5a9j`ynQ^SFOXoJ;w5Yw-Cp1%37)v~|b%P9A=| zN4+=7g1}#L6vQ}JeNu%s!M#%MOg~M@>!fpCRltrueyZ|$QdFVM7uv7jyoa)0MX*!w zgB}2FKG5Dp#G!QG=I3n_F&D8?m(JGkh9#1zViSLz)sHEV^U-MDloy<%gh`zkI zSBNtBsWt#z0L}y4c=j-`6)e^7TD~B>M;ny)M<1(wo`1dO2JG2Wb{qitIsr}Z#ba@% zAdd%n4#d6G`$1tdfa?Hd--&k2s0RjJpr3r6s@$hQ91GWNHkDrEo-MpgVqU-=PAc+t zvULMmjt{Z3R-^!Ji@IH9<6gcYD7$7iT0`{v0l%{4Fn3m%k;gaz-bbDi?7OP2={Uxb z2EACi z!kzMINBD3LEX1$dRvY4}|A+)!a3)OHlMCa8SMmVo;4E9DXPKeQHfYOLR==0;1DL+R zmm#VpFM;zX_$QozI;o@=u4LUS{W;jHy+Au}Mku4BC(P%NVX0$Y0qoQx{0?osQ=kn& z&OIs<{4$^)s7I(*X($zEfd2SkuQ-(x%jtq+9#WM$-z$S%`W)LJ24cD3{F%&39tFN7 z$Ds{Wri~QWvPz!99ub*OMag^}PF!49^l?DFwiJ%aTyZ``83FbK4vqz(WIxDJs*Sxr z;3E^(>Z?MK;h}xHI$@W#8}%(P`7y>mgm!oUeUejII2C*^0ejRp0QYtwhdUAMHTpya zMzzGfLDV(R6#=K>52Tf`Y~-60!V+3wJ0Puqx>S&n9|1hQ0ooDULN&#N9MFJk5%{fr zg7{9CL@A<$;8QpTWp^9~qZO`g>h#xE5oCqQpxOoP0OJqZqABv3Xh$iCO9uac!3^+| zS`R*mmtfD0XJ}gp{UaK9Qrt@*nL6|GS?~<^f((ZD&JZ)rN+Oo*Nd=!ev_r=Emd#{# z#x_RTO?81=L1Snle~Due=V7F~(Y63>$&+Ie2B04-z%yQy%+mrLgsy-sn1LtiBhV*{ zo5-Dr<0vJTHJBU2>cxY0#F$QKlZ-Sh_BCv41?5(|M_5m63&a(!n>663VuOO3CHd2T zNsftWoe~$<7Uxeqv5k;UXXAK=HbY-4q+2nDE#y<dM++sV6e(A&4oBHVm`4)zXi75>h@ zZLmjh`@okzo&8>Tb_;X<)FaR}uxI$Yz@CAwAA5#+1azml`E`qY8`LG-Bd~LrS6HVo zuYgVr|Im(jhQ6=r(;v!!)5X7IfSXq*tY?t($1c83@4E(i_;jYd^X-5z1ipOVGRX05 zGlUUkxk!%}%1FKmKBAHx5M?zKZ;HGGz+Ug&lXs0gUwAf093y^XKSp+m@r~%k@C)xB z8x%D-A&mKFTqt97EG>FMOkk82!;d~K+Anez<5T#&n81hy@N7X`aMb)*8e=XqBzksS zXpCMQjXonbj4>@CELJxuGGS^$B$GOmqT_Ycen!OW#78i7;zOf#q5~qQM*BuirGE&S z7Vb@(5#<}97ZVVn#|WfPkEb!U5r){1sF8^@=0HYZcu&xMxASrKY2oYO`xCau7m$@z z5`7i=oEqb91_rfodwU`jYFgiOkD+{!<9PIGhM)rh&o}9HfQymna)t2b7p#mGwfUH4DqU6z>mR2B1m;7#|Sh1Xie} ztI}DHBlvLo zf-EW)(3$>ifR-Z9@A%YaQiB>&6VF4@wAUj!&Y;&Phq&tOeP$DU3;1*l#oja9yo+ zm{r-60QOXfnfI6z&03ro#vBn75Y`FXtx(qX&GZ4pJJN8tmeD+E&1vsw9pVC``o+=W zMp1KmEN5++NOA+lcNmQ7|66=3>q{^nFkm0zt?^+oW03~(ef_!#wkPT|R33a^J|VTX z<9vm9$2APsbl87qAgpbZQka~@Vjlk##Noree^Zsg{^NN;3&6U^bf--vK zjlMiu%PtXWtciQlpk4sSdl<}HNXxLoDFMApwix;Kk)y#1<>aW;y!F* z2GRdSelZ4kr0T>M;CzIA(#grGZonhArcob)+sDu%2Otdtc>f#dZfoer6}Hd&+!Fu4 zzd+|2o){IkAUY`ex7fEq&5)jg5&6~E0qloJm(W0Vf&3fYpVkLxx^cj(EeBfmKIqof z<6!*%i~1tSVV_VdTtiWAg*M<{c@Ch)yxR@8ddSBy1H(JVgvJa99(E4I-9HKAJ+7$Y zKYpmC1)xm@z!$G%gfM;&!Z`re+Ok(=^``(}sMyLB5AQ~6jWj)r9ycX9p1lS5w|DS9 zPb~od$fQIIzgf$Lz5W^bCHh&dcMkS z>q<1p|JeiBH-^TFjGr9_GBcE$mX0m8z6Dz$QUm9Elut(oM0dx2$YZ6fE*$gUt6Z*n z^)Rrb=EShp(Y- zWB5gk3U>Bxr5t5ydsCpB16fY!8{al4$6-as&w}~>Cd~Jl-+yaYKL|m$Kb5s{W1Deq;9}-uTE-3 zc=60ASsrDR;2qd5o)$BV!(c4|xvlG00{cg?g)IO&WN*5E_;j=-Uwo3q+PI4T370MsKKIA`YfGr^A zi=85ULZ|vad*4xQBfc;r$i4>37DIhQ+r)oj3{8qjSPtVp=ts*}pB4c7r$-T9LE6DD zKd6=dL)i}6-=Wh0LktVLj}q%_`c^=Xm+ubMz?z=vTzAyWdKyxXa3{6hW}iz zQh8!~MnL2wFO~kF zb);bbhVtVc<6cW+U!N)5zsh{lLGtRj9Z7)rfEXWG_Neyw7o^%Vf*FASh)Uxh*L;-g zqFo6yIBG;PGifu}o0LC@m23l6@HZ3U|LNj1`^3=LN{@e>_tB>cb$RT_SY61s zQhO+tci4-P1?2v}S7BeS)dhPLeMQ{kK7JP<9z4c`x0-ykdgDJe-5%|LDl`8Bt~Ak( zkdo_zJvQJ1_fz{KYd+HOxG&Y=ksGTW?#&=p@-^7gN)@_J)imm+|G=)UviR3TJ94z! ziVtS=XEUjJKeD{zw<7659SqecfZ9qg?rp11NR3| z1+S{6sV?}(SZ^rji-)n#iDK!Y51xV{tF}i^PuhHQxJUfsUNEZSR+V(s1pkz*Ckobm z)aeUYyd7Y|Rb{cVoi9E9CUKAZ8h?-YM>#Lj{OEVjrYBAZn{79>4RpDT{GPu5W^sSz zJH!d_^)2N9H~rKD%(N+UfH;p?uGe1;lE(+_pFcp+3e^9UEulLDvo8v zU!siX^0H&!1@5nb?Em(6H2zWEhrYUu;PCz!lL2Hhe8pI-_*1_p@4h(hujn2oPXF1E z4>w&%#H#?p^o}5LA0i3kEsfBgejxA7oyg-YSBS;fLzGNcm2r=_zdqUk_Qv~u=6{^~ zk>|&`U(6Gpt~izze~B_alj#S(i2mLT_VIQ<_k?i5RVQC?e|!4tK;pRLMhQ9}X+7zj zFU38|{;bCtelP34Ci-iKLaf^)h)D|jFTGNX#fm@unJO|5RKqh{+Wf8aFykka|H` zTU7M9!*S~>v(@}?%cY{#Qu(_~Q95y0ccp0DBkpluY}@Z+{1>eK5Pv=?Dqb7o>Z;r@ zDkOyc*U9m*+euZ}XurGkOobY#CkgB~PaZ8X1H2dD9(jM<6I@l5P zbR+oWZ6M|G$5Z5!MRW31cNJC74gc z<^KN^?GO7bVBGLDaoY8AHH2K^jMOv|@ji(7K7C7Q?*0V!FPBRJF)3g!xG?SCGW~EB z;U4|*XwN>D$n$GFc(uu@+K>M?Ig?K^l9Z zG~AyB{0Ba$ULj^27hO~<{yp{8YiKNi+f^Cs>^T}U4`)fRx17X@)peh;O7UrA6)-GFV1DuM9AS2u4JcInHySBoyzkg^8QD);ve%<=ON|_9z=YkY5O|7Q_BC#(Eqa`rc-cv%C}g1 zvRwE-I$;aR$;>V)!tLxMf@8k4aWBO^#@k7ut2aJkQAH~F!~fhXwc?-Qq~4HPuutyI zX#a=_{;&MoDx?1j`2WZ*xX&v1<@lASDL}SZE*=2o!qNlujKos!sLHrU`}~L({?gB@ z#no+_dilS2kI(WEbpR-W{lXdkk)uo5{{#2us)zfovLh**|99mr7wN#ggI1I|4>+3K zDVBBcQ}1%&9^>t}o%~EY6wB-@+@QViLoE}vj(-82qgF^nDS{(0;KPlvdXz8wL z`iUyD^D8gh2_6w@#l8Kc(**mJIuBk#%0IDTQG-j{{|WVf7{fg&JYgKf(5)~7f;!n~ z-*Dn=`Gh<%x=oPIM;)N-dXKQ>X6KMQYcG@=_ZV*neKX>`BGlPL70&DZp@(Y4|Feac zD_j>vAA${UdNPx}3gfoXA$FsZ@vnh){}LM#HB!js8!5_5UC+`55@NT}yu!Fg ze>}&3Zm6p|70yQ-$0H9WpHVCR-yM8V;rb~05bU87F>=zAwe=A@f7s=*R+20Y)0mO2qVYz9&()@7mFS|hUAU5dN zIFbWm39i+u%5+psCx}$(zBRi(;G(`12PnbYDcYRCQ4nHSW)O&;#Mm_&~s8~P@+4bphZ#y>o#;`<^G zm;kYzVIP;`h8jv+L$w#M2Nf|LwYOY!zM?rFb3hoaDn&x5BK6j-j9HPS1I_{z}W8CPm;po$EFD-U|6r-1MPNHRdMm3Sw|wv|^EvKVCAdfYz*14uX#uI1><@B8|76ZG#a1OGK~ zujaUr=s$P~?CtQqTAk^lLC!DLezqQJ9rs1Jm+{AYvg9I3^oc5^WmJ2Wot8y{uf9>c zd{=hde&1z~ zweUHytfk;{-;eI?-56u}mWFrfJB$Hv6kdxFQETD`e4hBds*D0Z{}U_&$v6`B)JE6`e>_fH{leyKk?KT8Qb#s zmcOrxbsu{Q?8$eM6%qRv4dOYJ!S_p1FTGMR->Ln4!(zsyrijj#uji?jI@&F`+;O(P zH{3fdvQWFO4_hDTb~YF0{%DZpVk|eD)1}B&<%;QXZ%>AQ#P8f#hyjblmPgI~uy>a#c$cPuyeNMVnsTi<kyt zWnOkU?ZV3gAk>{a|Hn#Ue7$d-$D?>YuoZ|=vt74*`=;_!&nJX4$D_O#7R&*2t9rlhZ0G|owp)ES>pjl-(GH)aXsW7f zeySkV6vqBI9Q%N?`cP1%#=f*aU_Nx1147^Uwn5uaej;}-OaYly1qkMgdO{C_2j8?@ z563;qcH`aE>&v02-C@iOu+9RE)K6O}2xwJzi+l`>EkrJejuVh5u=Im#Fn^+k0*V+SzF!#So!x}54R&&P59{@;frOPrzZrcjt4?Ct)94SF8* z-3^B^ieptCf9kkLIReHA34I^hF(D#$0{9e~LWQb~7L)}xgC`+x4IV)PPk@hLEu<~cJ_u~eXRF&rR2Juo zesjP+&S|A(wbbKzA9+eL`RcdfP}C0i4CehDNwV++(tH@#4aa6hWqqpl1t=D1L3-U_ z@8DKwBgkg3R>L|FudI$$@jMseh)04R-(mj6YN5k@yWgI0LlUb3)Kc?IPfdG-`?4|u z!+WBR567mec&to1Twf?Z0q`e?2RmVq3;tKt{D7i{KzR|vF_64ie)Ws%@sX$VGI&h* zYWCGo1gD~BD2GE{A8mAyCd1gBkWMZ9o(g?K6Zs45bGR=!>IWqv2?k{RLaScM7C}6q z4VA-evnuTiXah>KdQZ~WYITh&2~a6da6h)>c=ndWFy@Fj|M0e+o}Trqdfu1s6Hq;h z9|!|makMc&eG}{#QSO)lrGQzXSGYEyeHYqnx^A|vv~MQ*ajkG*O& z;Czc~KGNa71-kt&HSf!J0Sy3@;t3->KmE!KV*Z)JWUU6<`>HW&sj61}HuBAfm<;#O z9uxQH2=no2@rBp?61XpXfa^d_H}ET`y`y!AqcKKt6S4%2Ih$GZUc zV?;ZgLR-#ig?njd1AxG0(4scoo8FiSv?=^^?oU{12_qxGaXF6&xoGf)%tQk1?3Y*ORFCq>BS?+2Pdy@4*iJ#>GrF)B|a z8Lk+oBQ7Ft6x}ztYmj45Ga8LnryB8iWuaTydrbhe2J)*kPg-;IDMh*v?MHyG!S$d@ z?8!ejZuR~JvV0Njvwa@@D^P|S4DnZyc0zwmsCl(t>y;s0{yFwzU*7_{FzQ28dxRBb zS>U630(iu@>W!r;sa+n#*!Jau9)}gin2h!m!Op?0aIVC46ZvWRHvHD_DH#Fk4FSd| zplc%if_tOwLQ+h^a^Q9BK-m6&K^Nras4&W1gVLALR*94gB#TluRJHQJqV}g$cGZ^Br0&j;j zGRjT9r}2t^1R?{dJy)X^oBI$3))g8({$xCh5jr` zm!v!JSSf2@&C^1j9{YVX^nV=l-x_bH5TO-&s41ljP>+qWZQOq#O(8l>&&?P`$%|`#IRH5inQcTivR(QM?%05sh5&`oZ z(7-?8T>l;LbrnUo((jNy#JLdr0m=?hW`J=E(atnJJVuMdU@ZY#!^1EqxWZa0RB;%7 ziDdc6!+<^JL+q^y;C{+sK4C48=0%>a5bxhJeWw(^s=lD+gSmD!X<*Av z(MB+C(B}Z-n8nhf|H7D7AS+oe<_nELKlTD-Nzq?=je!0q$j;0T$Vg4ML75#pI&mR~ z&YB!gV+_T)D;(_d&^`xcw9@Vgabbs`Bf*3d2 zxL+l#vFlQ~qH_?Z<|WL(!4OX%3HpROd=w$8JTdy#g0I5|h^J}CWpn>USsf>eH8UY1 zVFKcu+FJp19Z1U}Era|G&Sfz9{21%SP+GAYYHffy0q0N$(1TLEBghbIoD4UT;oUdW8 z%%|z85^G@!{}eYqc?&l#X+?4jdp`O-qTMCxv#|f+ehR4DK%ArP3(7cujP;7)w>)3r zn6jh#f<o(B6%4}cg*!?0hl!xP5izE)^E$z~)@!#(bB z{9<20IVAW|%)oU8_esEbxfuVPvabd?Wjxq7qrD}{X%OELZV^9Y|HCyMZSate|1rOp z2ZL%&ORW*o{y@oB{NsssLa`y(s@AGAD@q5|q@m@B2yqBphRUT9Bd-pQ#4dmX- z-a`Jxsss1Ms-xh(SoPq2vFa(fXUdi5UdFwF+;7i zgR4=uy!XYMN26|e@0oJ&RrS5QTzTKxeO0$lIq}y-E`1ZZ{!`X{N4fMJ<@%@m{TR9T zW90h3{Jp;1_>sRaHaSAqkh=#{yJ8(g{vPJ%VhDlzVhticy}@)_3}E^Dj&jrG7_jb! zS`{5|Uko69xqG;ko$b+5P!<4cIbjy%2D1wsG8LxoWh#iPgY1Mk2JdAmq>uM96{2oG z7f2N^(?W%-Sy6#h_A&)@Ecm{t0R4h{DMW?Y6=hhMT~U)3W>-{0>F0$_Q1p4>2Sv%D z6l{{h!l(_6A?yl9)=%k@N zaon7JSGg|x_q7Y#&B|juxcD%6>#o1+)<1u1qE3x&3mg2l@bqsBFY>&nHeaW^e|htf zKHp7TRkEX>*5L>^pzveE1V>uh)=%(!z^tHeJ#h+r0a!kz;Gr zYCHCK+Ow#GNlmtEwrbkxQ{M${N#n-2+)TM{_b?~)-p+tgtxg&#Jr=G!H~H75v*%9F z8I^W*%8CX~S9AZ`dvV*1bVl@x#W!-_w7GL?be{3$(5@{FLgU|Uv$a|`a`)Esv`?Qj zGz~mND{E+U{q>;FZjH&Qw`(1(={>z&5BKiwbvpgIKjBP_>p5QNzS9Gjq~#9hw@n%~GWGBn z7c??xYW5@cow_}`f86zINN}5han1T)7}`}gwbrv2J+AzEky+!&(T!HM_2>s z*@g$ht;}ZXSOgh18{g}WVW086W}a`}v__2@o}J9Qof*`qx8_d|tp1?sYPa8@bFblq z2fYFZHGJ0GaH3}5d7U=e_pBSPskPPc=@QeX^^9yym)GxlYkk7O{YLeg{X226j#k^m z#K6GY8#}hE-SEDZl_pfXU4!vQjcVU?Z92B=Ua{-74gz72+2+V~&JRZU%z6_WV%VwO zkpaKm?Q(o&oAIre7;LO*`0EmPjlkn8j%zqtwfV)Y`8ccEt^YP_KHZUJ*wmw;>CabR z=(et7W^Fd}sNNg%IxEc<&FXuj#!sDej?bKQc%#jllUl9b=>77h7gnyvh#;LQI`_1C zw{LDUzVkX}LkL_FQT)lsPIo>Dau!*zYi4pxKcAMofXV)$>?S*Yk zd)8hVI>9@UAKLS()#WQK8jR&x@FXvPTfKh0LBqy-&TF2TZSC&s=wo4?*xPFV`khBN zt?g#GMsM7-4@TNA1{~A8&|+)zpBh}fVmA1~%#E{dOwf4x$z=4w&s4$I*TEDJLp;b zJGs$~2+PDdACt5jU6xBwQ1Y7(~SpNM?EHiS>{JLR6 z>#den#~iO(Z`tu-^OnbkJ{ykgFl~CId%fcMkf2Uc4adS`BUXgWmyQuE*I$HTAX+vfoFt*%q z!O~~CW=jjs#GoO=pReQ?uDM*_)8cKt-A39=roY@2zV^AL(<8^tJG-{9zcDL$=z%*M zkIj44d{Us*2>CCKso7F$j|%k9ID zENVQ=V$>bM;vH#BMM^iTc29b2?wZ?m$#^3&1v&*$4Y4<9@?%1CS4 z@ma0LkLfpgoL>q0^wSpL%aNz;DE z8i=hI_n5fJc+1``x3hGww;i^1^};{8cH4XAp_BcFmv4I1Fj;Z2t8TaYYkGHHf2zUt z9rWgx{_LHU_9o%dOq~|S3{%?)U4J^V{p@_<_1@FwUl+aAS(deNa-Tn2)PAa$?sC4* zEo*HXuJ)t2X$QysW8ZpJo#qqHy%q61_P1!@9@qKh68_J_Vt6}hHw@E_2pM|Kddp95 ze`z_Rxrw8P@y~zki<}m5)M!pznr-j?x6h0)W*A)@_qItcleXiDSa;=9;b!*z-uK>Y zXul%z^sOU(rc4@hwf80QyS|y%1CFj@8eexFb@JGXf8N!2JfP=@(RDny%PbeSnR>3* zh9_s7+6V8^eXBKVs&&7&T7$>Y4LuGHZhvoBxXCjk|5q6UKaTCYRNOb#|DKV>l)jV5 zvjGk7IGWA2>gboba)I9A{s)3*Gjxy5d8hT~z6i6xgoGB&p&7OMX{7F)>~*$b*!rC- zx(6+!JDu#?sH-`%%d|f~4miCgs7=Q1t&8J&yd5&M2Gf{v_?MH7bGP4^FaB@nPDi1` z%`QE=_D=0{$~L#@;AK{Nb6n^5H)+-PU8nqyvmxt={WR9?xE0@|$&sbQ?!>1WT54IJ z?>|gCl6h;|<$izH3%${2UFI?GzUH>4A}!4l-4ART@lGQ_xV>H1;nx;uux?uUEVX1ZpxaRLs1ONQ~Pi^wdyGf7SvC}4-udw6pul@U(Q`y_C&i|fxGot=K@`GDDs+kFB9wLa8;bj$Y54x6Sef3o@a@Vp*PoSXCCzN)t`;fP6- zCGItD`mp@y?Dl)@?;L9V%hpSq>h)><=AWfrPQkvn7WSWb;@W_Nks~gQS@$~K&n)Og z{PTK?QoJ+X-0A7n!%blRHg9G3zuHdrnD~-8E$97RX6>09>}LrdgxOALIBqM$Y2nh7 z3y-zBrO|F@#<)iT%L006I_%sXsnhy+%G&0=k2>@lY~1+cfRVx1_`l9-lX1-~Q1`a6 z$-=gaHn}Ykb{KVFxc+kXloN*nM%qmnG_%ja;AO2_-U@QOG-mk0#RDRT_4$3sHs+D$ z8jYqoZDCA4QP(4MCdBEu5EGa)X?c+;83qQ zb$iq13|yX{AF?n1$>Zk6bN?ml^-lHZ``_^Px-%|$rrurQ+}GXxT$FRx8|~j*^=dKS z&DH-cRLr0Hs!>;qXDw{C7TE@_?P(l0?s~p^?N;rz*Y?iVna9<2zT9HsvM1vB+g)44r1yzkKS$)1J8Q_m zQSGO{wd`Y(Jji zuJo8SLjTF(ZA*7H+4`C{baRZWOW@EjL-Rfw4*f~j6>Ho!uMXO9|F+A=X|IjWaC*Et zW4OS4yM2B-gZp|=^p=kCN4(nn+p3erdgZ@JF7?pYJv ze*-e!1nM;HU^*B&b8FpJE_Zh&&{`cm6y7TOP)79mbLO3E^kuaiyJ?!!x!?K)nm3Jh zrt9psSwf$-uAdiw&*q)x=7Yj^KjLR<^+|EH{FFHVgYm-sO~+r}VAN=9pMU=O*=J^r z^&iqUuh!BQu3q$fl2Zpa{UytH(I@ro(*JSuS_TO_{ya6s{i<2l$WZ%dE!y@xf)Q+MaEdmo3m zt%|GhpudI}KjWZ<#Sr5;eayA?I@+A)Ogs^LY8icK&fw^KzmCj~)HnX8Wh>Ung+mOR z_KjT>W?}1*tF!%Qv*tQOG;A7One~*N?Emz3VEu+onhcAK>K^=I{@WHFuDjC>S1#Vu zCAP<`J&T`STj=QJ=sWk?{m7VWT0I!kwKiQ0G1<`g-{1GGbGqumo z*9i`uVlsKnm_OtG{xxCgZzCKY&%Gad&d+jKux7)@{&!bsUEibYrDM5e?TN?x9%)_K zbYTAO|Dqg?@3-BuUN`0MNYA-0DX;!pw|RB$X`42`nKgdVwDHG@qklWle}9^>@cF96 zj{7aQzHD}6o{XiDnPe;qn;5Pp0%kX&>6nxk?DZnISc6`?Ug5Y8xI|_ zc8!(whqK1I`Ah$Kl{;Rqag#}jE4b_b>GQ~WmWU}F7t?0@8^68JLIAJZPMQ>anI!8lP|3?nmc{yz;GA4ybJ$y_P@Ny$}HX1^G^PTjhnOYxISuf zU>QeiLBDAx9Ym*QkA44-=VF~&i?lRYd-ClqbS6Kv&{^A}{+*AG>|`esrxb@#TRQeM zduQ|f?~SKINAyXUN=6JEA-Xx=q;Z|@WP59~9y*D$Rtn~9G8%jOoyPP%`5k62Si9(@ z_Atw4{RIPcokj$kyABMdr9atdZ}@8qho**2uYY*8cc9KSk!kMUdZuP(?VHy!v)}Z0 z_{iFu>92kZ+53mS?#*A0Yx;!x9qsur*Jrw^?wu(6#MUlr-z0An_(w&CTI8?)%e1Gh zf77?ke?8{Ib8j$ZNZ_KuHoIDDx9m-u_k=boEb8cq=VR=jub6s!%e6~uGpJ^tvFpFV z56*MUET?s|?=W~}+Vj0O0e7E1_+JEe$ub4fp)5boU z-ibRT^P+V8tT(&>;==lx)0{WFq0Q&%FJ341+`N|+Z`d?&{m8#p`5)V0H1&l?7q{l^ zteSNjsI_3I*{<=Ok4nrp2HU#YHal$F3>L`_FL}*a*8P9EH`m9IvuKOY>RTUoouS=3 zvvc>sZLF|f-RIrroiSQi>)in3sr5S#KHO2amrfT}*CV}eAGtm+^jwG~!$o@=ECaD3 z1KaI3XXlF-zD}RV*rfGw`+^TT3wgF1ByCNeS-Je4W3+GX_0&6mC3e++Y!GC9_Ga_W z_7m&5)H5HyFK+(=(-n1&t=!qVzGiT2(@^e>*zMuHTWoP@JZq`Z#Sg!38DePQw7XkO ztJ*WK>$V)9SZh$1`Vq?q(jKPNFb>XuHHcULHd7_COvK1=NHXx-FPbAVzkj=O%?`2ufJpZgES92UKcc16YTO?WN zu#R6Pi)(2oHRDu*tQ$nww*L?tj2a@+eu^RG`5}docs6x zJTLa;IlD7EbM5S0Gy9cXUtyXerU$mrq5}I|fxOr6yc3H7#R^$?Ca%>zjZn6RE79)R z9rNwNTUIGqA$@2@g#H)TN0TK^N+r7_40s_o(ZvS?dt;Sx2?1>;Rp?yu08UP@a}o`I z!_O7UP1u@GmucqfuC=e7c5CaV-b#8u4(}4w`X_h(xkeX3wwkz-$BSG;NXnv%d10&e z=U$=8X?SCWVky_EnGdCe(;&e3eD~jS%+W<|=GO%5(U9mQtBzGr*4|Efrvf)6>0CLg zWUIrr>=sYQ=4G4xq>ZiImuXUPY}IUzspa|L`GHIEFGN7Ec^RJ|t8Xs!?Pebhjr_hy zGFzPsp5mBj?8kMDt@DfCD@C;hyvPy>7niXA?0nLAB$UXe9=%lYiyxavyQdLBB9+xp z7F2xH_D}tnst9L&(@zJogb3TOg;7|TfEU#x|toHuf8a{6E)6!%)%Kd~UGf#F9XzDV!@ zI9}6v-7OLT>6vEt*U#Igiy+?Soc<49iZAeC-qK zo^WS0H2*!F%_mDGQ!_6}e$~DP-lK2^$kA~!rXQo-zHF~9q$FpmPK}HLCn-p+k`g{l z*CEBSsv_!XeG7u;;$`npPkci9Win#!SV6#A5cOGj(y6s8@#55a!ji4PNLKA9v{yqFT%fC2h%|%wC*018&)Am1k z{HtMaP=WS$GQnpb2U74p-155bC{L2!h;OYy2_qQGaVW1(2Mnln!rUPrv+>183+FM& z*z7YM-^Sd~!-|oAQ&u3q|BS?OoA8N4{3~dwCWf`EY4fzcDLue#kkn}3luJ-VyOri6 z5`^Qq(+h<2z2+hNM9urStfF=4ydS4^H6jTFu5J*P1rkCLZ#rXxo+~1+SA_?FAXZbWi zW6g6T;pLUE%}9&VXdf={1v}s#jfET$ThZ|T$neTk$(Y`%#Q8eB_&?xUHdsNSYH+C~ z3PT^Pk9QkJGF;Gokyp!CBc;<#8mutUm}L0Qg#$j#JnT1z;c8FWa#|HvWTQL;tRJa2 zheTUDFQ^zR8fS+-3H%O3-qAY)xe<*OJrg7fDyQPo*zR`&+-l`0nkMX<`834fw~;Cm z)fxJKEmTrMo!rHsGI~gmR#B>BX%(bHio)`sslE~F@kZx~Q;u__o8JFwUE67Dy~C2P z&m(L#(DK*>5w-?AVob$l9C_?%L)(b|lk0lEhEPYOSTLa zhN8MaZJU({y}AQWxr&^e03V-xiX*Q;}5U>^)$G2}I_HD^-cC7m5>wa+DWBvY7){{t8cc9ch zGAkS_6fCJi5Bt1s84xF=L~7kkKRHrAyrigiD@!BZX>!-RVZFBYd46NkUug(YdHJ6J zS-E4kJ(DZiit948DT*1^u}cQF>pLvS^9uxlR4gRJA|KmObc$YO25CydGyj{QfHFLz zjVx%xr1&klRWiHD44y(9zpGQw!22s=OBsgu@1l_Jj=uLbwwD!^c*++hypTbL9fzul z`afvx7-dkBS{5I57rE=IT=d+{pHd?0A4G)W>M{4Gu(z?U0Kd9ru@qRdhrLgaXh|Qc z;inWpLN|UMz%oC~G87h6YOa85OC_p%O8vJyIYRrHWH$K*?p$|n2@}?e@7&DEML7?< za8%umS@Z)M4*-k0&y_o_j84rCs%&niWqa)(?oX8oXioiFT1_=RE>2#=MxRqq@Qg0O zRk!1#YnBbPb99e_?$G0?L|a7c@!aO)@RP@16*KbY=gh-4LuKB-`!-e@igK9(paJ%J zgMW@N^_u9+wKYc+*6|3^t=9T>R`UdV?#W1bHS=r>-|kWpMTxPj=m`ISX7h(@rO>$6 zlc@)JFDBhexe0PC+a=T>rOndNyQ#X7HDX}Yr=h@MuNwf0spYF}SxR&>aMhrcTGO-k z^ckJU%dus>f|dhFy?M9sRK$C-H`L;xqIHmxNc$=92z{Ce>mec>v!vzTZ1+vo;yQ2N z?SLLdLlPeC+dK<&_;D6PJiPiO6giX_)X=5DtXg_&*mUwh<2t6bWw%KzW7S_t19~Mb zr`g_4v_;br)2m}Xyt`E_E1V+H{j>ZJgb@!VuJu&ve!epq&p$lyGhkHsVm;8%^q~W> zDI0uH6`&y)1YGo&5ok-cci`V!&22TUvAMGEl*9j_!L?paYeGFB0(v9cy{^InDE4-Y znj8CU^4-i>gK;pb*WR2?{h9( z`GK!>0yq1KkAPn_@~%1B(7O4>zLwW>M|rl*1ag#_&W^x=v0n&DMWwm$Is^E9fawF5 zc$^@82P8I!%`szW8jfhwY{6lLc?SW_$>|4?`vu-h&>3w)H~(_x4-9RU^R7U$h|8T7 zD~=hWLF^3O+V;F`&2=~ANWJw&U;F=?uv5{TDOy|XPIJtiu-ZAFy zGn1JAMJ%waqH4LNChZZ-VbTQp&D5%oD3farRL>)U{?IRCqe?MNZq?e*n#kb2^87ru zg!f;wQky{nyD7VTlNi3B1jOj{uLx(LWcsANbrhUvLOd zB{R+o=%n{@XpYLY>;bX?zS=I~GPfTMRN1l*0nWK>T^i2*O5#>+1>&b4q&8F=@3KRS z0u$u(eCoqaN|`5Q7IrCfC;qfC`DZ^^-p(OkehdI<4M!=R_UeJ#-K!sq^OD)lhT65> zLcnGPr}Sq1!ApDK4*(QrWC;vZ1{0ut6ZgkGL3I-gRn#1ULzWDUcBjcry6pSQrIBC+ z-A_vouz+9TNnhVxncW%5k>?%Dsvq>p%~vTgS~4w2y@i{-t$*nzQUCv1fd0M`L;wLk zA-SDDnHahbEFLNzXPTXop%Q&d#-Hg9j{7lNuNPWhrLF{t-2u}>X#yp`gMFV zI}DwE;E%0}$%EzF%dRnPKW4xNHA2wH`D&ml;ecD%Fv=o^{%_0#_Y2k575D+!u&cmN z+A=p(a&YQ9iMHpKodyjXyro5KSchq;^W1W*c=~IS>*#CIButTaXs};p0IkHXAgn1? zWWCkRIT?or2a~84xiv#7uWPbA@c=jOQ?l5;@c1}vQk%jc@{%FHw8a2{1FZ3c9bkGCe`HfFG1){hEA|@YkKZreSDhbz4U8ap`FGT)P2Yzy93U z2e~ugFTYx3?r(PzD$ZegS9z&lAHsSI_I=)3&w65*XCcmqpsE9Cl^KiYUh=f|hM__kQtm7#Rkjse8aSeX*PaKipFk{l$`X=IH#8^*b=)rZ=L~bNv zP8+~(+@8X=A-zRFp10JVtsS74P#tzTxM|r>VbRUc%Bo<(#iI?pfW{ z@Oo9}JkMOfr<~o6lgl)24QE0Ze>l`^yy+E(R6S_z#&j~fPS9dx0>2}Wtk!2#0(^da zqoYnp@qqhqar&9vYX672_^3$XetsGbp*7eziPEVD9BzU6%Y#=$AU6-^BEm#?wu793 z7`%1B8uay`Zyt1kWmRPjIfk@5|DXLDyuFyVTCuk*^`!*7LTDi(j^njo{byI}Q43}; zET7ka2-4Nan-xt-=FfJ)o23kA@MSc(@i1RAS9-lJJ8L)5Ih6X>0ii|56x?X!;GK@l zb(c`kUcaJ?f88{+2@MwKHv(q`J$;X!4QptrN5vn{4ML-aHOLspU38&5T~{v1Jte}l zH7PCiC*4H<4JWH374SR;%o*~oUrQxry{z9Lkh@A=NOTAH@zj2PIp8!|onm)a*=>a| za$Ip~aHp7&1GtPOfq8i`3m65D>^LHX868#l9uFB`Wy^r)z&yddo@7%))v6fLw=7Nv z(2{NaP3e+GIZ_j+ronvhlm2}0JRa>$aqmVn)NCTp$WMm5ra*6kjGgVk{U=*Zx{^$B zhIz8EPY76x8)!V+d6~9QToOq;vw|8UnzWkB4A4MlT9GAzQV+1a6g0^ zvzD)(bMb6)5cG^~_S^CnHKRf`H(lOFuz2^$%~WZgvuC%<@+KOP~EW5_OJ9t>8{s8gN>TX!X|f(nvd^YA%B>5gu0fO`H|Wdvr);OAE60%f%I-_~ z4}4#D#K?#Q?)5mBy^tp&8aWlU)pS!ro!D!ES9Y@oKGIlRaJkJ8kN<>%lQpXveto+H zd)(p-wVn}ep05*Lk@CJ-B($ysG_uq#6zGE4>yEb8I(qEh8Fr@?m+bRBJL%Hip`Ra5 z4DHgf83E}#JVv^$LqXOT{PJNt8d=-KVF=v*eW4)YIad`l92zVd9(kB#Cw)txw|((9 zLI1039sYmgM@_R?O3*oR;fWtFvwQn1Pt08@3es=u*uwXCj*?ojwTn-;kD*bz#-#-p zt9V2qYeSs!HoPGX!=n(m8{UaqpwM<$oEWTFSBvb{KVIIYD|y9mrS*YU*p^p6Y4f3` zsUc4c@p|811m>G4I{%Q^t6~yh{kP@cK^h8Iba}x>hz)O+(;`FTC=Kb#UyxxL`=gHw zl2Oo5wN{|KSntSTW?2WAD9Tw0EL%+oKje5ig$4b0SX22wE4jq`tedWrMEr>wt12_* z7NzB-b~8SoE$&fTdDc_!EdIbaK=GDU!CRsh4p9zpT7} zsH2OqYKQd|<~%UHZ;cdkT~DDI4xHq+XG-+B@e1FUIf{8aOdP+DV$clweqPgt()dcnFy)54A%n+ z<}H|_?Dg|DxxmLxhge5d<}>d%E(_Rp!AT9ln?%IjsLK%t!0(tJe~ z4LT~XGe@Hh_BP13eA~-t#Z*;2d`URqUsibWeio;l`;+ek!AOWf5t5}WV#JtiCN8L~ zgRD9c=nMDshW;6D`&+#?H1GW@BGFIpmlx8l0t&Q{{u%E3>z;-k%_MftKHL^g2Lj7n zV0AR~!dUR@Calfkb8sFEc-W`gDJ6%qL*iivF|U5#td{#?SBd~lwa!Z1RHFHbK{LvH z)lHcHGBN5r=?hM|lzsBX;{vI>W%Cp$%(OD(8}Q`ex8K_f7pE*q(66Bh%btDeTD!>pVed?R5F3^$~`RZ%!6ubeokffb!oKf*>RaBxV$NNLMVU@6O4A$m8b1nY6 z&(8@i?{!b{+{XhA@nwNN-!;^9%e>0zK!M14QJ_x36Vy(U=2jMK1iCXCF#0_0EfDk< z+)~R|r8%EcH3INyW?cOR@jmz>rQvldLj~SB56{*NH|=b1fvr{M)3{-tCI@T6N>z=r zyi^}Q=cSfQ0Q-;s=M_`sk5IC8b%t>|wHzBtcxrbA^~4bPC;yYtKTmm5%D)(L??8tB zCS?DOo|iVXABz`SyR|z$qkQ27#Ui0-?}48CR{>WT>B|?voDiJzx=YpoTS{V>lD%1)KK)SvVKwQQXwblm!EpR#r~3 z!Z-}maF(JEs#Ef2?dgNB^>g@XcI`z;iZPy+Y%>`2ybTH_^E(+W`@NYrbHHN|mc8Sv zuoVH%((BF4)aHJ>cQ$;`#^dSH9)n$qmO*4c!e;_It6JHPnM~07jl-Xy@qjob1UI$u z3;>;^L|?2f=KR$v1YI>FY8olAJ5J<%)yTwbb~U*T1Dt`nFWVUb_4pF~&JmGxI;z`J zZxaljbTDj7HPE@ye~&oKhhy`uZ^y&Hft9mS;8Tl(N&2=`-FdG9Kp|hupdjdvnr4!v zGZ(M#_yZbL>WUEo<@)aWe$!}uI&RA!*l~PW@5&20$oc~W@&L;HM|NLr^%&xd9KZ>0 zsw8WN+440l44SYneAM#JrGew&h;guO&<5=_D+PlF<$@B)FeY$rmyM_*AJFvham*9Bo;!`SHG=AjbkugKXcLnm}(B$)`M_ z8ns`aqc8VS4S(|AGaLrkE~Bi>=FgG2DVc{ zw%8X6hHT~RYPos~y5Hy(tSa~xW1K_PSZ?X+y+1)lR-uYEIm(LB-;lq93r&-=wtxGB z@}z9qy#ak{Xct4P!A(k6=Noh3f35rbY+^)5v!)s^jKLbZm&V{TMYD#&*%$b zu%17k_Tt}0X8Bfkr`BD0`{bdI&{2e85lV>TrOTb(Q*=4YSqNwhEYQZh`>!%UdDBIx*QS<+)yt@9yr7yZ*9fhLG0i z%rAQ?dQBUZZR>PWwM^tzipNpR=1?ZVi29DOHU#n8qA)YmuJ1k1l*4JiD?SJy3a;qF zJG|4u-AqYR>Eld2%(4Y!Sz&69{^e-D&vI{BzbCNkdMxr5A=(fiimMKXSC5&_m0my= zH*wuz;PNJaN@Z*|*E#CS*Hs3v(dKa6{*XPBt{|^G!5_;d>%=KF*pP_adAZp*R2U-&u;VE*ULLOqhmX6M zWm$YpQ)t55wDM?P(4~hdZ9z>K&f&;36f(j#?my`Zw`)tEpQ^qh`)*xh`-)`FujVz| z>u)>V+WVSJ+I11yHud&`wX+l5babO71ubc)>FOYLm7EgFn(^>I{G!$ z6-mCg0 z=f}@w;QLnuoa{1U)D!}0=*7GSyv zheBP3;G0unLtnunWE%jw*q_K9Tb!R#m7(OfD*v4B3U$e}i~RfLQ2@*pDA)5VAFJ0x z_SaD||A#i`HTS!fJ+x4GqZgK^yyL$uxWPwcS%D0<;Zw02Pf%8$>bn*Z=+eqo3N4!Y zwoC;8B&Cb3Pk8X-wbf={(vle{Wy57pC{0^xkll#CBW&L^=s5!gYWusN1Vf~H@9sk$ zAQ7nXyG)?AUvBi+yapp+Hl9~NHvrUbevi|AGFP$(KcwKPn7(nY%fvvJ^FXeG@lA6H zi+r+mu84W9#G(5!+c5p^s01Asp6I`+Hh;q(XDrCyl+VENp zo$B5qGOf)&5cVXoRfeC}T6ukmy~27V(paiI7+$YEcsI2>UZ(D-Gl<43rf_>1Ht9cH zAPTw4m$R5>;=vBu3bCqBFmFb4CNH6yON&_%=kePd_l~^{UtDbQ>9^gNi*D$5s=zpg3T#%vwN7OuWq9h69tq zo}8q~k33jj(xlT2d->5RbyFhpI@5q@=6cEhpi_D~<6o^RUjU9om3mu>2|E{W&wVf9 zQP1&58$z+0Sa&4Kr_?Q@Qo{!6`{0OC;FlFgO>7r%~Roh_b6nvkvcRmn%?p8Jm z6;Gxf@PZ?I@6DF*M64x9-;Qzthr~c_=yYU?ChI=TAPQuZoHyO>dT?*eKvk{;?2H3weQm_yxg|5H;dncj(OpQ>~{mZW3e?lMPkq&U6A?Fiwe<>T?x6BvAvT|Wx^_)23 zLPge;h3L6^k-90|%;gfHnI4&KMKQJW{9G-}_SH8{AEa-Bz>}`lS4aM@1FAGemKo#w zr0DoqMv~wgq_0BA0lwG%8%qJN0sqUPwbng2*Ob={lIXgB&b!;_$F;mQhDiJbA~i{w z&D?vS3|=+fIvn?J^fVe4J*aK4iS~zse_KRvEOuQ ze~(Bx>7D)xSwetjG~-Vu+bV8luCoc!QZl(ulgV+eRul+elLOv|kRQG8NPK9auCg_V ziOtjfGyzaE8jd^qgs2pY-N@biXp0fu8h9NhtJf?Qnm_oz4oOXX);BbiMJBfF|0_V_FF zVVk&v-_a64@oIaT8S*LMhE4EuIxUT?{_2J5c|HAt*1>s(8j|h7v;ndpk{_=5Hc=Mm zl=WWBh|vJmzr8JeL?hJJp_f?mhsXX8#^}D4&wmi_*ZFz+Q(w7->V&vLSOO1&`D{<8 z*EY1F2`7q#g8Jy{7WJ z3l!FGqh7S_zkBM9Vfl!JLr)dUan{F(6)o0j25iQ6J_z$N>@%nr-r`ub^Ilvm%JO{3 z;yHR9as671)suuS2qv@lhkbhQ_uOk)4WX1}5WMD50xSHTYD{|nABA=t{LtT638X$d zkBxd&i1@BKwB|U$8Z)+-q7Sa-ItG28E&k@Zi2@CY-SCUfYfG{>OJc8v3N;o*Rw2!S z9nj&^4KUDqZ)#WtmjbLHU>7bQ5kBFZlvJ7dze!PviP+y?H733-uC!66?p~0!AN;FW z4xwaaV-KJGc-3+S?SPuCEzxaI1m8Xkp3jV4_)*VunEiZg)J1TEEr5Q|qG)KSw&2by zh@@}ShzzolCAaeJ)B{UAp#2uBGx^qLcyW_3GQS(z=M=P0)5Q{0vTdR0-nV#1AQ9*R zBh~U?~2Gp{kVb^(Tw_fu+ivIszhDEh)fip*wgQr2H>jL zh>Hz@5+5z5_PpQw2K)Kg)|((S%fn4^cl=5Jen#dvY7}^Tw%P{tYQF=%wG(4RRlvpm zLh-_c4B7Nj9FHN8=mBCyrlu~0&m|g~BNSU(!jc}fJ{cyyeeOxoDf-Uwa^Kl`5RxnA zl6l>}oHRjXo8wYI^iPUx#AXDx;^7%}6Snz#VSV)-SRUwrhQ>B(`?PwZU)j9HIzl{(~P004c;M?Xn_kwzif5BDKwT1t8}sNQ;LBLE|G z@wFAE!h+lUt|k4>>c|G@NgBf?0KXI{0xsIcoH!8l?^@-YFE&_4PbWK^_s=wb?C)~s z1zu|iK7|_m;^h@8|XC zS;%4S&-r?ih$&PYy!Q+E9wPqmbwaN2FY^Np6>pXTh#fXy6cU-)fEuGHbM?|T5V;7a z#L_VPBBz2rEgtaPXhPItwBeiiB^h`7F-h;brq}!UzV;8L`0n%FzB<9I$UUOr^ByAr z@Ex9gOUA8soP2F>Kt|6vXTXE``2fJKN;msVcQA>+BNG39Jk`*=wRS-gm~&CqQTo4W z^#A~4D=Yn{Z4)WHwC^If<}&LxrP|kdF=lez$02 z^Zpa`z6a!jOK`V#xqUh3aJePO9M$}*4OZTWDy5{4(?^>PRoB`D0?&E3Iw1(I;aag^f@I7rK_xr`qZ2I(DMtOD%UPx*h74FwDQ{i1+l!;RoX zzehX^qan(A(QGjL`z4(k01XXpbJVykF61Hc`i6}iqO3SAk4pwSr`mgnBJ#w)d4IPu z)e|LQ9L#Nsp-s=^c^E}XO1$jrahYUJ@XS6pOb1^o$FW_@`tz;whY88coMixM_nCm@ z|INXL4FN_=b0w0=0~eph4_Q8rOE~`WR4A65B$Hn(iWvdwC{Sn7)%L;4RoqeSI}%2glWi^!%#%14TRly^0j`32G-ng!S}fq)i9LRP|;@6Xu@OBityyQz<7 z{qo0eDQc!_8)*wKHZ5vO@D$I-mVp>r+g%NcluoUv zzK2gUUU3rS7SZZWK{?wU?oAT{FIGNX=Td1dDzNNiFfP@cYU_r>9;Xv_rMqwqpA(c6%Pd>8I|spT1>bnxINc8?<)5O zKUQ>#vV5EY6B>MxDt5W;V>IEdnWUc0PFE#iR&a!=iv|F2=l**a04EaMpoQ2mb0U2Vh_QFE%|lAxZD%@ zT#wS0T*bxAR#0>9Y2&zC=|@>ExBH?Ztx9RMB_%IOCzcXfv`u-1o*sg!9vit%44vwi zn~pyJyp_DB&fZUFh~!fEq-JsbAl`hDzDeKN?$svVBVW%aLGD>ZqO-2!V;lP z;iFadb_2(nwjK+#T_GrkQen;Eqr6wf=h5C57(rfNVo?IfHY~`J?k3ul@hfC_k6Cvl z`=t9<8J<~tj>Oos8Qr5vz-3l#UkhoDP(t86Q6N$N3tYZv32rKdaztNG6DDZ(Ql~`7tcZ9KOpry6UPb z0haC}UI+K4p=-qAcC${JZay1NLeRhS4z`i}fR|X_ zhlWv4nq_9O-7IPgMbhEfkETRmKUwxSYsYhQK#-^x>MS2;_Dj~1OxCF)W_IcF@Wi3+ z8&9t5iD9}W{$=11r!a^`IJ7L_?P?di9Q-isNMUGFzbDSm*WULppO4$?@-qt8(wTw!35Dw;_B(*a>Z1u*4#O5`0{_;F=B(lOv7@usFO5HCAJ0D$5_ zurB<|>%x>Z^hC0bwGWyms1JX0{W)u;&Ua_2q&1LTwE3>*OgNK3Tno(()o{%)9ir4= z0uh$O-qRaDtpV}#Txti*td;N)i}1PAR^BU{Zf-Amh`|Sa(<%s#$Q~(+nY7MPuBr?} z_A41E@bR{SZa4cAD5mt?}333Dztpp6a|98 zDOWNDim-Ll2h?KfKX{|d_4X=pb%JJs&USU_9b*W zZFzB2QU1f9Vrb~+1dlo`X?B0~sKvEb;0^6f_mSa1ThFIZ*ZqYnor|mScTxC(XwT{0 zzoTS>iGlZD7^wD0>e?^?7TQRgr%4YcFaW@{8j7)rF#B*y(&b8s@EE;PJsAevr|yx6 zlA@Ada8wsXx^uap(Oz_-Py(&+BX5rTpXXab!`DZ?uIKlv=fx}iu<_|0#9*q?QRiDB zTBqA?@DM^v75G4B1srWM=j(7x0RX|j;D8Xr6_2<&aSsb~YRHfL+0Uj2RpIkgRN$yu zZ=;a<_n!s!=jWpUNdEDg3D2*)aDmT+Gu=)IXLXJgmtR(^(67bNMoDvqKAIN2?*Br0 z{rme-o~ZTItSHOV7vzo$3p>YSIDgx_C0(GH%rnRD38 zoLV62H}$u<8Xm;}fDH;(5m4O6i;UIL=-)P3Y3koBVY;1vUi3!E1i3F^w#QBI?h7zg zjolg}=Ev9TV^uo__4mdO({Cwzt<}uyl%Rb$y6Rc4ibSHOO3X{%8WM^ETGJjI~Lj6D1sG(K>&YEPP5jK{qa|0>~AMcu;~rumSivUpTL9nx-jrjHX|mmuFkHrYO6! zBwkw{;rPeFup;GfZSQPaNM{f!E;nz=RZoIU27PQ>9;TTV^&~XiZZ!qk>-{K1I(;4^ zGT_fAar+V^i~FlMs<=sn@*OR#lRf_wznw%V-c8Ez1Xu(259_o|wIU5>RIPi_W3Vw0 zO0W@RQf(50)H=WRI_d!gaPjbNhOm^J@O5ibuELy`5lvu{%qP9mvFp@N(^6DpK70?Q zE1IQN8@BY%gfq<7(&tMDy@~VVjTqB2@X!pAjEQ&%Q49?XT8C1U%EDGN4hoF z$2%>kE@(4S=sp)G>uNvrau0V1Jif`56#jq*e4(HS<5Q-E+(N#JL#WOX(i8t!`n|Ju z{>XnLxxSd;o}RBK(EFLcZ}`fDI&KgyTf##=m)05(a5szwepzWHOw_+6PwIm%NoHOK z=tq@MJSmfGU}b0{yyz%l)NkNZb)$Mh^9vt!>O8gc1aGg047w{RS1gRSIK@Gsu00F6 z+QbAptiet`@9+$H8@aOIH1Z_?vSculREuFN{Fh45 zPdy;As3xTcudm0-0h%57B`6HG(2D^MB;x8Nz6XZd4Ou&!9=34iYIpD2*g*GLf2n|0 zRYOI6e&`}aw{#NA-(ePmrM(C3nMnk&4uYg!1yF$1o~k)(52QOJSXT_ZCpe~)a;}F; z7%Diu?tq?`GpSNq%~N2D62^S6(UGb(Pxx0&7+#$4MHst6D9eme3r`XxUaQa`9&vKv zZl`r-)3xeMpw7JwHV==$#g~bdCZ=9|sn?eHv}LXAj1AB_ekb?&ZMv){{27yoBL!x$ zxMc8DqJypgPutY$!PsgrG4$s2ZgoFFfYc4@3Uk)-*wpK9L?moGiA(wI_>}v%;HyNh zo({CmmRQ*ms4<GlUgOb6rh-nL_QJ&?g)n{kwM-%D8eyd?Du;r=- zC;l$p;0Upu=xtD5+_>K0myz*Q@WJ4M3 z0&VM(V``1oC#iA$mW~2Q?NG@^y0AyUZZsjBOGW z*EA6XamL1I2X=#;wBxXJ=%f787OXn|Iw{AO@kzhrR54CL!voL`M z6j)&Skqv@~$Q?Lg70SZHVYHYAOW9dm(%U_+tS0D(4VUiYxpLLca@^O1pRmROPB5P;o@Re*l+{4QGFTY*60 zoyUS;mZf2#R9R*8RpwaLSl+n3p43Ung!IAMO~rg7T-vVs8YLY{HkX6BYste-96fh3 z=b4o)kTcO`YJgjj$KfOo|3EVCTifo*aM??~Qun}<;B!ZbgNfOgM3P0jc~a7}8fDr) ziERa+lUT_O>Vt}`+kYyl?%ITq7R%F1HK3p3Ct!@%lPm5@yVpPcha$=KT8&wl#w zBtFFLL!&@9g>Z1F?Z=YCsufykO*@fQNlaQ($^5-8u_U`X`B7wm--P2{>>5zR&Jket zFEq{P8858BWube)a4(>$ckb%9oV5k_f_z((Cas|-dmVE>H?G6Q1{vLK_znseAxc(m zE;W;wMGKpwOX+E1M4Iwaxh4U^S@O^?BZSd37FtN9Z4Pd($KX@x0~z|^Bon+IH_uq` zy#gH8oMkd8u$Wo*EL;xNq&e_(fSpF<@AFR*`D$0&iNmw6|Cxk|34|+I7SO|a+`P`s z{;(1T+hqdNK>Igq&M!)(>ZXt8j9x;|6vqa(IwWeSl7C+&UYWb67Xn^4UuDnQ?&OWw zqYYvOI<~g{vKg#Sf#3tpM7o~$HeS0LVVrEs=dI8IY_U2jnYHB|Mo%hY+9*{xY?#Ym zUZ~Q1Sid6zdu~VGD?RPpT>kkl`8*%}#vYC6hAatXNl4x?^7VK9M!PmF$X>&MUSajkAKnBOagJ<8aEwD(gy~n6Z|H2Tiw6 z$i{WMre7jLR}N)6fi>)aZNeX{inIB+uC7ME$H&zZY%3%aUJc!+o(8kPPIXdXCzv?C(;KdG9Tk14q zHoMa<>D`nZ$aQe*`N|21D8u$`gaagtoh>>wuIsP0-Ws`KG)S}zwV&Q&8VijoB4gAg zV2T)obZ{oByj7RN+}tbvN&9zw&eZRVR6@Fcr{@wYLJkv)ay57_XxaX#b58B~Ri@J< z9XriAttah1YnSyK@9FkK_T{<{vWl`&R{=BZO4R7xvFsK%hnMnD#+65N!9_WAZ9eOOZrtI!Ys`S~L? zs&de9ZQ;V?Z~*(VNbvz_%L3$`dvwOl$nV{M!IaqP{ljN{eQao}*}o#U&B!KuDN|#^ ziqpZjIgrO3a86=V@XZRK9ro+DV0 z0PtUauW#4GKK=YcfsYzwjQeG^|C=Z)0&A4EDC;hOLOZJ8)WX>uNG#~7%*PAI zYq?h)3TEs9Gx#om99QV0DEKd7Uo7D1qXFn)LFmSmE??3#l94e8r1Sx)DGlqa=5~D3 z?&-R%GKKW>GRcjKY7=yFcFCXuQ-!LBuHi=*+doijda!-h7_83;-GuOy&{Hv3QN!~m z#YGOM19Vgu;tHxGm8wk(b#XE@WrCW?2xNYi3=39i7Elm zBRgDHe*sN3L3MOPJ#76<@-#C903*p&5xM6HF6i4<1GMi%llV;XEpk5rBx1@2rRNwm zU+xJ1Z2KHPSNqDccSNwf#ZZ=LVY`F*OkYPV{u?t5D1>h76qdbHqVWo6l8 z-07!&peKW?*r%?POK)n7G{P^&32DhEWL?t9l1)1MjkXg4Hwo^P~qsAm5!$gpQ zOD>z`5a;9a7w(%7zu;}=0vl=Mgr_~OnSgN03Z$Vy%wm83!HN2z7Giovul$*nwj|6o zg2ttj)@m6aNJheEWxPtAP_>MKS=4#|6z81DvLACC^D1_ICo}~RAgPN&n8P7&%P_O2 zSRU-NPc*1o-fl|cakGjv&fuw9VcmKPIF}1R=Su3WliM~*0b}H-u(PfdlZy-ZocnD_ zkoqp7m;y%V)Hw#2E10K6iG{vZ=(%^LFEtUnUa1hCH+Drxeu1`c zSIry2J!!ol{6O=R$&(M;mlAARw zRdRBuS?#PR=i9vo7^D5hh20`OG=QF;nO%lyVU|NH_3EeK^tYxSvgbQ5A9I1>JS*VR zXXzuV8Zkoq8Z&Db-)s7^dspFQXAf#=$=bO6vZ_2^6f3b%sTAA|N#_6mvJCwc%#GW) z6xNfI1{XX4Y4M+8RU!rf|9692AoyP(;C~wA-n-4e{+~l};0C!HD+#6}-o%ev@oU^i zS?!CJm7X4HMB{*kWvJL3De{73zGR!QJWQAI*gQdXHWcT-3hQH((x4kZ$8-oY<@oqX#r-zvoqbz6h#W@TOlb35@{k7!9i=)%eT#x zZP}|+=TGtH-4X1rC&UjGeU9Kz3U{GGKrBVX6Gycu_X|j#b~mHO{pu*&Q+~+VSHJaX zBf|cMFyj3n0dUh45-TDSPcMW3kiPA0ojUumeY=MFl#u76G@cz;Sy>JTus?YwUqY!S z1Z~Jedf^#(KfR7Dt!5#i1GYuwH{P6GQCu%ypC*X}yS#4W47odsNkH2nk}>&{WdI$1 zBK)3hNo(Ns4*)=eX-WQbGHGx4#_jIdc-VjEBA^d@C&Ga}=S={ahJa$^jRM+_!u_iA z#QED3f5cYMj}G1S<|f80%*Xt^PfHEo+mci}`9IIO#Q+x+St!6Uip!0G*7hn-PcKD3 z7J%!V3kqOgFB&w1A$Jr4{*8lT$dj?X{k-*84KMfUi$pi7LQ6E@yzlZRB)p6qz^hU6_QGr$0^@d(aQptenyySNh-%_RYVD&$3|u9t~~8hhwV zWcVjUxGQGQ*Z|@94p|xi#Yns3lJ#*3W#>zz&s}Ri+e>9-gxkrp@e<0C{nN;q8#=qkJc7-=FaS{D${LKzMLd8{xAVN$ zg}iHvw$!wnp`&&5ty+6!4c0=3&UrzKrMz%dHth%P3DLNzmfV4XD@p&Yg3q<6A6U9g z0yK_ceBgD`+n>OEgIE!;RQUf%C4ZH*6ydk-sOI|?`RS6|?c#>KGnf76VdKnA1>9~1 z#icg&tK0MhbGPm`ThztRA45b~uEg3(e`d@WXbNLh!)$HB(wN2M2ZF?c27=Zx$i85Z zVxTt#NoApxijxg2Hd{nOT=C->=R928xFO@*73G7es(YLbv$N~~8F5QIK&6-wCIlcB z=bJ_-ZXERCm)8)lVc2)9+ zie%bqvEDSUjqEW4SK5$+-1Bv=EdJ-2@0v_Y2MFtF-&>xOFcISSH~yPQo16URPp;W3 z-7giNt2^Iyd>sgzsYD4X&kbCs2aU807AI;7lWn^GFwC1Ie>bZoB_^bqu*f7O)}B@T z;tHp#vfoIBg#|rWkVmB^M+#FnX$0rbg^??c6bFYMXGB6F#vU4q$3jBpA;#zP1)bCl zst_P51c1)je!lR8ulIumT$A(xk${_l%wvQk7~-K^M4el3u+dSW%!6*2C|sm3Z-C`F11 z?A>64X*Nf^M1hvrD?Cal_dO<1~Oc@h$&Kpc7M1eN>R)-laXPN%M{>{lLk``NeLSXA+QYK7)QcM+QI6JLtz6a z@}C6A6cj3By429wP;3{5+N_Mkf2b%EexKY+w5>Q=61O|y5=@QI~mvn*dA)Qds6v^clW&gb9HUQGQeK;Y zH}9+BqP>qJ!*^8KM#lRZN-y!dC^e6nj*uIHt^6O-c;5g;oOoy>DH&ySfSedT25wj? z99$Rh^Y5+5tm=Kgu3mueL=szKVT^R^1IvXD74+kIt z!eQ*r@CM;P3z7K2$ppFGOG(~AC`#ptg_2d*l&iJHCB}YI0Dq}6|@cmSfY;?qN&5Ld} zM`*Gm8ZD_OZ%#qo+?w9;XMXD*$UbUaZh8IB&n ziq1nuX2OmE9rup}u<<5GkkG!BsFf#$2~Rx>755d&%fdK{Bnq`F9Kt-;^2qkfp}=b^ zR9GmEkP+qp2}E8flrTKTw@?E9JcC%AfB_u9%o{Z+41DOZaVP}oE8y680}6288?p_} zZwNz!0OqpZgC*{A(H(q?l#XrqrhFSJvomW-r*2!{Xasm!mb$WX8 z{v___;2_F(dg+<$JC*o3XWinXbj`_ZFD`0TN{|e8py>!5g`t2x4mO)<=6Grn1sU^- zN@|Eg%y8gfxG*N2(m;g><`22>(D@m1T69IJ5;&<`5eea7IC_fkxU@9HH5O6Z`)Q5u zBm*dP3lIS!G?TG4LIX(XTV6!n)MScf)U4RV=EA!aFlpk%RJLnG4bID!r)KSytKMO| zfkA$udLnSZW0vrkfX!hvw45kKFQl1aG=7nLQZdxLRX}e(>L#RzO*D}=FDly15<35a zZLD8cJdZ*}p9=H1oeGN?&iyC*WnkFp>aUK?)D~T$(c_`$p2Zoj;X^lNM!gPd`PE?WQR>{#sl$BEVCdY-pUjvH_ z9ZM6748Ew1aU=sAJLv$&^D?XO7cGmOqKE`tiNXZ|;O-(l*2#_P>^w56$hL6$Wz85Foy>=GT1sau%9IHrCA(c>4 zk?qx;Td0F)ju3crVk>t;+w8SS17Y$TDQBcCH0mXwAP4@SBUx5L3^K=}!{mp4M@t=F znZKagtSNjXTAA`HH)PD|ZK#Y{Iu*>OwF1vOO$HuTDt zYg?Lk-PWQDM%|I{;uLHm)`spZHu4&7XLb3rv&HfiC;_C1zCO{s4qLy~pE zDhupy&d$vH3}co#H@ci-(##{7Ok4hllwiYQU!^t*3{pea<}d;Dvc^NhluO|zoEXkb zOyZeO;#vQ!FFJ5C18s+~OnU9rHEo0OB1UfL!K7P0GBH2W8?$ZsALD^Z6 z$O)6U8~lfH$7tKn@ttE&Uq9BYU#(rSytObGTMdw9l(8|-4-2wAPy5ncliHK?h@hWzpX5k<(H zdO336+daW@*_;RwrxoF6Mt)!;m=XTm@{Rr29+xHO<=MHci}Q?Z3HHpgo_qk z2G%czD^vOQ^{geeOi{7Uo;~@mB!Ao#)Gs3Lq#u?-coT>{h$&}=X{Ab{`~0fC@U5Uq zSKBJ{Q+SLj%G1~(jJ{B+;-4-zp{*(eZrP!Vc65F5y6k@-&VZXsA=e3Nscj`yk1>ay z1*A9RK5RG#?VjIYf@tToOfu*e*a!=Q*tKVER%)95 z{HUpj{2uugi`(b`GgovlI*d(iU*q=*VbYWd;a#NjqgVQ({3Rust#)&@O8sHT+{enH zmy&H`uR4Y)ihzoM$bq)LI1`pgMLLPIO-5U~^d2dPP6%aeLqcci)1CKLNp#FZWx`=E z=M;k1jROL3#0c!E^rM-5zAv(Fp!yG@iT*A;0{NRW9ZOS(N`|y?g3J@dIJRVZnv2*O z%Lx>CHj437>bXC6lQ|vJCx_V$t?n@3*!pFiqP2RvAHQDup>MM?u-m5mHR{;#(l`~C zm^O^nPPD{`upCY)xU96Ca*-nU@rRAsM1}2PZe^}*ecBW663z4b&`pI9`p)h`OKX}3 zbo`(U1j$Rz&IjXG;LXkIXU60sgM}^YB3_cBsTq4+Bey1uLqX)68uxB~Ky@gaN^I?J z9xpZ1e&Ji{*hNSfwQg2Q2mWq`eSW&?)<&oEb!J;xGesZ$Gjj^Hqh()5lv1O!Hgp&k zM{U_^8OjeEW_x~1Gh1HphC_s%3SSmh3s#c)P4Mc_!&*I1zm=K>j)J%V?0BdMU9F{8 z7U>{OKF{AWe1=7AlGbmuXPJL5v{4pu&4cpl(`p0$;+7N8jEB;g?;>FxR#0Cd^Agjx zWyY+^`KE@}i4)u3N?~jT;oq&iw}-6NcbAwgRHF5dzcHt9jIWX09q;i;{e|69d7xjc z48ki{m`c}_75@IV_C>$`Y0&4)khm|3lL@sz7Cr%03Y==bon-y`oH)AF>3dStPEgOX zxnhqYtT{zWVzSyuh*oQ56|reFwRSYdl97<%wRM)jaWqP*--!&nby#klJ~8VyaC~A% zFUrgIiZxnmsGdYE>t5dwcy6lx5DqmwTw{(AHnY9H+ukEsV@4gW2ioqpRhlDDt(u{F zuWd$l!21E5Gs-5L|yQjCWY9+?KUon4WvO^*Jz0+|+ zkul;ILhYy-8e>9o^9q_d3Da~INi}Y|(I~dS-j=u03a4zNB*rD#ukvE)9*bUA_O7o{ zBb)by+x_Fi%n_C2dC!{K!|oOt?iR*arwZT0%j}u$@NOnH-*Z$$nru;iy__ZBB=eAV zbhz7P3xOT`jT9W~I-QOpK|i9rm+ zzaLaEt7{#Eb4m8)wa>fPoxA$Xm>rUbmVEUrk#_LyLe{SDe`$W)Tn3q~J#TF9jW_#z z?aUSrtDoMjc>DqFoZ8&0UT?N(kmKQNK1*A=RvGq$tNyvzsC|>;%A?cXL^pMbvb%r@ z75}6GwwovP7TR%MACo{{GIB<|h|QCMl#jg%Hg|F672+arpYSsJkW< z#|qK!QT2G{I>h5t3{7P>354CM!X;0n1ozunB-cez!AfXSK8)bJ>}rws>nHFr>4cF+ zdr`|=7kP9!+8D9oFWY%6xA{bCEiF}%2+P-hI`>1JsIG5=Oe^Dj&;ZM+kNw=QUhC;Z zlUi*ZioyV|Tb9+ioXN@j(PpC}oG7TS$xtCd!q^KWQB zpGdqOR;$i0QH-?kq&6$T6Dxa38v(ST{NakwJsaJKPFOjDP)^8e%dPBGd`%|~&FrG_ z+q_{NU(xQdS26pzRLX2D<2p$H$7yz!Qlwc)jv9A z{?JiXY#SAR=F+sa*>?GXq@{n={q+|Uasf%~|E$IcmcM=dTwOGgJbGaW?*3vsjP+H+ zlqz`3zBe49vPNMPbF^&7p!EqcQ|}Yk=#=Rdkg)$jNmiTneQRq=;Jv>;a3tp2zXIES z_QeZ!snl0LWx?_z@Pu*MRCBhlzJEdm0`^*3Ta(hE6S6hIR+m4^YQOEp%Ha*(svA{n zoo{?BT;S&2<2fw2Hcw_VP^A`yrlU<%3pToJ>8nB->eL_Mxm1?2!1i>LuEXiNSwej* z0{OUFU-8x^iC%qBa9prA{62;Jxpr)Bt4av%zlZCenekS6d)Ks^g*s=wV@gfd14dK# zhKcKgF)Dn7LbTY9|55gS7K0}z2dBMjjjSuSk9ysxg0(uHaZ+tb1KWx=f^P_>b0mj& zaf<$N)Tn+_>x$4oLsvEh0L`n#*^T*QXfrBM@Gff0E-+h+m@3z{xC?%+>9Kx|4LEDm z$jNO}qdKu@GHkB%!i>CgFtPRq*I{bj3-yMMaRbqK^t zdcfZpQ*U$%_+F8z$Rk?p;H-GH>x97>6kYqeo`*^=O{BsyFtTs(_@K?{ z`bnYo`^p8aq}&BzhZ>HZVLbh%0;8`it!bk2>Ec|_^M-yRN5NgbJfL#2;rlX{wpsA^*2!4aDore#7G^D1A!*CT6U@%{ zkzR+VD;#ryhGR(C_z-cV->fUy-XDumnbnfSPiu?vMjJo9kiO^>!$SCJ@;|Ba^Hvx~ zIeWLv5j8bE+~MbLR`nw`Mp>fz?_U%EV%IOa&fdW|G>GBoI#Q}+>Y?%2;1uY*%9C-1 zw4k`t{0GsctzYUJE^YhAt&VG{IBe2m80^8ntinD>gP#rQK z8YvN*mS`Ao6L68axpldW5lpBX7r)`Fy0pEVfWw2Ut|1c;!0_4=zpsetwa&es@wxLD zl_?lw%V*IkcyG&f@0{A;{N2`z7qM}?tf|Tj);X%u%B`WoD!aTyrM8>@{L_u@ zDnX2xk)i)n9g%Nn7NckHq@|tsw_}I@r(0XMZ&Nh^7olhH1uDWA^nR2*#2ZsltQjT0aDiRBp`-#Bj2{yLZm#2Urzi@U)i&-sn zT1v?AV<|c^7*ePqOLb<2Xyaubt*;s|E%(9Iy@hls%nXQpdb6CbHx3SqzOJsmPfjVe zSL{!=<@KNOlxH@Z&__;G#)0C8D!CP>XpZXmy77IN_UmtMcJm)^6>c@hfim&KnV|z# zi(cku3m049dP&V=e4-$1x)|4OmwV30>!1YSlGyD6~g1l;aN%} z(GtaPp&uimzckmnPD8h}C8a|Vlb>X~9ebW>f(r8~yEjjB9S*`zEzB|V#@ZHZ8(Y7( zP5*RlI8b77T~S)XdKq=Iy?(0e^8wEC_{Q^12cT-VbE5iO85~^)H{HPIM!`DI5ezl) zM^?&F+VVz(Ja}nMl%M?CAb530R9#$LV}jORdtPA2zt)gq1H?2X)PF|Zz*M0wj#St& z4?=pIX`Xy;H`KO{hVzY0Ff*~{w-+(buzZ*jsUF zCuBPf-G5)a-yYTVc>~cO{!?~*HZmPiV&G)4t=X-|>N*)vLTpe-4iEQxT%BBym{@2q zYi#}SieB&m+>U}Ea`*i{Zp-t#c#FdUDqvfd28vHa3E+0W?zrgdUGvj?3AtLlFl0>T z305?}J$Q@|tI4q;O$}R&mK9MpuKth9v5EK8 zOAhMM8^2sCPm_jH1qnklRr*VuIhawfob@M*-~pz?WgXxC1W`Xwu;mu^x-cItHlT-` z1lmt>?Bq{=diTi|TCFR4i7=Yvkx!;hjrLnm?Ht=Mr~ z1sh#{y=3E>GYWacQH_uXhTi67`1T#ROmlojQHzL`#HLA;vXHTm)2K-Wm9X`sJJN^X zrq=zzetLawm;Z#z>h@q^fafEd<-DG;SI^(dY=2ytacBHf@efA1ZT)bO`@rTGqAs(N zW#lRCux`Hdl!=-1%l$ENOP`O;3~T~;hmJ1Dt>$g$vwH)KE}7HM-djN*i%YN<9sCvP zTsMl~wVbS})3U7fvh+@m#Y5(YiAG*mTsh#0g$2A0Sc)GlB8PaDv@hbE zx^uepk3U9`HJ7nZ-bc=P+qzq1;%Zt;^f&gJt7qYS6g8dB=b=(c$3GFHuXcUrO_CH&pFN@d>s<~D}Mg>w8zaBNxKGm@3$42*K#4?`ns)o#?C#B zW71Z^g;rT15SLMN?==nIWJ3pQe#Buxb?E*_73@%1T)m6ReVwEA(GaL%Zp`=F_m^)Y zdy8=OzPt z`cEuILAM9IQ9cte!1BC0?g~NG=(2{B!JVak0k#Ubo+y!yYqgcmof`XQL&!Pyq+0$$|mIAT=Zrnng!26-pX2kcClR zWS%-=CbBaGtFr|hkL+8E$9(r@VMQoQFhH)^fj_ z&EvZW);j!p=QeiII+KszXF!YbfUH}8EZ6jggo2Mt)qwL4{g*%%423e_emsCzQn2^U zpT=u%gzbdZKLlJYqJ|_qd@>0(i;s=rv(uw$iWiPu;@V2Ko-trg;_4o+Cso<&9@*&g z65(1)44oXH{ImV~f4BgRY-6C3?)8rlvE#4a%+g?hRM7S=BfumEXCvVP93uY){)OYB z16DAAfJKN{ZwN_QApbF;PH=uZqMnQ_5Y-xk!;K;#A?4S5Af#QV*U9os>Ot3U+*Gg}LjAxY@Ei4QT z4Sj|dGLL+q)!%ExpMm@@x2r@`Rfp+b&OSsUuqW`M<=OYdq%%8tlA4$Lp(SRqb^M_7 z*RT4He724Hv{T-_KVaA7u(CV|E9~aix&ZOeoie-%fnn#FgluhGhq~=$rOm2J)DMnA z&JPm}j+zV-LQ4n*jsxl7pp&0o67KGu?HWu7-q^s7N?n_x|Tf7hXlo zL&;oiQHE(+y?EBjtl7Gw`{I%s@{eB62Lf@xNFEwEdY;! zy1FPI8=4v#iz{u(K29Q&6NdHmudp%wxB;TTPO+;lts6ASgouEG(r-8B%!((^>Svq! zUT=J?sF0$D#jm0%nw5y!`-QA+c8iRQkJwO*PBtIBE4OgSj%@L0D|&hgu->a(DRSO-r1SF4Ca)gMEGC%}xV`ovRJ zr_?kLps$ocrI`jm#H4B-M&m7N1!?em{VEl|&2FO+-pJb!rou z4@m*8AM9|ZS@#5T2ZFl0li|RIO^GhC?UE_uRQ$G>Fkl0TT|C8vm%B2d(9%s%B|9jqxs@wwb$gq zBYA{CD1|f;u~=eC=WfEd%EXyV318?*pj> zr_q54_gS?B!18 z&TR%Zj$*_Z&R=&&VAo+TTmG>63z-DkEcoD64lIxzJ(hvJFhHWH$23U(x!!J*om$fm z{F1Ylm8)Yjf&L3pJITVao9X?`Su@Clqe(0^#U&RxeQsX%pHYbdZ3A{Kv!E$77VUds zFyY0GO)dNMK7#5@^G*v2o+7d*fEogx0S!(l(xCTW3mpb`--=UkPhTORhRY3?aqrME zgA0dG);t6GGCQp7X!-tCbnPnHeUp20oyyfaAuX4+!z4pw6J~}83qJgIc3uz*q z3mwaj!t<&ti7d;LJ^F8VZ%<~hHGccfz{Y|tkw8M$HZEYxsyt5h@SOq*vo{AW7E{Q8 zB$C8p;7=}fjQ!!dP?HkeGnjpJ-OEk$slG!yH;e0RrC?=Pm-#J)J0CG6qiO_9&f}f_ z8P%XBD{GyvucJl$u1qH5dLtXZpKDa%Lw03iU4Qb91%*K-Mgo8alDr-xKzy54fL>}g zw|7GI=k~f#LVzF+0*@WX?d8^V9fueTba{fTcln(MKgM>&f84C9hH$Qt@~nLwrGkb0 zY<%|ii!8{{cl|>Wyh`Q`028$YQBCJtj=##Q-o2Vaz(a-lLG=JQXv0_n%)UXwIy9*F zT;Rihq_ns@D=WddfeQL=Kl|6T-}HjZJAQivX510l0xC}8+1lvk;*y4bPiYZZREDgU z6fV^7`KG$o>+9WbCx9)%V7zdmEMN7G&8gq@&`mIUFHR>V6-Nu@q+-CEnXeS7V|h*o za672p-W}Y6pX$G((2ooCgDYjZ=1(yLZ0dt$JJ{2HiFV&h8D5X%@mPi!Yn=?|JHyFu zcQ1HveUc_Z%p*3Ri1N1F#|pX2x?$@!}E}=iXL8C zUkk1*0>o7|CScQ(%JrU?=Ch_8=2y;`-joA`yC!Dvq)s!nE^#GZ>v|M;6NU@?8wyS4j}1|ts9`D=3_so~O}g!!=mFS-rLz7^*)Di4 z*PB|c8Xe7}mdkC|YVE4?$VtL$?GyNY`aXK3c{7?foCWq+A5pRI8YhC1a%N`_nSzEG zLQqim%Xoe+t2q}Bzmd?JwgHR2Hhf4~!C-P6k&=9mCl$2c)8a@2C?mqRdTnI-6h(XC zyViqk5v*2u9Nk9igCkwGxp=-fssK2I1O|l86F+^zv!rEI+kkR~htLQDZWVw4KUhEb z$XrBw6oZydGG1(7NhRa$|9LP<*G3xXV%H9FVS;t7IXOh@OmU_WTWzw^D=W?8e=P_! zaMk#P6xyy_asl;72&n-8D6IPALa@;yfS#{%1}(@Zr+!Zgrx0#-1h%(qn?2>&{+w;# z`mE^uq2j`Y)z-O~T4l+s$*vOjbUkuZ_-1}|u5S<9{4wU{QJr95V8@KM3pQM z6ZDb?n+>)g35%NGjzb2x4V|9|COXC-MSz1tSk6QS{uWm| z)ZMe#ZosoDPT~1D?>k*dn)+gBJ`*Sp&d*|T%_ptO7i<K3(Y4j*V*M&T{@ zAxEjo4(9N6yO_N+hn2SfuK-9DY)1`;T!Iz95d6^c(c*OD~j@O(n* z2hjV(U}O@MEE;i74P<<^a6Zwwlq>#Muf)CP3QmJWWvl*WY48euGN}FKcmV_O%StZY zc?iI8cJjj|h&qTYfCNYo+$nY)&=gr-OQnul)i<>GN2kLBy{ackJm$kc1=u5hBSOd73dq@1dYrjd(FVN~}vb+=$+b0Bm*y-z6bo=8u@=6eJKRS0g|x(|-f z<5}4Xgistw9@6l#2l_XRBVoL>&}Ka#?8{Jsxxw8jDC-jc`b$A3z_-rx*CpHga_pP= zYq+;{Te+@v$6wk%Qf1de^lnhzz6=a#Xe7?c=UKBde zgupVzX1H52M9aY;m6;@RN9g|5WzHMY2LT+&soIa4x<0%rsF%zd=A9Q$`|xzzbRHt> zA*~<&X>>ZgmM$>i6lZJP_kd#u5mu;_Ce@og+)jG+9;pl(M7Rh6sTll#;&57t$cSvU zgoe+nV0^XitGZ>3pKC0zhnII{*R_0kx6!l^=2yj7m$O7UI1e2*)0F3BtC5HSC)#J& zYT2%>-exn9|9R*<3E5HRdB5u1J9UGSI2;f?Pb9oI1V=MMa2}Wzy7n1Yzz^I6Zw1(0 zWm$h%o+5|AB3Zh?ufdUGY&! zJu#d?ARM|M8MzoR96~!cJ0pseLjy};QXT)o^4KvD8q zAb?3tk&;k7<}JXq4}_+-k^^qhNZQT=h6S(J8lLEIF=YFA`; zexW+iWmVO`Zf7IX;&D@^)8(Z}@&Nf4j7yc5>>s^bMLUmw)g`}FCjUvkjeTk}-I1AN zqr^{*Oo?3F+gaVVi&T5-4hyxE_~yQ~F!vSZ*Q5dH74y*!{55o6Fg^8zpL(&xENGFF z`Ih}Y=mS##S69XTITdh*_wVg14>@dSBhZ76`(6$4II`|Oe5A}i{6EbYCY#xH7dls6KM79JC215$YTlB1@`7ty=v4{igdfl39H9@{p1-$cbV-j z0pS|OIAdxm$c7+WX(O+RXOaIW)90wqzVJzh_H)FO2F5>A9d&0>_O0e2-+S5p0S!FZ z?d>6?GU@tMmKV6WOoSrd1>R5YMW~H~eCBCwI)f80?4cu1W`QlpHR*b|5zk?)$NaHk zNzl!NdNZgp2TJ4%&XTFA*9=%K2`_gvw~D)&By*!sMThReGlE6!Ii{> zSZ|dnkA`ohrqS2s@2jr3cs)nX{=K}(CbU=iyZa1=SFRX9`6UzLHq$EG)H-69FKb;$- zzzhoYBH-}iwUIRkUwkce;QGhP*`OA4_p{06bR-G%7rC0jV|%3Ev`)A8ETeh*0lR7E z@X2-O^~r@)pkVN`GZvM;f}br&nV7J*G=f~i+YGM4a;9H~2ux=ErMvdB#H;3QJkb5!jD)Cov^g-`;tAVWZ9wU?jB2XgeYiCWt- zx$-M(mA~0M{4+C?=Iy*42ySFr9`~{UPhcXiH%{~GJ;8Q}YA;VjJ>Q+La!p(A2p_+T z>HAOTAh|wnzHxyN>1rP1(9w$ZRY!OuSkyT6Heaz}+Y_!{-0K%O9ISbG*YE0E^sk8I zj_P0DquMio%7WlS0QT~8#ArR5jVz3b+2+5T$}(8iSm}N+F|8|T>#<5OWqUY05Fc%v z3u;`qB*3a50hhYlk(oYEklkLGHvKXLmv!%BiL6#>xb8++be=P;?LXPd6{73KQEA+T z2GLygKYAZPwdsr1i_Y~6<7F3R@f)uO9$c9Va~__>9v77CgHB7n&aP-o0*9m|4}hMG z<`>gHcyip6m1dK=LxkF?RWogNk$6bzu-T*SE7kNK<0FBlP3rxqpU=*2H}X~ezllOFM&tohSgn9+jv4C${>|Nw+hCS~d~Ao6|^OP%2FM(NMR~MF=Oz z6lq4%+6$(V$_c_>g#SuxVGVtb?Uw$$Po4O#sAss-@gpnq^VOVlo_UE9Khh?yo$PFN z*0jjHg3u~oVlcOUPy)>R4}K#9sG6T1KEHVV+NdE+^l)ZoZ*$VT)RDBlY+Xl68Wp%FGrbHbb~EpdvBhyx}nNfzb&PCR%o5COmNymB{X&r{XO@^{@PwsPlWT zqg<{1TPx1}FV7vce{2ZK#t++=-4~tH@Tjf-fS2*Wi6%%-(X6}SSeS~q0<570&=b~k zHz-3eMDSzD7n#$yCZ*_!7~}2(Pwz8=bDQZi2HWsV@@-oN@}toRJkbS&LQC#gc?H3{ zt?EYiQW$v(Xz();sOL1h4Uq?R;mz-udhWOQ_7A5;d_P@Lya*tBW*$EGkaZZFTEJUt ze_B}x3kk7{j*)JaG#8qOkdu^UKMFUgVD~NsB?g8MLw0{ZjW%!k3BF@9^<05meIW$j zU%#hbEJP3~-8zN~8@wGrw!AK=Z~v#j0XSwJW#HNHjr!JJNGea2ec;LGc?dOu7hD`V zBm|5K4uGXhGxojm0}vBDe4%PzcL_Q-$g~KXH~0ux6t(`5cHmxoo;rRXIU{OnS*rZi zTz!(>J34eWV3(Zn6>bZ(x3u&0xn|eL`PqEc`#1(`sS849TPxow1jEqQtDt_+3216F zV@T3L_h@5^`-rjeKHwKUq`{y1c(#2cnpp~Q=>qC#j)i(&M8t4)UE8r0;sm!EbK^z}t868nFG5ah%>Frzl=xRHoEm=V>Tt~bVO=JCl_ZK1q;6rkpqFZA?YW6>g1;L##LSI#;VOs)}Wz{J;v6@ zGNadvAb$|{6>sFJiLv_R9lfuP8Zps-gSwejrb0^rb~6fRh=>sk^cIb3IFtOSFXN*4 z7i$)qsGOooXpX7i!d%goMYPvsr;n=)sU8kN0viGnU^}q0{YtwqS2?EpA_PC!$~;-V z>;#odgKx|evGH=o(}rj#nE|>{Crcp5S_j<}-y8_O5}^n<6IfR21!lizdx*0+m;l?m zT8TZ01j1V|b2=!uY^1Yb`sIYt(xOLZN{{Bo3-@(o>}jO=i49)&3+P}oaS77~=0%n1 zjI6-tD8biQHYAi37l-iPWtJ(8TCYLk2l0eE8Zw3l2C%l7L|!(;o#;1Ky}6j(vh;Eo zSrr7l34F45y@#M0fSzE_R^E>uUN)iJhGOJ*((DL(x+G&3QrIpZ*kD)T3m0h7e#ptI z$C%ld8dGRWScYri1A^#RVsIwyU(^^;3H19wY|WPb~U_LHChwWo6# zEGv0zb9mo4D?F;3tbWvsd*b!qYha=JoZ@=zpb`&!4o8#z*wEbIbN{lPmQ>qIgXCpQ z{K)Tt1SZa4s=d$#UWlNjKPZ2ho1&6tm1dMxK2ma_lvYW0h+<7IF@4E;4^PEgzJxI_ z3)_NdbD3zYPy_c&V0j@y=o1lW@}H2by`0t>9WASx?7C%WjXr*u_ev(6UY#qbTveGY5@Xb~~m$cxjkgoJhiYC|az zM(G5r`0zMP6(+3pPGAvCQ!9jhgZB}Cu_y=vn0a+v(@Gtg_jmF{$Td|cDQY3}H_PgB zXWLz;*gm$D)$d0E56tX0)UClePz$Id8nhn0kpY+*WNq+8it+u;StL=e(OEgSgl_R$ zOnL??opQJcMd1&{M6AN$Y$C;v_>)Mwzotdx_}N_Ri=q%0?+itm4_H|(f0<5 zbcR(n!J^@^=S9ixm};MAQY1ng-g5Hd`cHm*J0Ra(F^8&tmfMu5jZO{};%~+;lUk9;sBC5e%8a)7erv^Nj^`&WCBtrmN24i#&j>HQ-be6xdN^o(Tol zaCuxqSxsgOZc15}*H~mzaYFBmU3GHI_zw4;*qyu|{D!(a*X_*&HpTh+LPsb3H9hMd zRng6UCK!{9@KQR<#!wL(NCq%r;%I(G|KtasilEucM(R#A(z|A^9Q8r6`_Su|K zWOiy_3iwjzu8$P?EY*Rdj;d9#2{7#MUlQC-&)%kIu=5>lb5|VrQbIY}mP}8!=lAd7 z{V+zUrCC#CBrGL(zD3YytEZi4URA>`7<1l;XCwd zZRA2KtEsiUE>(MkAWtNL9iSD8;Ci3)al0OT&O37D3v z1l@QQBaFIdvJJT;1x`y)+U1uRRM1%F^F$Q(9Y$yM#bBUwYBwD1a{V^I^aZtV4fXqi z2;!}H%u_CZ_!Vm+b+bnocXgpE(g;lzMVpP?=uiw`TI2_m)}CyjXznVN`NtJ#GGH-S zek(T_z)InKIq!`^H8NNd(nf-ANPyrfUIa-bmA2$tIQ&Li^+GG3{wiY4)1a0~Ij{R+ z?fDD)n}FUD8Q;qT|MU2j7k+=p(A3J+4?pwPI2Gj%`z=y}HU0o+!D&ds=d{5}zuGpz z%5Shm#pP6CvEZ9F6_Y8HrAMRdtiBc$FCw&g6sRy);<0S(}Bt|;VLtdDE!`E_!bMGHmjENpJ01YSN#{Nuo7JX&$YUvIP&K; zeb84FL0+isB%Xc87_K)$u+1m(I5Kxnz!-n8foxrU1`z?8q&L^#QqwZ@sHodAWgMx~ z0`3N}QBX)_mS^d4xV_8S`k9Soab8TrXZ?KVRlQVS`Khd-ijc_CN}>S$C74j_>?fAY z(dk3EkCx@a0yxsPN|(`Gz6fp&FMZxUF=`YoWdP*q9Kd0|<9b6>!`m5qS83XYJ1eDE z!+YgkQhQJ2e$@=|aeQK=fA4wU?wvfV^{7YFlc`X&>-t&w%I(XxC1nB? z9nSNR0Hz0-lN~*WcCwP ztC8S_c4=|3HjiqNje7IQQJ(_%E)+$L8i}Mx)l5Z!whB+@7jLosqa%9dM}8kn-#7d% zp3GxTb!@N8WUzS`No5JMK$oPEs6UK9qRM;DyE(_u6=#Lzz|Dt8b17uM{3%~3vs4DgZB=rM zyYDW>2{^Q?%)b)YgQ#HtKc>Dis;Vw(_nbq6beEJM-QC^Y-Q6h-2c=VyZb3jABm_z6 zPU&ut2I)9=`+oPkd{SrZ+;jXv=oyI51qdzohlBo`7nt{&Nzy{l@tEc zzLI6JD+R6isVVWa8?y)jCVryo^F4Cn`Iqm-`F>uNZ~4ARYX0M&-KL;7T{DL9=&Ba; zd^c9JdpNP}9YlwoAEFyjRQLsjZy-IhoSTMOlv8g|bm(ScJq_$Qr>5~CMzbKSjmcof z3pO1_eXYs9ME2+&_BoA=8oej2T*b2LmurzTD+{sx&`gh@b>x?a^v*CiHS!(-lTzR` z@FlA>^J%g0UOhD3^~tA`E`3{D@;>P^O4)_D@V`$+~=PNWyq(!q_2uY^;Q;!7Mg>i8aLJ^ps^42fr{oi)F!!6)8_JQtjn| zk3*2(f6f#@853r@z_I@Ua>;;`erOM4XYcvtdu8*Va&rB7o|zTJ?mUX>GhdyCzkN;C z`EE7vojKLwcB3Du&S}0njRehE2F^WT$xLm9hWx0h{M%?hRzyUiu``^}q;9%$!HDe9 znvPTJnv!zJ+8C$h{A%DuCg$3QVQZH(U%;PLDr1Ooh5uTmS@8A}lWq(N&~2qu6x=xI z1$+sIr?yH?MKSSgd5qGEHVaF$qo5|a$GwREyyFpk!&h)YW@+f(%Fks2EUGMe^ zDRG`lc#>x+nLNSJKOW}8P)E;!VJD~2)al*i&C;He;A7eB%C@l8OCuOvcb+8 zYLaiJZcl6>H6zB${SvNZ!ZTu=kl|Pz+3S(4sxl=o1Mxi}aj()O`!@SZJa}n6vFbN2 z=5YUus!i)pm1=t_qXv&}AKu4!582NW<99cjv=`@t8dvO`mA?PpWP;sG1nqCD<*o7g zMj5aFv*om$0>;0%03YTve|uLbF#>OinyRt*`|fYYs7+&K+N@?eow1jKtbyU!`@b7g zFNTVc(n7HN^K0O}d!sxr*m} zoj2&h55@cAi(uXg{U*4 zds⪻d~AI?xBz^Z$N&azD%i`bv67=(oXHrTmj{nwVMNAhEzCHOseHxL&sUcX=NAare!0~<0z-2WVQ3ehVF)HLE-`4mXn(Av@p6l+tNjk~xtji-(e zPN6*QB6Y-CwMKF5<9<(q_Y)>e7$NJp8A#d~syTIOO2JP;AMFnk@GYhvVoJ-w(6*)~ z5BImC&YPxQyU*k`Y|1hoN?DiaGv-r_^ zU7i!Y{85Y7R zv-910u%)t|tWg@TfQK3+q{eaw7gL}k!00&5YMvl(5F_KEih_^2y8<@$2J*if0MS<6|_rW*im{p>@-kL(z}@NyzzN; zDiX8!Iz9MJ7a*~OJ{t_P`^g@^i?E)5kJr$xV(=ksawzsJ6qqZdrpG6mvXcQfjZ1^m z>`b7$WME43w?6qiH~B~Pbd=-~eUyaZCH6Exkd!W@m+p$Ty^#g%B}TgxH)w0VGx38O zrsYlPB^N0GD;jWK|0ZYDerGUNyU{Rx)r}7%E3B@>X=i8QR-njnPkl^XgbkIQ0~bL* z&j+0518@Eo>hhuW8~bIlH_}JWh9-~aLkemRrt!M1#2}82;zdI}>PE#_wWo*qI@nMq zwOGAqYX0K+e?sF<;~qK(m_tw$qAIu1aI7@(A(Jn@XbkJtn*^}Ch)@jN0lQdUWJ82J0mS+nJhjCxLGBgxG1Ghc8S zjjEmCnT_CTaiv8>KD3>d$Qzq`e<4EP{jKpa?nq<6cEtop%*yC!x3|($?O7G!}g)k3LfgsQ@a=38U+W0u{{S;Ksr3`hXH>@}|mbxiS zw`pc0qao)`G5$MB6I&f>vwGLrLe3{qa8K?~I|gC_;jm6v?pdL(LN<#{p9b^38?A~! z6~C@5bu^lngtN2hVFwx7mQS0DJLyTK8j3M5^8hmFq*wLN;h_cK_QvyGtE}SmYH*+y zQc}QAf2m|OsA&DE2Yige6#>XL+3)37`uU<*Gtz0>_@W%dwlx~C8fj@4xHJ6s)BL=h z7CiQ8>j`!q=6lAvN|-8Yx`;6?$vU4Ik!Obvhu(ar^LVgM`@b0s9cnGJei~vypd6oB z>z?7bS(D-}>TtLKIl+}iWh!e%m-m8rx>7rNP0ZCM`WQiLGXK*PO3>5%skCPHGfGc3 zbdhxn@O=&fb#8bLJUu^;0<&0bWWH36|BGrlM~o5NQ%7xP9fuo-y|c9IDRZ-gKkeS` ztlqRQr>n4bd6Gg3au*bq5r1g(={CQ|wzLa>kyRavuNfRS>N@hGtpE4My&WF z9kFQp6$J-i%es_dJ1SixKlqfg0ZJ+@x%K6kgUtV3^CG7%-o583!4!^D5p}J!thTu% zM*w~W4{)sr{%azA(TK3L&;RJSDmbGuOQuRmS}L7Jl+>vlgjiafJ`S{9)LehFYd4gZ zs|kv(wX=L9kI`&s%hF%Eu6kj4Ct}gifoFgh`3FR*=+P$1?-dQ|%!Y+s^5*=Fa||LH zza2mP+0{H`U5gRQTDylE83AoztVsB#o^DBBb7p@(`1Xy5p&}k#+Uu)ypNHt_k1s84 z0QgbWR<0qh?~c1h=a_R-`M_-JYs@YIxEltH{fMRK#bSO~tXJ#V#n9-l4dr)&Z*#a5 zWfZ;ar4i_+`(+h}j`)iQ>QkS;DzyUe>2}Yr!F=SMg*0 zr@F}iMske>UJfqW+ItP?E+?9K$+_CZVYe7>{Ci4Nt8BDOOC33^3{9-Xm+`f&B)`-cyv2XBX zu$f{z{_15I~xOXCInL;V~64JV2aA{x23*;UpuADLwN z7(S7q$;6uM=tIbB>r@@^Z8c9>W(*?2vi5e;KY;l~u4`6|N<4i(RcRR_I76(e>@iXg z%#*HWKpWDZ_%QdZJ7){9&K(Cbe_)2~8r1J|W(z6;KL$`1|y zf6s4*ZL4ihvUUcYTLQc~RkRPALu~w(Ix$K^g7TLXtyQq~DyKZ6a}&5rbwvU&3R6E_ za97C1QHyh?c{zvWyJDsK@FF}Wtt!_hovTj9#a{B|&Zn!bxQxcLp>Zw%iKvG5sTjlT zrReO7pn+3U%Dbqz-R=ZtJT4Dwd?ZxozVEsM#pMTEfC=EzfYPBj>-LlqEpUhjXFq<6 zWd;7GSxt=4RLF0>HHgyJ=eb$3ThN%hc-xD;@^~>YzI>$8CG+F(pPYyQ`yTpqrp9d~ zyNtWr<0PX{*??kjDDFW(UyE&|&N%wjlIhj4czrTBd$DZXTKrVJ{nCuiQbtDbcbJ7! z3PuX=7y6i@Aa@m9pC*ynL-_oc4{p@iJOYEjHeCPP#>Ma4z>6)oD6@Oom+xhy=v(~b7iixbvsZ5B>Xi|aa%7CS`V9R) z)lUhH$WmT5U+O=D(^Ke3pqV?J3D3W0#l{#l6`d@qnQBXj~Q1c-jJL zOAHcBeTwoUuRp=z6)1+|NVH9cHH2H>d1rMwJ0|xxy;b50dg-|}#(KD=>jL=6VW4!g zlJG%|+^s3TDI&UgA-7Y47{!2|JFF=TB_2g4{nb~u;MB(~ZQOz~DNq#etww&?cZL2` z&&s}9j#%b6RD31vgIKeKU9IZolji;Hq|HgM0ggbzZ58Oh#1ZO+;rnt}Bwy}OU);dr zA=;*@Z%K>ueOjVKi!@WdLcI*0R#e!yFpS*Dp)9mQg#(0v0VmX?33HE0e!e&)l%IFj|YvrG-nGw*drl2Z^+=5$z+v1w!sfE~G0m(MMh|gZ&hJj><(xr7(Jw zxLv;w^b9-_>#-XYqCsa417|8-5d)n;|FcBY%Z&j*Y&!vRqScG8!KMAe$><*YLA+ig z?4T@1bN1Rqg&5I(39IX$mH5#y%#MIPV8~6XLB>vxm&VT8KhLXV)Oz)MmCf?Dh%L8% zA{&a96nf7KWc3Y%K-uCHw&?`NOdw&+8<&=$-`!xo8K7`)2 zxCz5itd!JrmN&AAZyIKFf?#8~SpQ&dY)Taes%`r)KXY5BCXD;;=W7u_E&xO3`%cUo zKJc~Rv@@{_3UC*t@R?Q@ z%+YPku=b`qf_AQny7~5V(&n8Kjorxw-A3wo$p3xo^#=+yN~Q0%Blb#LlHLjQ7^x*) z*hrOCn~;>@gj`niwv>P@PWVY*#;0{1tX*j(*~mV9SprlABElX$9x1(6E>Z57Kv500 z+s9$@%ZSG#z#^a1bZFCL!Im0q&!pkx@-1(kPJ-XV{1<}FlpJQj-kXhPbz^9(dh33DH_)Fb1y^F*5q5xPrJob4wR?Jx@9w)^ zwW)=gX7A@)SVdU6VF1LK%JbXhCLYXUfPgCoQzR#)#TEptT-xbo6^06%LUXRlby;ykz>VhMaAdd!% zdS5j*vG7`7aCU|F-D$Bwkp%-f2pVt$Lx0wZJp3##$A~cB1B(}bh2*go1ta_*1lxym z-`9S+qT6_1MZg2zH2jw< z3S_~q3xuB>q<}p2^-A+LDqi5Wt&#(iazPEHj6j)UfwV!zpfgg`{Jm z!SlmD%n6n<@INoI9Qi|YI;s9UY{(vs$q<23TEaT`uJhM%@D_Vspt~6K>XFY4!n)uH z##J{p>MhBBa9^zWSr=gRwlJ~p@Yqhu;8!`5qP|aGCJs4(umi6i{=45O$H6=FrU94y z(^+cNPCnCbdf@W?5XJs7g$Sg{b}N_sHfZy753v6j0l~G`s-P9LvrKJnTxt13`)8#! zp~-?2NGZ%u>jn|(wGj(C{+>}HAHCH_sFQ9{*Z;I9o;|8zj*mpXyR|!dd}90IzTZqZ zdd6fJ;W?WROz6zQg)2U)ALxQv9n@p9;HS0zJ&+o=?_hl?=A|mv?^?}8)wDOb}VgLcVW_*T1LPEMZUpCk0T7e9EXmPn8gEjUj2acD^B=Ttv1?;I^WNh z{aKOk55sN1m0VU0(qx%AbwACkyzPsWOoEGjakP$B4h^Ad&o6xJp59Mw?bomOx?ll5K|UIQaov0p_+#63rQKdIts8_@`?=|4 zK~?XjgtLlzb+ODjXC$g$-qZk?{gdKZ?5EX{(&~fqw~{C?*qox{dLDCPN+JN)UE^eI z%C<;FT+R&R$IF$|IZbCUS9P<$ijv5M8S^l5z>gG<6Cpm!)oYP&D#h1JS0S3eF8je+ zH2BW`Jz2I)4qV?jLp=Xv{2;L zdc_M+ag-RP$lOkgT2DLTYNHAKhfu-fODl3Z-X0qJ5uWO0G(`!#l9rA1PLP(MvW80d z8&MDB$2>u;nZTR(Y}dhrsz>kY+p?@iOqxSaZ^i@cBwWTrPIMUwv`vk=T0^dU?lO}) z$o1Bm-pTm9*lBezC;fPSNVr>sJxck_3h`Dhz%WP1_sL$r9AAy4P3cA_tA6GZVRlY! zl3i9;>JMPd)NVYb)^m=ivqB=^l5To~Xl_2xHM%9H6)(vcre9n&_olY6H}*>oZ@{&t zy#d3@!oEtEbGnfsF4i8;+5;Njh8gV4cPooxTg z`dvR;i+Phr4vrl!J`#lvEElRYC{bGGE2fGbV@hYvp`_Ug$f;mozc!?m~F3IM@RlTi! zu@|dEGKGjco`6I18zWuRj(s@OK7f=WkR&!(wN6r`a&76VQq+9mJlh#=#M(354 z)PX!gY~$xY4~!IsJAGkkZy@gW$5{A^9J{F4^>i|lhFrv!`q)htqCYJeyesiepO*(d z*E{;Zro?)mpK=0X%K7QdO!j@M$3Q@#bT;c)(3&$woWBVAZxS8yyz7E)T4oGRKg$7HGVDRM z1Fih{kxo}Og$Qwxy-Dx+@bD&vA{Ux2b zhH_U{Md101Sg23{ulJ~ji&~L}?738D5ZoFt;r9I=J?4pl@b};M)?J8}+vY4zywc9m zLmA>sa;o-Qz>4J80U&gnx>ulF5}2IuFMqvFcEV_shUr%>@l(vsTS09hpO(x#g#Q+Y zWtN53ObP_xPO9V9`aA}#yp)O^5Gp$0%){<>@21v+SsJdTSe3>;o2{bp4Y-YZIS^IM zL33=d;aDEDUyEm8^0W4P+h2W|BZYwejKI3Z#WSG=1u`FUz&W$JH73V5dJtBxyR~#g z_o>_>J}^25xF&Fd_i5*BZExT)dvy25U#o#ASDBAjJOpXUpJ;FwUAx(DD1IpB*m*Ne>#<8a=HmI|(Evlq|xxr6}G+_3~ z$=Wrwp)}Wy^=CtuU;2Ffjyl_?)Rc_q{<@v?sy$y+iQ?4v-dT4={<09&$9%5?FQt3P zbqy-Fn}xG?e%)0_3=MdO^=R*r*yW&bq)aO^^chmpq4p#rKNc60boH18@3jH>it&Q& zwsMzI=&9_=4O?~gwy;_~P#OxmeL8fB9y$4ua_PAXP~BfRHU8ybl!J>t%+}(T(lHPr z{O_rT9D7%D2=+vA7NBn-M=N2TZkfrRdB48s^Tz5su*c)tb+_fe%p)f|zAx>3+;_~fTV7s_r@K(Nh3i$3jJ$6U zcVK7Q*;jnvn$RS#6o5$4gjMG2a` z?2uFiedNQ*Jy8;It1A$J3-ZR~0#$4r2kkwh5hr9?F-3!t2$9(3cUGTcAnnDoo2c&` z(3(IvzgG-cju30KkOM;3tnJ_l&!RvpY_XTenk$qnCC}>m-2d$b0QvwEEdtt>oQYX5 zxia}F{z@%CrI~0@dFV+=s(t30Lz|@+z@t7%d3xFCt<(O0-HuDyF&IW6ykD?wa&Qo; z^qn+t;62aCQwfjXV`u0InW6AV>a3pcrc0+sQ4MbG z;8%sn{m$(uFo^^a5-HJmZFC8qAt~*K@+IrU?ivmJu{aH|*AuU%*REhsm%i26!zi* zLUeae>*$myRB&N>KqZ>DnkEGKRgd5t86 zx+KW{O5`94unfma(D8B`Z@bMXiRi-8lr!wsAm`6 z>Ajv<>9m`B{!eOsKZtut#4eV9ge}-5{-7~hZzIraUreVocvUh`!GAgW55&U#2REe0TET=wH%!J*exZ_!abCvQhh+W_=jE!EuOlRvM#7J_^u(Ss((C4PPzkJ`v zQU@nDHON-Q!j+Cb+N}Wuh|TiTC$m=kKAjeU>JtZ~wac(0^@Er!mLitL=XM$Z$(Qs+ z0YqQP3lLNpShl{IV%Mt2rn}%!u7(NOyStP6R1a%a5nc6qGY->pba#)&;xUlg=YyKX zO@nqo8>+rF^{=;q@UOHjDBH-@G|t6sg?)fW;S&Ez`{xVmr#TXn#U4FI5bWWg_Q=%SvzyCTGu z>v){ zy}Lk9K)clyo0-DPXnUgs;={4*-qWk;5qoa;-S{E;%;s?vSRKW=zo#GYZ&AB7*q05h&ArdxktNXSx@&3>3Ui~DKlQbQx)Q;b!XJ>UUEFG%Zlv3kfP3*9Zd#tRdTtE% z%Gq}C)kpsETmf|D7FGT0yHCAXoTI-mW-k01r=Oy!sISkN8#B&5Z=8TuoYBPhEmxKp z^wY`~9XhTfWet&{n>;S)rB&tl{PANnjv2@vrRBI>=dQ2w&Y|s!&^6-QL;g}Wl&h2- zckQXZCU0ARLeZi}rM>xBr-R?2$bEcsa;D>Tm!!E2f}ARcd|fSl^czF{OwPVO3&-Ee z(8xW|D~wZWb8^S(emWiISOe)lTA<7n&SAoBQ%ij!x2MvYek9R{nFC`J7|{PC{+y!M ze(mX9bCj{oKcTpFeYU>jjN;Pw3!INsi*>zumC2u#@}}bQz)!vlJ;9-r zN-xtw2r9`y=fXqFyE$r;jDp62BA}@l!v|8?`d*>Cnf`K_zww998M2`QLfKA$wQ-11 zs~y!p{9&zp28&59(qoA30&XZa!8!9+EIFFdh$2IiMM9CWcn>KipEaX-j~%$T?_)Bv zbt)r_h1~IsTmhgKJY%3`QZ+Tts>`wPPN^`&?V#@qoP0{|V8vmMnlxg}z zVXkoIA>eF^Ib?m4KeB&D=G4fn)kHv*R9aT0;F%YB+Oq!!=I5T1+q`3Ep!piVH5yZE zEvamo^1XNG$c>kndc%aG8U5_;-bkXsQ>AO{>>|c2&&$9!7&CzNR!TCVKvw~1KK+Lq z5}V?k4Lq(mTmp@51>Nmlox5JYV8)H^pD;ucDEJkYE2!TSyja;^hLa~jROwwHGzINL z6HeGv`O!%t_QK?bSbM456-jY0kW~@XJnu!t*YOw&fP)nAHXiU0N=4F&lGGTPmgx$S z4}jaMD)XAf0t>0Db>xS3E*0q9lR@((Vdoa8yw}N$jG6}B@0D|CsHi!@uDL+tmX_8y za+owwlNZjB$Y!aKT2G)|^5uNrm$k7rqChpT6X)nO}Zo zvujmPJR=5gjIc})78lDysBAr|^VHY`=&X3EdIVQQn&WD_D8;2-LE+A|xOhOU`O_)Z zu`(z^1CpbXvAsk(j?zX|@@X~;&%eRP0S5@e&+V%VuobF!bhWlE|J^kV=VnKq>VRuH z=fE+1{r0kpBl`C1=bB%4lkgo^nFD&^D9CXHMy>{YBX)oNKpOEbZYEJ@!4E9}5$ccV zo5T%Bl14EWLlyh8eUEVk$J8qp7Lc zX80zG$6`Lqy8|M`j%UkdAVysGpiN0L5X~RZ+Ryq?HE=6>wbG5GugCu(unnw_JZg-E zqY(4Pi#c;d`Y`-+Wxt0~^DDIqaYL_fzZ* zI1tTY^-zOqY%4R9rB__@3{_EEW=re&Os9G3p8>ZLZ1?;U?fv%sTh%&!SAISEib*)iP$x?U37PVBo=|$aof2iWEKR^YLp`v z{Wa~s-~ZmM@2%()g0dQOP#fo{!OF|y8FW;b{6`VWL1!VFiIZMD<~1{vW%+r*hlc+Y z7fdLP6}cNPpX1d%S~(q_N)YP_-i*xLc|-^=C$R-J!4c&~D`YAtdMC(ezDqpvB2v%~ zUk<36bql_ccn#H~pqBH~$VJq#FbtRh>@?MF6B z^Fsouoy*L&Kt79`K6>F|WVdj7_eJ{}h#B7I>tLd^gC&722Hbap?q54ZfFCjyjeue# zkQa7@mjs>*8G=bzReNS}7kLJ5HHY*eP$y?5S-{`CqC zQwzF7lb?yeUtf6XAe{{D%lvt8VhyPd*)B0yzVaJ?%Zl_Ly#<6#G;*c_i;G-*ie7mc zy#hGn(X>hiDIXJ-xb&_ z&^C!MF0gVRbG9)Na&PrbcdrwN5N-Qy$n}`Zj}-Tb2OPoqhG+Ve(lF;B6}Nw0u}F?C zo8?Qf#U5FBM)ZQf+cHbrK5lFxL5`4cP)<1ld*>0Kp1k(y}mf7$LjXDJ1XRqja`73=gi63Pe;r(=&{9X*Ju^q_#&&Z zzG?Gfv@bFnPaEg*~jb$bCyljwX#!S$SBK$U zS`FV(7A_6lK*H&=^A8YIk&b|S$#X<=3w96XH_FPD3R+pT!fABE76T6U%$>@fpm(EB zKkCsGQ9OvS>gcE~JylcojHQ+g5S8PVx1_{wJKdkoFOQ$pF1m3aFaDjg_2QE!Bv!<~ z?cs!w_0v);ow&oV2d78d_NIX=&pUhwVgGM?{Mn&56p7GZ)p z<`!$d|A)Fdc;+~+s393eKd_Nv7#IP6&r{+Q+4-t|AH(#2+G}14A{LqIgO=x3^k8#7Qr^p*hK_7gP_@K zK0K^dQhEM%#F^0Rn#;}5i6{CRV06e5kas!IMP_k{{3JK0&i)!>o#L^VF~gi21G0~O z8|m;US+kD(3B=CLD~+rB8F^lgnHwAX+o`ePIwk7q^i8)S<&CsK8V9zAEOEWMlF@Tgjw|JQ8|LVm=j(PNVSewS zeQez7(4*ASpYsMu2IF*;g9dnkOLR!HGw?t80^n+~N@Sm>htZ%C$jRK;!<^&g4D;a* zKMUFj{GCd6gcQnRZD#SRYH; zdS(>mW3<<3ChmBNW?nTBqYkRK{jqwz9r(9^PlbvmwYnnnE5srl^sXSZ17_d7tCpYh zY2y2#MuuJRct4*Kmh0UwO<2S}w>Z2>ZCJ!HB*Ed7-WcVmAK~{R)=T|}USeP9)Nro= zT?Y5!_Q2zH@z9}Ds>INbAzv?oSPY_ONugZ!73zjMT?pi7oP1!7sr67h4CsO#&!~`b&5UM3WjK4s{ZMV}Iuf zd7GF6ls#lDCT5WKeN1nEPLEd1v4iO*C!1(LsO8zn>azofJpFa(iGcPBwDgAz%nUDx z5B{h<2tT9!EuK#d;vRc=$RG&uWuKluA(&vs$N*r}6+ZdlE_j)%m zG6jE^-BhY^cQ)NE?*tf~HTCwN)mG&-2p@3_NDB;S;VZk(|2`2SIOc#4#I7!X=XAcJ zlyjv+oirp{^KDziAwb_JOMK1mF|?21A@XX8kxo2{Md(!}$dmyp zHgeq=s#m^nT4IYY`y4{o6+~sp&J``*D?KS*n8B#4F#)M*=NAAeNT!sO3O>s?Sk+|$ z^Cq_NukM3*c{AFzO!Mf(wUt7yg-1S4S%s)PMz9MWz+hv9NP3vhUe95XGySu3Zg=FK zX*ow}fe%Q~Ki+{tFT+8vx(+`EIAwqUpO*0cE3KQ=NF?*M6bKEPL2QtwF}D%)Gjg5E z&fva<_AS(YX3Z*O$@Jmwu4ROZEfn{o4a@!P6|+ zZ3jltPn1Y+^#r{4cFU%`5QRK{CnK8A+T@O<)qWe@ztW*&^m@0+cKhe|o@O@mPeT&O zk3=f1VFf_#uPp#30$fii)CiP?IRq!5jRi=}>SU)PR(N$Dytx^ zE1&`iK@76SZGUN1qcD;nuGQ56_nFY4PX?Tt!g>DcxsGRFH~RjWnl=yks8{k@ApX{Z z>F&~UwpbP|MS=a^m~AaJ7z?2o(>315Gy91M>p9oc(A^KVn+q>r9^wc%z^Oy!HR5{? z$g>O-Du&3%b~~e_Nc_|QxoEdKUfINox`iNO%(qkH$p`HLK{c!ey&9K*3kq@v26R?^ zw_!Pfc2kZe7e2TB~cE2uZIG$rrPIqts-*I4w^z7PRianbX4MH9>q7 za4NT-=f%45D7}L#z;CWupAOu8KHlyuRh7-bHs1O)iW`ztk5Pp5c7@a;CLCJO)edq# zPtc%?I5e5aX$@3LiO*UtexJi&)E!32AIutFQG;MlB|pvA zAI2s$x^}l^jO~+%WC#VQui_ws`!r0U;bXb4?r=aA_}^c{|1u;3q3q*QhE1>B8qbDg z+RjQcq*GUcFJpwMFE>~gfjO@}t3G_8jaFlx&it?x+>rG(@~Dy!%TG~I=TM8RVD@)U z-9f=MuZ9WO_6NZj=RqW-a333XC7?t(%N-Sd?*hRfEE-vAiJkP$qM>da$~5bs(*xs3 z6}=ok-+RlON*ln>!GVb$a(wa4-@K7U#Vlc+B|G^P(Zo4+4dCBG&&WA&xP=`jGeHVg;1p%NY+`P z-wB0@(UI+FCKjY7@OH%RdhKn<#j(b6nj$iPvzK4iE&IEm$XjDFwqkASFtEyL49&2{9v_R%he2(igHkf-o~E}lr4e*s!W47rxf~8fKDlkF9<64MKQN|RCG*r zv96-=lpen#6PWlUH!kqw>szbGjws*Yr-W~pxkQA@UQPf5wqKJu8;B{)1(j-z^yq%O zBZCLQ5aHt-J0i|roUC3MWwUh7iw`bNJ%dvxRwaZ}8KTRwb)ECbb^`G~`8*1Llpz?` z_Z&|}0tM`tOTbHeRhI6JckFlr)sqUx)p!H{M>#iXx&7}3?YEm0CmGKu{-463?P_D! z`6y1>eVbSjUs~8&h8HS7eL#v=11sN&E=qfjbAh0Ye?iXuwh-t(sG&c0x{QumZbx80 z9*q6#lgW|@$ZGB76RF38{}HeRuIFq8Yu>eTBqhb>7YbK4G5u~T^RsstAm?|c3mkKS z+Nozo{kAsFD7K!6IepJW`E)rjKecCnGwnK{i80!c(5Kro zea>5C{m^%WuJ?b>CLW%RI`5IK`7Q4HanQk!zJJs8imi{~+iR`DC!U=(C>bZ+Z(ZK9HGU1S67N6<>`5{~4@^I)zPh_qoNt_ z+)96LPJ+%Qrjlk~KrR*5$BDsCQB_mN#hd$HE%aH^%|1wtK zWPdpnre*JQC#fY84uzX|RgkfH4O+NZZmjCm1Zk+g+~7^a2fG;GI`>c0NW|UE@OXp8CeimVYf^=RIDdu@BGvB#sYL7rj@TkLd8h zcvKzTY?ouO7Lu>wNclK6-XySZFpYkvf<-e3DY2i6Sq&FAQ)J{!1P6n8$cz7O*6-`k;=*fz4C_QHLQEe^qwYuh?! zLa~fJp@hVg-``8g%4~^J* z;^SEmUhr~Wl$RF;mQOfL0=oQIzEb*v4)7qBeX`ZJ9Q-a$@U zf99?Zemr)K86}bWm{9jP6*i3BM+IfU$lL!ECPD3S7w~X72eH7o6{?U06^t#!XM5BW zksB+JvZ)B2IHYrScy-rTPs436ll^R#j*E5N)F!ka1F6A%W(TEwGB%EaTdNINB z^sXkd^7Kzv3DbCQ3DZP3Et?SLSe1&7+tKs7|EtcYy`CsOtXUUizw<}6O&hn?S4w}I zFr2~8utQgVEsSF_$bu#1AWc^yCPbO8oC~plQ3M3(Qu$ViNaXOx-tC>~QvEo?zVUE! zy)Hv4!XB@ZdqO#cuSV1Q9p&f% z-V#2mo#ou>Aca20m0p}oko&Jv_>e+mG52a8V+h^%XzN?Ks4KkSonb?#G<+9_`LoLR zP7A*(ykT#j-XyFNnvdE#m%RR)bKX(GhX^>OY$$)Sbv&&ZpU|hj%mQ`_$W~v+wX3RW zU3V2m>MpYVk9X-tTICp3Hhizz-1*2+yj;)Z|P6H@a8nQJXw>5Fl);en7vkLqQt zoDo6LVM%f9tZc)*6*To?0}y2OphT**^;?GWmOXve<|0uQpr!gxQUoBOnFCPp;h{F{BJLS6`JEQ z`;La6g>(h|GY=M8C!f%*=zi zdj00**~+M(SYRu&9~nF+Abei6u4=;Or2k>Uu5Q0BY-j*K3e-fTd;pezgCj?lYLpms zeR1|~?kuN!>825Hhepv)!LGq0uU41RA{@6rxp91UJ-JIM#w#55u*G(9J@G_X>67uW zT*V>T)ztcqa&Wd!h0!2Y*jsMhFH;I+#2o$>859Kh&_2>6MMd_>Hnb;`o0o|RY09!w)S%H8@SAX>pNRg zhnZ@J1s?Fm`hK{oPgX@B5D*Ov3y^2(p#M)Gb0eXkqDZ`tGGS;@^?_a5y0R%~vk~#( z^-9D<$FAA=-zJk?^v@F`_P?>tD_A;ZEWWy)YLD%0gw?nrVOu;DrQ?E($dY5;6el}4 zIylk_i~R`JVFFFsI@6h>$s*}#;y9%LO&%vX5>(dvO0I=e~R2d%hp* z&w8G=s!>&=dRBMyK(EiO`C~wJcn8Z-KHTAwLJ_;$Il~)$f#gJ45k)@C8%bc;==Aw#oR(A{EGG`)jlz&%j{6e=v$FY#XOwMbshUWa!5~)}~qo3kKD9%Yn zZQX~W!fRzAs<~YgQKc6PwA|-WlI)vJjyP~&CQ7E0r@29f__!@E^D1iiTu+`@5k0xOsIEMSc)E_!MXH5Ix#LYOtc*2#|d1Fi0;uRMG6KC%HJ!A9Jp6sPyBhuLW z)`j18?}t!GAiEyg4A%?SZlQ{@lBMVR4hHXzKFa@=Q8_frx1Zj7rKp?SFK{#!8L@w&9+Kby%V6_JmvVBT2jCMV-p z?pAs^=JtAmGxTs1tU5tH9^3rlctb2iAIE%l`fN8bp|NVnSqgyxTzXtjTKOg>1uR;Z z=X|W|)rNvsbkddO(C+6Wocw9&ruqI^WajHQ_u1zlLooUrogU}4lW1~hQ!QV$!7+F~ zW;s0)>94OnEflbMaOBsy1G;*PJAPi8?!-YPcGPwdnkZ&6UB8u_a%YCMt+U-V33A7#;2oM*Ac<9&0!n+%o_O+H8fgF$rYlgmFL}ug9~TPC8&J+g2pS|2pTVKbD9~|=rnyG3^vtwRo zkO6XR;!aD+ox%7&-7GyH(g}E0cLF=&Gf)64 z7baPL*=H9L0o%r=S)MJjMj&Ov!%OJE{%uyxD!ee;Onkh!2&Y(gi;yoj3%a^=B)sr# zmLa(?9??ZBNTdjUeuECG1`rn@sU-JO*ioTPf2Bh-x)#OO3!pp2W$I4Nd+l3mCt$ij zfy9;0?-)~9g6PaE$j50-E3fZj2{lf52fbVS3JSO~;&2Bwy0@olD``nw8K*$P>d`#HSEp&m&GidlMzrb;G`s1s^Qo!^zCK|Y~bniU~ z^sO7{NJ?3D&A4n<1UP$?cVy}bXg5JGI-?84ENjr?H#jGu%R%J%Hy?M;JI9|)4xSn$ zPk%QQ-afBABmS{^#LJEp2W-tQToCdJSKO>_$mQ}EdhRt7Em80(hivSdX610Joipyr zIuaYJt$Nzh9f8^)(BzRJ(4N<2!Qe31la_Y$g`(>&{YGTaqBqJ9l{~19kAnpQz$1je zC6er)_fD)QGe$;0ftMsJE)wFoFql_h4(z|%GDn5Dz=b?{9IW;NKSY$S3hTMaWx%%t zUhcxzpWimOg#rTy6W?G!fn)4^(8BogNmiGsscwM4Hk)hF3jZe*$8pH$QPSamjS!JUc?FIR1T0?`twqU+F14&@U#jaCd&eGHkM4 z;eRh~G6Z_l8Z}~tH%^dMiX_m_3ZUjACY3|i z_>4-H?IX1Hhy^vFu00--Zk@0Q@?1SH1miCz_Xj@yjAv~Z4(yAM76(iR*$p9rd}=d% z__-(cj1r^oy1mC5oQCl*7OlQyyVE0Yc3!9l{_x&E)iA_f)IX)Ut3=a zeBjXjann)}wh~X=oBnbuJ%pAUrdlD(D9iBo$G%rLpmP{!e^KXzQw|s%EH*g>WgCQ9?tv%b(HW z-3pwVRL}w)_Fw|q;qc>Q>77%qqm<6_ohRD*;L90$wqX5k*sB0+R|kPAdqa7;q7TY3 z*~qC>NcN2rW4h+m$P<$HU(hYj_cEXx_z zdg1uM?^h9CkAwWBFFIpt;2c*+YysMMsJ-G%D{mrz%1FHm*<1M!nKAi~BtHwGrQb5D zin8CpS0?}k=lV@_R<&3S1PEOlzX!*_@UQ-x5q`4y!z3MtI**6G0YM*k(bh^p5@p)J zod*##Fbg$=tUdsNMM=nS-5AQXNH6~$=b|5~?+`+L6veTFAXn?T&ISH+P1hZGySVWK zOWuzcpTW8FqvlSvxgT+QbeJ1idF^m7S2t)P{nBXopaYyg8hM}sGvKK&apLd%Xg7=m zvec~=-`nyO8dbT?_S4V$?sgEznq0M`e(-rJIUfY&Q0e$AE)vih8u;-0=IlyoHB6N` zvz^&Pq4WE4NTAQ0=h@|x@2|kGQ`rf;(5xPtJ75&;Ud*vYpx@3% zEMyG`AYYuIH8>wjSMV7jH)_A%5rzi3lW$J?c31B;1pXGT{hF@Fs zL+cGDS~F-sXFcx1*K6P52b9r#%32y)zL5mU@TZfB!!GL3@+8gj;qUZX0%sBj^t@Y- zYPIK^SIN!JuW|`PfGGYD$`1yE=W(VM(;G}b%8`8u$tcp7t&rPZrnMirYa|tRIh!#2JAG~P)D@W!GkYTcBEuD20*ICar8H4+tVw&aUb@XP@VZQ2b1*x}dlkmy@W){iR1 zZeHTWGRX$Q*T|woP1q7apAU$oXV|@cnGUM3WEHg58adO%!9O#~4+Kos)TU*@^l01F z>!54b`6tTmx~F3sqV0Pchd@YChs~-e{D3smc>2K~i6u`u@BJ($ zPfGYON`>CzRpKH|Lj8uyZ*j$>Qs_+_(W(47gs#h9h^%9s^Xb#w`a+nMd?9*nx2=P> z&i0!dXaz>*@LVu|k@kAD9A7_OyXN$}qx9TtlfG8c_asJiVLN&HTX?&Cx)zuBI3*5W zFa174ATDovz7XaJ!Kf;iQ34G}rR-Lu;P|chT#>9#zprqFNNvuCMVBN)$-EuxpL3`g zp1a$`D3V3ctMRoBPxyKG32&J@ct0?GGdHNvqfVoQlv?DVVWm(#h9x~>Pa4^QDp z&J$Oblrz}^?I`lg&%_~Kmk~;)4}#-AX!*Nx$jIXED|!Dj3GY*I63>i7Q~KoaP>dwokXOSG$sHu9mQ_|R|`ctBUcY63pmb_Tw)cJ=VASjnN>ZUenm zTfAF4=fM}Q_PZzG`J7kX`p0v;zxXR3ZmD4{POo0O{zTXYptRC~6u)})F8tae-d_wP z6!XD4wE&P(3U!^A>q1;%Bz~NMZKbtnor;;w%_jC5YevKH~IFP;i= zIUHYjbo5B5Fu1^4Vzg%?{wKO|X%32_ZPac1+@U>p%bKQ0>~j6d42G_O4fT%Y1) zzk6~X!2DZ)@=83y5P|6slI3Y{On11f4{T~~QQN;1&161lSGp~x2T;7hm5TN!u1uHR zh`NMqsysnZTE9B&AbEMLb0m5AT{W8;PH}4={KJFNd})h1>(}oM|mEGuXt{T zr<`|+OY;kD7bfg0A+W8Fd~JYnK|g?>6g(E*sRN`cdEUl5%QHcyYP?26Mk`>i$D+O56)83j^>_d1SbLS_Sl+8Zg07qxMM$7_(fog zIm@G{D^(Q3nFLL7XqRs?dIS3z&hc(2FeL8`g6NKa)GdCmtkgPsE?$sh`&9PZ`|g;g z@%Hz>vDDV%w>Tg%S3N1*C*Pb3_VCfXI1^nddRe@8AKN^2KUiVY)WTs0Vh-09l;~nw zzu|B(_6;0pBW#%zDk{LLl%t=NNp>9Q&*A5I?PoC)27=M!;27i)8Z@9+J?IyM0~TXO zrJQ;gD9L$fylqBWJbEpa>6SD zksFl|@In(Q^U+C_BSlbd6Vz8<~^$$AOMV*gYGD%R~FF-${-b^=!^9_EfjGl`sesnBX zA{Sqz92**JHjSmB4_}S#lUA9x9rAj@$U0!9Xc2Ib#RHDWf}kvXsTB3)Zt8K@&j^} zRcVtwl4GiPI0fQz2e>xV1MPFmnFIX7=k0%?P$4+x{%I*#ri0c!Zyp5F?IdsQ9H)}E z;`S-2T$*(g)D$7Cj8gG)6|u4Fz3I81aPb9$&v#5wXm6IvBxSs;^}}PfbGvf!JT1O!=M46rNn6FBv#wZL+R;@y zqXmiFq&f7mX4^Mt-Ve~0rb=t-7MfUo*ozGAwK{XMU($IocwCfs>aS!L`1bLi@d>Cv z3o^6`KrpgnHF9p05r4wB#m*238>YwA6MtikDBnK`QF!!4x20*d^CJ1{U_}jf1h*6X z=e9AqMDR`zU?4417Y@Kc-#a-eY*gsLW*V?4_;&syG&&_Y&F)VXf-EKcCvs59mLOO4 zx>;L>9?x>p{;&2)x^O}DxqmZ(CttOi^4}IQwAPg-=1tK}Gl>(_BdFK`@)Gs4iq)Q$ z`YwD1SJHC|t3%{QJA4e1uh7KPqsI{k@JNv(jq+TJ-!OzU&L*lzEoe(JyX1>7B!7}) zTO&1s__i@i=rjOR`u}T+2sZ8R>j|Rt=*z&s-v*Bz$R&KrcK*UiKN5#SLPnu=I6KQf zesh)!p196T=Tr;`{zqyDjG)vaaAW}<0X(O8S)M)}2B<

r@R8DskCg$QY%d=x6zD zS7xPZcT!SYuTEDHH==$j{oi%tH1uNt18`7s86HDF4!ZI235u(usyz~^-r(5>KU(d7 z)a7ngv1_-XG%RViwqV*k_ml3iUGtuJ5c2RwH;@=B(7% zUIHUb*azeIr0`R;S`mYr)%2}i+cA&*L|d`>V#ZKIl!GrxsGR!BgE{WX zikccGd2s0p#jEWTh=&EuV+qUM^#~>9eKCd3zORO>t0jqd+kxzl7y30*WYckjFsi}@ zdW7Z-3F;7%bVH>G@CTK-+y-C<7FFqR1ym24xsuezPkJ9-PO8rY;{R#PxcwjUYX=bo z#DLedtyomk;j2Z;>FT^09F~$h_^qQwKs+q8nT=$-vM%K^AwS;#>K*_!zjDy8{EJwe zkbWF+0fMP?A0K@5^p6ImaGGZCloL4E3LbrEKAJe(!U{Ic#~XMHjCmQ!JuUD5$)wy;NV}4N3gCcye(-{fFZ$Y=dT|JX15@@6ru1z1OCt^60t zw4Ve4g##Eb<0@Pc`TfQ?B6Pf6xv_Q=53-veSLQPJ5W*Qc%bXarrzz5ca!wS`=~n#< zLUP7yKzY_xf3 zlzw3`I#6;16WNqvCQ($3TwPCPso-ozcEMn&Uk9$$3=C+n&zqkDLwA~~0dNCF!?Jh? z45xtUg*6>C=$E3&%>3U;zq;w2AF2qTl#}ORej6JkW}yvJvXBJ`Yk zV+`ih|265EX7F`ol|x901({tr$zt$oKiH2dHAS(^7E&(p4COZ<){(V4YoJJ1OZNNK~zrXR&ID*fMF5ECciW9q5w-RhK)J*7V`8yvzm z)HiQ4-41XsP1A?Qac`;5A9II_Zs(*1!FPzZ_iJ2TWCU0QeItJ5#&Y?|Kg81%>)2g zXOVu(>(iM-K~oP~6Q`!6=t`rigOh2R2ul=Sc&M(+&}~Uqyq@GXh!cK#wvHl|siF#@{t(J`3#jPn z_MRgvnrg!^CGe(=56{s^|Ad8ZzgKoUu8InX6yxSoE^WNmK_%R2Lb#Ai#Hf46H(f`^ zYl}47_Bixq1TAW4y1oC%YCjEY^~KY%zeDH>)+>q{~n>G_wQCLnp&oVqhoCFU_X^6P$P0z~F3|<^%e8 zyA%8@oYrw{DHF<1_{S!F@5`0(>1B(f7x#L9f1L1*<@(X&z>>APke>VT`~3jv)-nT^ z!v9A39U8DB#{+VJC>MtZ88=2-Z`xY_FJ%Tx`8+)~PxU9wrC@fxEc}rt;G5Wb!EBuc zzR)8}%Q_ROKMF>9-v$jRo)7;>nWH=c0P@+HY8wQYYW+nr$yl1eZw+t5RMlkh^=cP) zK4q-8)#3^29$wd*Vv4PYw{+qKx<9}<4eQVl|L=@Ip6S7Og#l12A`z7>Gb#TO$F{}) zB@)3mOT}a_N|;Q#EbP+Kz^r#D)sRuWO@1tps@J^ zaK9f3JjS2;*De#TBY>&Gzd)3(XaQKQMe>POOkLT_L#oudq_E@>)g>eg)qAwF2>Dq3 z(qEl=;ljDCgKe*#@U^brk^HGBm}`LvR_SYa?mhy2>{Zz+Bq(aQEQGn<;{)0s_7m;g7Ta6$pHPzX!K*ER-yQvYT+C9LH?1j}3Q9Bdd;WoH=K0Gg9 z5)Nu$;U#{}31Wm_H!@?uUI1D&_@fgcKRPlxas3!^d~C$JDSBmH&_2DH+`9r_e&@_C zg8qBdVmGDX{lMV!mf-Ew_;<|8xoW(%vHz1o&hi{^g0S}S8McKwO0d2WBWeB|+ejY0 zrAl5emzq5bV`}%l--dQ7?}6maIi#rkyd(=hZr;;s-WC(-ouieFA{1y|Zd zKe+QrZhh1ZP<>N&heUl_|I`BPqB~Xb(L@9_YgA7)eyS_3%!LAiqS7Jn2UuWY%o^w; z3uUymR1=x`tpA$Xdz^I-tw=54+N@Y{d4jOo(9iP`6mkaNO5UW6}ySjXU$ET!J#4hrxX3u zZOPCWwBD`mhkH5KzwMh_jXERBbGIbdN=|u@*B;8^LPlmM>@T zAGftuKe@7yc1)2)1Vw>aiO8?N)ZgxBakpL`PDt0yPg}8~QiK%=@$~L7IKCG#gFC~& zr&gfs!jcOoarE@u$b~mOqvPO7sMg65(CBDcI9*sfs@sb1vfbnlzUgvjYs_WfRu4wJ zT;T|G+T#X1ZaCXmVBW_)4FftP4%d&900l<%%nlC1}dxMVXa*#$xa2TFyY zZxB&ZLc6-WY$cBHh^!3pI9!$sOB+J+f4feF*;`n2sx}FqMKCY?_@p*=pnLeR`d7Cl zOJmJjD>v$*MgSAe19g43~wD7Qo_Po-D&( zT1^}7r@p)aH^(dkP-}t6H-V=r$R~sw=*rUMWHZ@)VJyN(bKmYTz?BL12jJ=XWoJ1s zjx2NP0ze!dT0+M<;?z5JjA2gipXMntMHm5M12WJxdS6>K(?B?>+j-%Lye|{Xp}@1O+q!jjaMC2%4Na3>Kd&@7BNWyM^XDQ&^|w zRcxFfg;35V@S0NOo_-6yz-yfdNk=Je+Xf`)YClmyzfBSvYddfQM_k}} zDJD#`vzh+Nt(k6j<+(8QB1Wx`xF;R4;8aWNvY%Qo3PaL!*O-lwa)vRQZ>AlMNeS1m zb}V4N%^!*$TN?nG)f2#Q$Hske4u04}r7 z-9qbS>TZF%u?uz=9%Pp+HV-#>2h?H#kRmY+g)y?J))Ih@AKEdkQ+Z$LqK z`7ANpeSgupv|mCgLx6Lgh;Iqz84)S)2kR3h>=g{=fKVK z^oD~7j%X#;&fD_I(M7eNq3MyCe&gu@$SjH15}WI*J*T-I*X=U_y~5?MqmCcA6SwXt zrf+0&>%-#H3tXHz9C@923p@;wfW`stQuOo3RW-B;#-iZn1iRMo5%22z^J!M=IbS~G z*+N5W?;06@sa%HXhRClHATg3h<8xU2b3fPHJTSVL8bjMQREWBpZ1>k+_}F&*mLy8z zC3oYir@i)t(ArJfO#8Xrxm-(;(?rwmW`XTE3;Gi*ds&USQaU z$>EKED&D=56^5lMlZe^~p@oIkeuBpU%HI>k5HFcX1!`i&|>nXa2 zqi_(e2kPc}4LR}=emDna>C?0py!OOGcuj1Mc8fF0`xQ5KE^rFRm0m6=rfPI~kNS6y zjzDomiz6x^jYo*}xd*2E8J^}VeUz$=%)4TKfwg`E9>89p$E=8G#yEQ%x zv(3g+D2J8-gi9tbB;FcES-_9@_ zw*7b^sN^LfYnZSb|BdzjP@TT6y}0x4K$kmrhGiU6dqG2}E!TbDda8?=v5$6J9J&o& zR7gTSDM6)eO&Jz(mXAk1;Y;>qmjpXoz@&qNyf{3B@J3-9Q!H5Qko;AREokJVSWft+UWDgh`@n0hXO1L&kM6*5wHjg(mpJJ4kpr}$+o%u0^*7jZquq00B za-H4ZAU|2H3?ys4YbqMAbl=i3wbhwbKd}&Qnq@MM(SYKm$)4)frEHuikRt}xv5!ln z1^2#moe1?hc^7xv5!q_d%VD<4NIU17>LpC>G``cR9vS+w60$ZaM_T6o1K%`e=FRSK z13<3@60S(_ST*$z2qRcQLBUYljoPO1pA&-3R?&R8F!fl_DhUkGQp3Sf`kJ=M6O+hS zr^H<=x>{jl_yc&R$WCL5dpzGc^@j#ntn%g-9j{ON2W4d5Y8weG(l2>6w zVvljr%~JS~#DaW8dSB5{qkK5PF@UGH7%2k?RWb@8Y3)5z6w036yr%ZQ? z6VEh;6AuC{_q2ys>ja`!_f|Jb8MXk=d}o@ly8(zJMSvH@EP*STWfm9Wqg9>6T}7k{ zonsEg7K3L3&t;gexOT-a&1Em%y(fqM8qkYpdK8MDO|~0~{vKXQfo~%ZHQy8UVTU9L zQ~W=<{$8$Kgj$5h;uk+T1`(UWLKAdoV?1p4x2{s{F|!u$@|Xk#AH{Z1DJGj7z{S-S z4?u;YkEPCS{1u=~(cBU>@@n;+?F3?*GNn`P`ZbrA=VGr2XSc%C9-LfUc*}z!qp%QY zM1(#H#QS~y=8>7!{)Z^Gv60&oiJZrcZ2*s-Sq1%c6lFV)doeBBtynu#Mv7w0vSBd} z+Ja^M`nVHKuP*hy+nOJHX3h^=XuGgOhHi_kDz3Y4F(%jps;Na>VLV*C_!Zzxi&&Ea zP25;-h$%87eEGnxE7c$&d!g0^7yywh7c`MB4&hQZfC#XNr>=RUY(Ps}skoY4VMdvX z0EI0DQ>r*io0>QoV{z{qZxM0fS>WOb2jb~SJF?90FRmCoL#Sn_l>_7?J=IS8G7Vf% zTLu;+AAKc^g`6b5Jn;aGKBBl@q&&N23gL`yd<@aZGc`xb3-b*$>i}L>6gniT7`zA> z1l}5=x!*_g?cJ|AKe~7UF!zJsTUy-ZL&r~5DmzEd4_2jP4dY4U#ov#a^?5s$=S$0x z(h&kLz?#4|FwX`L4?#YJun{U#;N!XQM>J@LyxCzT+V=!mlfmMv$L)UY6PLF4do~BJ9%**9~)K)>Hpc zsG~+C_-FB9DGCl^c5Gt?l0hD})O-vJ4aZ%zoM+@`Egm!#{%5~Cmmq?f$(TRkf4>v^ zkYD8ep{==sGm2qrzV#9lN%;y5&rpRviz$Mc_T_0PJ@+g~1QnP8D&iS%i>05oEvYae?M=0O)SixB@F`Cxk(}5g^n(kG6yM!aTbf?tTy5a z^}&ofBB&HK0w`7|+I7dn4NgKV6eEIbV~ydE%S;qw_G=GZ`>mC|MF{^2sgaAP#vt_f zB5xm|1sFnQZy|xSpPIR_twS+u+(wV6!R(gd)X2yqxNdaJl0ubr;oL4XgSuG3K2Kk2}zg$3pBm0nbrA>kQa9Rtp25 z1?plVbR)pQzxBhj4dYt9b$ndl;XnKZB70|UgAHPf0al8d@N||sFa1u8F1m=Zzc?RV z(wP}meSn^yD14#^*8?Sh7x7PW(=!mmHefS&;RkVh2Egw^CjpZhi=OTtKjMs|(Urkx z5P9;_#fDj<&FSLQ4d|0&O;ZySNhVZLNS0?_s!eJx<<(2@*$41!dA2Va1N&Uq>_zb4 z1mK+z%0h#F-k|Q`g$}2X6=uh&i^A38VVU7=D=_{dC)4}^1t%4dN%(UOp?msX95fF- zZIdG`VYE+!7l>|1c6R;Uik&&rT6-bRzsjTJuv*~d%Ans2@ow;s>75?sCrD zbG#aGpj<{`;`4|{wOx-y#oH!inSHBPS`92|A|S1xTCb&`<167IcU8m{6ICWQRWCGt zdXa=~`)7RrIHY!El0z6G^-Urv+MZCKi<XQyxy;~L4HY`fKKf`{%0JIWGKJc1me+av z%_fHkr&&-UvG)Jtt?db$zdSYKCgbgix67!@y`l1#l}+?mq}+`Pbsyt_A4f#vq7C;I zT>CUNT8<(HPcrfo&(xh3b^CclqMnXlztCF_d^lz3fu@O-fCB`2CIc9!F9oDS)*$;tk%3)kM4D?{1NTI0<{B&=6 zs1LsE{Eau<)`%Mi7G~pd_xbd>`aE=FI$EU~K;=Xb|w7Y+5 zN2J>P$XOHV`FBuQ<}$4EE}5MlNDKX{Vdzkb~V4Bkbu4IBikP{WO@k(K^Tq=uu+ zsa5=Gfppw)y_4E_b@of?wj&R!dy~D(NZHVn)V`N`iNGut*WAszZzxG!g=jmNmgQ5i zNlH5VaM|w|E9(e1JJ<&_eTOEm`abc66RL2TcK-@;d9_C9W!In^8U+f)&N>o{tEBWm=2QawvC)baxT7rE4K; zo#{waCXei`9T(TV4dknZ;XvUpAbfH*G;TbLNu+k<+};{WF~JY}qR#%dbkwOM_H;p! zd&>e9xGE9gIa}Haf$C7z#~M<>*!M^$8`rVcr%0`Rn@z>Q7+Q;JmgCV+MtWV6nN

!LxQh!NmF zk`(0Tj<ZW5E8&DpXim*G3_g%p~m+WPP3v>mv`TF{tA#CZlAV1iI z$sbTihG%;$dY@ID{z$-{<*^l96ez;5-yPlm9<#0Vp(DmRMjt5}mO&)*|Ao}9w1NT!U!3v{BR>pG3m4dvAv-jR< zR##iwb^`%3Z8MMRLF*iNu zmF$BJptdopP98FT%?meHALC3)l*?Eak7wgYuQrXJ_Eu;ZwiG;`^w{1|Op42fT9g|_ zsshz40(mPpNJVTIg;l?C(@J!tO!HQn8OY;fg^<T3@U|Sc83Nq zOA#FoV9fdJ-PZT9?Dwwq6Kp+yW$6+j$E+2gEKV)%rCetTnm49eyPU7DZk#q%+pW~y z|B0KsLwG6D4WtEQsJaB!E_;~4mYqb}Yk`PDRW*g$2-eD;kqA^yXCsWBh2TB7O9xEH zMx{eH8;>r~9Zc${$noP^Mu!$ThYQfe*2=(d(b)gw;QQqxDX3?It`b{AekTLUF7Gb?yx`*nAz;?yh5 z7*w$JXKH%7VCZ3i~H`= zlE&Bef$)~x%WH6)Z!*-LrE7XzE52Q^$yk%qEh{E$wz}DjokiB|S1m0hvNysa2*7yx zRs-~^|HTL(s$@{Nh>l8Kiq&75AW8<|9L$KoUWACkuW*yoq&mH?Kuqg+SJ6RO&dhv<{j z_$#!^w$(5>*r|^qC%a+CrN&>={f#9E(8 zJq;|$^KYMHGhb#$GV`L9DA&Tu9WVS=`^R-~QI^QPnguaC>2Sx$j= z-DutV&bp-LooA|saXYm0#D?5tVq=*c1p_JM)&sN!Dh&h8$0s8+pI&UM5-VKtLR^|f zR6s3K=#)Hww>x}V{+W1FY5O9Ni&J-Te0)w}mk>YIY2Ed=li}W)<=Itt!TYdl7=Sh z;#qSU=Y^){>z%OJwY9FtNm9bWx!lVEY)KUXd6US~c+`>?LTC%RKVj5XescPDCNiH? zhV{psT50&XMGX!8$9>GU06DboPbf-;-0P_;zwX6JY=spxmQ`z`k{a_CoKYvuhcgq% zgGHcIBXvS5q}ECb@4U`Uv3cE^d^1{?t!u$Wa;s?YK3?q!GiIHHU~SSePBrQbcrT5l z8M7Uyd3zr$y^wcP^4z>MVgQId{@6WNWId7%zhfB)DWt2*V6E}%sYf?CA#7BqKby!E zU`eWB^{=NNul)2nr$iTYbH8GLlSZZt!UO%d;Gt)uXYZ?PO5s?9?A(C0%~LOn+LFYj zHJ8#<=lC|m+5=%H0=Ljrao{)uL_UwRPr~}iSWP>_`@!$uN^%{oWBg@5H}L$#;Jgdf z!IXj`;4o57A;S-*j_r!|EKOdBhcG&#e_(%em3P_vDnCUDx8|3VoIqSZfy-a4*ZSFi z#>Vwd(~o)X^;%H3HdsLQ)%uy?KJ$Ks4%*DVf(g|Of%ZgWvHhXL5>dX|b=*{QpTuS< zY+o-T7n6<7X)^uUH98tYoijiGlpxU8=iLh%+h`TXTx8j@M=NbKq{zu}{EMHE&bJ&f zAvqz1V6+C09m3dYl2P1^)rViuhQ9oUch_HpDv(~XwWJ(y(Lw-#dmXkHB}mJ|u;={x zv)>iJy8ehjP`Ptfx=}ZLJrfVz4?8rtG}uDPDR%?+|^7l}C~k1Va1A4ABL*j4-5YPgh@0zLBW4rw7M~5mML5 zU!bcsd?0e)a*n=uTDm(cjd0oa)goDH2@JvjqT{!l9z5|MwH$j-HfjtOJPEe6xw&HA zDzIn5mD83mi{T8({+5!(lVr1+%ufiGfG;>$l57u3ymgDvWU zPfwnwk6F#JaGP5ya|5z-+dBNVSr)5JzkXO7?QI@E&vE$e3${65=*1sZ1fr=ziku@< zjp59%EX{DohXgIT^5uS*`h-g$`#Ch7w?%%4F6?c$ta`y)eHe%+QEVtHdycoF>h z>`C=EU!DYpHK9;x@0ss#bP)NseFhK8=&e;J!@F*eTlpZWJDr&>T+)`zhv~xpkd@?P zQ5EB<#nIV{q$a?8i@cpKmgTSwTpjDk!xJBx{Xo}3#vHxLOR>eD{GF$r|E^dK2=taUu+Z1BeUQ&{hSd$r1wazZe!Q@+T17Tv1}>tf2fd$2Nyn?U$JsM zyB!4eW0HQ#l)ln>Wt^!eESx#I=t1!u;(-OR zDi4rxJ1lGCK7(2>UCrQt9fSKQKgXhyV{00YtH5c*kiA?>!o#Y21M6-c>1(GS&vb?F z9yE4|k_CZ*+RTjnz24dQR$62HNpv3@#JNtx=XZhbXU{9Al6fbRd8hr&ge*AL^!A^9 z^U@3Zd)NFe-@uL9Ourm{4U}GIi@g{AN(4zuk}-o1#ck|)%75<}_}9?Q^QNBbQCu&D~>g|fXS&?W#NlX+5tOBn*Rw|xJT!O2)0z3GsE5^92gs8eQHcPOZ6*%RHF^Y6E_UexI^;&$1e65lU8 zzURAt@cfJ0&H~>Rci8bHc)f|H>;S7Splj*yt|YG z`VqJOyMSMgSBmLAC8MjFaf*umWyrGe)rW~+atV$GQ%a2SPii-~BUrA!*VhR?7FL`F zkiI!iUflzM>FUO%`#ASQPuj8XbDU}d<=UNWq%{tXb7F8~VgGVO4K5mhK}0gNTIuVv zbu}2c{L<(GpYN3|^iIlX*9mQd9UZw#X0FREN$XWSt}9&F9ur`kTp}?G0|&AFIObV;}q{3H7ifApmbTo~QAxrwPNsggCKC z%C*}lG-p1?$%34*^c7n7g_zzyPqGA^oWo}amf!`cU~q{Z?|mWzKzMR{I`2Bcef2*k zxF4R>En2%3i^?wLg2~Z{PVHi@}_fmO8#q58n^EZvC zaZGjXuko-eXOFYtQr9!JH92}?8jo^=?2Lwdc^`6cuoE^aT;)rJ3`V|%A-c8Bhn~(C zo-D>^p@?^gq64cD*4jHdGQavS4W?FEo_S-Lui3k^l&Wr_QUGNEe9PeO`;m`1If9`p zR~sKiEWA_qGtY{<*dVIh1)KfnS_Tq1u(iy}Dq<>!jAFkbLdhr-atXfsP5Eclsj!Rh z8|yNiG00v9i|rp@Ixc#0UZ%M=43Mp}#k1XnluVb#$j?kB7?)(1Zr#scqFzJ>;_vug zNTm^g{^aY#2)Lv+x%3)OiJ1ihh^?V(`|)~88X0WDitL_fdOaO3PK?<>K`2g)OXRF} z?yB##-p;0_70X&NTb0T+e4sUy=2sZ|@I0(e9RGZY5mGF;NzOK(^v-Cyxa%F950!K< zXS=z07oU8?QasUbu)6ZpEVK_=11R%L9!%(2PclE#2b6Z9uDD%ams-~BqD5>D6~fGH#FaxfGEwGY)El-(V?X`)dIfhir*9wFvi!M>Hd=|o zZR41~CGOd!&1y}aT=DJx+s2iu3-);X78#0PcPdkg9pokYOz{Kq*UV_+#8yYrmsTI zh{m(w`ao`s0^ek=1|crEcTPYn7kahJ4(OQ-v%^NmMG)0iou zi+A?|zsN`Y;6F{vO}W{3;57*Ww-%S8i{ZzOaK4a$lHxfWEkwRoyMLM1`ek`2ZjC{A zvN-f8)c`{;SK>zW$nR@pEwgz`s3OSY)9bdpr&<4tqZDbnA-6aL^sEtQplCDIk3;0s=4C zSZ!%Be>8dw->q-2iUW0s=WSIC)nGV-NZIE$iXud120g7GJyK8n?&JPHXRbY~8s-vz z3+}%p6wnG`w%I?P>=`{uExEOr$XyU!Fy0Hq(=quGX3a*J|FzFbTVy(MH{MLILsLY2 zAa{&!F?Y07%Iouf{w@n5wqfT89~yAFck4ae3Q;o#ypX~}wL-adz+({02ZUyt`{vt6~~LQ6sfJb|+Ap4Jx3b)0?@``W9(A4h%AknA+m4TvJ@d6JMrj=!H{KyB4lYol(CCs$yl-*OAoS>wMcd; z@=ovjFTB@vu5*4p=f3aj+@H@m_vfz9Yc|Gbo9tYDNzd*ERxWShzDYjGrzN&;m^1Ip z9@P)QcQbdi@!d)O^3P_B1?VT6ZmMSh)E~#OL$8^xduQYc?~OIQ`Fkb(%p< z)FXMnc=dddZD%ix=jBXF=iVB+fH4}ZoHm@VZLm=)URkHeRazxApF&k@=Yp&2`capl zJq*!Gu@@NB#zQjhxBm>JWl`$t5TUp}w8#)N#?qq0`K0g*Z?V>Xq9PQJdUthN}xe#%^jYy6N5K@^*a zf13LBH#zJb-5IqubNR9#`^CG$d`WKh>>P8SZ+y zGF_OG;hkX@U-b=rFEiiC7-w@mj`{msUwTWL%xUEG_nn9U?jJ|>*8!=#Yiw{ZFh|U7 zZ(f{@^d@TK#&42?G>5tV8ZHUJ@P<+!m~YBHD_IQ{gcAO(@8tu#Az@J2>|TOZUpE)# z0)H)jOzM?G3`h~;k^ZkDFZk8i!Nv;N+NmnN*}3!`Ce{(XlJRLsLW%Xo9v>Y+7OAb^ zgxebXY!45DF8#7Kem4v$b90c;_cm^TE4-1ue#XJm#n>SO%RR|C`I^n>z+WwizJ&Q6 zYDVHxX8IZ%c7M_=rj{cd>Cw2mxp6CMwBrQFxEjXHWDhp1G_sc$D<$6NS7va(VZO;K zQ$AF+N>jb;dd(AP1$bRb`Jy`sx7w+(Njy50R9D%Q9ty@8o@$20;h9)irTN5_N&N|) znV%Yjd>bbn{H&V2;odb187WnRhG4M`(c2X{MK+wm&r9mmmi!I3>zrbpE_C+2RsUX0 z9$J>tGT5|ygY0qGo4hmN{b=%KO5>8c@Y7*tqsSVzMfJy58lI^5_!drmsml>qkI;R; z|KHSyRvVqYS`sop&k%_+o#tb&?QOngM5RvygtoH+UfvT{ZMv-BD20Q1a&`jiD>Kvf zjZ6|Bqawbe!xI=nAt)sZL{glgtBn<0XiyXl7C8@7l4k%-BrtbAV^y4%#A)horoIq5 zH>PI;Cg`A}0VFWAt%!jHq&Gr-Y&kMPEUg>{ON)^VNN42=07izvU~wQydQh!mcz&)h z`m0iPi>wgVBs|A9K=Fti!fhgSL*rz)V?TKm@=<0(5ycKd10JxuQKWy4;f!WT(~1)9 znu`{+Gc12E;hLsYW@a{a4Keu=Ng$4ZrvOY#l119B;&BrY{JG%JOoMUTdky=S1(YM& z*PJw<8hpv{b#v}X>R@_>al@|#CTh)2*?*A=_b9j>puWS%x5SROG{GPRM@)`^kzr2X zZlztAG&S+BF{!sKXMR*NnVM1=7z-f^Ub(?uN2?@MR>dMSC**5jH6l0MB*Z1SZWN7P z5)nO5L7x*zl;L;Lv&uxUr0QE)tK;!lCI}v@&4DyWa+vkn+SHiSvc%84mU)4emO*gH z$RH4Oc#0^M7+e8iEdd6?sEOFfXeoe_27pwV?(IcA7z)$1UX~YlstnaEq3jBRMvfQrDbyL{vA;O|7sRvqy@88NY)8)r+6HVnUi*oRBMU6cBdIv*6h! zS?zcgJW?`L;Rxp3d5tzM#y(Y6w1>TZ32o@BwN#Mc?YPvrEYdhP=ErB`^^; z&Vi^jgnWF5EXz5pF`37rR~pvAc_R|@B)N@ms>pzgqMDcpd7^XHEwf{;@9^MzyuPm1 zank9;g=4Qj_KQA=#Q=Vx_0bg|YD31np_B*Hr>Tuwg?d(}e4Q6ez)7ytjD{SqzN%e+ z+&%ggAfLjj*V2{IF zf0V&0i0NLcpS)HMpcO0Lk``KbvZ6}y4U-fwd)3PR6+;*cAyXM=huqyi|8ZN+p{~8wLc>HfH|>i9p~F!B3>AL-QaHRQt0d|VSP2u6|W6p>ITK3rQ)EE zhvjj)cus9Mrc@Gjr7-xbfA<^L7X`_=?ItsS=skkk&iloos&DSaQG&DLT zOI{z1Zj+@%pWx#tM|eGAJiCI3+gEUhQeL)X?7UcU8@L z+#q=60Mf6 zT1pdtf`IhqRHv9bcEk|OC0=YaqEfO+h(IN8SC}!Jv^?)1IRtl&xL-OR;ZJVN2nlv~ zzh;s<$hIZG`MZ`*$v(dgDarre%yM@`=x__0TA&BK^hlV5>WJmQ(>DCAK)jz{^hRNHj_HWX4zN^0(Ci^qt_IOHLwE!ZgPy?GEn{)>N(5xCD0KrXJxI}6F zM)}xiL88)b@o0I7=Y+uR2R^wICq0fc5u5kk%RQ^J&%5j8ux7l{{M`=4droTKmPtaPfGI|6j`F z6T!vd*UKki^>*Q*5fkKDQ-Zp1Skl03k&wpH{$=K=!Tm>vANw5{dE zFGXJL^NRGI5L4#?s*dXD*e1gs7*ea5LTPED*hbKWDKVj&Bg}xlGJ9Hx3r-bL~Gy) z)(cjuf?Po7%>I)vF<0B>e(^+1PqEpklwSNDo4a_CF18wPc^Bt2S07$Y8%W+h StateMachines +); \ No newline at end of file diff --git a/src/Stater/Models/State.cs b/src/Stater/Models/State.cs new file mode 100644 index 0000000..5363e99 --- /dev/null +++ b/src/Stater/Models/State.cs @@ -0,0 +1,6 @@ +namespace Stater.Models; + +public record State( + int X, + int Y +); \ No newline at end of file diff --git a/src/Stater/Models/StateMachine.cs b/src/Stater/Models/StateMachine.cs new file mode 100644 index 0000000..714bcf1 --- /dev/null +++ b/src/Stater/Models/StateMachine.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Stater.Models; + +public record StateMachine( + string Name, + List States +); \ No newline at end of file diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs new file mode 100644 index 0000000..73b0cb2 --- /dev/null +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using DynamicData; + +namespace Stater.Models.impl; + +public class ProjectManager : IProjectManager +{ + public Project CreateProject(string name) + { + return new Project( + Name: name, + Location: null, + StateMachines: new ObservableCollection() + ); + } + + public Project LoadProject(string path) + { + throw new System.NotImplementedException(); + } + + public void SaveProject(Project project, string path) + { + throw new System.NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/Stater/Program.cs b/src/Stater/Program.cs new file mode 100644 index 0000000..42ce05b --- /dev/null +++ b/src/Stater/Program.cs @@ -0,0 +1,23 @@ +using Avalonia; +using Avalonia.ReactiveUI; +using System; + +namespace Stater; + +sealed class Program +{ + // Initialization code. Don't use any Avalonia, third-party APIs or any + // SynchronizationContext-reliant code before AppMain is called: things aren't initialized + // yet and stuff might break. + [STAThread] + public static void Main(string[] args) => BuildAvaloniaApp() + .StartWithClassicDesktopLifetime(args); + + // Avalonia configuration, don't remove; also used by visual designer. + public static AppBuilder BuildAvaloniaApp() + => AppBuilder.Configure() + .UsePlatformDetect() + .WithInterFont() + .LogToTrace() + .UseReactiveUI(); +} \ No newline at end of file diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj new file mode 100644 index 0000000..b565aa8 --- /dev/null +++ b/src/Stater/Stater.csproj @@ -0,0 +1,26 @@ + + + WinExe + net8.0 + enable + true + app.manifest + true + + + + + + + + + + + + + + + + + + diff --git a/src/Stater/ViewLocator.cs b/src/Stater/ViewLocator.cs new file mode 100644 index 0000000..a519100 --- /dev/null +++ b/src/Stater/ViewLocator.cs @@ -0,0 +1,32 @@ +using System; +using Avalonia.Controls; +using Avalonia.Controls.Templates; +using Stater.ViewModels; + +namespace Stater; + +public class ViewLocator : IDataTemplate +{ + public Control? Build(object? data) + { + if (data is null) + return null; + + var name = data.GetType().FullName!.Replace("ViewModel", "View", StringComparison.Ordinal); + var type = Type.GetType(name); + + if (type != null) + { + var control = (Control)Activator.CreateInstance(type)!; + control.DataContext = data; + return control; + } + + return new TextBlock { Text = "Not Found: " + name }; + } + + public bool Match(object? data) + { + return data is ViewModelBase; + } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs new file mode 100644 index 0000000..0128c3f --- /dev/null +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using System.Windows.Input; +using Avalonia.Controls; +using Stater.Models; +using Stater.Models.impl; + +namespace Stater.ViewModels; + +using ReactiveUI; + +public partial class MainWindowViewModel : ReactiveObject +{ + private readonly IProjectManager projectManager; + public ICommand NewCommand { get; } + public ICommand OpenCommand { get; } + + public ICommand NewStateMachineCommand { get; } + + private Project? project; + + public Project? Project + { + get => project; + private set => this.RaiseAndSetIfChanged(ref project, value); + } + + private StateMachine? _stateMachine; + + public StateMachine? StateMachine + { + get => _stateMachine; + set => this.RaiseAndSetIfChanged(ref _stateMachine, value); + } + + public MainWindowViewModel() + { + projectManager = new ProjectManager(); + NewCommand = ReactiveCommand.Create(NewProject); + OpenCommand = ReactiveCommand.Create(OpenProject); + NewStateMachineCommand = ReactiveCommand.Create(NewStateMachine); + } + + private void OpenProject() + { + } + + private void NewProject() + { + Project = projectManager.CreateProject("New Project"); + } + + private void NewStateMachine() + { + Project?.StateMachines.Add(new StateMachine("Test", new List())); + } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/ViewModelBase.cs b/src/Stater/ViewModels/ViewModelBase.cs new file mode 100644 index 0000000..e75fe64 --- /dev/null +++ b/src/Stater/ViewModels/ViewModelBase.cs @@ -0,0 +1,7 @@ +using CommunityToolkit.Mvvm.ComponentModel; + +namespace Stater.ViewModels; + +public class ViewModelBase : ObservableObject +{ +} \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml new file mode 100644 index 0000000..0b371b9 --- /dev/null +++ b/src/Stater/Views/MainWindow.axaml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml.cs b/src/Stater/Views/MainWindow.axaml.cs new file mode 100644 index 0000000..ddaee1d --- /dev/null +++ b/src/Stater/Views/MainWindow.axaml.cs @@ -0,0 +1,11 @@ +using Avalonia.Controls; + +namespace Stater.Views; + +public partial class MainWindow : Window +{ + public MainWindow() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/src/Stater/app.manifest b/src/Stater/app.manifest new file mode 100644 index 0000000..27aee3d --- /dev/null +++ b/src/Stater/app.manifest @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + From a3b6f0d5b5abb00497c920b6d84d0ff8e0f58142 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 8 Nov 2024 11:34:56 +0300 Subject: [PATCH 13/69] Add reactive objects --- src/Stater/App.axaml.cs | 7 +- src/Stater/Models/IProjectManager.cs | 12 ++- src/Stater/Models/Project.cs | 3 +- src/Stater/Models/State.cs | 6 +- src/Stater/Models/impl/ProjectManager.cs | 41 ++++++++-- src/Stater/Stater.csproj | 4 + src/Stater/ViewModels/MainWindowViewModel.cs | 80 ++++++++++++++------ src/Stater/ViewModels/ViewModelBase.cs | 4 +- src/Stater/Views/MainWindow.axaml | 49 +++++++++++- 9 files changed, 163 insertions(+), 43 deletions(-) diff --git a/src/Stater/App.axaml.cs b/src/Stater/App.axaml.cs index 593b48c..ccedcf5 100644 --- a/src/Stater/App.axaml.cs +++ b/src/Stater/App.axaml.cs @@ -3,6 +3,8 @@ using Avalonia.Data.Core; using Avalonia.Data.Core.Plugins; using Avalonia.Markup.Xaml; +using Splat; +using Stater.Models.impl; using Stater.ViewModels; using Stater.Views; @@ -21,10 +23,13 @@ public override void OnFrameworkInitializationCompleted() { // Line below is needed to remove Avalonia data validation. // Without this line you will get duplicate validations from both Avalonia and CT + + var projectManager = new ProjectManager(); + BindingPlugins.DataValidators.RemoveAt(0); desktop.MainWindow = new MainWindow { - DataContext = new MainWindowViewModel(), + DataContext = new MainWindowViewModel(projectManager), }; } diff --git a/src/Stater/Models/IProjectManager.cs b/src/Stater/Models/IProjectManager.cs index 5a27dd1..7cb37bf 100644 --- a/src/Stater/Models/IProjectManager.cs +++ b/src/Stater/Models/IProjectManager.cs @@ -1,8 +1,16 @@ +using System; +using DynamicData; + namespace Stater.Models; public interface IProjectManager { - Project CreateProject(string name); + IObservable Project { get; } + IObservable> StateMachines { get; } + IObservable StateMachine { get; } + + void CreateProject(string name); Project LoadProject(string path); void SaveProject(Project project, string path); -} + void CreateStateMachine(); +} \ No newline at end of file diff --git a/src/Stater/Models/Project.cs b/src/Stater/Models/Project.cs index 84649bb..10f6950 100644 --- a/src/Stater/Models/Project.cs +++ b/src/Stater/Models/Project.cs @@ -4,6 +4,5 @@ namespace Stater.Models; public record Project( string Name, - string? Location, - ObservableCollection StateMachines + string? Location ); \ No newline at end of file diff --git a/src/Stater/Models/State.cs b/src/Stater/Models/State.cs index 5363e99..ca28366 100644 --- a/src/Stater/Models/State.cs +++ b/src/Stater/Models/State.cs @@ -2,5 +2,7 @@ namespace Stater.Models; public record State( int X, - int Y -); \ No newline at end of file + int Y, + int Size, + string Color +); diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index 73b0cb2..f7921a1 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -1,27 +1,54 @@ +using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Reactive.Linq; +using System.Reactive.Subjects; using DynamicData; namespace Stater.Models.impl; -public class ProjectManager : IProjectManager +internal class ProjectManager : IProjectManager { - public Project CreateProject(string name) + private readonly ReplaySubject _project = new(); + public IObservable Project => _project.AsObservable(); + + private readonly SourceCache _stateMachines = new(x => x.Name); + public IObservable> StateMachines => _stateMachines.Connect(); + + private readonly Subject _stateMachine = new(); + public IObservable StateMachine => _stateMachine; + + public void CreateProject(string name) { - return new Project( + var project = new Project( Name: name, - Location: null, - StateMachines: new ObservableCollection() + Location: null ); + _project.OnNext(project); } public Project LoadProject(string path) { - throw new System.NotImplementedException(); + throw new NotImplementedException(); } public void SaveProject(Project project, string path) { - throw new System.NotImplementedException(); + throw new NotImplementedException(); + } + + public void CreateStateMachine() + { + var stateMachine = new StateMachine( + Name: "Test", + States: new List + { + new(X: 5, Y: 10, Size: 5, Color: "Green"), + new(X: 5, Y: 10, Size: 50, Color: "Black"), + new(X: 10, Y: 200, Size: 5, Color: "White"), + } + ); + _stateMachines.AddOrUpdate(stateMachine); + _stateMachine.OnNext(stateMachine); } } \ No newline at end of file diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index b565aa8..fab59db 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -22,5 +22,9 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index 0128c3f..c1d0974 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -1,56 +1,90 @@ -using System.Collections.Generic; +using System; +using System.Collections.ObjectModel; +using System.Diagnostics; using System.Windows.Input; -using Avalonia.Controls; +using Avalonia.Input; +using DynamicData; +using ReactiveUI.SourceGenerators; using Stater.Models; -using Stater.Models.impl; namespace Stater.ViewModels; using ReactiveUI; -public partial class MainWindowViewModel : ReactiveObject +public class MainWindowViewModel : ReactiveObject { - private readonly IProjectManager projectManager; - public ICommand NewCommand { get; } - public ICommand OpenCommand { get; } + public MainWindowViewModel(IProjectManager projectManager) + { + _projectManager = projectManager; + NewCommand = ReactiveCommand.Create(NewProject); + OpenCommand = ReactiveCommand.Create(OpenProject); + NewStateMachineCommand = ReactiveCommand.Create(NewStateMachine); - public ICommand NewStateMachineCommand { get; } + projectManager + .StateMachines + .Bind(out _stateMachines) + .Subscribe(); - private Project? project; + projectManager + .Project + .Subscribe(x => Project = x); - public Project? Project + projectManager + .StateMachine + .Subscribe(x => StateMachine = x); + } + + private readonly IProjectManager _projectManager; + + private Project _project; + + public Project Project { - get => project; - private set => this.RaiseAndSetIfChanged(ref project, value); + get => _project; + private set => this.RaiseAndSetIfChanged(ref _project, value); } - private StateMachine? _stateMachine; + private StateMachine _stateMachine; - public StateMachine? StateMachine + public StateMachine StateMachine { get => _stateMachine; - set => this.RaiseAndSetIfChanged(ref _stateMachine, value); + private set => this.RaiseAndSetIfChanged(ref _stateMachine, value); } - public MainWindowViewModel() + private readonly ReadOnlyObservableCollection _stateMachines; + public ReadOnlyObservableCollection StateMachines => _stateMachines; + + public ICommand NewCommand { get; } + public ICommand OpenCommand { get; } + public ICommand NewStateMachineCommand { get; } + + private double _scale = 1.0; + + public double Scale { - projectManager = new ProjectManager(); - NewCommand = ReactiveCommand.Create(NewProject); - OpenCommand = ReactiveCommand.Create(OpenProject); - NewStateMachineCommand = ReactiveCommand.Create(NewStateMachine); + get => _scale; + set => this.RaiseAndSetIfChanged(ref _scale, value); } + private void OpenProject() { } private void NewProject() { - Project = projectManager.CreateProject("New Project"); + _projectManager.CreateProject("New Project"); } - + private void NewStateMachine() { - Project?.StateMachines.Add(new StateMachine("Test", new List())); + _projectManager.CreateStateMachine(); + } + + void Canvas_PointerWheelChanged(object sender, PointerWheelEventArgs e) + { + double zoomFactor = e.Delta.Y > 0 ? 1.1 : 0.9; + Scale *= zoomFactor; } } \ No newline at end of file diff --git a/src/Stater/ViewModels/ViewModelBase.cs b/src/Stater/ViewModels/ViewModelBase.cs index e75fe64..f8ba182 100644 --- a/src/Stater/ViewModels/ViewModelBase.cs +++ b/src/Stater/ViewModels/ViewModelBase.cs @@ -1,7 +1,7 @@ -using CommunityToolkit.Mvvm.ComponentModel; +using ReactiveUI; namespace Stater.ViewModels; -public class ViewModelBase : ObservableObject +public class ViewModelBase : ReactiveObject { } \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml index 0b371b9..824d01f 100644 --- a/src/Stater/Views/MainWindow.axaml +++ b/src/Stater/Views/MainWindow.axaml @@ -3,6 +3,8 @@ xmlns:vm="using:Stater.ViewModels" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:models="clr-namespace:Stater.Models" + xmlns:views="clr-namespace:Stater.Views" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Stater.Views.MainWindow" x:DataType="vm:MainWindowViewModel" @@ -36,7 +38,7 @@ - @@ -46,8 +48,47 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From c12f6d88ac0e8d0c974655ee6684d30e99e68e7c Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 8 Nov 2024 14:20:08 +0300 Subject: [PATCH 14/69] Add Zoom and traslate --- src/Stater/Stater.csproj | 5 +- src/Stater/ViewModels/MainWindowViewModel.cs | 26 +------- src/Stater/Views/MainWindow.axaml | 11 ++-- src/Stater/Views/MainWindow.axaml.cs | 62 ++++++++++++++++++++ 4 files changed, 72 insertions(+), 32 deletions(-) diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index fab59db..2ef014d 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -22,9 +22,6 @@ - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index c1d0974..360dac5 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -1,10 +1,9 @@ using System; using System.Collections.ObjectModel; -using System.Diagnostics; using System.Windows.Input; using Avalonia.Input; using DynamicData; -using ReactiveUI.SourceGenerators; +using ReactiveUI.Fody.Helpers; using Stater.Models; namespace Stater.ViewModels; @@ -36,21 +35,8 @@ public MainWindowViewModel(IProjectManager projectManager) private readonly IProjectManager _projectManager; - private Project _project; - - public Project Project - { - get => _project; - private set => this.RaiseAndSetIfChanged(ref _project, value); - } - - private StateMachine _stateMachine; - - public StateMachine StateMachine - { - get => _stateMachine; - private set => this.RaiseAndSetIfChanged(ref _stateMachine, value); - } + [Reactive] public Project Project { get; private set; } + [Reactive] public StateMachine StateMachine { get; private set; } private readonly ReadOnlyObservableCollection _stateMachines; public ReadOnlyObservableCollection StateMachines => _stateMachines; @@ -81,10 +67,4 @@ private void NewStateMachine() { _projectManager.CreateStateMachine(); } - - void Canvas_PointerWheelChanged(object sender, PointerWheelEventArgs e) - { - double zoomFactor = e.Delta.Y > 0 ? 1.1 : 0.9; - Scale *= zoomFactor; - } } \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml index 824d01f..fd66497 100644 --- a/src/Stater/Views/MainWindow.axaml +++ b/src/Stater/Views/MainWindow.axaml @@ -4,7 +4,6 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:models="clr-namespace:Stater.Models" - xmlns:views="clr-namespace:Stater.Views" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Stater.Views.MainWindow" x:DataType="vm:MainWindowViewModel" @@ -14,7 +13,7 @@ - + a @@ -48,7 +47,7 @@ - + @@ -56,11 +55,13 @@ + PointerWheelChanged="InputElement_OnPointerWheelChanged" + PointerPressed="InputElement_OnPointerPressed" + PointerMoved="InputElement_OnPointerMoved" + PointerReleased="InputElement_OnPointerReleased"> - diff --git a/src/Stater/Views/MainWindow.axaml.cs b/src/Stater/Views/MainWindow.axaml.cs index ddaee1d..07b2038 100644 --- a/src/Stater/Views/MainWindow.axaml.cs +++ b/src/Stater/Views/MainWindow.axaml.cs @@ -1,4 +1,8 @@ +using System; +using Avalonia; using Avalonia.Controls; +using Avalonia.Input; +using Avalonia.Media; namespace Stater.Views; @@ -8,4 +12,62 @@ public MainWindow() { InitializeComponent(); } + + private const double ScaleFactor = 1.01; + private double scale = 1; + + private const double TranslateXFactor = 1; + private double x; + private double _x; + + private const double TranslateYFactor = 1; + private double y; + private double _y; + + private bool pressed; + + private void updateCanvasMatrix(Canvas canvas) + { + canvas.RenderTransform = + new MatrixTransform(Matrix.CreateScale(scale, scale) * Matrix.CreateTranslation(x, y)); + } + + private void InputElement_OnPointerWheelChanged(object? sender, PointerWheelEventArgs e) + { + if (sender == null) return; + if (e.Delta.Y >= 0) + { + scale *= ScaleFactor; + } + else + { + scale /= ScaleFactor; + } + + updateCanvasMatrix((Canvas)sender); + } + + private void InputElement_OnPointerPressed(object? sender, PointerPressedEventArgs e) + { + pressed = true; + var point = e.GetCurrentPoint(sender as Control); + _x = point.Position.X; + _y = point.Position.Y; + } + + private void InputElement_OnPointerMoved(object? sender, PointerEventArgs e) + { + if (!pressed || sender == null) return; + var point = e.GetCurrentPoint(sender as Control); + var positionX = point.Position.X; + var positionY = point.Position.Y; + x -= (_x - positionX) * TranslateXFactor; + y -= (_y - positionY) * TranslateYFactor; + updateCanvasMatrix((Canvas)sender); + } + + private void InputElement_OnPointerReleased(object? sender, PointerReleasedEventArgs e) + { + pressed = false; + } } \ No newline at end of file From b7bb7315c62934e4aedfa9bafe1ea5d1b6139399 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 9 Nov 2024 14:19:20 +0300 Subject: [PATCH 15/69] Add move states on map --- src/Stater/FodyWeavers.xml | 3 + src/Stater/Models/IProjectManager.cs | 4 + src/Stater/Models/State.cs | 21 +++-- src/Stater/Models/StateMachine.cs | 4 +- src/Stater/Models/Transition.cs | 9 ++ src/Stater/Models/impl/ProjectManager.cs | 86 ++++++++++++++++--- src/Stater/Program.cs | 4 +- src/Stater/Stater.csproj | 1 + .../Editors/StateEditorViewModel.cs | 16 ++++ src/Stater/ViewModels/MainWindowViewModel.cs | 69 +++++++++++---- src/Stater/Views/Editors/StateEditor.axaml | 24 ++++++ src/Stater/Views/Editors/StateEditor.axaml.cs | 14 +++ src/Stater/Views/MainWindow.axaml | 32 ++++--- src/Stater/Views/MainWindow.axaml.cs | 53 ++++++++++++ 14 files changed, 292 insertions(+), 48 deletions(-) create mode 100644 src/Stater/FodyWeavers.xml create mode 100644 src/Stater/Models/Transition.cs create mode 100644 src/Stater/ViewModels/Editors/StateEditorViewModel.cs create mode 100644 src/Stater/Views/Editors/StateEditor.axaml create mode 100644 src/Stater/Views/Editors/StateEditor.axaml.cs diff --git a/src/Stater/FodyWeavers.xml b/src/Stater/FodyWeavers.xml new file mode 100644 index 0000000..63fc148 --- /dev/null +++ b/src/Stater/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/Stater/Models/IProjectManager.cs b/src/Stater/Models/IProjectManager.cs index 7cb37bf..26f085d 100644 --- a/src/Stater/Models/IProjectManager.cs +++ b/src/Stater/Models/IProjectManager.cs @@ -13,4 +13,8 @@ public interface IProjectManager Project LoadProject(string path); void SaveProject(Project project, string path); void CreateStateMachine(); + void OpenStateMachine(Guid guid); + State? CreateState(); + State? GetState(Guid guid); + void UpdateState(State state); } \ No newline at end of file diff --git a/src/Stater/Models/State.cs b/src/Stater/Models/State.cs index ca28366..2750cb3 100644 --- a/src/Stater/Models/State.cs +++ b/src/Stater/Models/State.cs @@ -1,8 +1,19 @@ +using System; + namespace Stater.Models; +public enum StateType +{ + Common, + Start, + End +} + public record State( - int X, - int Y, - int Size, - string Color -); + Guid Guid, + string Name, + string Description, + StateType Type, + float X, + float Y +); \ No newline at end of file diff --git a/src/Stater/Models/StateMachine.cs b/src/Stater/Models/StateMachine.cs index 714bcf1..73e6f07 100644 --- a/src/Stater/Models/StateMachine.cs +++ b/src/Stater/Models/StateMachine.cs @@ -1,8 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace Stater.Models; public record StateMachine( + Guid Guid, string Name, List States ); \ No newline at end of file diff --git a/src/Stater/Models/Transition.cs b/src/Stater/Models/Transition.cs new file mode 100644 index 0000000..8be8a97 --- /dev/null +++ b/src/Stater/Models/Transition.cs @@ -0,0 +1,9 @@ +using System; + +namespace Stater.Models; + +public record Transition( + string Name, + Guid Start, + Guid End +); \ No newline at end of file diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index f7921a1..1d57c79 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Reactive.Linq; +using System.Linq; using System.Reactive.Subjects; +using Avalonia.Animation; using DynamicData; namespace Stater.Models.impl; @@ -10,14 +10,27 @@ namespace Stater.Models.impl; internal class ProjectManager : IProjectManager { private readonly ReplaySubject _project = new(); - public IObservable Project => _project.AsObservable(); + public IObservable Project => _project; - private readonly SourceCache _stateMachines = new(x => x.Name); + private readonly SourceCache _stateMachines = new(x => x.Guid.ToString()); public IObservable> StateMachines => _stateMachines.Connect(); - private readonly Subject _stateMachine = new(); + private readonly ReplaySubject _stateMachine = new(); public IObservable StateMachine => _stateMachine; + private readonly ReplaySubject _state = new(); + public IObservable State => _state; + + private readonly ReplaySubject _transtion = new(); + public IObservable Transition => _transtion; + + private StateMachine? GetCurrentStateMachine() + { + StateMachine? currentStateMachine = null; + _stateMachine.Subscribe(stateMachine => currentStateMachine = stateMachine); + return currentStateMachine; + } + public void CreateProject(string name) { var project = new Project( @@ -37,18 +50,65 @@ public void SaveProject(Project project, string path) throw new NotImplementedException(); } + private void UpdateStateMachine(StateMachine newStateMachine) + { + _stateMachines.AddOrUpdate(newStateMachine); + _stateMachine.OnNext(newStateMachine); + } + public void CreateStateMachine() { var stateMachine = new StateMachine( - Name: "Test", - States: new List - { - new(X: 5, Y: 10, Size: 5, Color: "Green"), - new(X: 5, Y: 10, Size: 50, Color: "Black"), - new(X: 10, Y: 200, Size: 5, Color: "White"), - } + Guid: Guid.NewGuid(), + Name: "StateMachine " + _stateMachines.Count, + States: new List() ); - _stateMachines.AddOrUpdate(stateMachine); + UpdateStateMachine(stateMachine); + } + + public void OpenStateMachine(Guid guid) + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine?.Guid == guid) return; + var stateMachine = _stateMachines.KeyValues[guid.ToString()]; _stateMachine.OnNext(stateMachine); } + + public State? CreateState() + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine == null) return null; + var state = new State( + Guid: Guid.NewGuid(), + Name: "State", + Description: "", + Type: StateType.Common, + 10, + 10 + ); + var newStateMachine = currentStateMachine with + { + States = new List(currentStateMachine.States) { state } + }; + UpdateStateMachine(newStateMachine); + return state; + } + + public State? GetState(Guid guid) + { + var currentStateMachine = GetCurrentStateMachine(); + return currentStateMachine?.States.FirstOrDefault(e => e.Guid == guid); + } + + public void UpdateState(State state) + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine == null) return; + var states = currentStateMachine.States.Where(el => el.Guid != state.Guid); + var newStateMachine = currentStateMachine with + { + States = new List(states) { state } + }; + UpdateStateMachine(newStateMachine); + } } \ No newline at end of file diff --git a/src/Stater/Program.cs b/src/Stater/Program.cs index 42ce05b..aef94e0 100644 --- a/src/Stater/Program.cs +++ b/src/Stater/Program.cs @@ -16,8 +16,8 @@ public static void Main(string[] args) => BuildAvaloniaApp() // Avalonia configuration, don't remove; also used by visual designer. public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure() + .UseReactiveUI() .UsePlatformDetect() .WithInterFont() - .LogToTrace() - .UseReactiveUI(); + .LogToTrace(); } \ No newline at end of file diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index 2ef014d..690953d 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -20,6 +20,7 @@ + diff --git a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs new file mode 100644 index 0000000..623a62b --- /dev/null +++ b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs @@ -0,0 +1,16 @@ +using System; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; + +namespace Stater.ViewModels.Editors; + +public class StateEditorViewModel : ReactiveObject +{ + StateEditorViewModel() + { + Console.WriteLine("INIT"); + } + [Reactive] public string Name { get; private set; } + [Reactive] public string Description { get; private set; } + [Reactive] public string Type { get; private set; } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index 360dac5..fd2a09c 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -1,23 +1,21 @@ using System; using System.Collections.ObjectModel; +using System.Numerics; +using System.Reactive; using System.Windows.Input; -using Avalonia.Input; +using Avalonia.Controls; using DynamicData; using ReactiveUI.Fody.Helpers; using Stater.Models; +using ReactiveUI; namespace Stater.ViewModels; -using ReactiveUI; - public class MainWindowViewModel : ReactiveObject { public MainWindowViewModel(IProjectManager projectManager) { _projectManager = projectManager; - NewCommand = ReactiveCommand.Create(NewProject); - OpenCommand = ReactiveCommand.Create(OpenProject); - NewStateMachineCommand = ReactiveCommand.Create(NewStateMachine); projectManager .StateMachines @@ -31,12 +29,32 @@ public MainWindowViewModel(IProjectManager projectManager) projectManager .StateMachine .Subscribe(x => StateMachine = x); + + NewCommand = ReactiveCommand.Create(NewProject); + OpenCommand = ReactiveCommand.Create(OpenProject); + NewStateMachineCommand = ReactiveCommand.Create(NewStateMachine); + NewStateCommand = ReactiveCommand.Create(NewState); + StateClickCommand = ReactiveCommand.Create(OnStateClicked); + UpdateStateCoordsCommand = ReactiveCommand.Create(UpdateStateCoords); } private readonly IProjectManager _projectManager; [Reactive] public Project Project { get; private set; } - [Reactive] public StateMachine StateMachine { get; private set; } + + private StateMachine _stateMachine; + + public StateMachine StateMachine + { + get => _stateMachine; + set + { + this.RaiseAndSetIfChanged(ref _stateMachine, value); + _projectManager.OpenStateMachine(value.Guid); + } + } + + [Reactive] public State? State { get; private set; } private readonly ReadOnlyObservableCollection _stateMachines; public ReadOnlyObservableCollection StateMachines => _stateMachines; @@ -44,14 +62,9 @@ public MainWindowViewModel(IProjectManager projectManager) public ICommand NewCommand { get; } public ICommand OpenCommand { get; } public ICommand NewStateMachineCommand { get; } - - private double _scale = 1.0; - - public double Scale - { - get => _scale; - set => this.RaiseAndSetIfChanged(ref _scale, value); - } + public ICommand NewStateCommand { get; } + public ReactiveCommand StateClickCommand { get; } + public ReactiveCommand UpdateStateCoordsCommand { get; } private void OpenProject() @@ -67,4 +80,30 @@ private void NewStateMachine() { _projectManager.CreateStateMachine(); } + + private void NewState() + { + var state = _projectManager.CreateState(); + if (state != null) + { + State = state; + } + } + + private void OnStateClicked(State state) + { + var selectedState = _projectManager.GetState(state.Guid); + State = selectedState ?? null; + } + + private void UpdateStateCoords(Vector2 coords) + { + if (State == null) return; + var newState = State with + { + X = State.X + coords.X, + Y = State.Y + coords.Y + }; + _projectManager.UpdateState(newState); + } } \ No newline at end of file diff --git a/src/Stater/Views/Editors/StateEditor.axaml b/src/Stater/Views/Editors/StateEditor.axaml new file mode 100644 index 0000000..02c5e8d --- /dev/null +++ b/src/Stater/Views/Editors/StateEditor.axaml @@ -0,0 +1,24 @@ + + + Name: + + Description: + + Type: + + Common + Start + End + + + \ No newline at end of file diff --git a/src/Stater/Views/Editors/StateEditor.axaml.cs b/src/Stater/Views/Editors/StateEditor.axaml.cs new file mode 100644 index 0000000..1a4bb82 --- /dev/null +++ b/src/Stater/Views/Editors/StateEditor.axaml.cs @@ -0,0 +1,14 @@ +using System; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Stater.Views.Editors; + +public partial class StateEditor : UserControl +{ + public StateEditor() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml index fd66497..feb2507 100644 --- a/src/Stater/Views/MainWindow.axaml +++ b/src/Stater/Views/MainWindow.axaml @@ -1,6 +1,7 @@ - - @@ -33,6 +32,10 @@ + + + + @@ -46,15 +49,20 @@ - - + + + + - - - - - + Height="50" + Width="50" + Fill="Red" + Name="State" + PointerPressed="State_OnPointerPressed" + PointerMoved="State_OnPointerMoved" + PointerReleased="State_OnPointerReleased"> diff --git a/src/Stater/Views/MainWindow.axaml.cs b/src/Stater/Views/MainWindow.axaml.cs index 07b2038..f6f38da 100644 --- a/src/Stater/Views/MainWindow.axaml.cs +++ b/src/Stater/Views/MainWindow.axaml.cs @@ -1,8 +1,12 @@ using System; +using System.Numerics; using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.Shapes; using Avalonia.Input; using Avalonia.Media; +using Stater.Models; +using Stater.ViewModels; namespace Stater.Views; @@ -26,6 +30,15 @@ public MainWindow() private bool pressed; + private const double StateTranslateXFactor = 1; + private double stateX; + private double _stateX; + + private const double StateTranslateYFactor = 1; + private double stateY; + private double _stateY; + private bool statePressed; + private void updateCanvasMatrix(Canvas canvas) { canvas.RenderTransform = @@ -49,6 +62,7 @@ private void InputElement_OnPointerWheelChanged(object? sender, PointerWheelEven private void InputElement_OnPointerPressed(object? sender, PointerPressedEventArgs e) { + if (statePressed) return; pressed = true; var point = e.GetCurrentPoint(sender as Control); _x = point.Position.X; @@ -70,4 +84,43 @@ private void InputElement_OnPointerReleased(object? sender, PointerReleasedEvent { pressed = false; } + + private void State_OnPointerPressed(object? sender, PointerPressedEventArgs e) + { + var rectangle = (Rectangle)sender; + if (rectangle?.DataContext is State state) + { + var context = (MainWindowViewModel)DataContext; + context?.StateClickCommand.Execute(state).Subscribe(); + statePressed = true; + + var canvas = TheCanvasPanel; + var point = e.GetCurrentPoint(canvas); + stateX = 0; + stateY = 0; + _stateX = point.Position.X; + _stateY = point.Position.Y; + } + } + + private void State_OnPointerMoved(object? sender, PointerEventArgs e) + { + if (!statePressed || sender == null) return; + var rectangle = (Rectangle)sender!; + var canvas = TheCanvasPanel; + var point = e.GetCurrentPoint(canvas); + var positionX = point.Position.X; + var positionY = point.Position.Y; + stateX = (positionX - _stateX) * StateTranslateXFactor / scale; + stateY = (positionY - _stateY) * StateTranslateYFactor / scale; + rectangle.RenderTransform = + new MatrixTransform(Matrix.CreateTranslation(stateX, stateY)); + } + + private void State_OnPointerReleased(object? sender, PointerReleasedEventArgs e) + { + statePressed = false; + var context = (MainWindowViewModel)DataContext; + context?.UpdateStateCoordsCommand.Execute(new Vector2((float)stateX, (float)stateY)).Subscribe(); + } } \ No newline at end of file From 52dc940339f975d33736d67c1b32591a1117e852 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 11 Nov 2024 14:36:11 +0300 Subject: [PATCH 16/69] Add Editors User Controls --- src/Stater/App.axaml.cs | 28 ++++++++++-- .../Converters/EditorTypeToBoolConverter.cs | 28 ++++++++++++ src/Stater/Models/Editors/IEditorManager.cs | 20 +++++++++ src/Stater/Models/Editors/IStateEditor.cs | 11 +++++ .../Models/Editors/IStateMachineEditor.cs | 12 ++++++ .../Models/Editors/impl/EditorManager.cs | 39 +++++++++++++++++ src/Stater/Models/Editors/impl/StateEditor.cs | 21 +++++++++ .../Models/Editors/impl/StateMachineEditor.cs | 22 ++++++++++ src/Stater/Models/IProjectManager.cs | 6 ++- src/Stater/Models/impl/ProjectManager.cs | 11 ++--- src/Stater/Stater.csproj | 7 +++ .../ViewModels/Editors/MainEditorViewModel.cs | 18 ++++++++ .../Editors/StateEditorViewModel.cs | 43 ++++++++++++++++--- .../Editors/StateMachineEditorViewModel.cs | 41 ++++++++++++++++++ src/Stater/ViewModels/MainWindowViewModel.cs | 14 ++++-- src/Stater/Views/Editors/MainEditor.axaml | 25 +++++++++++ src/Stater/Views/Editors/MainEditor.axaml.cs | 18 ++++++++ src/Stater/Views/Editors/StateEditor.axaml.cs | 10 +++-- .../Views/Editors/StateMachineEditor.axaml | 16 +++++++ .../Views/Editors/StateMachineEditor.axaml.cs | 21 +++++++++ src/Stater/Views/MainWindow.axaml | 7 ++- 21 files changed, 391 insertions(+), 27 deletions(-) create mode 100644 src/Stater/Converters/EditorTypeToBoolConverter.cs create mode 100644 src/Stater/Models/Editors/IEditorManager.cs create mode 100644 src/Stater/Models/Editors/IStateEditor.cs create mode 100644 src/Stater/Models/Editors/IStateMachineEditor.cs create mode 100644 src/Stater/Models/Editors/impl/EditorManager.cs create mode 100644 src/Stater/Models/Editors/impl/StateEditor.cs create mode 100644 src/Stater/Models/Editors/impl/StateMachineEditor.cs create mode 100644 src/Stater/ViewModels/Editors/MainEditorViewModel.cs create mode 100644 src/Stater/ViewModels/Editors/StateMachineEditorViewModel.cs create mode 100644 src/Stater/Views/Editors/MainEditor.axaml create mode 100644 src/Stater/Views/Editors/MainEditor.axaml.cs create mode 100644 src/Stater/Views/Editors/StateMachineEditor.axaml create mode 100644 src/Stater/Views/Editors/StateMachineEditor.axaml.cs diff --git a/src/Stater/App.axaml.cs b/src/Stater/App.axaml.cs index ccedcf5..9b5ac62 100644 --- a/src/Stater/App.axaml.cs +++ b/src/Stater/App.axaml.cs @@ -1,9 +1,11 @@ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; -using Avalonia.Data.Core; using Avalonia.Data.Core.Plugins; using Avalonia.Markup.Xaml; using Splat; +using Stater.Models; +using Stater.Models.Editors; +using Stater.Models.Editors.impl; using Stater.Models.impl; using Stater.ViewModels; using Stater.Views; @@ -24,15 +26,33 @@ public override void OnFrameworkInitializationCompleted() // Line below is needed to remove Avalonia data validation. // Without this line you will get duplicate validations from both Avalonia and CT - var projectManager = new ProjectManager(); - + InitDependency(); + + var projectManager = Locator.Current.GetService()!; + var editorManager = Locator.Current.GetService()!; + + BindingPlugins.DataValidators.RemoveAt(0); desktop.MainWindow = new MainWindow { - DataContext = new MainWindowViewModel(projectManager), + DataContext = new MainWindowViewModel(projectManager, editorManager), }; } base.OnFrameworkInitializationCompleted(); } + + private void InitDependency() + { + var projectManager = new ProjectManager(); + var stateMachineEditor = new StateMachineEditor(projectManager); + var stateEditor = new StateEditor(projectManager); + + Locator.CurrentMutable.RegisterConstant(projectManager, typeof(IProjectManager)); + + Locator.CurrentMutable.RegisterConstant(new EditorManager(stateMachineEditor, stateEditor), + typeof(IEditorManager)); + Locator.CurrentMutable.RegisterConstant(stateMachineEditor, typeof(IStateMachineEditor)); + Locator.CurrentMutable.RegisterConstant(stateEditor, typeof(IStateEditor)); + } } \ No newline at end of file diff --git a/src/Stater/Converters/EditorTypeToBoolConverter.cs b/src/Stater/Converters/EditorTypeToBoolConverter.cs new file mode 100644 index 0000000..ca63246 --- /dev/null +++ b/src/Stater/Converters/EditorTypeToBoolConverter.cs @@ -0,0 +1,28 @@ +using System; +using System.Globalization; +using Avalonia.Data.Converters; +using Stater.Models.Editors; + +namespace Stater.Converters; + +public class EditorTypeToBoolConverter : IValueConverter +{ + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (parameter == null || value == null) + return false; + + var editorType = (EditorTypeEnum)value; + if (Enum.TryParse(parameter.ToString(), out EditorTypeEnum targetEditorType)) + { + return editorType == targetEditorType; + } + + return false; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/Stater/Models/Editors/IEditorManager.cs b/src/Stater/Models/Editors/IEditorManager.cs new file mode 100644 index 0000000..80308c5 --- /dev/null +++ b/src/Stater/Models/Editors/IEditorManager.cs @@ -0,0 +1,20 @@ +using System; + +namespace Stater.Models.Editors; + +public enum EditorTypeEnum +{ + Null, + StateMachine, + State, + Transition +} + +public interface IEditorManager +{ + IObservable EditorType { get; } + + void DoSelectStateMachine(StateMachine stateMachine); + void DoSelectState(State state); + void DoSelectTransition(Transition transition); +} \ No newline at end of file diff --git a/src/Stater/Models/Editors/IStateEditor.cs b/src/Stater/Models/Editors/IStateEditor.cs new file mode 100644 index 0000000..10ecf0f --- /dev/null +++ b/src/Stater/Models/Editors/IStateEditor.cs @@ -0,0 +1,11 @@ +using System; + +namespace Stater.Models.Editors; + +public interface IStateEditor +{ + IObservable State { get; } + + void DoSelect(State state); + void Update(State stateMachine); +} \ No newline at end of file diff --git a/src/Stater/Models/Editors/IStateMachineEditor.cs b/src/Stater/Models/Editors/IStateMachineEditor.cs new file mode 100644 index 0000000..a743615 --- /dev/null +++ b/src/Stater/Models/Editors/IStateMachineEditor.cs @@ -0,0 +1,12 @@ +using System; + +namespace Stater.Models.Editors; + +public interface IStateMachineEditor +{ + IObservable StateMachine { get; } + + void DoSelect(StateMachine stateMachine); + + void Update(StateMachine stateMachine); +} \ No newline at end of file diff --git a/src/Stater/Models/Editors/impl/EditorManager.cs b/src/Stater/Models/Editors/impl/EditorManager.cs new file mode 100644 index 0000000..5f06fac --- /dev/null +++ b/src/Stater/Models/Editors/impl/EditorManager.cs @@ -0,0 +1,39 @@ +using System; +using System.Reactive.Subjects; + +namespace Stater.Models.Editors.impl; + +public class EditorManager : IEditorManager +{ + private readonly ReplaySubject _editorType = new(); + public IObservable EditorType => _editorType; + + private IStateMachineEditor _stateMachineEditor; + private IStateEditor _stateEditor; + + + public EditorManager(IStateMachineEditor stateMachineEditor, IStateEditor stateEditor) + { + _editorType.OnNext(EditorTypeEnum.Null); + _stateMachineEditor = stateMachineEditor; + _stateEditor = stateEditor; + } + + + public void DoSelectStateMachine(StateMachine stateMachine) + { + _stateMachineEditor.DoSelect(stateMachine); + _editorType.OnNext(EditorTypeEnum.StateMachine); + } + + public void DoSelectState(State state) + { + _stateEditor.DoSelect(state); + _editorType.OnNext(EditorTypeEnum.State); + } + + public void DoSelectTransition(Transition transition) + { + throw new System.NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/Stater/Models/Editors/impl/StateEditor.cs b/src/Stater/Models/Editors/impl/StateEditor.cs new file mode 100644 index 0000000..9900b69 --- /dev/null +++ b/src/Stater/Models/Editors/impl/StateEditor.cs @@ -0,0 +1,21 @@ +using System; +using System.Reactive.Subjects; + +namespace Stater.Models.Editors.impl; + +public class StateEditor(IProjectManager projectManager): IStateEditor +{ + private readonly ReplaySubject _state = new(); + public IObservable State => _state; + + public void DoSelect(State state) + { + _state.OnNext(state); + } + + public void Update(State state) + { + projectManager.UpdateState(state); + } + +} \ No newline at end of file diff --git a/src/Stater/Models/Editors/impl/StateMachineEditor.cs b/src/Stater/Models/Editors/impl/StateMachineEditor.cs new file mode 100644 index 0000000..3f8f8e3 --- /dev/null +++ b/src/Stater/Models/Editors/impl/StateMachineEditor.cs @@ -0,0 +1,22 @@ +using System; +using System.Reactive.Subjects; + +namespace Stater.Models.Editors.impl; + +public class StateMachineEditor( + IProjectManager projectManager +) : IStateMachineEditor +{ + private readonly ReplaySubject _stateMachine = new(); + public IObservable StateMachine => _stateMachine; + + public void DoSelect(StateMachine stateMachine) + { + _stateMachine.OnNext(stateMachine); + } + + public void Update(StateMachine stateMachine) + { + projectManager.UpdateStateMachine(stateMachine); + } +} \ No newline at end of file diff --git a/src/Stater/Models/IProjectManager.cs b/src/Stater/Models/IProjectManager.cs index 26f085d..dcf4859 100644 --- a/src/Stater/Models/IProjectManager.cs +++ b/src/Stater/Models/IProjectManager.cs @@ -12,8 +12,10 @@ public interface IProjectManager void CreateProject(string name); Project LoadProject(string path); void SaveProject(Project project, string path); - void CreateStateMachine(); - void OpenStateMachine(Guid guid); + + StateMachine CreateStateMachine(); + void UpdateStateMachine(StateMachine newStateMachine); + StateMachine? OpenStateMachine(Guid guid); State? CreateState(); State? GetState(Guid guid); void UpdateState(State state); diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index 1d57c79..27dd26f 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Reactive.Subjects; -using Avalonia.Animation; using DynamicData; namespace Stater.Models.impl; @@ -50,13 +49,13 @@ public void SaveProject(Project project, string path) throw new NotImplementedException(); } - private void UpdateStateMachine(StateMachine newStateMachine) + public void UpdateStateMachine(StateMachine newStateMachine) { _stateMachines.AddOrUpdate(newStateMachine); _stateMachine.OnNext(newStateMachine); } - public void CreateStateMachine() + public StateMachine CreateStateMachine() { var stateMachine = new StateMachine( Guid: Guid.NewGuid(), @@ -64,14 +63,16 @@ public void CreateStateMachine() States: new List() ); UpdateStateMachine(stateMachine); + return stateMachine; } - public void OpenStateMachine(Guid guid) + public StateMachine? OpenStateMachine(Guid guid) { var currentStateMachine = GetCurrentStateMachine(); - if (currentStateMachine?.Guid == guid) return; + if (currentStateMachine?.Guid == guid) return null; var stateMachine = _stateMachines.KeyValues[guid.ToString()]; _stateMachine.OnNext(stateMachine); + return stateMachine; } public State? CreateState() diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index 690953d..1002448 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -25,4 +25,11 @@ + + + + MainEditor.axaml + Code + + diff --git a/src/Stater/ViewModels/Editors/MainEditorViewModel.cs b/src/Stater/ViewModels/Editors/MainEditorViewModel.cs new file mode 100644 index 0000000..ba0ba2c --- /dev/null +++ b/src/Stater/ViewModels/Editors/MainEditorViewModel.cs @@ -0,0 +1,18 @@ +using System; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Stater.Models.Editors; + +namespace Stater.ViewModels.Editors; + +public class MainEditorViewModel : ReactiveObject +{ + public MainEditorViewModel(IEditorManager editorManager) + { + editorManager + .EditorType + .Subscribe(x => EditorType = x); + } + + [Reactive] public EditorTypeEnum EditorType { get; private set; } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs index 623a62b..de65f59 100644 --- a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs @@ -1,16 +1,49 @@ using System; +using System.Windows.Input; using ReactiveUI; using ReactiveUI.Fody.Helpers; +using Stater.Models; +using Stater.Models.Editors; namespace Stater.ViewModels.Editors; public class StateEditorViewModel : ReactiveObject { - StateEditorViewModel() + public StateEditorViewModel(IStateEditor stateEditor) { - Console.WriteLine("INIT"); + _stateEditor = stateEditor; + + SaveCommand = ReactiveCommand.Create(Save); + + _stateEditor + .State + .Subscribe(x => + { + State = x; + Name = x.Name; + Description = x.Description; + Type = x.Type.ToString(); + }); + } + + private readonly IStateEditor _stateEditor; + + public ICommand SaveCommand { get; } + + [Reactive] private State? State { get; set; } + + [Reactive] public string Name { get; set; } + [Reactive] public string Description { get; set; } + [Reactive] public string Type { get; set; } + + private void Save() + { + if (State == null) return; + var tryParse = Enum.TryParse(Type, out StateType type); + if (tryParse) + { + var newStateMachine = State with { Name = Name, Description = Description, Type = type }; + _stateEditor.Update(newStateMachine); + } } - [Reactive] public string Name { get; private set; } - [Reactive] public string Description { get; private set; } - [Reactive] public string Type { get; private set; } } \ No newline at end of file diff --git a/src/Stater/ViewModels/Editors/StateMachineEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateMachineEditorViewModel.cs new file mode 100644 index 0000000..00ecbe1 --- /dev/null +++ b/src/Stater/ViewModels/Editors/StateMachineEditorViewModel.cs @@ -0,0 +1,41 @@ +using System; +using System.Windows.Input; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Stater.Models; +using Stater.Models.Editors; + +namespace Stater.ViewModels.Editors; + +public class StateMachineEditorViewModel : ReactiveObject +{ + public StateMachineEditorViewModel(IStateMachineEditor stateMachineEditor) + { + _stateMachineEditor = stateMachineEditor; + + SaveCommand = ReactiveCommand.Create(Save); + + stateMachineEditor + .StateMachine + .Subscribe(x => + { + StateMachine = x; + Name = x.Name; + }); + } + + private readonly IStateMachineEditor _stateMachineEditor; + + public ICommand SaveCommand { get; } + + + [Reactive] private StateMachine? StateMachine { get; set; } + [Reactive] public string Name { get; set; } + + private void Save() + { + if (StateMachine == null) return; + var newStateMachine = StateMachine with { Name = Name }; + _stateMachineEditor.Update(newStateMachine); + } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index fd2a09c..98b5aa6 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -3,19 +3,20 @@ using System.Numerics; using System.Reactive; using System.Windows.Input; -using Avalonia.Controls; using DynamicData; using ReactiveUI.Fody.Helpers; using Stater.Models; using ReactiveUI; +using Stater.Models.Editors; namespace Stater.ViewModels; public class MainWindowViewModel : ReactiveObject { - public MainWindowViewModel(IProjectManager projectManager) + public MainWindowViewModel(IProjectManager projectManager, IEditorManager editorManager) { _projectManager = projectManager; + _editorManager = editorManager; projectManager .StateMachines @@ -39,6 +40,7 @@ public MainWindowViewModel(IProjectManager projectManager) } private readonly IProjectManager _projectManager; + private readonly IEditorManager _editorManager; [Reactive] public Project Project { get; private set; } @@ -50,7 +52,9 @@ public StateMachine StateMachine set { this.RaiseAndSetIfChanged(ref _stateMachine, value); - _projectManager.OpenStateMachine(value.Guid); + var openStateMachine = _projectManager.OpenStateMachine(value.Guid); + if (openStateMachine != null) + _editorManager.DoSelectStateMachine(openStateMachine); } } @@ -78,7 +82,8 @@ private void NewProject() private void NewStateMachine() { - _projectManager.CreateStateMachine(); + var stateMachine = _projectManager.CreateStateMachine(); + _editorManager.DoSelectStateMachine(stateMachine); } private void NewState() @@ -94,6 +99,7 @@ private void OnStateClicked(State state) { var selectedState = _projectManager.GetState(state.Guid); State = selectedState ?? null; + if (State != null) _editorManager.DoSelectState(State); } private void UpdateStateCoords(Vector2 coords) diff --git a/src/Stater/Views/Editors/MainEditor.axaml b/src/Stater/Views/Editors/MainEditor.axaml new file mode 100644 index 0000000..b32b777 --- /dev/null +++ b/src/Stater/Views/Editors/MainEditor.axaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Stater/Views/Editors/MainEditor.axaml.cs b/src/Stater/Views/Editors/MainEditor.axaml.cs new file mode 100644 index 0000000..c8db1ee --- /dev/null +++ b/src/Stater/Views/Editors/MainEditor.axaml.cs @@ -0,0 +1,18 @@ +using Avalonia.Controls; +using Splat; +using Stater.Models.Editors; +using Stater.ViewModels.Editors; + +namespace Stater.Views.Editors; + +public partial class MainEditor : UserControl +{ + public MainEditor() + { + InitializeComponent(); + var editorManager = Locator.Current.GetService(); + DataContext = new MainEditorViewModel( + editorManager! + ); + } +} \ No newline at end of file diff --git a/src/Stater/Views/Editors/StateEditor.axaml.cs b/src/Stater/Views/Editors/StateEditor.axaml.cs index 1a4bb82..1f81328 100644 --- a/src/Stater/Views/Editors/StateEditor.axaml.cs +++ b/src/Stater/Views/Editors/StateEditor.axaml.cs @@ -1,7 +1,7 @@ -using System; -using Avalonia; using Avalonia.Controls; -using Avalonia.Markup.Xaml; +using Splat; +using Stater.Models.Editors; +using Stater.ViewModels.Editors; namespace Stater.Views.Editors; @@ -10,5 +10,9 @@ public partial class StateEditor : UserControl public StateEditor() { InitializeComponent(); + var stateEditor = Locator.Current.GetService(); + DataContext = new StateEditorViewModel( + stateEditor! + ); } } \ No newline at end of file diff --git a/src/Stater/Views/Editors/StateMachineEditor.axaml b/src/Stater/Views/Editors/StateMachineEditor.axaml new file mode 100644 index 0000000..6b6040d --- /dev/null +++ b/src/Stater/Views/Editors/StateMachineEditor.axaml @@ -0,0 +1,16 @@ + + + Name: + + + + \ No newline at end of file diff --git a/src/Stater/Views/Editors/StateMachineEditor.axaml.cs b/src/Stater/Views/Editors/StateMachineEditor.axaml.cs new file mode 100644 index 0000000..f6dfeba --- /dev/null +++ b/src/Stater/Views/Editors/StateMachineEditor.axaml.cs @@ -0,0 +1,21 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Splat; +using Stater.Models; +using Stater.Models.Editors; +using Stater.ViewModels.Editors; + +namespace Stater.Views.Editors; + +public partial class StateMachineEditor : UserControl +{ + public StateMachineEditor() + { + InitializeComponent(); + var stateMachineEditor = Locator.Current.GetService(); + DataContext = new StateMachineEditorViewModel( + stateMachineEditor! + ); + } +} \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml index feb2507..28c3c0e 100644 --- a/src/Stater/Views/MainWindow.axaml +++ b/src/Stater/Views/MainWindow.axaml @@ -49,11 +49,10 @@ - - + DockPanel.Dock="Right" /> From 0391de2773fb8b023aec295133e627976a7e9d9a Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 18 Nov 2024 20:33:50 +0300 Subject: [PATCH 17/69] Add transitions rendering --- src/Stater/Models/Editors/IStateEditor.cs | 2 +- .../Models/Editors/IStateMachineEditor.cs | 1 - src/Stater/Models/IProjectManager.cs | 3 + src/Stater/Models/StateMachine.cs | 3 +- src/Stater/Models/Transition.cs | 1 + src/Stater/Models/impl/ProjectManager.cs | 36 ++++- src/Stater/Stater.csproj | 8 ++ .../Editors/StateEditorViewModel.cs | 46 ++++++- src/Stater/ViewModels/MainWindowViewModel.cs | 32 ++++- src/Stater/Views/Board/BoardCanvas.axaml | 62 +++++++++ src/Stater/Views/Board/BoardCanvas.axaml.cs | 126 ++++++++++++++++++ src/Stater/Views/Editors/StateEditor.axaml | 80 ++++++++--- src/Stater/Views/Editors/StateEditor.axaml.cs | 7 +- src/Stater/Views/MainWindow.axaml | 126 +++++++----------- src/Stater/Views/MainWindow.axaml.cs | 107 --------------- 15 files changed, 429 insertions(+), 211 deletions(-) create mode 100644 src/Stater/Views/Board/BoardCanvas.axaml create mode 100644 src/Stater/Views/Board/BoardCanvas.axaml.cs diff --git a/src/Stater/Models/Editors/IStateEditor.cs b/src/Stater/Models/Editors/IStateEditor.cs index 10ecf0f..5db1f33 100644 --- a/src/Stater/Models/Editors/IStateEditor.cs +++ b/src/Stater/Models/Editors/IStateEditor.cs @@ -7,5 +7,5 @@ public interface IStateEditor IObservable State { get; } void DoSelect(State state); - void Update(State stateMachine); + void Update(State state); } \ No newline at end of file diff --git a/src/Stater/Models/Editors/IStateMachineEditor.cs b/src/Stater/Models/Editors/IStateMachineEditor.cs index a743615..a960ccc 100644 --- a/src/Stater/Models/Editors/IStateMachineEditor.cs +++ b/src/Stater/Models/Editors/IStateMachineEditor.cs @@ -7,6 +7,5 @@ public interface IStateMachineEditor IObservable StateMachine { get; } void DoSelect(StateMachine stateMachine); - void Update(StateMachine stateMachine); } \ No newline at end of file diff --git a/src/Stater/Models/IProjectManager.cs b/src/Stater/Models/IProjectManager.cs index dcf4859..3c77f28 100644 --- a/src/Stater/Models/IProjectManager.cs +++ b/src/Stater/Models/IProjectManager.cs @@ -19,4 +19,7 @@ public interface IProjectManager State? CreateState(); State? GetState(Guid guid); void UpdateState(State state); + + Transition? CreateTransition(State start, State end); + void RemoveTransition(Guid guid); } \ No newline at end of file diff --git a/src/Stater/Models/StateMachine.cs b/src/Stater/Models/StateMachine.cs index 73e6f07..9a748a8 100644 --- a/src/Stater/Models/StateMachine.cs +++ b/src/Stater/Models/StateMachine.cs @@ -6,5 +6,6 @@ namespace Stater.Models; public record StateMachine( Guid Guid, string Name, - List States + List States, + List Transitions ); \ No newline at end of file diff --git a/src/Stater/Models/Transition.cs b/src/Stater/Models/Transition.cs index 8be8a97..ff9e802 100644 --- a/src/Stater/Models/Transition.cs +++ b/src/Stater/Models/Transition.cs @@ -3,6 +3,7 @@ namespace Stater.Models; public record Transition( + Guid Guid, string Name, Guid Start, Guid End diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index 27dd26f..30a85d4 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -60,7 +60,8 @@ public StateMachine CreateStateMachine() var stateMachine = new StateMachine( Guid: Guid.NewGuid(), Name: "StateMachine " + _stateMachines.Count, - States: new List() + States: new List(), + Transitions: new List() ); UpdateStateMachine(stateMachine); return stateMachine; @@ -112,4 +113,37 @@ public void UpdateState(State state) }; UpdateStateMachine(newStateMachine); } + + public Transition? CreateTransition(State start, State end) + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine == null) return null; + Transition transition = new( + Guid: Guid.NewGuid(), + Name: "State", + Start: start.Guid, + End: end.Guid + ); + var newStateMachine = currentStateMachine with + { + Transitions = new List(currentStateMachine.Transitions) + { + transition + } + }; + UpdateStateMachine(newStateMachine); + return transition; + } + + public void RemoveTransition(Guid guid) + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine == null) return; + var transitions = currentStateMachine.Transitions.Where(el => el.Guid != guid); + var newStateMachine = currentStateMachine with + { + Transitions = new List(transitions) + }; + UpdateStateMachine(newStateMachine); + } } \ No newline at end of file diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index 1002448..6e6a158 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -31,5 +31,13 @@ MainEditor.axaml Code + + BoardCanvas.axaml + Code + + + + + diff --git a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs index de65f59..77aa77d 100644 --- a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Reactive; using System.Windows.Input; using ReactiveUI; using ReactiveUI.Fody.Helpers; @@ -9,9 +12,10 @@ namespace Stater.ViewModels.Editors; public class StateEditorViewModel : ReactiveObject { - public StateEditorViewModel(IStateEditor stateEditor) + public StateEditorViewModel(IStateEditor stateEditor, IProjectManager projectManager) { _stateEditor = stateEditor; + _projectManager = projectManager; SaveCommand = ReactiveCommand.Create(Save); @@ -24,26 +28,56 @@ public StateEditorViewModel(IStateEditor stateEditor) Description = x.Description; Type = x.Type.ToString(); }); + + projectManager + .StateMachine + .Subscribe(x => + { + AllStates = x.States; + Transitions = + x.Transitions.FindAll(y => State != null && (y.Start == State.Guid || y.End == State.Guid)); + } + ); + + AddTransitionCommand = ReactiveCommand.Create(AddTransition); + RemoveTransitionCommand = ReactiveCommand.Create(RemoveTransition); } private readonly IStateEditor _stateEditor; + private readonly IProjectManager _projectManager; public ICommand SaveCommand { get; } + public ReactiveCommand AddTransitionCommand { get; } + public ReactiveCommand RemoveTransitionCommand { get; } + [Reactive] private State? State { get; set; } [Reactive] public string Name { get; set; } [Reactive] public string Description { get; set; } [Reactive] public string Type { get; set; } + [Reactive] public List AllStates { get; set; } + [Reactive] public List Transitions { get; set; } + + private void AddTransition(State state) + { + Console.WriteLine("Add"); + if (State == null) return; + _projectManager.CreateTransition(State, state); + } + + private void RemoveTransition(Transition transition) + { + _projectManager.RemoveTransition(transition.Guid); + } + private void Save() { if (State == null) return; var tryParse = Enum.TryParse(Type, out StateType type); - if (tryParse) - { - var newStateMachine = State with { Name = Name, Description = Description, Type = type }; - _stateEditor.Update(newStateMachine); - } + if (!tryParse) return; + var newStateMachine = State with { Name = Name, Description = Description, Type = type }; + _stateEditor.Update(newStateMachine); } } \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index 98b5aa6..8c03891 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -1,8 +1,11 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Linq; using System.Numerics; using System.Reactive; using System.Windows.Input; +using Avalonia; using DynamicData; using ReactiveUI.Fody.Helpers; using Stater.Models; @@ -11,6 +14,15 @@ namespace Stater.ViewModels; +public record AssociateTransition +( + State? Start, + Point StartPoint, + State? End, + Point EndPoint, + Transition Transition +); + public class MainWindowViewModel : ReactiveObject { public MainWindowViewModel(IProjectManager projectManager, IEditorManager editorManager) @@ -29,7 +41,23 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor projectManager .StateMachine - .Subscribe(x => StateMachine = x); + .Subscribe(x => + { + StateMachine = x; + Transitions = x.Transitions.Select(y => + { + var startState = x.States.Find(s => s.Guid == y.Start); + var endState = x.States.Find(s => s.Guid == y.End); + return new AssociateTransition( + Transition: y, + StartPoint: new Point(startState.X, startState.Y), + EndPoint: new Point(endState.X, endState.Y), + Start: startState, + End: endState + ); + } + ).ToList(); + }); NewCommand = ReactiveCommand.Create(NewProject); OpenCommand = ReactiveCommand.Create(OpenProject); @@ -58,6 +86,8 @@ public StateMachine StateMachine } } + [Reactive] public List Transitions { get; set; } + [Reactive] public State? State { get; private set; } private readonly ReadOnlyObservableCollection _stateMachines; diff --git a/src/Stater/Views/Board/BoardCanvas.axaml b/src/Stater/Views/Board/BoardCanvas.axaml new file mode 100644 index 0000000..51a6e71 --- /dev/null +++ b/src/Stater/Views/Board/BoardCanvas.axaml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Stater/Views/Board/BoardCanvas.axaml.cs b/src/Stater/Views/Board/BoardCanvas.axaml.cs new file mode 100644 index 0000000..c069945 --- /dev/null +++ b/src/Stater/Views/Board/BoardCanvas.axaml.cs @@ -0,0 +1,126 @@ +using System; +using System.Numerics; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Shapes; +using Avalonia.Input; +using Avalonia.Media; +using Stater.Models; +using Stater.ViewModels; + +namespace Stater.Views.Board; + +public partial class BoardCanvas : UserControl +{ + public BoardCanvas() + { + InitializeComponent(); + } + + private const double ScaleFactor = 1.01; + private double scale = 1; + + private const double TranslateXFactor = 1; + private double x; + private double _x; + + private const double TranslateYFactor = 1; + private double y; + private double _y; + + private bool pressed; + + private const double StateTranslateXFactor = 1; + private double stateX; + private double _stateX; + + private const double StateTranslateYFactor = 1; + private double stateY; + private double _stateY; + private bool statePressed; + + private void updateCanvasMatrix(Canvas canvas) + { + canvas.RenderTransform = + new MatrixTransform(Matrix.CreateScale(scale, scale) * Matrix.CreateTranslation(x, y)); + } + + private void InputElement_OnPointerWheelChanged(object? sender, PointerWheelEventArgs e) + { + if (sender == null) return; + if (e.Delta.Y >= 0) + { + scale *= ScaleFactor; + } + else + { + scale /= ScaleFactor; + } + + updateCanvasMatrix((Canvas)sender); + } + + private void InputElement_OnPointerPressed(object? sender, PointerPressedEventArgs e) + { + if (statePressed) return; + pressed = true; + var point = e.GetCurrentPoint(sender as Control); + _x = point.Position.X; + _y = point.Position.Y; + } + + private void InputElement_OnPointerMoved(object? sender, PointerEventArgs e) + { + if (!pressed || sender == null) return; + var point = e.GetCurrentPoint(sender as Control); + var positionX = point.Position.X; + var positionY = point.Position.Y; + x -= (_x - positionX) * TranslateXFactor; + y -= (_y - positionY) * TranslateYFactor; + updateCanvasMatrix((Canvas)sender); + } + + private void InputElement_OnPointerReleased(object? sender, PointerReleasedEventArgs e) + { + pressed = false; + } + + private void State_OnPointerPressed(object? sender, PointerPressedEventArgs e) + { + var rectangle = (Rectangle)sender; + if (rectangle?.DataContext is State state) + { + var context = (MainWindowViewModel)DataContext; + context?.StateClickCommand.Execute(state).Subscribe(); + statePressed = true; + + var canvas = TheCanvasPanel; + var point = e.GetCurrentPoint(canvas); + stateX = 0; + stateY = 0; + _stateX = point.Position.X; + _stateY = point.Position.Y; + } + } + + private void State_OnPointerMoved(object? sender, PointerEventArgs e) + { + if (!statePressed || sender == null) return; + var rectangle = (Rectangle)sender!; + var canvas = TheCanvasPanel; + var point = e.GetCurrentPoint(canvas); + var positionX = point.Position.X; + var positionY = point.Position.Y; + stateX = (positionX - _stateX) * StateTranslateXFactor / scale; + stateY = (positionY - _stateY) * StateTranslateYFactor / scale; + rectangle.RenderTransform = + new MatrixTransform(Matrix.CreateTranslation(stateX, stateY)); + } + + private void State_OnPointerReleased(object? sender, PointerReleasedEventArgs e) + { + statePressed = false; + var context = (MainWindowViewModel)DataContext; + context?.UpdateStateCoordsCommand.Execute(new Vector2((float)stateX, (float)stateY)).Subscribe(); + } +} \ No newline at end of file diff --git a/src/Stater/Views/Editors/StateEditor.axaml b/src/Stater/Views/Editors/StateEditor.axaml index 02c5e8d..6fd715b 100644 --- a/src/Stater/Views/Editors/StateEditor.axaml +++ b/src/Stater/Views/Editors/StateEditor.axaml @@ -6,19 +6,69 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Stater.Views.Editors.StateEditor" x:DataType="vm:StateEditorViewModel"> - - Name: - - Description: - - Type: - - Common - Start - End - - + + + Name: + + Description: + + Type: + + Common + Start + End + + + + + Transitions: + + + + + + + + + + + + + + + + + + + + + + + Include: + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Stater/Views/Editors/StateEditor.axaml.cs b/src/Stater/Views/Editors/StateEditor.axaml.cs index 1f81328..ccc59ea 100644 --- a/src/Stater/Views/Editors/StateEditor.axaml.cs +++ b/src/Stater/Views/Editors/StateEditor.axaml.cs @@ -1,5 +1,8 @@ +using System; using Avalonia.Controls; +using Avalonia.Input; using Splat; +using Stater.Models; using Stater.Models.Editors; using Stater.ViewModels.Editors; @@ -11,8 +14,10 @@ public StateEditor() { InitializeComponent(); var stateEditor = Locator.Current.GetService(); + var projectManager = Locator.Current.GetService(); DataContext = new StateEditorViewModel( - stateEditor! + stateEditor!, + projectManager! ); } } \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml index 28c3c0e..2f00fbd 100644 --- a/src/Stater/Views/MainWindow.axaml +++ b/src/Stater/Views/MainWindow.axaml @@ -2,9 +2,9 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="using:Stater.ViewModels" xmlns:editors="using:Stater.Views.Editors" + xmlns:board="using:Stater.Views.Board" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:models="clr-namespace:Stater.Models" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Stater.Views.MainWindow" x:DataType="vm:MainWindowViewModel" @@ -17,86 +17,58 @@ a - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml.cs b/src/Stater/Views/MainWindow.axaml.cs index f6f38da..91373e6 100644 --- a/src/Stater/Views/MainWindow.axaml.cs +++ b/src/Stater/Views/MainWindow.axaml.cs @@ -16,111 +16,4 @@ public MainWindow() { InitializeComponent(); } - - private const double ScaleFactor = 1.01; - private double scale = 1; - - private const double TranslateXFactor = 1; - private double x; - private double _x; - - private const double TranslateYFactor = 1; - private double y; - private double _y; - - private bool pressed; - - private const double StateTranslateXFactor = 1; - private double stateX; - private double _stateX; - - private const double StateTranslateYFactor = 1; - private double stateY; - private double _stateY; - private bool statePressed; - - private void updateCanvasMatrix(Canvas canvas) - { - canvas.RenderTransform = - new MatrixTransform(Matrix.CreateScale(scale, scale) * Matrix.CreateTranslation(x, y)); - } - - private void InputElement_OnPointerWheelChanged(object? sender, PointerWheelEventArgs e) - { - if (sender == null) return; - if (e.Delta.Y >= 0) - { - scale *= ScaleFactor; - } - else - { - scale /= ScaleFactor; - } - - updateCanvasMatrix((Canvas)sender); - } - - private void InputElement_OnPointerPressed(object? sender, PointerPressedEventArgs e) - { - if (statePressed) return; - pressed = true; - var point = e.GetCurrentPoint(sender as Control); - _x = point.Position.X; - _y = point.Position.Y; - } - - private void InputElement_OnPointerMoved(object? sender, PointerEventArgs e) - { - if (!pressed || sender == null) return; - var point = e.GetCurrentPoint(sender as Control); - var positionX = point.Position.X; - var positionY = point.Position.Y; - x -= (_x - positionX) * TranslateXFactor; - y -= (_y - positionY) * TranslateYFactor; - updateCanvasMatrix((Canvas)sender); - } - - private void InputElement_OnPointerReleased(object? sender, PointerReleasedEventArgs e) - { - pressed = false; - } - - private void State_OnPointerPressed(object? sender, PointerPressedEventArgs e) - { - var rectangle = (Rectangle)sender; - if (rectangle?.DataContext is State state) - { - var context = (MainWindowViewModel)DataContext; - context?.StateClickCommand.Execute(state).Subscribe(); - statePressed = true; - - var canvas = TheCanvasPanel; - var point = e.GetCurrentPoint(canvas); - stateX = 0; - stateY = 0; - _stateX = point.Position.X; - _stateY = point.Position.Y; - } - } - - private void State_OnPointerMoved(object? sender, PointerEventArgs e) - { - if (!statePressed || sender == null) return; - var rectangle = (Rectangle)sender!; - var canvas = TheCanvasPanel; - var point = e.GetCurrentPoint(canvas); - var positionX = point.Position.X; - var positionY = point.Position.Y; - stateX = (positionX - _stateX) * StateTranslateXFactor / scale; - stateY = (positionY - _stateY) * StateTranslateYFactor / scale; - rectangle.RenderTransform = - new MatrixTransform(Matrix.CreateTranslation(stateX, stateY)); - } - - private void State_OnPointerReleased(object? sender, PointerReleasedEventArgs e) - { - statePressed = false; - var context = (MainWindowViewModel)DataContext; - context?.UpdateStateCoordsCommand.Execute(new Vector2((float)stateX, (float)stateY)).Subscribe(); - } } \ No newline at end of file From 49a730483a31dc4de402b074445e6a7120629a05 Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 19 Nov 2024 20:11:00 +0300 Subject: [PATCH 18/69] Fix TheCanvas --- src/Stater/Models/AssociateTransition.cs | 11 ++ src/Stater/Stater.csproj | 4 - .../ViewModels/Board/BoardCanvasViewModel.cs | 72 ++++++++++ src/Stater/ViewModels/MainWindowViewModel.cs | 62 +-------- src/Stater/Views/Board/BoardCanvas.axaml | 62 ++++----- src/Stater/Views/Board/BoardCanvas.axaml.cs | 123 +++++++++++++----- 6 files changed, 206 insertions(+), 128 deletions(-) create mode 100644 src/Stater/Models/AssociateTransition.cs create mode 100644 src/Stater/ViewModels/Board/BoardCanvasViewModel.cs diff --git a/src/Stater/Models/AssociateTransition.cs b/src/Stater/Models/AssociateTransition.cs new file mode 100644 index 0000000..a8010f5 --- /dev/null +++ b/src/Stater/Models/AssociateTransition.cs @@ -0,0 +1,11 @@ +using Avalonia; + +namespace Stater.Models; + +public record AssociateTransition( + State? Start, + Point StartPoint, + State? End, + Point EndPoint, + Transition Transition +); \ No newline at end of file diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index 6e6a158..c23b85f 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -36,8 +36,4 @@ Code - - - - diff --git a/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs b/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs new file mode 100644 index 0000000..6bc8ef9 --- /dev/null +++ b/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Reactive; +using Avalonia; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Stater.Models; +using Stater.Models.Editors; + +namespace Stater.ViewModels.Board; + +public class BoardCanvasViewModel : ReactiveObject +{ + public BoardCanvasViewModel(IProjectManager projectManager, IEditorManager editorManager) + { + _projectManager = projectManager; + _editorManager = editorManager; + + projectManager + .StateMachine + .Subscribe(x => + { + StateMachine = x; + Transitions = x.Transitions.Select(y => + { + var startState = x.States.Find(s => s.Guid == y.Start); + var endState = x.States.Find(s => s.Guid == y.End); + return new AssociateTransition( + Transition: y, + StartPoint: new Point(startState.X, startState.Y), + EndPoint: new Point(endState.X, endState.Y), + Start: startState, + End: endState + ); + } + ).ToList(); + }); + + StateClickCommand = ReactiveCommand.Create(OnStateClicked); + UpdateStateCoordsCommand = ReactiveCommand.Create(UpdateStateCoords); + } + + private readonly IProjectManager _projectManager; + private readonly IEditorManager _editorManager; + + [Reactive] public List Transitions { get; set; } + [Reactive] public State? State { get; private set; } + [Reactive] public StateMachine StateMachine { get; private set; } + + public ReactiveCommand StateClickCommand { get; } + public ReactiveCommand UpdateStateCoordsCommand { get; } + + private void OnStateClicked(State state) + { + var selectedState = _projectManager.GetState(state.Guid); + State = selectedState ?? null; + if (State != null) _editorManager.DoSelectState(State); + } + + private void UpdateStateCoords(Vector2 coords) + { + if (State == null) return; + var newState = State with + { + X = State.X + coords.X, + Y = State.Y + coords.Y + }; + _projectManager.UpdateState(newState); + } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index 8c03891..ec6bd22 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -1,11 +1,6 @@ using System; -using System.Collections.Generic; using System.Collections.ObjectModel; -using System.Linq; -using System.Numerics; -using System.Reactive; using System.Windows.Input; -using Avalonia; using DynamicData; using ReactiveUI.Fody.Helpers; using Stater.Models; @@ -14,15 +9,6 @@ namespace Stater.ViewModels; -public record AssociateTransition -( - State? Start, - Point StartPoint, - State? End, - Point EndPoint, - Transition Transition -); - public class MainWindowViewModel : ReactiveObject { public MainWindowViewModel(IProjectManager projectManager, IEditorManager editorManager) @@ -41,30 +27,12 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor projectManager .StateMachine - .Subscribe(x => - { - StateMachine = x; - Transitions = x.Transitions.Select(y => - { - var startState = x.States.Find(s => s.Guid == y.Start); - var endState = x.States.Find(s => s.Guid == y.End); - return new AssociateTransition( - Transition: y, - StartPoint: new Point(startState.X, startState.Y), - EndPoint: new Point(endState.X, endState.Y), - Start: startState, - End: endState - ); - } - ).ToList(); - }); + .Subscribe(x => { StateMachine = x; }); NewCommand = ReactiveCommand.Create(NewProject); OpenCommand = ReactiveCommand.Create(OpenProject); NewStateMachineCommand = ReactiveCommand.Create(NewStateMachine); NewStateCommand = ReactiveCommand.Create(NewState); - StateClickCommand = ReactiveCommand.Create(OnStateClicked); - UpdateStateCoordsCommand = ReactiveCommand.Create(UpdateStateCoords); } private readonly IProjectManager _projectManager; @@ -86,9 +54,6 @@ public StateMachine StateMachine } } - [Reactive] public List Transitions { get; set; } - - [Reactive] public State? State { get; private set; } private readonly ReadOnlyObservableCollection _stateMachines; public ReadOnlyObservableCollection StateMachines => _stateMachines; @@ -97,8 +62,6 @@ public StateMachine StateMachine public ICommand OpenCommand { get; } public ICommand NewStateMachineCommand { get; } public ICommand NewStateCommand { get; } - public ReactiveCommand StateClickCommand { get; } - public ReactiveCommand UpdateStateCoordsCommand { get; } private void OpenProject() @@ -119,27 +82,6 @@ private void NewStateMachine() private void NewState() { var state = _projectManager.CreateState(); - if (state != null) - { - State = state; - } - } - - private void OnStateClicked(State state) - { - var selectedState = _projectManager.GetState(state.Guid); - State = selectedState ?? null; - if (State != null) _editorManager.DoSelectState(State); - } - - private void UpdateStateCoords(Vector2 coords) - { - if (State == null) return; - var newState = State with - { - X = State.X + coords.X, - Y = State.Y + coords.Y - }; - _projectManager.UpdateState(newState); + if (state != null) _editorManager.DoSelectState(state); } } \ No newline at end of file diff --git a/src/Stater/Views/Board/BoardCanvas.axaml b/src/Stater/Views/Board/BoardCanvas.axaml index 51a6e71..91f3d85 100644 --- a/src/Stater/Views/Board/BoardCanvas.axaml +++ b/src/Stater/Views/Board/BoardCanvas.axaml @@ -4,19 +4,19 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Stater.Views.Board.BoardCanvas" - x:DataType="vm:MainWindowViewModel" - xmlns:vm="using:Stater.ViewModels" + xmlns:vm="using:Stater.ViewModels.Board" + x:DataType="vm:BoardCanvasViewModel" xmlns:models="clr-namespace:Stater.Models"> - + - + @@ -29,31 +29,31 @@ + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + diff --git a/src/Stater/Views/Board/BoardCanvas.axaml.cs b/src/Stater/Views/Board/BoardCanvas.axaml.cs index c069945..2fc1053 100644 --- a/src/Stater/Views/Board/BoardCanvas.axaml.cs +++ b/src/Stater/Views/Board/BoardCanvas.axaml.cs @@ -5,28 +5,29 @@ using Avalonia.Controls.Shapes; using Avalonia.Input; using Avalonia.Media; +using Splat; using Stater.Models; -using Stater.ViewModels; +using Stater.Models.Editors; +using Stater.ViewModels.Board; namespace Stater.Views.Board; public partial class BoardCanvas : UserControl { - public BoardCanvas() - { - InitializeComponent(); - } - private const double ScaleFactor = 1.01; private double scale = 1; + private const double MaxScale = 3; + private const double MinScale = 0.5; private const double TranslateXFactor = 1; private double x; private double _x; + private double startX; private const double TranslateYFactor = 1; private double y; private double _y; + private double startY; private bool pressed; @@ -39,45 +40,103 @@ public BoardCanvas() private double _stateY; private bool statePressed; - private void updateCanvasMatrix(Canvas canvas) + private const int GridLineRangeX = 40; + private const int GridLineRangeY = 40; + private readonly Color gridLineColor = Color.Parse("Gray"); + private const int GridLineSize = 1; + + public BoardCanvas() + { + InitializeComponent(); + var projectManager = Locator.Current.GetService(); + var editorManager = Locator.Current.GetService(); + DataContext = new BoardCanvasViewModel(projectManager!, editorManager!); + drawGrid(); + } + + private void drawGrid() + { + var canvas = TheCanvas; + + var height = canvas.Height; + var width = canvas.Width; + + for (var i = GridLineRangeX; i < width; i += GridLineRangeX) + { + Line line = new() + { + StartPoint = new Point(i, 0), + EndPoint = new Point(i, height), + Stroke = new SolidColorBrush + { + Color = gridLineColor + }, + StrokeThickness = GridLineSize, + ZIndex=-1 + }; + canvas.Children.Add(line); + } + + for (var i = GridLineRangeY; i < height; i += GridLineRangeY) + { + Line line = new() + { + StartPoint = new Point(0, i), + EndPoint = new Point(width, i), + Stroke = new SolidColorBrush + { + Color = gridLineColor + }, + StrokeThickness = GridLineSize, + ZIndex=-1 + }; + canvas.Children.Add(line); + } + } + + private void UpdateCanvasMatrix() { - canvas.RenderTransform = + // TODO: Check scale and x, y ranges + + TheCanvas.RenderTransform = new MatrixTransform(Matrix.CreateScale(scale, scale) * Matrix.CreateTranslation(x, y)); } private void InputElement_OnPointerWheelChanged(object? sender, PointerWheelEventArgs e) { - if (sender == null) return; - if (e.Delta.Y >= 0) + if (e.Delta.Y >= 0 && scale < MaxScale) { scale *= ScaleFactor; + UpdateCanvasMatrix(); } - else + else if (scale > MinScale) { scale /= ScaleFactor; + UpdateCanvasMatrix(); } - updateCanvasMatrix((Canvas)sender); } private void InputElement_OnPointerPressed(object? sender, PointerPressedEventArgs e) { if (statePressed) return; pressed = true; - var point = e.GetCurrentPoint(sender as Control); + var point = e.GetCurrentPoint(TheCanvasPanel); _x = point.Position.X; _y = point.Position.Y; + startX = x; + startY = y; } private void InputElement_OnPointerMoved(object? sender, PointerEventArgs e) { if (!pressed || sender == null) return; - var point = e.GetCurrentPoint(sender as Control); + var point = e.GetCurrentPoint(TheCanvasPanel); var positionX = point.Position.X; var positionY = point.Position.Y; - x -= (_x - positionX) * TranslateXFactor; - y -= (_y - positionY) * TranslateYFactor; - updateCanvasMatrix((Canvas)sender); + x = startX - (_x - positionX) * TranslateXFactor; + y = startY - (_y - positionY) * TranslateYFactor; + UpdateCanvasMatrix(); } private void InputElement_OnPointerReleased(object? sender, PointerReleasedEventArgs e) @@ -87,26 +146,24 @@ private void InputElement_OnPointerReleased(object? sender, PointerReleasedEvent private void State_OnPointerPressed(object? sender, PointerPressedEventArgs e) { - var rectangle = (Rectangle)sender; - if (rectangle?.DataContext is State state) - { - var context = (MainWindowViewModel)DataContext; - context?.StateClickCommand.Execute(state).Subscribe(); - statePressed = true; - - var canvas = TheCanvasPanel; - var point = e.GetCurrentPoint(canvas); - stateX = 0; - stateY = 0; - _stateX = point.Position.X; - _stateY = point.Position.Y; - } + var rectangle = (Control)sender; + if (rectangle?.DataContext is not State state) return; + var context = (BoardCanvasViewModel)DataContext; + context?.StateClickCommand.Execute(state).Subscribe(); + statePressed = true; + + var canvas = TheCanvasPanel; + var point = e.GetCurrentPoint(canvas); + stateX = 0; + stateY = 0; + _stateX = point.Position.X; + _stateY = point.Position.Y; } private void State_OnPointerMoved(object? sender, PointerEventArgs e) { if (!statePressed || sender == null) return; - var rectangle = (Rectangle)sender!; + var rectangle = (Control)sender!; var canvas = TheCanvasPanel; var point = e.GetCurrentPoint(canvas); var positionX = point.Position.X; @@ -120,7 +177,7 @@ private void State_OnPointerMoved(object? sender, PointerEventArgs e) private void State_OnPointerReleased(object? sender, PointerReleasedEventArgs e) { statePressed = false; - var context = (MainWindowViewModel)DataContext; + var context = (BoardCanvasViewModel)DataContext; context?.UpdateStateCoordsCommand.Execute(new Vector2((float)stateX, (float)stateY)).Subscribe(); } } \ No newline at end of file From 335598a34a59cbaddf6ad928b66432708ca1ddd1 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 24 Nov 2024 16:05:12 +0300 Subject: [PATCH 19/69] Structure for variables and conditions for executor --- SpinVeriff/SpinPlugin.cs | 3 +++ StaterV/ButtonPlugin.cs | 8 +++---- src/Stater/Models/Condition.cs | 22 +++++++++++++++++++ src/Stater/Models/Executor/ExecuteLog.cs | 5 +++++ src/Stater/Models/Executor/IExecutor.cs | 14 ++++++++++++ src/Stater/Models/StateMachine.cs | 3 ++- src/Stater/Models/Transition.cs | 5 ++++- src/Stater/Models/Variable.cs | 27 ++++++++++++++++++++++++ src/Stater/Models/impl/ProjectManager.cs | 6 ++++-- src/Stater/Stater.csproj | 4 ++++ 10 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 src/Stater/Models/Condition.cs create mode 100644 src/Stater/Models/Executor/ExecuteLog.cs create mode 100644 src/Stater/Models/Executor/IExecutor.cs create mode 100644 src/Stater/Models/Variable.cs diff --git a/SpinVeriff/SpinPlugin.cs b/SpinVeriff/SpinPlugin.cs index f9a6148..f0151ae 100644 --- a/SpinVeriff/SpinPlugin.cs +++ b/SpinVeriff/SpinPlugin.cs @@ -10,6 +10,9 @@ using StaterV.PluginManager; using StaterV.StateMachine; +// TODO: practice NEED + + namespace SpinVeriff { public class SpinPlugin : ButtonPlugin diff --git a/StaterV/ButtonPlugin.cs b/StaterV/ButtonPlugin.cs index 1fb596e..e6e3b9f 100644 --- a/StaterV/ButtonPlugin.cs +++ b/StaterV/ButtonPlugin.cs @@ -1,8 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using StaterV.PluginManager; +using StaterV.PluginManager; + +// TODO: practice NEED namespace StaterV { diff --git a/src/Stater/Models/Condition.cs b/src/Stater/Models/Condition.cs new file mode 100644 index 0000000..0c6e322 --- /dev/null +++ b/src/Stater/Models/Condition.cs @@ -0,0 +1,22 @@ +using System; + +namespace Stater.Models; + +public enum ConditionType +{ + LT, // < + LE, // <= + EQ, // == + NE, // != + GT, // > + GE, // >= +} + +public abstract record Condition +{ + public record VariableCondition( + Guid VariableGuid, + ConditionType ConditionType, + Variable Variable + ) : Condition; +} \ No newline at end of file diff --git a/src/Stater/Models/Executor/ExecuteLog.cs b/src/Stater/Models/Executor/ExecuteLog.cs new file mode 100644 index 0000000..4e5859a --- /dev/null +++ b/src/Stater/Models/Executor/ExecuteLog.cs @@ -0,0 +1,5 @@ +namespace Stater.Models.Executor; + +public record ExecuteLog( + string Text +); \ No newline at end of file diff --git a/src/Stater/Models/Executor/IExecutor.cs b/src/Stater/Models/Executor/IExecutor.cs new file mode 100644 index 0000000..3417047 --- /dev/null +++ b/src/Stater/Models/Executor/IExecutor.cs @@ -0,0 +1,14 @@ +using System; + +namespace Stater.Models.Executor; + +public interface IExecutor +{ + IObservable State { get; } + IObservable Logs { get; } + + void Start(double stepTime); + void Pause(); + void Reset(); + void Step(); +} \ No newline at end of file diff --git a/src/Stater/Models/StateMachine.cs b/src/Stater/Models/StateMachine.cs index 9a748a8..6297615 100644 --- a/src/Stater/Models/StateMachine.cs +++ b/src/Stater/Models/StateMachine.cs @@ -7,5 +7,6 @@ public record StateMachine( Guid Guid, string Name, List States, - List Transitions + List Transitions, + List Variables ); \ No newline at end of file diff --git a/src/Stater/Models/Transition.cs b/src/Stater/Models/Transition.cs index ff9e802..4d43336 100644 --- a/src/Stater/Models/Transition.cs +++ b/src/Stater/Models/Transition.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using Avalonia.Animation; namespace Stater.Models; @@ -6,5 +8,6 @@ public record Transition( Guid Guid, string Name, Guid Start, - Guid End + Guid End, + Condition? Condition ); \ No newline at end of file diff --git a/src/Stater/Models/Variable.cs b/src/Stater/Models/Variable.cs new file mode 100644 index 0000000..5e6d33e --- /dev/null +++ b/src/Stater/Models/Variable.cs @@ -0,0 +1,27 @@ +using System; + +namespace Stater.Models; + +public abstract record Variable( + Guid Guid, + string Name +) +{ + public record IntVariable( + Guid Guid, + string Name, + int Value + ) : Variable(Guid, Name); + + public record StringVariable( + Guid Guid, + string Name, + string Value + ) : Variable(Guid, Name); + + public record BoolVariable( + Guid Guid, + string Name, + bool Value + ) : Variable(Guid, Name); +} \ No newline at end of file diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index 30a85d4..6b8e20b 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -61,7 +61,8 @@ public StateMachine CreateStateMachine() Guid: Guid.NewGuid(), Name: "StateMachine " + _stateMachines.Count, States: new List(), - Transitions: new List() + Transitions: new List(), + Variables: new List() ); UpdateStateMachine(stateMachine); return stateMachine; @@ -122,7 +123,8 @@ public void UpdateState(State state) Guid: Guid.NewGuid(), Name: "State", Start: start.Guid, - End: end.Guid + End: end.Guid, + Condition: null ); var newStateMachine = currentStateMachine with { diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index c23b85f..147c903 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -36,4 +36,8 @@ Code + + + + From 9c2d7e64c0b1d4da31a7042c3e84e566e08b972e Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 25 Nov 2024 23:01:18 +0300 Subject: [PATCH 20/69] Add conditions and events logics --- src/Stater/Models/Condition.cs | 27 +-- src/Stater/Models/ConditionLogic.cs | 41 ++++ src/Stater/Models/Event.cs | 21 ++ src/Stater/Models/EventLogic.cs | 37 ++++ src/Stater/Models/Executor/ExecuteLog.cs | 14 +- src/Stater/Models/Executor/IExecutor.cs | 12 +- src/Stater/Models/Executor/impl/Executor.cs | 205 ++++++++++++++++++++ src/Stater/Models/Variable.cs | 194 ++++++++++++++++-- src/Stater/Models/impl/ProjectManager.cs | 3 +- 9 files changed, 514 insertions(+), 40 deletions(-) create mode 100644 src/Stater/Models/ConditionLogic.cs create mode 100644 src/Stater/Models/Event.cs create mode 100644 src/Stater/Models/EventLogic.cs create mode 100644 src/Stater/Models/Executor/impl/Executor.cs diff --git a/src/Stater/Models/Condition.cs b/src/Stater/Models/Condition.cs index 0c6e322..04a050c 100644 --- a/src/Stater/Models/Condition.cs +++ b/src/Stater/Models/Condition.cs @@ -2,21 +2,22 @@ namespace Stater.Models; -public enum ConditionType -{ - LT, // < - LE, // <= - EQ, // == - NE, // != - GT, // > - GE, // >= -} - public abstract record Condition { public record VariableCondition( Guid VariableGuid, - ConditionType ConditionType, - Variable Variable - ) : Condition; + VariableCondition.ConditionTypeEnum ConditionType, + VariableValue Value + ) : Condition + { + public enum ConditionTypeEnum + { + Lt, // < + Le, // <= + Eq, // == + Ne, // != + Gt, // > + Ge, // >= + } + } } \ No newline at end of file diff --git a/src/Stater/Models/ConditionLogic.cs b/src/Stater/Models/ConditionLogic.cs new file mode 100644 index 0000000..b1e03f4 --- /dev/null +++ b/src/Stater/Models/ConditionLogic.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Stater.Models; + +public static class ConditionLogic +{ + private static VariableValue GetValueByVariable(Guid Guid, IDictionary variables) + { + var variable = variables.Keys.First(v => v == Guid); + return variables[variable]; + } + + public static bool Evaluate(Condition condition, IDictionary variables) + { + return condition switch + { + Condition.VariableCondition cond => EvaluateVariableCondition(cond, variables), + _ => false + }; + } + + private static bool EvaluateVariableCondition( + Condition.VariableCondition condition, + IDictionary variables + ) + { + var variableValue = GetValueByVariable(condition.VariableGuid, variables); + return condition.ConditionType switch + { + Condition.VariableCondition.ConditionTypeEnum.Lt => variableValue < condition.Value, + Condition.VariableCondition.ConditionTypeEnum.Le => variableValue <= condition.Value, + Condition.VariableCondition.ConditionTypeEnum.Eq => variableValue == condition.Value, + Condition.VariableCondition.ConditionTypeEnum.Ne => variableValue != condition.Value, + Condition.VariableCondition.ConditionTypeEnum.Gt => variableValue > condition.Value, + Condition.VariableCondition.ConditionTypeEnum.Ge => variableValue >= condition.Value, + _ => false + }; + } +} \ No newline at end of file diff --git a/src/Stater/Models/Event.cs b/src/Stater/Models/Event.cs new file mode 100644 index 0000000..f793708 --- /dev/null +++ b/src/Stater/Models/Event.cs @@ -0,0 +1,21 @@ +using System; + +namespace Stater.Models; + +public abstract record Event +{ + public record VariableMath( + Guid VariableGuid, + VariableMath.MathTypeEnum MathType, + VariableValue Value + ) : Event + { + public enum MathTypeEnum + { + Sum, // + + Sub, // - + Mul, // * + Div, // / + } + } +} \ No newline at end of file diff --git a/src/Stater/Models/EventLogic.cs b/src/Stater/Models/EventLogic.cs new file mode 100644 index 0000000..e88258e --- /dev/null +++ b/src/Stater/Models/EventLogic.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Stater.Models; + +public class EventLogic +{ + private static VariableValue GetValueByVariable(Guid guid, IDictionary variables) => + variables[variables.Keys.First(v => v == guid)]; + + public static IDictionary Evaluate(Event eEvent, IDictionary variables) + { + return eEvent switch + { + Event.VariableMath e => EvaluateVariableMath(e, variables), + _ => variables + }; + } + + private static IDictionary EvaluateVariableMath( + Event.VariableMath eEvent, + IDictionary variables + ) + { + var variableValue = GetValueByVariable(eEvent.VariableGuid, variables); + _ = eEvent.MathType switch + { + Event.VariableMath.MathTypeEnum.Sum => variables[eEvent.VariableGuid] = variableValue + eEvent.Value, + Event.VariableMath.MathTypeEnum.Sub => variables[eEvent.VariableGuid] = variableValue - eEvent.Value, + Event.VariableMath.MathTypeEnum.Mul => variables[eEvent.VariableGuid] = variableValue * eEvent.Value, + Event.VariableMath.MathTypeEnum.Div => variables[eEvent.VariableGuid] = variableValue / eEvent.Value, + _ => null + }; + return variables; + } +} \ No newline at end of file diff --git a/src/Stater/Models/Executor/ExecuteLog.cs b/src/Stater/Models/Executor/ExecuteLog.cs index 4e5859a..2601b63 100644 --- a/src/Stater/Models/Executor/ExecuteLog.cs +++ b/src/Stater/Models/Executor/ExecuteLog.cs @@ -1,5 +1,15 @@ namespace Stater.Models.Executor; + + public record ExecuteLog( - string Text -); \ No newline at end of file + string Text, + int Tab, + ExecuteLog.ExecuteLogStatusEnum ExecuteLogStatus +) +{ + public enum ExecuteLogStatusEnum + { + Info, Warning, Error + } +}; \ No newline at end of file diff --git a/src/Stater/Models/Executor/IExecutor.cs b/src/Stater/Models/Executor/IExecutor.cs index 3417047..7716066 100644 --- a/src/Stater/Models/Executor/IExecutor.cs +++ b/src/Stater/Models/Executor/IExecutor.cs @@ -1,14 +1,18 @@ using System; +using System.Collections.Generic; +using DynamicData; +using DynamicData.Binding; namespace Stater.Models.Executor; public interface IExecutor { - IObservable State { get; } - IObservable Logs { get; } + IObservable State { get; } + IObservable> Logs { get; } + IObservable?> Variables { get; } - void Start(double stepTime); - void Pause(); + void Start(int stepTime); + void Stop(); void Reset(); void Step(); } \ No newline at end of file diff --git a/src/Stater/Models/Executor/impl/Executor.cs b/src/Stater/Models/Executor/impl/Executor.cs new file mode 100644 index 0000000..7319540 --- /dev/null +++ b/src/Stater/Models/Executor/impl/Executor.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reactive.Subjects; +using System.Threading; +using DynamicData; + +namespace Stater.Models.Executor.impl; + +public class Executor : IExecutor +{ + private readonly ReplaySubject _state = new(); + public IObservable State => _state; + + private StateMachine? _stateMachine; + + private readonly SourceList _logs = new(); + public IObservable> Logs => _logs.Connect(); + + private readonly ReplaySubject?> _variables = new(); + public IObservable?> Variables => _variables; + + private readonly IProjectManager _projectManager; + + private Thread? ExecuteThread; + private bool StopExecution; + + Executor(IProjectManager projectManager) + { + _projectManager = projectManager; + } + + private void WriteLog( + string message, + int tab = 0, + ExecuteLog.ExecuteLogStatusEnum executeLogStatus = ExecuteLog.ExecuteLogStatusEnum.Info) + { + _logs.Add(new ExecuteLog(Text: message, Tab: tab, ExecuteLogStatus: executeLogStatus)); + } + + private State? GetCurrentState() + { + State? currentState = null; + var subscribe = _state.Subscribe(s => currentState = s); + subscribe.Dispose(); + return currentState; + } + + private IDictionary? GetCurrentVariables() + { + IDictionary? variables = null; + var subscribe = _variables.Subscribe(s => variables = s); + subscribe.Dispose(); + return variables; + } + + private StateMachine? GetCurrentStateMachine() + { + StateMachine? currentStateMachine = null; + var s = _projectManager.StateMachine.Subscribe(stateMachine => currentStateMachine = stateMachine); + s.Dispose(); + return currentStateMachine; + } + + public void Start(int stepTime) + { + WriteLog("Starting executing."); + if (_stateMachine == null) + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine == null) + { + WriteLog("Execution not started, State Machine not set", 0, ExecuteLog.ExecuteLogStatusEnum.Error); + return; + } + + _stateMachine = currentStateMachine; + _state.OnNext(null); + _variables.OnNext(null); + } + + WriteLog("State Machine: " + _stateMachine.Name); + + var state = GetCurrentState(); + if (state == null) + { + state = _stateMachine.States.FirstOrDefault(s => s.Type == StateType.Start); + if (state == null) + { + WriteLog("Execution not started, Start State not set", 0, ExecuteLog.ExecuteLogStatusEnum.Error); + return; + } + + _state.OnNext(state); + } + + var variables = GetCurrentVariables(); + if (variables == null) + { + WriteLog("Initializing variables"); + + variables = _stateMachine.Variables.ToDictionary(x => x.Guid, x => + { + WriteLog($"{x.Name} init with {x.StartValue}"); + return x.StartValue; + }); + _variables.OnNext(variables); + } + + WriteLog("Start State: " + state.Name); + + ExecuteThread = new Thread(() => + { + WriteLog("Execution started."); + StopExecution = false; + while (!StopExecution) + { + Step(); + Thread.Sleep(stepTime); + } + + WriteLog("Execution stopped."); + }); + ExecuteThread.Start(); + } + + public void Stop() + { + if (StopExecution) return; + WriteLog("Stopping execution"); + StopExecution = true; + } + + public void Reset() + { + StopExecution = true; + WriteLog("Reset execution"); + _state.OnNext(null); + _stateMachine = null; + } + + public void Step() + { + var state = GetCurrentState(); + if (state == null) + { + WriteLog("Step is incorrect: State is not set", 0, ExecuteLog.ExecuteLogStatusEnum.Error); + Stop(); + return; + } + + if (_stateMachine == null) + { + WriteLog("Step is incorrect: StateMachine is not set", 0, ExecuteLog.ExecuteLogStatusEnum.Error); + Stop(); + return; + } + + var variables = GetCurrentVariables(); + if (variables == null) + { + WriteLog("Step is incorrect: Variables is not set", 0, ExecuteLog.ExecuteLogStatusEnum.Error); + Stop(); + return; + } + + WriteLog("Processing state: " + state.Name + ". State Machine: " + _stateMachine.Name); + + var transitions = _stateMachine.Transitions.Where(t => t.Start == state.Guid).ToList(); + WriteLog($"Found {transitions.Count} transitions", 1); + + foreach (var transition in transitions) + { + if (transition.Condition == null) + { + WriteLog($"Transition {transition.Name} has not condition", 1); + continue; + } + + bool res; + try + { + res = ConditionLogic.Evaluate(transition.Condition, variables); + } + catch (VariableOperatorException e) + { + Console.WriteLine(e); + throw; + } + + if (res) + { + WriteLog($"Transition {transition.Name} condition is true", 1); + var newState = _stateMachine.States.First(s => s.Guid == transition.End); + _state.OnNext(newState); + return; + } + + WriteLog($"Transition {transition.Name} condition is false", 1); + } + + WriteLog("No transition was suitable", 0, ExecuteLog.ExecuteLogStatusEnum.Warning); + Stop(); + } +} \ No newline at end of file diff --git a/src/Stater/Models/Variable.cs b/src/Stater/Models/Variable.cs index 5e6d33e..564ad3a 100644 --- a/src/Stater/Models/Variable.cs +++ b/src/Stater/Models/Variable.cs @@ -1,27 +1,181 @@ using System; +using System.Linq; namespace Stater.Models; -public abstract record Variable( +public record Variable( Guid Guid, - string Name -) + string Name, + VariableValue StartValue +); + +public class VariableOperatorException(string message) : Exception(message); + +public class VariableMathException(string message) : Exception(message); + +public abstract record VariableValue { - public record IntVariable( - Guid Guid, - string Name, - int Value - ) : Variable(Guid, Name); - - public record StringVariable( - Guid Guid, - string Name, - string Value - ) : Variable(Guid, Name); - - public record BoolVariable( - Guid Guid, - string Name, - bool Value - ) : Variable(Guid, Name); + public record IntVariable(int Value) : VariableValue + { + protected override VariableValue Default() => new IntVariable(0); + + protected override bool Greater(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => Value > v.Value, + FloatVariable v => Value > v.Value, + _ => throw new VariableOperatorException("Integer must compare only with integer or float") + }; + + protected override VariableValue Sum(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => new IntVariable(Value + v.Value), + FloatVariable v => new IntVariable(Value + (int)v.Value), + _ => throw new VariableMathException("Integer must sum only with integer or float") + }; + + protected override VariableValue Sub(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => new IntVariable(Value - v.Value), + FloatVariable v => new IntVariable(Value - (int)v.Value), + _ => throw new VariableMathException("Integer must sub only with integer or float") + }; + + protected override VariableValue Mul(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => new IntVariable(Value * v.Value), + FloatVariable v => new IntVariable(Value * (int)v.Value), + StringVariable v => new StringVariable(string.Concat(Enumerable.Repeat(v.Value, Value))), + _ => throw new VariableMathException("Integer must mul only with integer, float or string") + }; + + protected override VariableValue Div(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => new IntVariable(Value / v.Value), + FloatVariable v => new IntVariable(Value / (int)v.Value), + _ => throw new VariableMathException("Integer must div only with integer or float") + }; + }; + + public record BoolVariable(bool Value) : VariableValue + { + protected override VariableValue Default() => new BoolVariable(false); + + protected override bool Greater(VariableValue otherVariableValue) + { + throw new VariableOperatorException("Bool variables not support operations: >, <, <=, >="); + } + + protected override VariableValue Sum(VariableValue otherVariableValue) + { + throw new VariableOperatorException("Bool variables not support operations: +, -, *, /"); + } + + protected override VariableValue Sub(VariableValue otherVariableValue) + { + throw new VariableOperatorException("Bool variables not support operations: +, -, *, /"); + } + + protected override VariableValue Mul(VariableValue otherVariableValue) + { + throw new VariableOperatorException("Bool variables not support operations: +, -, *, /"); + } + + protected override VariableValue Div(VariableValue otherVariableValue) + { + throw new VariableOperatorException("Bool variables not support operations: +, -, *, /"); + } + } + + public record FloatVariable(float Value) : VariableValue + { + protected override VariableValue Default() => new FloatVariable(0); + + protected override bool Greater(VariableValue otherVariableValue) => otherVariableValue switch + { + FloatVariable v => Value > v.Value, + IntVariable v => Value > v.Value, + _ => throw new VariableOperatorException("Float must compare only with integer or float") + }; + + protected override VariableValue Sum(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => new FloatVariable(Value + v.Value), + FloatVariable v => new FloatVariable(Value + v.Value), + _ => throw new VariableMathException("Float must sum only with integer or float") + }; + + protected override VariableValue Sub(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => new FloatVariable(Value - v.Value), + FloatVariable v => new FloatVariable(Value - v.Value), + _ => throw new VariableMathException("Float must sub only with integer or float") + }; + + protected override VariableValue Mul(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => new FloatVariable(Value * v.Value), + FloatVariable v => new FloatVariable(Value * v.Value), + _ => throw new VariableMathException("Float must mul only with integer or float") + }; + + protected override VariableValue Div(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => new FloatVariable(Value / v.Value), + FloatVariable v => new FloatVariable(Value / v.Value), + _ => throw new VariableMathException("Float must div only with integer or float") + }; + }; + + public record StringVariable(string Value) : VariableValue + { + protected override VariableValue Default() => new StringVariable(""); + + protected override bool Greater(VariableValue otherVariableValue) => otherVariableValue switch + { + StringVariable v => string.CompareOrdinal(Value, v.Value) > 0, + _ => throw new VariableOperatorException("String must compare only with string") + }; + + protected override VariableValue Sum(VariableValue otherVariableValue) => otherVariableValue switch + { + StringVariable v => new StringVariable(Value + v.Value), + _ => throw new VariableMathException("String must sum only with string") + }; + + protected override VariableValue Sub(VariableValue otherVariableValue) + { + throw new VariableOperatorException("String variables not support operations: +, -, *, /"); + } + + protected override VariableValue Mul(VariableValue otherVariableValue) => otherVariableValue switch + { + IntVariable v => new StringVariable(string.Concat(Enumerable.Repeat(Value, v.Value))), + _ => throw new VariableMathException("String must sum only with string") + }; + + protected override VariableValue Div(VariableValue otherVariableValue) + { + throw new VariableOperatorException("String variables not support operations /"); + } + }; + + protected abstract VariableValue Default(); + + protected abstract bool Greater(VariableValue otherVariableValue); // > + + public static bool operator >(VariableValue a, VariableValue b) => a.Greater(b); + public static bool operator >=(VariableValue a, VariableValue b) => a.Greater(b) || a == b; + public static bool operator <(VariableValue a, VariableValue b) => !(a.Greater(b) || a == b); + public static bool operator <=(VariableValue a, VariableValue b) => !a.Greater(b); + + + protected abstract VariableValue Sum(VariableValue otherVariableValue); + protected abstract VariableValue Sub(VariableValue otherVariableValue); + protected abstract VariableValue Mul(VariableValue otherVariableValue); + protected abstract VariableValue Div(VariableValue otherVariableValue); + + public static VariableValue operator +(VariableValue a, VariableValue b) => a.Sum(b); + public static VariableValue operator -(VariableValue a, VariableValue b) => a.Sub(b); + public static VariableValue operator *(VariableValue a, VariableValue b) => a.Mul(b); + public static VariableValue operator /(VariableValue a, VariableValue b) => a.Div(b); } \ No newline at end of file diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index 6b8e20b..508309e 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -26,7 +26,8 @@ internal class ProjectManager : IProjectManager private StateMachine? GetCurrentStateMachine() { StateMachine? currentStateMachine = null; - _stateMachine.Subscribe(stateMachine => currentStateMachine = stateMachine); + var s = _stateMachine.Subscribe(stateMachine => currentStateMachine = stateMachine); + s.Dispose(); return currentStateMachine; } From 65ad60b408941e1b71cba74ea65df35f2a043adc Mon Sep 17 00:00:00 2001 From: phoenix Date: Wed, 27 Nov 2024 19:55:55 +0300 Subject: [PATCH 21/69] bugfix --- src/Stater/Views/Board/BoardCanvas.axaml | 27 ++++++++++++------------ 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/Stater/Views/Board/BoardCanvas.axaml b/src/Stater/Views/Board/BoardCanvas.axaml index 91f3d85..b927fa2 100644 --- a/src/Stater/Views/Board/BoardCanvas.axaml +++ b/src/Stater/Views/Board/BoardCanvas.axaml @@ -29,19 +29,6 @@ - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file From 0314a7260b25a46e115f8df900108cbb36d15371 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 6 Dec 2024 09:21:03 +0300 Subject: [PATCH 22/69] * Add save/Load project * Add conditions for transitions * Begin plugins * Begin executor --- .../CFuncGenerator1.csproj | 2 +- .../CGenerator.cs | 0 .../CPlugin.cs | 0 .../Properties/AssemblyInfo.cs | 4 +- .../CSharpCodeGenerator1.csproj | 2 +- .../CSharpCodeGenerator_vs08.csproj | 0 .../Plugin.cs | 0 .../Properties/AssemblyInfo.cs | 4 +- {SLXParser => SLXParser1}/Data/BaseNode.cs | 0 {SLXParser => SLXParser1}/Data/Chart.cs | 0 {SLXParser => SLXParser1}/Data/Data.cs | 0 {SLXParser => SLXParser1}/Data/Instance.cs | 0 {SLXParser => SLXParser1}/Data/Machine.cs | 0 {SLXParser => SLXParser1}/Data/State.cs | 0 {SLXParser => SLXParser1}/Data/Stateflow.cs | 0 {SLXParser => SLXParser1}/Data/Transition.cs | 0 {SLXParser => SLXParser1}/Parser.cs | 0 {SLXParser => SLXParser1}/Program.cs | 0 .../Properties/AssemblyInfo.cs | 4 +- .../SLXParser1.csproj | 2 +- {SLXParser => SLXParser1}/SLXPlugin.cs | 0 .../TestData/BR_GATES_HDL.slx | Bin {SLXParser => SLXParser1}/Translator.cs | 0 {SLXParser => SLXParser1}/Utils/Color.cs | 0 {SLXParser => SLXParser1}/Utils/Point2D.cs | 0 {SLXParser => SLXParser1}/packages.config | 0 Stater.sln | 27 +- src/Stater/App.axaml.cs | 4 +- .../Models/Editors/ITransitionEditor.cs | 12 + .../Models/Editors/impl/EditorManager.cs | 7 +- src/Stater/Models/Editors/impl/StateEditor.cs | 1 - .../Models/Editors/impl/TransitionEditor.cs | 23 + src/Stater/Models/IProjectManager.cs | 11 +- src/Stater/Models/State.cs | 21 +- src/Stater/Models/StateMachine.cs | 18 +- src/Stater/Models/Transition.cs | 17 +- src/Stater/Models/Variable.cs | 56 +- src/Stater/Models/impl/ProjectManager.cs | 62 +- src/Stater/Plugin/ButtonPlugin.cs | 7 + src/Stater/Plugin/PluginInput.cs | 12 + src/Stater/Plugin/PluginOutput.cs | 17 + src/Stater/Stater.csproj | 4 - .../ViewModels/Board/BoardCanvasViewModel.cs | 11 +- .../Editors/StateEditorViewModel.cs | 7 +- .../Editors/TransitionEditorViewModel.cs | 76 ++ src/Stater/ViewModels/MainWindowViewModel.cs | 16 +- src/Stater/Views/Board/BoardCanvas.axaml | 5 +- src/Stater/Views/Board/BoardCanvas.axaml.cs | 8 + src/Stater/Views/Editors/MainEditor.axaml | 4 + .../Views/Editors/TransitionEditor.axaml | 39 ++ .../Views/Editors/TransitionEditor.axaml.cs | 21 + .../Views/Execution/ExecutionControl.axaml | 8 + .../Views/Execution/ExecutionControl.axaml.cs | 13 + .../Views/Execution/ExecutionGroup.axaml | 15 + .../Views/Execution/ExecutionGroup.axaml.cs | 13 + src/Stater/Views/Execution/Variables.axaml | 12 + src/Stater/Views/Execution/Variables.axaml.cs | 13 + src/Stater/Views/MainWindow.axaml | 45 +- src/Stater/Views/MainWindow.axaml.cs | 34 + .../CFuncGenerator/CFuncGenerator.csproj | 9 + src/plugins/CFuncGenerator/CGenerator.cs | 196 ++++++ src/plugins/CFuncGenerator/CPlugin.cs | 19 + .../CSharpCodeGenerator.csproj | 13 + src/plugins/CSharpCodeGenerator/Plugin.cs | 399 +++++++++++ src/plugins/SLXParser/Data/BaseNode.cs | 8 + src/plugins/SLXParser/Data/Chart.cs | 24 + src/plugins/SLXParser/Data/Data.cs | 29 + src/plugins/SLXParser/Data/Instance.cs | 7 + src/plugins/SLXParser/Data/Machine.cs | 8 + src/plugins/SLXParser/Data/State.cs | 29 + src/plugins/SLXParser/Data/Stateflow.cs | 8 + src/plugins/SLXParser/Data/Transition.cs | 26 + src/plugins/SLXParser/Parser.cs | 659 ++++++++++++++++++ src/plugins/SLXParser/Program.cs | 18 + src/plugins/SLXParser/SLXParser.csproj | 13 + src/plugins/SLXParser/SLXPlugin.cs | 28 + .../SLXParser/TestData/BR_GATES_HDL.slx | Bin 0 -> 22601 bytes src/plugins/SLXParser/Translator.cs | 147 ++++ src/plugins/SLXParser/Utils/Color.cs | 16 + src/plugins/SLXParser/Utils/Point2D.cs | 39 ++ 80 files changed, 2290 insertions(+), 62 deletions(-) rename CFuncGenerator/CFuncGenerator.csproj => CFuncGenerator1/CFuncGenerator1.csproj (98%) rename {CFuncGenerator => CFuncGenerator1}/CGenerator.cs (100%) rename {CFuncGenerator => CFuncGenerator1}/CPlugin.cs (100%) rename {CFuncGenerator => CFuncGenerator1}/Properties/AssemblyInfo.cs (93%) rename CSharpCodeGenerator/CSharpCodeGenerator.csproj => CSharpCodeGenerator1/CSharpCodeGenerator1.csproj (98%) rename {CSharpCodeGenerator => CSharpCodeGenerator1}/CSharpCodeGenerator_vs08.csproj (100%) rename {CSharpCodeGenerator => CSharpCodeGenerator1}/Plugin.cs (100%) rename {CSharpCodeGenerator => CSharpCodeGenerator1}/Properties/AssemblyInfo.cs (92%) rename {SLXParser => SLXParser1}/Data/BaseNode.cs (100%) rename {SLXParser => SLXParser1}/Data/Chart.cs (100%) rename {SLXParser => SLXParser1}/Data/Data.cs (100%) rename {SLXParser => SLXParser1}/Data/Instance.cs (100%) rename {SLXParser => SLXParser1}/Data/Machine.cs (100%) rename {SLXParser => SLXParser1}/Data/State.cs (100%) rename {SLXParser => SLXParser1}/Data/Stateflow.cs (100%) rename {SLXParser => SLXParser1}/Data/Transition.cs (100%) rename {SLXParser => SLXParser1}/Parser.cs (100%) rename {SLXParser => SLXParser1}/Program.cs (100%) rename {SLXParser => SLXParser1}/Properties/AssemblyInfo.cs (93%) rename SLXParser/SLXParser.csproj => SLXParser1/SLXParser1.csproj (98%) rename {SLXParser => SLXParser1}/SLXPlugin.cs (100%) rename {SLXParser => SLXParser1}/TestData/BR_GATES_HDL.slx (100%) rename {SLXParser => SLXParser1}/Translator.cs (100%) rename {SLXParser => SLXParser1}/Utils/Color.cs (100%) rename {SLXParser => SLXParser1}/Utils/Point2D.cs (100%) rename {SLXParser => SLXParser1}/packages.config (100%) create mode 100644 src/Stater/Models/Editors/ITransitionEditor.cs create mode 100644 src/Stater/Models/Editors/impl/TransitionEditor.cs create mode 100644 src/Stater/Plugin/ButtonPlugin.cs create mode 100644 src/Stater/Plugin/PluginInput.cs create mode 100644 src/Stater/Plugin/PluginOutput.cs create mode 100644 src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs create mode 100644 src/Stater/Views/Editors/TransitionEditor.axaml create mode 100644 src/Stater/Views/Editors/TransitionEditor.axaml.cs create mode 100644 src/Stater/Views/Execution/ExecutionControl.axaml create mode 100644 src/Stater/Views/Execution/ExecutionControl.axaml.cs create mode 100644 src/Stater/Views/Execution/ExecutionGroup.axaml create mode 100644 src/Stater/Views/Execution/ExecutionGroup.axaml.cs create mode 100644 src/Stater/Views/Execution/Variables.axaml create mode 100644 src/Stater/Views/Execution/Variables.axaml.cs create mode 100644 src/plugins/CFuncGenerator/CFuncGenerator.csproj create mode 100644 src/plugins/CFuncGenerator/CGenerator.cs create mode 100644 src/plugins/CFuncGenerator/CPlugin.cs create mode 100644 src/plugins/CSharpCodeGenerator/CSharpCodeGenerator.csproj create mode 100644 src/plugins/CSharpCodeGenerator/Plugin.cs create mode 100644 src/plugins/SLXParser/Data/BaseNode.cs create mode 100644 src/plugins/SLXParser/Data/Chart.cs create mode 100644 src/plugins/SLXParser/Data/Data.cs create mode 100644 src/plugins/SLXParser/Data/Instance.cs create mode 100644 src/plugins/SLXParser/Data/Machine.cs create mode 100644 src/plugins/SLXParser/Data/State.cs create mode 100644 src/plugins/SLXParser/Data/Stateflow.cs create mode 100644 src/plugins/SLXParser/Data/Transition.cs create mode 100644 src/plugins/SLXParser/Parser.cs create mode 100644 src/plugins/SLXParser/Program.cs create mode 100644 src/plugins/SLXParser/SLXParser.csproj create mode 100644 src/plugins/SLXParser/SLXPlugin.cs create mode 100644 src/plugins/SLXParser/TestData/BR_GATES_HDL.slx create mode 100644 src/plugins/SLXParser/Translator.cs create mode 100644 src/plugins/SLXParser/Utils/Color.cs create mode 100644 src/plugins/SLXParser/Utils/Point2D.cs diff --git a/CFuncGenerator/CFuncGenerator.csproj b/CFuncGenerator1/CFuncGenerator1.csproj similarity index 98% rename from CFuncGenerator/CFuncGenerator.csproj rename to CFuncGenerator1/CFuncGenerator1.csproj index 099ecf0..241f3b6 100644 --- a/CFuncGenerator/CFuncGenerator.csproj +++ b/CFuncGenerator1/CFuncGenerator1.csproj @@ -9,7 +9,7 @@ Library Properties CFuncGenerator - CFuncGenerator + CFuncGenerator1 v4.0 512 diff --git a/CFuncGenerator/CGenerator.cs b/CFuncGenerator1/CGenerator.cs similarity index 100% rename from CFuncGenerator/CGenerator.cs rename to CFuncGenerator1/CGenerator.cs diff --git a/CFuncGenerator/CPlugin.cs b/CFuncGenerator1/CPlugin.cs similarity index 100% rename from CFuncGenerator/CPlugin.cs rename to CFuncGenerator1/CPlugin.cs diff --git a/CFuncGenerator/Properties/AssemblyInfo.cs b/CFuncGenerator1/Properties/AssemblyInfo.cs similarity index 93% rename from CFuncGenerator/Properties/AssemblyInfo.cs rename to CFuncGenerator1/Properties/AssemblyInfo.cs index 82991ee..f298866 100644 --- a/CFuncGenerator/Properties/AssemblyInfo.cs +++ b/CFuncGenerator1/Properties/AssemblyInfo.cs @@ -5,11 +5,11 @@ // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("CFuncGenerator")] +[assembly: AssemblyTitle("CFuncGenerator1")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CFuncGenerator")] +[assembly: AssemblyProduct("CFuncGenerator1")] [assembly: AssemblyCopyright("Copyright © 2015")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/CSharpCodeGenerator/CSharpCodeGenerator.csproj b/CSharpCodeGenerator1/CSharpCodeGenerator1.csproj similarity index 98% rename from CSharpCodeGenerator/CSharpCodeGenerator.csproj rename to CSharpCodeGenerator1/CSharpCodeGenerator1.csproj index 2b7beb4..254b87c 100644 --- a/CSharpCodeGenerator/CSharpCodeGenerator.csproj +++ b/CSharpCodeGenerator1/CSharpCodeGenerator1.csproj @@ -9,7 +9,7 @@ Library Properties CSharpCodeGenerator - CSharpCodeGenerator + CSharpCodeGenerator1 v4.0 512 diff --git a/CSharpCodeGenerator/CSharpCodeGenerator_vs08.csproj b/CSharpCodeGenerator1/CSharpCodeGenerator_vs08.csproj similarity index 100% rename from CSharpCodeGenerator/CSharpCodeGenerator_vs08.csproj rename to CSharpCodeGenerator1/CSharpCodeGenerator_vs08.csproj diff --git a/CSharpCodeGenerator/Plugin.cs b/CSharpCodeGenerator1/Plugin.cs similarity index 100% rename from CSharpCodeGenerator/Plugin.cs rename to CSharpCodeGenerator1/Plugin.cs diff --git a/CSharpCodeGenerator/Properties/AssemblyInfo.cs b/CSharpCodeGenerator1/Properties/AssemblyInfo.cs similarity index 92% rename from CSharpCodeGenerator/Properties/AssemblyInfo.cs rename to CSharpCodeGenerator1/Properties/AssemblyInfo.cs index a49950f..1cfbf0b 100644 --- a/CSharpCodeGenerator/Properties/AssemblyInfo.cs +++ b/CSharpCodeGenerator1/Properties/AssemblyInfo.cs @@ -5,11 +5,11 @@ // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("CSharpCodeGenerator")] +[assembly: AssemblyTitle("CSharpCodeGenerator1")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Michael Lukin")] -[assembly: AssemblyProduct("CSharpCodeGenerator")] +[assembly: AssemblyProduct("CSharpCodeGenerator1")] [assembly: AssemblyCopyright("Copyright © Michael Lukin")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/SLXParser/Data/BaseNode.cs b/SLXParser1/Data/BaseNode.cs similarity index 100% rename from SLXParser/Data/BaseNode.cs rename to SLXParser1/Data/BaseNode.cs diff --git a/SLXParser/Data/Chart.cs b/SLXParser1/Data/Chart.cs similarity index 100% rename from SLXParser/Data/Chart.cs rename to SLXParser1/Data/Chart.cs diff --git a/SLXParser/Data/Data.cs b/SLXParser1/Data/Data.cs similarity index 100% rename from SLXParser/Data/Data.cs rename to SLXParser1/Data/Data.cs diff --git a/SLXParser/Data/Instance.cs b/SLXParser1/Data/Instance.cs similarity index 100% rename from SLXParser/Data/Instance.cs rename to SLXParser1/Data/Instance.cs diff --git a/SLXParser/Data/Machine.cs b/SLXParser1/Data/Machine.cs similarity index 100% rename from SLXParser/Data/Machine.cs rename to SLXParser1/Data/Machine.cs diff --git a/SLXParser/Data/State.cs b/SLXParser1/Data/State.cs similarity index 100% rename from SLXParser/Data/State.cs rename to SLXParser1/Data/State.cs diff --git a/SLXParser/Data/Stateflow.cs b/SLXParser1/Data/Stateflow.cs similarity index 100% rename from SLXParser/Data/Stateflow.cs rename to SLXParser1/Data/Stateflow.cs diff --git a/SLXParser/Data/Transition.cs b/SLXParser1/Data/Transition.cs similarity index 100% rename from SLXParser/Data/Transition.cs rename to SLXParser1/Data/Transition.cs diff --git a/SLXParser/Parser.cs b/SLXParser1/Parser.cs similarity index 100% rename from SLXParser/Parser.cs rename to SLXParser1/Parser.cs diff --git a/SLXParser/Program.cs b/SLXParser1/Program.cs similarity index 100% rename from SLXParser/Program.cs rename to SLXParser1/Program.cs diff --git a/SLXParser/Properties/AssemblyInfo.cs b/SLXParser1/Properties/AssemblyInfo.cs similarity index 93% rename from SLXParser/Properties/AssemblyInfo.cs rename to SLXParser1/Properties/AssemblyInfo.cs index 83cdc11..7172619 100644 --- a/SLXParser/Properties/AssemblyInfo.cs +++ b/SLXParser1/Properties/AssemblyInfo.cs @@ -4,11 +4,11 @@ // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("SLXParser")] +[assembly: AssemblyTitle("SLXParser1")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("SLXParser")] +[assembly: AssemblyProduct("SLXParser1")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/SLXParser/SLXParser.csproj b/SLXParser1/SLXParser1.csproj similarity index 98% rename from SLXParser/SLXParser.csproj rename to SLXParser1/SLXParser1.csproj index 0281502..0d4eaec 100644 --- a/SLXParser/SLXParser.csproj +++ b/SLXParser1/SLXParser1.csproj @@ -9,7 +9,7 @@ Library Properties SLXParser - SLXParser + SLXParser1 v4.5 512 true diff --git a/SLXParser/SLXPlugin.cs b/SLXParser1/SLXPlugin.cs similarity index 100% rename from SLXParser/SLXPlugin.cs rename to SLXParser1/SLXPlugin.cs diff --git a/SLXParser/TestData/BR_GATES_HDL.slx b/SLXParser1/TestData/BR_GATES_HDL.slx similarity index 100% rename from SLXParser/TestData/BR_GATES_HDL.slx rename to SLXParser1/TestData/BR_GATES_HDL.slx diff --git a/SLXParser/Translator.cs b/SLXParser1/Translator.cs similarity index 100% rename from SLXParser/Translator.cs rename to SLXParser1/Translator.cs diff --git a/SLXParser/Utils/Color.cs b/SLXParser1/Utils/Color.cs similarity index 100% rename from SLXParser/Utils/Color.cs rename to SLXParser1/Utils/Color.cs diff --git a/SLXParser/Utils/Point2D.cs b/SLXParser1/Utils/Point2D.cs similarity index 100% rename from SLXParser/Utils/Point2D.cs rename to SLXParser1/Utils/Point2D.cs diff --git a/SLXParser/packages.config b/SLXParser1/packages.config similarity index 100% rename from SLXParser/packages.config rename to SLXParser1/packages.config diff --git a/Stater.sln b/Stater.sln index 40dcd9a..a850102 100644 --- a/Stater.sln +++ b/Stater.sln @@ -9,7 +9,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaterWPF", "StaterWPF\Stat EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirstPlugin", "FirstPlugin\FirstPlugin.csproj", "{5B7A672B-3DB0-4406-9DF1-D1BAE6726BF7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpCodeGenerator", "CSharpCodeGenerator\CSharpCodeGenerator.csproj", "{B21D8C78-FB92-4C38-8773-6ABB244BF407}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpCodeGenerator1", "CSharpCodeGenerator1\CSharpCodeGenerator1.csproj", "{B21D8C78-FB92-4C38-8773-6ABB244BF407}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common\Common.csproj", "{542E45C9-9853-42DB-B1C5-1D540FA1700E}" EndProject @@ -47,11 +47,17 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JavaMultyThread", "JavaMult EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FBDK", "FBDK\FBDK.csproj", "{09FED13A-1642-496C-AE3F-F0A2770BE9A2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CFuncGenerator", "CFuncGenerator\CFuncGenerator.csproj", "{EA67DB8A-BB10-4343-87A0-E91EDD783C8B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CFuncGenerator1", "CFuncGenerator1\CFuncGenerator1.csproj", "{EA67DB8A-BB10-4343-87A0-E91EDD783C8B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater", "src\Stater\Stater.csproj", "{EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SLXParser", "SLXParser\SLXParser.csproj", "{3917F540-90B0-4DBB-9B3F-95967F2549B7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SLXParser1", "SLXParser1\SLXParser1.csproj", "{3917F540-90B0-4DBB-9B3F-95967F2549B7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpCodeGenerator", "src\plugins\CSharpCodeGenerator\CSharpCodeGenerator.csproj", "{1FEC7964-E23A-4C78-99BC-13EFB4A55583}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CFuncGenerator", "src\plugins\CFuncGenerator\CFuncGenerator.csproj", "{D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SLXParser", "src\plugins\SLXParser\SLXParser.csproj", "{1E9A9735-462C-4194-B128-7959F51596EB}" EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution @@ -142,6 +148,18 @@ Global {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Debug|Any CPU.Build.0 = Debug|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Release|Any CPU.ActiveCfg = Release|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Release|Any CPU.Build.0 = Release|Any CPU + {1FEC7964-E23A-4C78-99BC-13EFB4A55583}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1FEC7964-E23A-4C78-99BC-13EFB4A55583}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1FEC7964-E23A-4C78-99BC-13EFB4A55583}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1FEC7964-E23A-4C78-99BC-13EFB4A55583}.Release|Any CPU.Build.0 = Release|Any CPU + {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Release|Any CPU.Build.0 = Release|Any CPU + {1E9A9735-462C-4194-B128-7959F51596EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E9A9735-462C-4194-B128-7959F51596EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E9A9735-462C-4194-B128-7959F51596EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E9A9735-462C-4194-B128-7959F51596EB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -159,5 +177,8 @@ Global {09FED13A-1642-496C-AE3F-F0A2770BE9A2} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {EA67DB8A-BB10-4343-87A0-E91EDD783C8B} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {3917F540-90B0-4DBB-9B3F-95967F2549B7} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} + {1FEC7964-E23A-4C78-99BC-13EFB4A55583} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} + {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} + {1E9A9735-462C-4194-B128-7959F51596EB} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} EndGlobalSection EndGlobal diff --git a/src/Stater/App.axaml.cs b/src/Stater/App.axaml.cs index 9b5ac62..638f7e0 100644 --- a/src/Stater/App.axaml.cs +++ b/src/Stater/App.axaml.cs @@ -47,12 +47,14 @@ private void InitDependency() var projectManager = new ProjectManager(); var stateMachineEditor = new StateMachineEditor(projectManager); var stateEditor = new StateEditor(projectManager); + var transitionEditor = new TransitionEditor(projectManager); Locator.CurrentMutable.RegisterConstant(projectManager, typeof(IProjectManager)); - Locator.CurrentMutable.RegisterConstant(new EditorManager(stateMachineEditor, stateEditor), + Locator.CurrentMutable.RegisterConstant(new EditorManager(stateMachineEditor, stateEditor, transitionEditor), typeof(IEditorManager)); Locator.CurrentMutable.RegisterConstant(stateMachineEditor, typeof(IStateMachineEditor)); Locator.CurrentMutable.RegisterConstant(stateEditor, typeof(IStateEditor)); + Locator.CurrentMutable.RegisterConstant(transitionEditor, typeof(ITransitionEditor)); } } \ No newline at end of file diff --git a/src/Stater/Models/Editors/ITransitionEditor.cs b/src/Stater/Models/Editors/ITransitionEditor.cs new file mode 100644 index 0000000..17c92ec --- /dev/null +++ b/src/Stater/Models/Editors/ITransitionEditor.cs @@ -0,0 +1,12 @@ +using System; +using Avalonia.Animation; + +namespace Stater.Models.Editors; + +public interface ITransitionEditor +{ + IObservable Transition { get; } + + void DoSelect(Transition transition); + void Update(Transition transition); +} \ No newline at end of file diff --git a/src/Stater/Models/Editors/impl/EditorManager.cs b/src/Stater/Models/Editors/impl/EditorManager.cs index 5f06fac..387043d 100644 --- a/src/Stater/Models/Editors/impl/EditorManager.cs +++ b/src/Stater/Models/Editors/impl/EditorManager.cs @@ -10,13 +10,15 @@ public class EditorManager : IEditorManager private IStateMachineEditor _stateMachineEditor; private IStateEditor _stateEditor; + private ITransitionEditor _transitionEditor; - public EditorManager(IStateMachineEditor stateMachineEditor, IStateEditor stateEditor) + public EditorManager(IStateMachineEditor stateMachineEditor, IStateEditor stateEditor, ITransitionEditor transitionEditor) { _editorType.OnNext(EditorTypeEnum.Null); _stateMachineEditor = stateMachineEditor; _stateEditor = stateEditor; + _transitionEditor = transitionEditor; } @@ -34,6 +36,7 @@ public void DoSelectState(State state) public void DoSelectTransition(Transition transition) { - throw new System.NotImplementedException(); + _transitionEditor.DoSelect(transition); + _editorType.OnNext(EditorTypeEnum.Transition); } } \ No newline at end of file diff --git a/src/Stater/Models/Editors/impl/StateEditor.cs b/src/Stater/Models/Editors/impl/StateEditor.cs index 9900b69..64493bf 100644 --- a/src/Stater/Models/Editors/impl/StateEditor.cs +++ b/src/Stater/Models/Editors/impl/StateEditor.cs @@ -17,5 +17,4 @@ public void Update(State state) { projectManager.UpdateState(state); } - } \ No newline at end of file diff --git a/src/Stater/Models/Editors/impl/TransitionEditor.cs b/src/Stater/Models/Editors/impl/TransitionEditor.cs new file mode 100644 index 0000000..996081c --- /dev/null +++ b/src/Stater/Models/Editors/impl/TransitionEditor.cs @@ -0,0 +1,23 @@ +using System; +using System.Reactive.Subjects; +using Avalonia.Animation; + +namespace Stater.Models.Editors.impl; + +public class TransitionEditor( + IProjectManager projectManager +) : ITransitionEditor +{ + private readonly ReplaySubject _transition = new(); + public IObservable Transition => _transition; + + public void DoSelect(Transition transition) + { + _transition.OnNext(transition); + } + + public void Update(Transition transition) + { + projectManager.UpdateTransition(transition); + } +} \ No newline at end of file diff --git a/src/Stater/Models/IProjectManager.cs b/src/Stater/Models/IProjectManager.cs index 3c77f28..c769ba5 100644 --- a/src/Stater/Models/IProjectManager.cs +++ b/src/Stater/Models/IProjectManager.cs @@ -1,4 +1,6 @@ using System; +using System.IO; +using Avalonia.Animation; using DynamicData; namespace Stater.Models; @@ -10,8 +12,11 @@ public interface IProjectManager IObservable StateMachine { get; } void CreateProject(string name); - Project LoadProject(string path); - void SaveProject(Project project, string path); + Project LoadProject(StreamReader sr); + void SaveProject(StreamWriter sw); + + void Undo(); + void Redo(); StateMachine CreateStateMachine(); void UpdateStateMachine(StateMachine newStateMachine); @@ -22,4 +27,6 @@ public interface IProjectManager Transition? CreateTransition(State start, State end); void RemoveTransition(Guid guid); + Transition? GetTransition(Guid guid); + void UpdateTransition(Transition transition); } \ No newline at end of file diff --git a/src/Stater/Models/State.cs b/src/Stater/Models/State.cs index 2750cb3..834dc2d 100644 --- a/src/Stater/Models/State.cs +++ b/src/Stater/Models/State.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace Stater.Models; @@ -15,5 +16,21 @@ public record State( string Description, StateType Type, float X, - float Y -); \ No newline at end of file + float Y, + List EntryEvents, + List ExitEvents +) +{ + public State() : this( + new Guid(), + "State", + "", + StateType.Common, + 0, + 0, + new List(), + new List() + ) + { + } +} \ No newline at end of file diff --git a/src/Stater/Models/StateMachine.cs b/src/Stater/Models/StateMachine.cs index 6297615..3970080 100644 --- a/src/Stater/Models/StateMachine.cs +++ b/src/Stater/Models/StateMachine.cs @@ -9,4 +9,20 @@ public record StateMachine( List States, List Transitions, List Variables -); \ No newline at end of file +) +{ + public StateMachine() : this( + new Guid(), + "", + new List(), + new List(), + new List() + ) + { + } + + public State? StartState + { + get { return States.Find(x => x.Type == StateType.Start); } + } +} \ No newline at end of file diff --git a/src/Stater/Models/Transition.cs b/src/Stater/Models/Transition.cs index 4d43336..d8ca5cf 100644 --- a/src/Stater/Models/Transition.cs +++ b/src/Stater/Models/Transition.cs @@ -7,7 +7,18 @@ namespace Stater.Models; public record Transition( Guid Guid, string Name, - Guid Start, - Guid End, + Guid? Start, + Guid? End, Condition? Condition -); \ No newline at end of file +) +{ + public Transition() : this( + new Guid(), + "Transition", + null, + null, + null + ) + { + } +} \ No newline at end of file diff --git a/src/Stater/Models/Variable.cs b/src/Stater/Models/Variable.cs index 564ad3a..399fff8 100644 --- a/src/Stater/Models/Variable.cs +++ b/src/Stater/Models/Variable.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.Linq; namespace Stater.Models; @@ -7,16 +8,61 @@ public record Variable( Guid Guid, string Name, VariableValue StartValue -); +) +{ + public Variable() : this( + new Guid(), + "Variable", + VariableValueBuilder.fromString("") + ) + { + } +} public class VariableOperatorException(string message) : Exception(message); public class VariableMathException(string message) : Exception(message); +public static class VariableValueBuilder +{ + public static VariableValue fromString(string input) + { + switch (input) + { + case "true": + return new VariableValue.BoolVariable(true); + case "false": + return new VariableValue.BoolVariable(false); + } + + try + { + return new VariableValue.FloatVariable(float.Parse(input)); + } + catch (Exception _) + { + // ignored + } + + try + { + return new VariableValue.IntVariable(int.Parse(input)); + } + catch (Exception _) + { + // ignored + } + + return new VariableValue.StringVariable(input); + } +} + public abstract record VariableValue { public record IntVariable(int Value) : VariableValue { + public override string ToString() => Value.ToString(); + protected override VariableValue Default() => new IntVariable(0); protected override bool Greater(VariableValue otherVariableValue) => otherVariableValue switch @@ -58,6 +104,7 @@ public record IntVariable(int Value) : VariableValue public record BoolVariable(bool Value) : VariableValue { + public override string ToString() => Value.ToString(); protected override VariableValue Default() => new BoolVariable(false); protected override bool Greater(VariableValue otherVariableValue) @@ -88,6 +135,7 @@ protected override VariableValue Div(VariableValue otherVariableValue) public record FloatVariable(float Value) : VariableValue { + public override string ToString() => Value.ToString(CultureInfo.InvariantCulture); protected override VariableValue Default() => new FloatVariable(0); protected override bool Greater(VariableValue otherVariableValue) => otherVariableValue switch @@ -128,6 +176,7 @@ public record FloatVariable(float Value) : VariableValue public record StringVariable(string Value) : VariableValue { + public override string ToString() => Value; protected override VariableValue Default() => new StringVariable(""); protected override bool Greater(VariableValue otherVariableValue) => otherVariableValue switch @@ -178,4 +227,9 @@ protected override VariableValue Div(VariableValue otherVariableValue) public static VariableValue operator -(VariableValue a, VariableValue b) => a.Sub(b); public static VariableValue operator *(VariableValue a, VariableValue b) => a.Mul(b); public static VariableValue operator /(VariableValue a, VariableValue b) => a.Div(b); + + public override string ToString() + { + return base.ToString(); + } } \ No newline at end of file diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index 508309e..70042af 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -1,7 +1,11 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.IO; using System.Linq; +using System.Net; using System.Reactive.Subjects; +using System.Xml; using DynamicData; namespace Stater.Models.impl; @@ -23,6 +27,9 @@ internal class ProjectManager : IProjectManager private readonly ReplaySubject _transtion = new(); public IObservable Transition => _transtion; + public Stack UndoStack = new(); + public Stack RedoStack = new(); + private StateMachine? GetCurrentStateMachine() { StateMachine? currentStateMachine = null; @@ -40,18 +47,40 @@ public void CreateProject(string name) _project.OnNext(project); } - public Project LoadProject(string path) + public Project LoadProject(StreamReader sr) { - throw new NotImplementedException(); + XmlDocument doc = new XmlDocument(); + var writer = new System.Xml.Serialization.XmlSerializer(typeof(Project)); + var project = writer.Deserialize(sr); + if (project is not Project project1) throw new ValidationException(); + _project.OnNext(project1); + return project1; } - public void SaveProject(Project project, string path) + public void SaveProject(StreamWriter sw) { - throw new NotImplementedException(); + var writer = new System.Xml.Serialization.XmlSerializer(typeof(Project)); + writer.Serialize(sw, _project); + sw.Close(); + } + + public void Undo() + { + var stateMachine = UndoStack.Peek(); + RedoStack.Push(stateMachine); + _stateMachine.OnNext(stateMachine); + } + + public void Redo() + { + var stateMachine = RedoStack.Peek(); + UndoStack.Push(stateMachine); + _stateMachine.OnNext(stateMachine); } public void UpdateStateMachine(StateMachine newStateMachine) { + UndoStack.Push(newStateMachine); _stateMachines.AddOrUpdate(newStateMachine); _stateMachine.OnNext(newStateMachine); } @@ -74,7 +103,10 @@ public StateMachine CreateStateMachine() var currentStateMachine = GetCurrentStateMachine(); if (currentStateMachine?.Guid == guid) return null; var stateMachine = _stateMachines.KeyValues[guid.ToString()]; + UndoStack.Clear(); + RedoStack.Clear(); _stateMachine.OnNext(stateMachine); + UndoStack.Push(stateMachine); return stateMachine; } @@ -88,7 +120,9 @@ public StateMachine CreateStateMachine() Description: "", Type: StateType.Common, 10, - 10 + 10, + new List(), + new List() ); var newStateMachine = currentStateMachine with { @@ -138,6 +172,12 @@ public void UpdateState(State state) return transition; } + public Transition? GetTransition(Guid guid) + { + var currentStateMachine = GetCurrentStateMachine(); + return currentStateMachine?.Transitions.FirstOrDefault(e => e.Guid == guid); + } + public void RemoveTransition(Guid guid) { var currentStateMachine = GetCurrentStateMachine(); @@ -149,4 +189,16 @@ public void RemoveTransition(Guid guid) }; UpdateStateMachine(newStateMachine); } + + public void UpdateTransition(Transition transition) + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine == null) return; + var transitions = currentStateMachine.Transitions.Where(el => el.Guid != transition.Guid); + var newStateMachine = currentStateMachine with + { + Transitions = new List(transitions) { transition } + }; + UpdateStateMachine(newStateMachine); + } } \ No newline at end of file diff --git a/src/Stater/Plugin/ButtonPlugin.cs b/src/Stater/Plugin/ButtonPlugin.cs new file mode 100644 index 0000000..4e34cba --- /dev/null +++ b/src/Stater/Plugin/ButtonPlugin.cs @@ -0,0 +1,7 @@ +namespace Stater.Plugin; + +public abstract class ButtonPlugin +{ + + public abstract PluginOutput Start(PluginInput pluginInput); +} \ No newline at end of file diff --git a/src/Stater/Plugin/PluginInput.cs b/src/Stater/Plugin/PluginInput.cs new file mode 100644 index 0000000..fa54098 --- /dev/null +++ b/src/Stater/Plugin/PluginInput.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using Stater.Models; + +namespace Stater.Plugin; + +public record PluginInput( + Project Project, + StateMachine StateMachine, + List StateMachines, + + IProjectManager ProjectManager +); \ No newline at end of file diff --git a/src/Stater/Plugin/PluginOutput.cs b/src/Stater/Plugin/PluginOutput.cs new file mode 100644 index 0000000..0a6bde4 --- /dev/null +++ b/src/Stater/Plugin/PluginOutput.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using Stater.Models; + +namespace Stater.Plugin; + +public record PluginOutput( + string? Message, + List ChangedStateMachines +) +{ + public static PluginOutput From( + string message + ) + { + return new PluginOutput(message, new List()); + } +} \ No newline at end of file diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index 147c903..c23b85f 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -36,8 +36,4 @@ Code - - - - diff --git a/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs b/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs index 6bc8ef9..fa383a3 100644 --- a/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs +++ b/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs @@ -40,6 +40,7 @@ public BoardCanvasViewModel(IProjectManager projectManager, IEditorManager edito StateClickCommand = ReactiveCommand.Create(OnStateClicked); UpdateStateCoordsCommand = ReactiveCommand.Create(UpdateStateCoords); + TransitionClickCommand = ReactiveCommand.Create(OnTransitionClicked); } private readonly IProjectManager _projectManager; @@ -51,7 +52,9 @@ public BoardCanvasViewModel(IProjectManager projectManager, IEditorManager edito public ReactiveCommand StateClickCommand { get; } public ReactiveCommand UpdateStateCoordsCommand { get; } - + + public ReactiveCommand TransitionClickCommand { get; } + private void OnStateClicked(State state) { var selectedState = _projectManager.GetState(state.Guid); @@ -59,6 +62,12 @@ private void OnStateClicked(State state) if (State != null) _editorManager.DoSelectState(State); } + private void OnTransitionClicked(Transition transition) + { + var selectedTransition = _projectManager.GetTransition(transition.Guid); + if (selectedTransition != null) _editorManager.DoSelectTransition(selectedTransition); + } + private void UpdateStateCoords(Vector2 coords) { if (State == null) return; diff --git a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs index 77aa77d..871d9cd 100644 --- a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using System.Reactive; using System.Windows.Input; using ReactiveUI; @@ -59,10 +58,10 @@ public StateEditorViewModel(IStateEditor stateEditor, IProjectManager projectMan [Reactive] public List AllStates { get; set; } [Reactive] public List Transitions { get; set; } + private void AddTransition(State state) { - Console.WriteLine("Add"); if (State == null) return; _projectManager.CreateTransition(State, state); } @@ -77,7 +76,7 @@ private void Save() if (State == null) return; var tryParse = Enum.TryParse(Type, out StateType type); if (!tryParse) return; - var newStateMachine = State with { Name = Name, Description = Description, Type = type }; - _stateEditor.Update(newStateMachine); + var newState = State with { Name = Name, Description = Description, Type = type }; + _stateEditor.Update(newState); } } \ No newline at end of file diff --git a/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs b/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs new file mode 100644 index 0000000..6310adf --- /dev/null +++ b/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Reactive.Linq; +using System.Windows.Input; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Stater.Models; +using Stater.Models.Editors; + +namespace Stater.ViewModels.Editors; + +public class TransitionEditorViewModel : ReactiveObject +{ + public TransitionEditorViewModel(ITransitionEditor transitionEditor, IProjectManager projectManager) + { + _transitionEditor = transitionEditor; + _projectManager = projectManager; + + SaveCommand = ReactiveCommand.Create(Save); + + _transitionEditor + .Transition + .Subscribe(x => + { + Transition = x; + Name = x.Name; + + var condition = x.Condition; + + if (condition is Condition.VariableCondition) + { + var t = (Condition.VariableCondition)condition; + Condition = t.ConditionType.ToString(); + Variable = t.VariableGuid.ToString(); + Value = t.Value.ToString(); + } + }); + + projectManager + .StateMachine + .Subscribe(x => { Variables = x.Variables.ConvertAll(y => y.Guid.ToString()); } + ); + } + + private ITransitionEditor _transitionEditor; + private IProjectManager _projectManager; + [Reactive] private Transition? Transition { get; set; } + + [Reactive] public string Name { get; set; } + + [Reactive] public List Variables { get; set; } + [Reactive] public string Variable { get; set; } + [Reactive] public string Condition { get; set; } + [Reactive] public string Value { get; set; } + + public ICommand SaveCommand { get; } + + private void Save() + { + if (Transition == null) return; + Condition? condition = null; + var tryParse = Enum.TryParse(Condition, out Condition.VariableCondition.ConditionTypeEnum conditionType); + if (!tryParse) + { + condition = new Condition.VariableCondition( + VariableGuid: Guid.Parse(Variable), + ConditionType: conditionType, + Value: VariableValueBuilder.fromString(Value) + ); + } + + var newTransition = Transition with { Name = Name, Condition = condition }; + _transitionEditor.Update(newTransition); + } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index ec6bd22..137d9b2 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -1,5 +1,7 @@ using System; using System.Collections.ObjectModel; +using System.IO; +using System.Reactive; using System.Windows.Input; using DynamicData; using ReactiveUI.Fody.Helpers; @@ -30,7 +32,8 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor .Subscribe(x => { StateMachine = x; }); NewCommand = ReactiveCommand.Create(NewProject); - OpenCommand = ReactiveCommand.Create(OpenProject); + OpenCommand = ReactiveCommand.Create(OpenProject); + SaveCommand = ReactiveCommand.Create(SaveProject); NewStateMachineCommand = ReactiveCommand.Create(NewStateMachine); NewStateCommand = ReactiveCommand.Create(NewState); } @@ -59,13 +62,15 @@ public StateMachine StateMachine public ReadOnlyObservableCollection StateMachines => _stateMachines; public ICommand NewCommand { get; } - public ICommand OpenCommand { get; } + public ReactiveCommand OpenCommand { get; } + public ReactiveCommand SaveCommand { get; } public ICommand NewStateMachineCommand { get; } public ICommand NewStateCommand { get; } - private void OpenProject() + private void OpenProject(StreamReader sr) { + _projectManager.LoadProject(sr); } private void NewProject() @@ -73,6 +78,11 @@ private void NewProject() _projectManager.CreateProject("New Project"); } + private void SaveProject(StreamWriter sw) + { + _projectManager.SaveProject(sw); + } + private void NewStateMachine() { var stateMachine = _projectManager.CreateStateMachine(); diff --git a/src/Stater/Views/Board/BoardCanvas.axaml b/src/Stater/Views/Board/BoardCanvas.axaml index b927fa2..9a6994f 100644 --- a/src/Stater/Views/Board/BoardCanvas.axaml +++ b/src/Stater/Views/Board/BoardCanvas.axaml @@ -53,7 +53,10 @@ - diff --git a/src/Stater/Views/Board/BoardCanvas.axaml.cs b/src/Stater/Views/Board/BoardCanvas.axaml.cs index 2fc1053..af0863f 100644 --- a/src/Stater/Views/Board/BoardCanvas.axaml.cs +++ b/src/Stater/Views/Board/BoardCanvas.axaml.cs @@ -180,4 +180,12 @@ private void State_OnPointerReleased(object? sender, PointerReleasedEventArgs e) var context = (BoardCanvasViewModel)DataContext; context?.UpdateStateCoordsCommand.Execute(new Vector2((float)stateX, (float)stateY)).Subscribe(); } + + private void Transition_OnPointerPressed(object? sender, PointerPressedEventArgs e) + { + var rectangle = (Control)sender; + if (rectangle?.DataContext is not AssociateTransition transition) return; + var context = (BoardCanvasViewModel)DataContext; + context?.TransitionClickCommand.Execute(transition.Transition).Subscribe(); + } } \ No newline at end of file diff --git a/src/Stater/Views/Editors/MainEditor.axaml b/src/Stater/Views/Editors/MainEditor.axaml index b32b777..3fa0eb7 100644 --- a/src/Stater/Views/Editors/MainEditor.axaml +++ b/src/Stater/Views/Editors/MainEditor.axaml @@ -21,5 +21,9 @@ IsVisible="{Binding EditorType, Converter={StaticResource EditorTypeToBoolConverter}, ConverterParameter='State'}"> + + + \ No newline at end of file diff --git a/src/Stater/Views/Editors/TransitionEditor.axaml b/src/Stater/Views/Editors/TransitionEditor.axaml new file mode 100644 index 0000000..6a69978 --- /dev/null +++ b/src/Stater/Views/Editors/TransitionEditor.axaml @@ -0,0 +1,39 @@ + + + Name: + + + Condition: + + Variable + + + Source Variable: + + + Condition: + + + + == + != + > + >= + + + Value: + + + + \ No newline at end of file diff --git a/src/Stater/Views/Editors/TransitionEditor.axaml.cs b/src/Stater/Views/Editors/TransitionEditor.axaml.cs new file mode 100644 index 0000000..127e0ab --- /dev/null +++ b/src/Stater/Views/Editors/TransitionEditor.axaml.cs @@ -0,0 +1,21 @@ +using Avalonia.Controls; +using Splat; +using Stater.Models; +using Stater.Models.Editors; +using Stater.ViewModels.Editors; + +namespace Stater.Views.Editors; + +public partial class TransitionEditor : UserControl +{ + public TransitionEditor() + { + InitializeComponent(); + var transitionEditor = Locator.Current.GetService(); + var projectManager = Locator.Current.GetService(); + DataContext = new TransitionEditorViewModel( + transitionEditor!, + projectManager! + ); + } +} \ No newline at end of file diff --git a/src/Stater/Views/Execution/ExecutionControl.axaml b/src/Stater/Views/Execution/ExecutionControl.axaml new file mode 100644 index 0000000..1aa24c7 --- /dev/null +++ b/src/Stater/Views/Execution/ExecutionControl.axaml @@ -0,0 +1,8 @@ + + Welcome to Avalonia! + diff --git a/src/Stater/Views/Execution/ExecutionControl.axaml.cs b/src/Stater/Views/Execution/ExecutionControl.axaml.cs new file mode 100644 index 0000000..18f997e --- /dev/null +++ b/src/Stater/Views/Execution/ExecutionControl.axaml.cs @@ -0,0 +1,13 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Stater.Views.Execution; + +public partial class ExecutionControl : UserControl +{ + public ExecutionControl() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/src/Stater/Views/Execution/ExecutionGroup.axaml b/src/Stater/Views/Execution/ExecutionGroup.axaml new file mode 100644 index 0000000..06ba005 --- /dev/null +++ b/src/Stater/Views/Execution/ExecutionGroup.axaml @@ -0,0 +1,15 @@ + + + + Variables + + + Execution Control + + + \ No newline at end of file diff --git a/src/Stater/Views/Execution/ExecutionGroup.axaml.cs b/src/Stater/Views/Execution/ExecutionGroup.axaml.cs new file mode 100644 index 0000000..d903504 --- /dev/null +++ b/src/Stater/Views/Execution/ExecutionGroup.axaml.cs @@ -0,0 +1,13 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Stater.Views.Execution; + +public partial class ExecutionGroup : UserControl +{ + public ExecutionGroup() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/src/Stater/Views/Execution/Variables.axaml b/src/Stater/Views/Execution/Variables.axaml new file mode 100644 index 0000000..418c857 --- /dev/null +++ b/src/Stater/Views/Execution/Variables.axaml @@ -0,0 +1,12 @@ + + + + Variable + + + diff --git a/src/Stater/Views/Execution/Variables.axaml.cs b/src/Stater/Views/Execution/Variables.axaml.cs new file mode 100644 index 0000000..0b4380e --- /dev/null +++ b/src/Stater/Views/Execution/Variables.axaml.cs @@ -0,0 +1,13 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Stater.Views.Execution; + +public partial class Variables : UserControl +{ + public Variables() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml index 2f00fbd..44ea302 100644 --- a/src/Stater/Views/MainWindow.axaml +++ b/src/Stater/Views/MainWindow.axaml @@ -3,6 +3,7 @@ xmlns:vm="using:Stater.ViewModels" xmlns:editors="using:Stater.Views.Editors" xmlns:board="using:Stater.Views.Board" + xmlns:execution="using:Stater.Views.Execution" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" @@ -24,16 +25,16 @@ - - + + - - - + + + @@ -41,31 +42,37 @@ - - + + + + - - - - - - - - - - + + + + + + + + + + + + + Width="400"> diff --git a/src/Stater/Views/MainWindow.axaml.cs b/src/Stater/Views/MainWindow.axaml.cs index 91373e6..78f61d2 100644 --- a/src/Stater/Views/MainWindow.axaml.cs +++ b/src/Stater/Views/MainWindow.axaml.cs @@ -1,10 +1,13 @@ using System; +using System.IO; using System.Numerics; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Shapes; using Avalonia.Input; +using Avalonia.Interactivity; using Avalonia.Media; +using Avalonia.Platform.Storage; using Stater.Models; using Stater.ViewModels; @@ -16,4 +19,35 @@ public MainWindow() { InitializeComponent(); } + + private async void OpenFileButton_Clicked(object sender, RoutedEventArgs args) + { + var topLevel = GetTopLevel(this); + var files = await topLevel.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + { + Title = "Open Project", + AllowMultiple = false + }); + + if (files.Count < 1) return; + await using var stream = await files[0].OpenReadAsync(); + using var streamReader = new StreamReader(stream); + var context = (MainWindowViewModel)DataContext; + context?.OpenCommand.Execute(streamReader).Subscribe(); + } + + private async void SaveFileButton_Clicked(object sender, RoutedEventArgs args) + { + var topLevel = GetTopLevel(this); + var file = await topLevel.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions + { + Title = "Save Project" + }); + + if (file is null) return; + await using var stream = await file.OpenWriteAsync(); + await using var streamWriter = new StreamWriter(stream); + var context = (MainWindowViewModel)DataContext; + context?.SaveCommand.Execute(streamWriter).Subscribe(); + } } \ No newline at end of file diff --git a/src/plugins/CFuncGenerator/CFuncGenerator.csproj b/src/plugins/CFuncGenerator/CFuncGenerator.csproj new file mode 100644 index 0000000..3a63532 --- /dev/null +++ b/src/plugins/CFuncGenerator/CFuncGenerator.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/src/plugins/CFuncGenerator/CGenerator.cs b/src/plugins/CFuncGenerator/CGenerator.cs new file mode 100644 index 0000000..89c8bef --- /dev/null +++ b/src/plugins/CFuncGenerator/CGenerator.cs @@ -0,0 +1,196 @@ +namespace CFuncGenerator; + +class CGenerator + { + public CGenerator(IParams p) + { + iParams = p; + } + + private IParams iParams; + private Indent indent; + + public bool GenerateAll() + { + bool res = true; + foreach (var stateMachine in iParams.Machines.AsParallel().Where(stateMachine => !GenerateOneMachine(stateMachine))) + { + res = false; + } + return res; + } + + private bool GenerateOneMachine(StateMachine stateMachine) + { + //Check the file. + var pathHeader = iParams.WorkDirectory + @"\" + GetHeaderName(stateMachine); + if (!GoodHeader(stateMachine, pathHeader)) + { + if (!GenInitHeader(stateMachine, pathHeader)) + { + return false; + } + } + else + { + if (!IterativeGenHeader(stateMachine, pathHeader)) + { + return false; + } + } + + var pathModule = iParams.WorkDirectory + @"\" + GetModuleName(stateMachine); + if (!GoodModule(stateMachine, pathModule)) + { + if (!GenInitModule(stateMachine, pathModule)) + { + return false; + } + } + else + { + if (!IterativeGenModule(stateMachine, pathModule)) + { + return false; + } + } + return false; + } + + private bool GenInitModule(StateMachine stateMachine, string pathModule) + { + try + { + var code = new List(); + code.AddRange(CreateInclude(stateMachine)); + //code.AddRange(); + code.AddRange(CreateUserDefinitions(stateMachine)); + } + catch (Exception ex) + { + return false; + } + return true; + } + + private IEnumerable CreateInclude(StateMachine stateMachine) + { + var res = new List(); + res.Add("/*User includes*/"); + res.Add(""); + res.Add("/*End user includes*/"); + res.Add(""); + res.Add("#include \"" + GetHeaderName(stateMachine) + "\""); + res.Add(""); + + return res; + } + + private IEnumerable CreateUserDefinitions(StateMachine stateMachine) + { + var res = new List(); + res.Add("/*User definitions*/"); + res.Add(""); + res.Add("/*End user definitions*/"); + res.Add(""); + return res; + } + + + private string GetHeaderName(StateMachine stateMachine) + { + return stateMachine.Name + ".h"; + } + + private string GetModuleName(StateMachine stateMachine) + { + return stateMachine.Name + ".c"; + } + + private bool IterativeGenModule(StateMachine stateMachine, string pathModule) + { + throw new NotImplementedException(); + } + + private bool GenInitHeader(StateMachine stateMachine, string pathHeader) + { + try + { + var code = new List(); + code.AddRange(CreateOnce(stateMachine)); + + code.AddRange(CreatePrototype(stateMachine)); + + code.AddRange(CreateEndif(stateMachine)); + + WriteCode(pathHeader, code); + } + catch (Exception ex) + { + return false; + } + return true; + } + + private IEnumerable CreatePrototype(StateMachine stateMachine) + { + List res = new List(); + res.Add("void " + stateMachine.Name + "();"); + res.Add(""); + return res; + } + + private static void WriteCode(string pathHeader, List code) + { + using (var sw = new StreamWriter(pathHeader)) + { + foreach (var line in code) + { + sw.WriteLine(line); + } + } + } + + private IEnumerable CreateEndif(StateMachine stateMachine) + { + var res = new List(); + res.Add("#endif"); + res.Add(""); + return res; + } + + private IEnumerable CreateOnce(StateMachine stateMachine) + { + List res = new List(); + res.Add("#ifndef _" + stateMachine.Name + "_H"); + res.Add("#define _" + stateMachine.Name + "_H"); + res.Add(""); + return res; + } + + private bool IterativeGenHeader(StateMachine stateMachine, string pathHeader) + { + return true; + } + + private bool GoodModule(StateMachine stateMachine, string pathModule) + { + return false; + if (!File.Exists(pathModule)) + { + return false; + } + return true; + } + + private bool GoodHeader(StateMachine stateMachine, string pathHeader) + { + return false; + if (!File.Exists(pathHeader)) + { + return false; + } + return true; + } + + } \ No newline at end of file diff --git a/src/plugins/CFuncGenerator/CPlugin.cs b/src/plugins/CFuncGenerator/CPlugin.cs new file mode 100644 index 0000000..432bf71 --- /dev/null +++ b/src/plugins/CFuncGenerator/CPlugin.cs @@ -0,0 +1,19 @@ +namespace CFuncGenerator; + +public class CPlugin : IndependentPlugin +{ + public override IReturn Start(IParams param) + { + IReturn res = new IReturn(); + + CGenerator generator = new CGenerator(param); + generator.GenerateAll(); + + return res; + } + + public override bool NeedParams + { + get { return true; } + } +} \ No newline at end of file diff --git a/src/plugins/CSharpCodeGenerator/CSharpCodeGenerator.csproj b/src/plugins/CSharpCodeGenerator/CSharpCodeGenerator.csproj new file mode 100644 index 0000000..51e7a05 --- /dev/null +++ b/src/plugins/CSharpCodeGenerator/CSharpCodeGenerator.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/src/plugins/CSharpCodeGenerator/Plugin.cs b/src/plugins/CSharpCodeGenerator/Plugin.cs new file mode 100644 index 0000000..7c3245f --- /dev/null +++ b/src/plugins/CSharpCodeGenerator/Plugin.cs @@ -0,0 +1,399 @@ +using Stater.Models; +using Stater.Plugin; + +namespace CSharpCodeGenerator; + +public class Plugin : ButtonPlugin + { + /// + /// Эта функция вызывается по нажатию кнопки в Stater. + /// + /// + /// + public override PluginOutput Start(PluginInput _pluginParams) + { + var res = PluginOutput.From("OK"); + // machine = _machines; + + pluginParams = _pluginParams; + + var machineList = _pluginParams.StateMachines; + + if (machineList.Count == 0) + { + return res; + } + + // TODO-PRACTICE: DO file dialog + WriteEvents(machineList, _pluginParams.pm.Info.GetWorkFolder()); + foreach (var machine in machineList) + { + path = machine.Name + ".cs"; + GenerateCode(machine); + + } + /* + if (machine.Name == "1") + { + return 1; + } + * */ + return res; + } + + public override PluginRetVal SilentStart(PluginParams _pluginParams) + { + return Start(_pluginParams); + } + + private PluginParams pluginParams; + + private void WriteEvents(List machineList, string _location) + { + var sw = new StreamWriter(_location + "\\Events.cs"); + var indent = 0; + + sw.WriteLine(DoIndent(indent) + "namespace " + pluginParams.pm.Info.Name); + sw.WriteLine(DoIndent(indent) + "{"); + ++indent; + + sw.WriteLine(DoIndent(indent) + "public enum Events"); + sw.WriteLine(DoIndent(indent) + "{"); + ++indent; + + var evtList = new Dictionary(); + foreach (var machine in machineList) + { + foreach (var anEvent in machine.Events) + { + //evtList.Add(anEvent); + //evtList.Add(anEvent.Name, anEvent); + evtList[anEvent.Name] = anEvent; + /* + if (anEvent != StaterV.Attributes.Event.CreateEpsilon()) + { + sw.WriteLine(DoIndent(indent) + anEvent.SafeName + ","); + } + */ + } + } + + foreach (KeyValuePair @event in evtList) + { + sw.WriteLine(DoIndent(indent) + @event.Value.SafeName + ","); + } + //sw.WriteLine(DoIndent(indent) + StaterV.Attributes.Event.CreateEpsilon().SafeName + ","); + --indent; + sw.WriteLine(DoIndent(indent) + "}"); + + --indent; + sw.WriteLine(DoIndent(indent) + "}"); + sw.Close(); + } + + //private StaterV.StateMachine.StateMachine machine; + private string path; + + private const string statesEnumName = "States"; + //private const string transitionsEnumName = "Transitions"; + private const string eventsEnumName = "Events"; + private const string stateVariableName = "state"; + private const string eventArg = "_event"; + + private string DoIndent(int count) + { + var res = ""; + for (int i = 0; i < count; i++) + { + res += "\t"; + } + return res; + } + + private void WriteConstructor(StreamWriter sr, int _indentCount, StateMachine machine) + { + var indentCount = _indentCount; + sr.WriteLine(DoIndent(indentCount) + "public {0}()", machine.Name); + sr.WriteLine(DoIndent(indentCount) + "{"); + indentCount++; + sr.WriteLine(DoIndent(indentCount) + "{0} = {1}.{2};", + stateVariableName, statesEnumName, + machine.StartState.TheAttributes.Name); + indentCount--; + sr.WriteLine(DoIndent(indentCount) + "}"); + //Запись стартового состояния в конструкторе. + } + + private void WriteStateProcessor(StreamWriter sr, int _indentCount, StateMachine machine, bool withStrings) + { + var indentCount = _indentCount; + + if (withStrings) + { + sr.WriteLine(DoIndent(indentCount) + "public void ProcessEventStr(string {0})", + eventArg); + } + else + { + sr.WriteLine(DoIndent(indentCount) + "public void ProcessEvent(Events {0})", + eventArg); + } + sr.WriteLine(DoIndent(indentCount) + "{"); + indentCount++; + + //switch по состояниям. + sr.WriteLine(DoIndent(indentCount) + "switch ({0})", stateVariableName); + sr.WriteLine(DoIndent(indentCount) + "{"); + foreach (var state in machine.States) + { + sr.WriteLine(DoIndent(indentCount) + "case {0}.{1}:", + statesEnumName, state.TheAttributes.Name); + indentCount++; + WriteEventSwitch(sr, indentCount, state, withStrings); + sr.WriteLine(DoIndent(indentCount) + "break;"); + indentCount--; + } + sr.WriteLine(DoIndent(indentCount) + "}"); + + indentCount--; + sr.WriteLine(DoIndent(indentCount) + "}"); + } + + private void WriteActionsDeclarations(StreamWriter sr, int _indentCount, StateMachine machine) + { + var indentCount = _indentCount; + + //Создаем список выходных воздействий. + HashSet actionSet = new HashSet(); + foreach (var state in machine.States) + { + PutActionsToSet(ref actionSet, state.TheAttributes.EntryActions); + PutActionsToSet(ref actionSet, state.TheAttributes.ExitActions); + + foreach (var arrow in state.OutgoingArrows) + { + var trans = arrow as Transition; + if (trans == null) + { + throw new StaterV.Exceptions.FormStructureException("From state " + state.TheAttributes.Name + + " doing out not transition!"); + } + PutActionsToSet(ref actionSet, trans.TheAttributes.Actions); + } + } + + //Печатаем. + foreach (var action in actionSet) + { + sr.WriteLine(DoIndent(indentCount) + "/// "); + sr.WriteLine(DoIndent(indentCount) + "///" + action.Comment); + sr.WriteLine(DoIndent(indentCount) + "/// "); + sr.WriteLine(DoIndent(indentCount) + "public abstract void " + action.Name + "();"); + } + } + + private void PutActionsToSet(ref HashSet actionSet, IEnumerable actions) + { + foreach (var action in actions) + { + actionSet.Add(action); + } + } + + /// + /// Process one state. + /// + /// + /// + /// + /// + private void WriteEventSwitch(StreamWriter sr, int _indentCount, State state, bool withStrings) + { + var indentCount = _indentCount; + + string processFunction = (withStrings) ? "ProcessEventStr" : "ProcessEvent"; + + sr.WriteLine(DoIndent(indentCount) + "switch ({0})", eventArg); + sr.WriteLine(DoIndent(indentCount) + "{"); + foreach (var arr in state.OutgoingArrows) + { + var trans = arr as Transition; + if (trans != null) + { + if (trans.TheAttributes.TheEvent != null) + { + if (withStrings) + { + sr.WriteLine(DoIndent(indentCount) + "case \"{0}\":", + trans.TheAttributes.TheEvent.Name); + } + else + { + sr.WriteLine(DoIndent(indentCount) + "case {0}.{1}:", eventsEnumName, + trans.TheAttributes.TheEvent.SafeName); + } + indentCount++; + + //Сделать переход. + State st = (State)trans.End; + sr.WriteLine(DoIndent(indentCount) + "{0} = {1}.{2};", + stateVariableName, statesEnumName, st.TheAttributes.Name); + + //Выходные воздействия при выходе из состояния. + WriteActions(sr, indentCount, state.TheAttributes.ExitActions); + + //Выходные воздействия на переходе. + WriteActions(sr, indentCount, trans.TheAttributes.Actions); + + //Выходные воздействия при входе в состояние. + State newState = trans.End as State; + if (newState == null) + { + throw (new StaterV.Exceptions.InvalidDiagramException("End of transition from state " + + state.TheAttributes.Name + " is not a State!")); + } + WriteActions(sr, indentCount, newState.TheAttributes.EntryActions); + + sr.WriteLine(DoIndent(indentCount) + "break;"); + indentCount--; + } + else + { + throw (new Exception()); + } + } + else + { + throw (new Exception()); + } + + } + + //Вложенный автомат. + if (state.TheAttributes.NestedMachines != null) + { + if (state.TheAttributes.NestedMachines.Count > 0) + { + sr.WriteLine(DoIndent(indentCount) + "default:"); + ++indentCount; + foreach (var machine in state.TheAttributes.NestedMachines) + { + //sr.WriteLine(DoIndent(indentCount) + "{0}_{1}.{2}({3});", + // state.TheAttributes.Name, machine, processFunction, eventArg); + sr.WriteLine(DoIndent(indentCount) + "{0}.{1}({2});", + machine.Name, processFunction, eventArg); + } + sr.WriteLine(DoIndent(indentCount) + "break;"); + --indentCount; + + } + } + + sr.WriteLine(DoIndent(indentCount) + "}"); + } + + private void WriteActions(StreamWriter sr, int _indentCount, List actions) + { + var indentCount = _indentCount; + + if (actions == null) + { + return; + } + + foreach (var act in actions) + { + sr.WriteLine(DoIndent(indentCount) + act.Name + "();"); + } + } + + private void GenerateCode(StateMachine machine) + { + StreamWriter sr = new StreamWriter(path); + var indentCount = 0; + + sr.WriteLine(DoIndent(indentCount) + "namespace " + pluginParams.pm.Info.Name); + sr.WriteLine(DoIndent(indentCount) + "{"); + ++indentCount; + + sr.WriteLine(DoIndent(indentCount) + "public abstract class " + machine.Name); + sr.WriteLine(DoIndent(indentCount) + "{"); + indentCount++; + + //Состояния. + sr.WriteLine(DoIndent(indentCount) + "public enum " + statesEnumName); + sr.WriteLine(DoIndent(indentCount) + "{"); + indentCount++; + foreach (var state in machine.States) + { + sr.WriteLine(DoIndent(indentCount) + state.TheAttributes.Name + ","); + } + indentCount--; + sr.WriteLine(DoIndent(indentCount) + "}"); + + //Переходы. + sr.WriteLine(DoIndent(indentCount) + "public enum Transitions"); + sr.WriteLine(DoIndent(indentCount) + "{"); + indentCount++; + foreach (var transition in machine.Transitions) + { + sr.WriteLine(DoIndent(indentCount) + transition.TheAttributes.Name + ","); + } + indentCount--; + sr.WriteLine(DoIndent(indentCount) + "}"); + + //События. + /* + sr.WriteLine(DoIndent(indentCount) + "public enum Events"); + sr.WriteLine(DoIndent(indentCount) + "{"); + indentCount++; + foreach (var anEvent in machine.Events) + { + sr.WriteLine(DoIndent(indentCount) + anEvent.SafeName + ","); + } + indentCount--; + sr.WriteLine(DoIndent(indentCount) + "}"); + * */ + + //Переменная, в которой хранится состояние. + sr.WriteLine(DoIndent(indentCount) + "private {0} state;", statesEnumName); + + WriteNestedMachines(sr, indentCount, machine); + + WriteConstructor(sr, indentCount, machine); + + //Объявления выходных воздействий. + WriteActionsDeclarations(sr, indentCount, machine); + + //Функция обработки событий. + WriteStateProcessor(sr, indentCount, machine, false); + + WriteStateProcessor(sr, indentCount, machine, true); + + indentCount--; + sr.WriteLine(DoIndent(indentCount) + "}"); + + --indentCount; + sr.WriteLine(DoIndent(indentCount) + "}"); + sr.Close(); + } + + #region definitions + private void WriteNestedMachines(StreamWriter sr, int _indentCount, StateMachine machine) + { + int indentCount = _indentCount; + foreach (var state in machine.States) + { + if (state.TheAttributes.NestedMachines == null) + { + continue; + } + + foreach (var nestedMachine in state.TheAttributes.NestedMachines) + { + sr.WriteLine(DoIndent(indentCount) + "public {0} {1} {{ get; set; }}", nestedMachine.Type, nestedMachine.Name); + } + } + } + #endregion + } \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/BaseNode.cs b/src/plugins/SLXParser/Data/BaseNode.cs new file mode 100644 index 0000000..4055189 --- /dev/null +++ b/src/plugins/SLXParser/Data/BaseNode.cs @@ -0,0 +1,8 @@ +namespace SLXParser.Data +{ + public class BaseNode + { + // id или SSID + public int Id { get; set; } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Chart.cs b/src/plugins/SLXParser/Data/Chart.cs new file mode 100644 index 0000000..8fd7e0c --- /dev/null +++ b/src/plugins/SLXParser/Data/Chart.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using SLXParser.Utils; + +namespace SLXParser.Data +{ + public class Chart : BaseNode + { + public string Name { get; set; } + public DoublePoint WindowPosition { get; set; } + public DoublePoint ViewLimits { get; set; } + public float ZoomFactor { get; set; } + public Color StateColor { get; set; } + public Color StateLabelColor { get; set; } + public Color TransitionColor { get; set; } + public Color TransitionLabelColor { get; set; } + public Color JunctionColor { get; set; } + public Color ChartColor { get; set; } + public int ViewObj { get; set; } + public bool Visible { get; set; } + + public List ChildrenState = new List(); + public List ChildrenData = new List(); + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Data.cs b/src/plugins/SLXParser/Data/Data.cs new file mode 100644 index 0000000..da6c9de --- /dev/null +++ b/src/plugins/SLXParser/Data/Data.cs @@ -0,0 +1,29 @@ +namespace SLXParser.Data +{ + public class Data : BaseNode + { + public string Name { get; set; } + public string Scope { get; set; } + public Props Props = new Props(); + public string DataType { get; set; } + } + + public class Props + { + public string Frame { get; set; } + + // Type + public string TypeMethod { get; set; } + public string TypePrimitive { get; set; } + public int TypeWordLength { get; set; } + + // Type Fixpt + public string TypeFixptScalingMode { get; set; } + public int TypeFixptFractionLength { get; set; } + public string TypeFixptSlope { get; set; } + public int TypeFixptBias { get; set; } + + // Unit + public string UnitName { get; set; } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Instance.cs b/src/plugins/SLXParser/Data/Instance.cs new file mode 100644 index 0000000..166d484 --- /dev/null +++ b/src/plugins/SLXParser/Data/Instance.cs @@ -0,0 +1,7 @@ +namespace SLXParser.Data +{ + public class Instance : BaseNode + { + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Machine.cs b/src/plugins/SLXParser/Data/Machine.cs new file mode 100644 index 0000000..ebeb559 --- /dev/null +++ b/src/plugins/SLXParser/Data/Machine.cs @@ -0,0 +1,8 @@ +namespace SLXParser.Data +{ + public class Machine : BaseNode + { + public Chart Chart { get; set; } + public string Created { get; set; } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/State.cs b/src/plugins/SLXParser/Data/State.cs new file mode 100644 index 0000000..ba316b9 --- /dev/null +++ b/src/plugins/SLXParser/Data/State.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using SLXParser.Utils; + +namespace SLXParser.Data +{ + public class State : BaseNode + { + public string LabelString { get; set; } + public DoublePoint Position { get; set; } + public int FontSize { get; set; } + public bool Visible { get; set; } + public int Subviewer { get; set; } + public string Type { get; set; } + public string Decomposition { get; set; } + public int ExecutionOrder { get; set; } + + public static ActiveStateOutput ActiveStateOutput = new ActiveStateOutput(); + public List ChildrenState = new List(); + public List ChildrenTransition = new List(); + } + + public class ActiveStateOutput + { + public bool UseCustomName { get; set; } + public string CustomName { get; set; } + public bool UseCustomEnumTypeName { get; set; } + public string EnumTypeName { get; set; } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Stateflow.cs b/src/plugins/SLXParser/Data/Stateflow.cs new file mode 100644 index 0000000..f5546a4 --- /dev/null +++ b/src/plugins/SLXParser/Data/Stateflow.cs @@ -0,0 +1,8 @@ +namespace SLXParser.Data +{ + public class Stateflow + { + public Machine Machine { get; set; } + public Instance Instance { get; set; } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Transition.cs b/src/plugins/SLXParser/Data/Transition.cs new file mode 100644 index 0000000..689afda --- /dev/null +++ b/src/plugins/SLXParser/Data/Transition.cs @@ -0,0 +1,26 @@ +using SLXParser.Utils; + +namespace SLXParser.Data +{ + public class Transition : BaseNode + { + public string LabelString { get; set; } + + public DoublePoint LabelPosition { get; set; } + public int FontSize { get; set; } + + public Address Src { get; set; } + public Address Dst { get; set; } + public Point2D MidPoint { get; set; } + public DoublePoint DataLimits { get; set; } + public int Subviewer { get; set; } + public string DrawStyle { get; set; } + public int ExecutionOrder { get; set; } + } + + public class Address + { + public int SSID { get; set; } + public DoubleDoublePoint Intersection { get; set; } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Parser.cs b/src/plugins/SLXParser/Parser.cs new file mode 100644 index 0000000..1a9d93c --- /dev/null +++ b/src/plugins/SLXParser/Parser.cs @@ -0,0 +1,659 @@ +using System.Globalization; +using System.Xml; +using SLXParser.Data; +using SLXParser.Utils; + +namespace SLXParser +{ + public class Parser + { + private readonly string inFile; + private readonly string zipPath; + + public Parser(string path) + { + if (!File.Exists(path)) + { + throw new InvalidOperationException("Файл не найден"); + } + + inFile = path; + var parentDir = Directory.GetParent(inFile); + + if (parentDir == null) + { + throw new InvalidOperationException("Не удалось выбрать папку для распаковки"); + } + + zipPath = Path.Combine(parentDir.ToString(), "slx_parser.temp"); + } + + public Stateflow Parse() + { + System.IO.Compression.ZipFile.ExtractToDirectory(inFile, zipPath); + + var simulinkPath = Path.Combine(zipPath, "simulink", "stateflow.xml"); + + if (!File.Exists(simulinkPath)) + { + Directory.Delete(zipPath, true); + throw new InvalidOperationException("Не удалось найти файл от stateflow"); + } + + try + { + return ParseFile(simulinkPath); + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } + finally + { + Directory.Delete(zipPath, true); + } + } + + private Stateflow ParseFile(string file) + { + var xDoc = new XmlDocument(); + xDoc.Load(file); + var xRoot = xDoc.DocumentElement; + if (xRoot == null) + { + throw new InvalidOperationException("Проблема парсинга stateflow xml"); + } + + if (xRoot.Name != "Stateflow") + { + throw new InvalidOperationException("Главный элемент не является Stateflow"); + } + + return ParseStateflow(xRoot); + } + + private Stateflow ParseStateflow(XmlNode xmlNode) + { + var stateflow = new Stateflow(); + + foreach (XmlNode node in xmlNode.ChildNodes) + { + if (node.Name == "machine") + { + stateflow.Machine = ParseMachine(node); + } + + if (node.Name == "instance") + { + stateflow.Instance = ParseInstance(node); + } + } + + return stateflow; + } + + private Instance ParseInstance(XmlNode xmlNode) + { + var instance = new Instance + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + if (node.Name == "P") + { + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "name": + instance.Name = node.InnerText; + break; + } + + break; + } + } + } + + return instance; + } + + private Machine ParseMachine(XmlNode xmlNode) + { + var machine = new Machine + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "created": + machine.Created = node.InnerText; + break; + } + + break; + } + case "Children": + foreach (XmlNode childrenNode in node.ChildNodes) + { + if (childrenNode.Name == "chart") + { + machine.Chart = ParseChart(childrenNode); + } + } + + break; + } + } + + return machine; + } + + private Chart ParseChart(XmlNode xmlNode) + { + var chart = new Chart + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "name": + chart.Name = node.InnerText; + break; + case "windowPosition": + chart.WindowPosition = Parse4Point(node.InnerText); + break; + case "viewLimits": + chart.ViewLimits = Parse4Point(node.InnerText); + break; + case "zoomFactor": + chart.ZoomFactor = float.Parse(node.InnerText, CultureInfo.InvariantCulture); + break; + case "stateColor": + chart.StateColor = ParseColor(node.InnerText); + break; + case "stateLabelColor": + chart.StateLabelColor = ParseColor(node.InnerText); + break; + case "transitionColor": + chart.TransitionColor = ParseColor(node.InnerText); + break; + case "transitionLabelColor": + chart.TransitionLabelColor = ParseColor(node.InnerText); + break; + case "junctionColor": + chart.JunctionColor = ParseColor(node.InnerText); + break; + case "chartColor": + chart.ChartColor = ParseColor(node.InnerText); + break; + case "viewObj": + chart.ViewObj = int.Parse(node.InnerText); + break; + case "visible": + chart.Visible = ParseBool(node.InnerText); + break; + } + + break; + } + case "Children": + foreach (XmlNode childrenNode in node.ChildNodes) + { + switch (childrenNode.Name) + { + case "state": + chart.ChildrenState.Add(ParseState(childrenNode)); + break; + case "data": + chart.ChildrenData.Add(ParseData(childrenNode)); + break; + } + } + + break; + } + } + + return chart; + } + + private State ParseState(XmlNode xmlNode) + { + var state = new State + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "labelString": + state.LabelString = node.InnerText; + break; + case "position": + state.Position = Parse4Point(node.InnerText); + break; + case "fontSize": + state.FontSize = int.Parse(node.InnerText); + break; + case "visible": + state.Visible = ParseBool(node.InnerText); + break; + case "subviewer": + state.Subviewer = int.Parse(node.InnerText); + break; + case "type": + state.Type = node.InnerText; + break; + case "decomposition": + state.Decomposition = node.InnerText; + break; + case "executionOrder": + state.ExecutionOrder = int.Parse(node.InnerText); + break; + } + + break; + } + case "activeStateOutput": + { + foreach (XmlNode childrenNode in node.ChildNodes) + { + if (childrenNode.Name == "P") + { + var name = childrenNode.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "useCustomName": + State.ActiveStateOutput.UseCustomName = ParseBool(node.InnerText); + break; + case "customName": + State.ActiveStateOutput.CustomName = node.InnerText; + break; + case "useCustomEnumTypeName": + State.ActiveStateOutput.UseCustomEnumTypeName = ParseBool(node.InnerText); + break; + case "enumTypeName": + State.ActiveStateOutput.EnumTypeName = node.InnerText; + break; + } + } + } + + break; + } + case "Children": + foreach (XmlNode childrenNode in node.ChildNodes) + { + switch (childrenNode.Name) + { + case "state": + state.ChildrenState.Add(ParseState(childrenNode)); + break; + case "transition": + state.ChildrenTransition.Add(ParseTransition(childrenNode)); + break; + } + } + + break; + } + } + + return state; + } + + + private Transition ParseTransition(XmlNode xmlNode) + { + var transition = new Transition + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "labelString": + transition.LabelString = node.InnerText; + break; + case "labelPosition": + transition.LabelPosition = Parse4Point(node.InnerText); + break; + case "fontSize": + transition.FontSize = int.Parse(node.InnerText); + break; + case "midPoint": + transition.MidPoint = ParsePoint(node.InnerText); + break; + case "dataLimits": + transition.DataLimits = Parse4Point(node.InnerText); + break; + case "subviewer": + transition.Subviewer = int.Parse(node.InnerText); + break; + case "drawStyle": + transition.DrawStyle = node.InnerText; + break; + case "executionOrder": + transition.ExecutionOrder = int.Parse(node.InnerText); + break; + } + + break; + } + case "src": + transition.Src = ParseAddress(node); + break; + case "dst": + transition.Dst = ParseAddress(node); + break; + } + } + + return transition; + } + + private static Address ParseAddress(XmlNode xmlNode) + { + var address = new Address(); + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "SSID": + address.SSID = int.Parse(node.InnerText); + break; + case "intersection": + address.Intersection = Parse8Point(node.InnerText); + break; + } + + break; + } + } + } + + return address; + } + + + private static Data.Data ParseData(XmlNode xmlNode) + { + var data = new Data.Data + { + Id = ParseId(xmlNode), + Name = ParseName(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "scope": + data.Scope = node.InnerText; + break; + case "dataType": + data.DataType = node.InnerText; + break; + } + + break; + } + case "props": + foreach (XmlNode childrenNode in node.ChildNodes) + { + switch (childrenNode.Name) + { + case "P": + { + var name = childrenNode.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "frame": + data.Props.Frame = childrenNode.InnerText; + break; + } + + break; + } + case "type": + { + foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) + { + if (childrenNode2.Name == "P") + { + var name = childrenNode2.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "method": + data.Props.TypeMethod = childrenNode2.InnerText; + break; + case "primitive": + data.Props.TypePrimitive = childrenNode2.InnerText; + break; + case "wordLength": + data.Props.TypeWordLength = int.Parse(childrenNode2.InnerText); + break; + } + + break; + } + + switch (childrenNode2.Name) + { + case "fixpt": + { + foreach (XmlNode childrenNode3 in childrenNode2.ChildNodes) + { + if (childrenNode3.Name == "P") + { + var name = childrenNode3.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "scalingMode": + data.Props.TypeFixptScalingMode = + childrenNode3.InnerText; + break; + case "fractionLength": + data.Props.TypeFixptFractionLength = + int.Parse(childrenNode3.InnerText); + break; + case "slope": + data.Props.TypeFixptSlope = childrenNode3.InnerText; + break; + case "bias": + data.Props.TypeFixptBias = + int.Parse(childrenNode3.InnerText); + break; + } + } + } + + break; + } + } + } + + break; + } + case "unit": + { + foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) + { + if (childrenNode2.Name == "P") + { + var name = childrenNode2.Attributes?["Name"].Value; + switch (name) + { + case null: + continue; + case "frame": + data.Props.UnitName = childrenNode2.InnerText; + break; + } + } + } + + break; + } + } + } + + break; + } + } + + return data; + } + + private static int ParseId(XmlNode xmlNode) + { + var id = xmlNode.Attributes?["id"]; + if (id != null) return int.Parse(id.Value); + var name = xmlNode.Attributes?["Name"]; + if (name != null && name.Value == "SSID") + { + return int.Parse(xmlNode.InnerText); + } + var ssid = xmlNode.Attributes?["SSID"]; + if (ssid != null) + { + return int.Parse(ssid.Value); + } + + return -1; + } + + + private static string ParseName(XmlNode xmlNode) + { + var name = xmlNode.Attributes?["name"].Value; + return name ?? ""; + } + + private static Point2D ParsePoint(string line) + { + line = line.Substring(1, line.Length - 2); + var numbers = line.Split(' '); + + var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); + var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); + + return new Point2D(x1, y1); + } + + private static DoublePoint Parse4Point(string line) + { + line = line.Substring(1, line.Length - 2); + + var numbers = line.Split(' '); + + var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); + var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); + var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); + var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); + + return new DoublePoint(new Point2D(x1, y1), new Point2D(x2, y2)); + } + + private static DoubleDoublePoint Parse8Point(string line) + { + line = line.Substring(1, line.Length - 2); + var numbers = line.Split(' '); + + var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); + var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); + var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); + var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); + var x3 = float.Parse(numbers[4], CultureInfo.InvariantCulture); + var y3 = float.Parse(numbers[5], CultureInfo.InvariantCulture); + var x4 = float.Parse(numbers[6], CultureInfo.InvariantCulture); + var y4 = float.Parse(numbers[7], CultureInfo.InvariantCulture); + + return new DoubleDoublePoint(new DoublePoint(new Point2D(x1, y1), new Point2D(x2, y2)), + new DoublePoint(new Point2D(x3, y3), new Point2D(x4, y4))); + } + + private static Color ParseColor(string line) + { + line = line.Substring(1, line.Length - 2); + var numbers = line.Split(' '); + + var r = (int)(double.Parse(numbers[0], CultureInfo.InvariantCulture) * 256); + var g = (int)(double.Parse(numbers[1], CultureInfo.InvariantCulture) * 256); + var b = (int)(double.Parse(numbers[2], CultureInfo.InvariantCulture) * 256); + + return new Color(r, g, b); + } + + private static bool ParseBool(string line) + { + return line == "1"; + } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Program.cs b/src/plugins/SLXParser/Program.cs new file mode 100644 index 0000000..1c46a94 --- /dev/null +++ b/src/plugins/SLXParser/Program.cs @@ -0,0 +1,18 @@ +using System; +namespace SLXParser +{ + internal class Program + { + public static void Main(string[] args) + { + const string path = "/Users/vnazarov/PycharmProjects/ya-hakaton/BR_GATES_HDL.slx"; + + var parser = new Parser(path); + var stateflow = parser.Parse(); + var pluginStateflow = new Translator().Convert(stateflow); + + Console.WriteLine(stateflow.Machine.Chart.ChildrenState); + Console.WriteLine(stateflow.Machine.Chart.ChildrenState.Count); + } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/SLXParser.csproj b/src/plugins/SLXParser/SLXParser.csproj new file mode 100644 index 0000000..51e7a05 --- /dev/null +++ b/src/plugins/SLXParser/SLXParser.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/src/plugins/SLXParser/SLXPlugin.cs b/src/plugins/SLXParser/SLXPlugin.cs new file mode 100644 index 0000000..f877d2f --- /dev/null +++ b/src/plugins/SLXParser/SLXPlugin.cs @@ -0,0 +1,28 @@ +using Avalonia.Controls; +using Stater.Plugin; + +namespace SLXParser; + +public class SLXPlugin : ButtonPlugin +{ + public override PluginOutput Start(PluginInput pluginInput) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Function block files|*.slx"; + ofd.FilterIndex = 0; + var dialogResult = ofd.ShowDialog(); + var result = PluginOutput.From("OK"); + if (dialogResult != DialogResult.OK) + { + result = new PluginOutput(Message: "DialogResult is not OK"); + return result; + } + + var parser = new Parser(ofd.FileName); + var stateflow = parser.Parse(); + var pluginStateflow = new Translator().Convert(stateflow); + Console.WriteLine(pluginStateflow); + result.ChangedMachines.Add(pluginStateflow); + return result; + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/TestData/BR_GATES_HDL.slx b/src/plugins/SLXParser/TestData/BR_GATES_HDL.slx new file mode 100644 index 0000000000000000000000000000000000000000..ec512fa26929bb63167abf7ed5ad9695361d53a5 GIT binary patch literal 22601 zcmaI7Q?O`3v#q&o+k4rzZQHhOYcJcjZQHhO+g`o@+tGc_>ArCv>ZN8rROYCPs`{5%6HT_Ke+=JBy)}CU{Eht^B z%(*QWFd(Dy0eE*pqy{o`s4XF{7Ci3GNA!A1Sr zdxAcqzIO+RNr`7ls2B^@lM?Rp{zeL<_6-QMbgCy9C%L$I6&25BYVx+GR2|aIS@fxK zY4`%m{|}As?xz<<{%IrjPbb{}u91z~|6e7OSOHmJ1{jfAB$L^qYaoIo3AgP4c?xj) z@a1sQ`a<@msq68;VHj$gcb;Fn*jNxID@l^#sZCQ9ZO$lJAxHS7E z=m=FYv&U_x;noRIt4Q(+FL6ybEHr{Y_oTogm`im;@AbBhAe+i2j(2r6XiO999(mZe1S*r_ zk6Et5wN&o;c3wFm;LNqKb4a0fg$ppdSfE{V>vU(1hX$w%#~ed_AexYZvQ!e zsmD-I4+sDN2*>~cX#YJoXLA=DLt6t2Yg&6-vupQvt|Yy;-i6FK9TY~*IO}f6bt2)F z1QR5~uqy(X5COZ-o~Ww?60MfBlKv!<5c&jq7*eg2esweIpxMRSUB11~_L|xDn#Zim zo*Abar<>1qz1mNg9CxQh@T;o8Di|1;s}Qh`*ns+1JHA;E?n`T4G(h0UTEMm3fB=Ro zJ3gYH8Tq7ufYL>IwNDBA{txCWi4}KZ+en~Tq+?k$m_@0WNT<%mDnAuI4en0nZ_!w- zp0;sg=WO)QHW&s3#&)$zAR^Y)v?%W(urAiYOSOH;dD-RrJ?ZQXwEI!EBTT#Zx?UZ$ z;w@Zxz5$pWoNBf=-y#1 z$lE}JLrRqIoJc1fXGU`h+tD-9(zxqeRP8T#cbAro^{ubEdO55@%PMPJ3v8rAub0`w zB&77-`bBJY)}VHFDPEZTx5NFC;WS7M2>G9?XdJJAbL1q`#b*wICj7(pO~Yqp3ugTj zubHLa^mp!4l2D+rFQe_zhbS@Z|SiQ}E31cf86fIOS9z21V zF7q}x3hDA1`SG#S@%^stoOMpStE8o-MimzqJH&q+_maV@pB=B9f;=Pr_}tnM6_sc3 zGEbF1m+k^)AfBJOgOAT+Jeuz2YiL+6h(e@yrxfqO6t*=zEbqiQ81u#<>5_ZhZLlV{ z%@BKjx?+K(CgdbO_N~1IwzRmu5!MwKH92c2DS^SEFp$Kh><(?QF*hyY&Pv@WE7DOi z-gCO$Xlsgw#AIe-Ls(!Xgau96g0hM4a+mQ04RK&T=~5VfDtW6MEDej@j5}@Q#DKjP zOHGQ6N~EIl-tH|c51hLNgt=JzPM8`Q1!c{_`$JkIbRPr;L`JR|c6)7?xgCV!i@!zs?CCvjGxDBGi36t5ssk__9tn9O83-FcBT|FmqD`%-PR&&;YMWDbx zb4yyXm$HNc`Z9X;5FEOi>WGaPfl0=*B_`3pS74!C}yt;NI-h?KyKwOtsx6&l|+o zY-SjmO;;MXC72BrpR+`r8AGRPF#Bg{k9HE=X*?#fzQ!p_{@=YX3?nQe6*HMaM>USY zr}vBMz=JXcL>k|Ln2ofz$P>w?S*i)lTjzNch1Da>#W{saTJj*fH{|81RAzxl_&RL2 z#?SO zTS*z&QcSJKR?dOXfk$0|r-%z0 zg@mM+UzOqh0v|$1HB=~@u}D4w%2#ogvN%7GVPFRdf-OfvfCA;RzhLt=ejhI+%Sw7@mPB_bV8QxMV8M84A~8W1(qBIil4o;NEjut zn~USUX*sg&_R2dbTF-M)c(DIrhe;#g1U;x2;NvUx?%cxzzPf4z1y!p!tXlWci6?x- z!>vM;yDQ%OAeDb^dqz(ME#C!etc%Jr;6znb9sh3kD?_zMX33JCcm9lyO}&jjAJsiKYw-^ZX@W@rd?&# zF8X1Kz&EbYcblYXz^Zww)dW*^VvpAd6J!yPMEVtmpLU2OZ|x#(Nj;HuysPZvQ4p0# zBiVqI+J6c;U0j>BLIK*Eaa7)ET`o&vw=WCSguEdkO}ip$2iR>+*O~0ilypLldoD6_ zeV<1PEve+Lp=3zH#B(P?LPBbopM#G(9m18Ph{>QQJ2y6(mmB%~zWigW*ke_-OplM$ zxqZ3CxCWol`icjAOZmrYO(;;_i8jEHYvvahfyJ;uw@_OIo{lIyzeKvfVNH&+1_u$q zLYEK;YG>ES39&pRB+&1MHOqsfsd$IANCOsLxLozVy&NSFL$!oHsW3RV;?P&UKc1WB zWj-@nUc#4d!}f@x7ow9`=#R=T;ipR=vQJBIP(R9@VnIbWuH-$$%K3MO>Yxq$Qm_S1 z6O-*G#^*1-?A)6dOlBj)!%YYf9%y&p#iI#-lbTxyV_4_1?!<1N1LRozjA>~J00oeQ zN^{H#zEWpya+CeKKZ281UJKs!g}CgED(H4g3*qgL6I9zc2N9zM$5jhjsQ^WWUIviO zNlrmR7WoS*M$Au}6GqdRf%lf@&PL4-wGFygy*%}}R)IavXqN-zx2s%GnN zE@a=iX9MDzjlMUI7U1tBG4Tm?#cV%u$DiC-B`!-LYU5ZW4QGc&ec&QbP7gkK@H#rn z(%GWn9!hHhW*HfEQ`}+-uO2hXt%UL^^P8e`M0)*jT~bI5|8Aus|2=Q)ncb_aDXlU( z7N7(yb6a3xZy*OgN636!*xuACOsE6+WwpFT)!2xz zpKrdO>?o?Zcb7gMy-Ym0@Yjzghnrl}z{-G^7vbxqs55n3glQ;R#qOG zpxb{16S@(?UtM2c-yIsl8Buo^5fQTkt^CEp#U(|6K=OhM|5n8C5<)d;Ky5G|JC{xf zGX(su(hLSmN;bUeKGI|7%y9PLjC-UtWXs@0i(gZ0lN{zs=l@_F8UXdBl93b2iPwll z;JLjjdhaq4J%ohv1xo_kNtd#q?mB2Ck{ytaWRZcwmBG0OrIZkyz+Mha>`FErMs02e z9`lpj0JH!~!q{`>w}FSK|9rS0)L62rA!K)b%6z#O9=Zif=zcSeuojWiS1`_8bf}XH zoH}hs=gAo4;fx^wvdq7I*gs86a}N&wcx^pdjv)YCI5aP)XU6Y6I5@1W!23`EdN-9U zpoTq~0pAbZ1+qx$UU(W3#NYYhuX70=E)XIIvt z!>`t+bW^D~QE+ahs^Yqs39)vaP90AWr>))xn9;kV#zLmycGSnYMz7abWBk$PFu{w5 zv1uO7+IGgokkB6snL??jux!lfJVC(O&sk@-rQ}aM$1h>Jw6BYr``&f$d~@>x;T)*# z)Ke-l-D`WdLuhgGgkeR9-dWg(P3j5ft*iZ_Dw(*)=l&uSQu>6r-S5H8_^e9~u;#88 z?<9m27LVSe8if;@6Bd-HxkPS5aZbWISX`QIds3AwH0o?ja)hy6{LzuICp)d76XK|x zQxe513}niaf7VG2O&x1=vk_vpV>B7w89bP~csw73GXoA+TqOXoLHV@mHI3dlV1+z? z4;B{I%*;sO&r#wTYEsG}7Tu|1=H0;+rxr0h1TzSA*pyy~<9;3MfOm{gz2C>n#fF&f z5Q%nBej&Q;M@@jCfzDTn=K?e((^`RHp?DZru;T5|DQA38M9fLbW>2x(E#$-Vlo&29 z?yg@uUYFrGO6douVujXK(33|bn!H#_Trw(eyIl}JUFkii0@HvTJ5sIXyU zFeMeG;YR-%{4(3HouAILQZC|HqSgC;6F3JBzssRL6hWu0UU(b;pz6Ved#(klk!a!U z=FNC{hCHWBKHXz&2SCM+f!JQCF}l5~>kAP$I1|5mOsVYo>Sw7*4wt9h{24M1db4-F z+r{RI6hV03>{~)IG&2Frm_*#n$QE68!3jfB6b~7RP?k&IA~(?Z znH;W2W-(2Ku-M&DFe*!@Y3uFh>#}K-OPM%jO-D%yre4{JrG<%$I}FHgW@jlGf)pbK z!{?%Ku(l$GZ~j|_837TT6oyfi)eLHm8xaVvE*E3k`r8HsZ0xqip;bIp3oeG~thGPO zg0NxgI)jbo9asSWE=!>M+s*Cchs5Vr+vN?iR`6q3;yrNJK%+zbicKhbe+ zV(dy5-{{=6-Tu0U-B0>HD>O<|18aX*l|QZGDC47>*%S?p7Zw4#-cqBzwzKk*R`guo zglE0$9%%QVgnw8?MFmc%)H9S39y}Zz)b6v1eYyHv|| zZ(9_zfHNYW$`!D-#B-CW%e)6#N^cI})*>hZrG0O}zOTruXY%Tl_Z^b|0o0~c-$EHx zkN71WIku$9+a}Djv!GXMb0f0V?@!p6ng!q$q;(Av((%Gkod%+bK+KhWoz$I9uDHDUKu ztuCo!X?uALt^75rfM&d5q@qELSBj};Lwf==K5vLcFyR0gpTf*EaqDDK zIHfb-Mzj~(UewQPeRBf&*?ZE(*Rss4Iz$k6n}yo!Q;7&>>Ll;J^}cgH+DhJQKdq*f z4A7raZ;|}aEn-064%xd$g*TDsyWGKOt0mLLovP8Uh1U;-l7=|COb$)D1qD^m20f-}4DTubZcGZ=zL8s=YqfF^qHJ%l|8w-W&(BA0mN052omMo$ccz)cj=IAu&u!_ctXC^Y zmUX1MQMGf^vN(Q`S1OKj?2;2?YQVpuk`lx?NQ7+tbE! zcz1ySK**)qp)?%$W`R9tndr-@y&R8}7y#f+^zpwJ>=3if>-)yGZMsw04s#^?{Zsa{ z@VpSq$lGzF8E8`&ORvuEUpQaesQn=()+DIOrXNApQ12bFCw9r>>n&E1tD5%wK9M%XmMnyEeJa zzT>ni`eC41<>1^3bh9dAQ!0SRZN3p}wJCN44xlHRm=Oz{Hy5$3HFhTIN34D_)BGW> zc9?lQ3|+?{Heob6=d@}|8#jR;cX`EoC69N5Rq9MRqSR-TsX^DCOPL9QS)GO)rwp>l zjh>u;LqKWU@-}%OU0^h2)pf3C?gVoU^qh^_A7kBgIzz2Kgl*QLR%sdLw5UznL5oJc z-jU?V?jlKxTRf*CI=&5dA{5X3+_t~7^v@`(064N?tSmBkVI#aOH}0(06hE(HHZGbt zc~pFAnU`HJt7_qzZsf7e2UA#az7##1+Uruk&j(zjt-OSA8j5wV-jS!$dg#D|K%OQZ z7>I?6#DCu~k8X=0*g0LqIb|ZT7FRi>?6D91KIh?hWe57c9k9Krg#yk*t%$a(Z;iNN zhAaKA;G-Q%i_3YcS*|2s@?DeoM?cHV#$}ewImxFrr(|QurQCX=b5-!ECVmaq2RfEv9(8J+#;|Wv z8nnxAQR9xJL{$#20PgZM!=$VS%7^RtKvB(+$upmzNdm4e!Q1MDi9l!nNmXv3(hpyA zTXMTb7%vm%Cxdb5Mu8cUh%Pphmy!w^fZfQtN` zxFWVf;n2H}S7(Dv1+%Ywi<( zcA4eGm#XXoHYyt!fU=P+ih%fGfcQr8Cr>;qknxVx{yoVr6gxexE0BT1qJe#RcpC<^ zX(#aY-JfqCi;hw6Gdrbxt%Zc3lfZGlY6*+dLi(8M9oQLo19)Bx@sx5xmA|qo6Xf7L z+PmG-$I2iThjxYp&@zdGo-?}*H{lj+b5~P65N7vfRgv)cPFmP~(=uMo7c}KrZKBVN z%YsxI^;-3Mf)_5OVtaB1=t-}tC0jhQLOc*&E$=q$M%HbbU1tU9<%PD^iD)cA*u@{% zjT5uPbHIbKOqhei3+#@Q4~b+)zwwpBDP-6ggooF?qizC%UxdSDHep%KUhnGjBiI({ zjELATLXs=)_Ho$oTH+i!ZI*9}sG8X%ni3M)(n3=6v=v66^&5gIJSco7iA=uj6)54k zR|BsQd&eMJ@FTYxHF0wHpsJe7m0;7B#W!u%oZ698NTB^y6p$fcqCEo$4(fwucrFBs zO-jc*IC_PhDP!k6gGQmj9--SWTha-SuC`p+CvbY- z>i}ePo5b`bqx$-e;+6iowdB%wQtIDRIZ=s=5b>?g8k{P2k_X zkBM#~8Uvuiy|S3KNd>XirMb}+>9d;MXlS2zm&=mh0+S3-b%|2UE0ak`k%ziiFa-`C zNn@`?&1;-HRMKWoN~v2X0^p4Z2oBH+a6aA`SzsoqE_%91iiW4`KfrS}y3*j4R{)$9 zbv~XnrA1D<6kyKR;B;>2%pL*6un z)p*t2d69PCBEnV3Z4wMni(N4|;pMWQ5k;$Xj^%^=k*5^@z=XsZjpH74Vf$I9Bj=|(m z=V$#2Gkl#R*V0Mg3MMhvka=%=!oV$SaVK5g=;`vra_Mz?Bf;T&rZC($-nZjO%~$74 z62>b3<0Gf5|I71*C;h}Xq$9YVg4}B;r!Nw~F3_4cUmJ0`R$FT0UzpK)2coxp1i3U% z1kQGGyQqJPh3e%u^D?*?ZG6ISe-i`=!^qV9XY#ffg)>wvl5;J^7PNH;I!)N!e1hD% zST@EToyV}*T%q-dzq{D1A4;L9F5Kvi)0^hz4A|Y?lMy~yZ|g6L9+Kpv2i<%PQQix`aj0i4#4ChG>VT;(2gv- zt7w>NOpTq?jmF-qz`Qav?@{a}4Qqq*!+Xo8!-~|~pk(9Bnp&aAqCug_2 zV$J%%`g-9CrrBRfnK8H9$>d8Ue!y9$Rz1wp6U zh6rQ zt3@Fm^{uY+d*^o&ecg{FXF0LKWUqIgh<_2@Do6#tsl~M*WrOvZbJUH5k`lY=JSL{i z0;W2RltQ2U0s_^7sHJNnI+IuLkXP`&=zk$cgcAZ5ftr7xreL9eB31(^GN1a<5K*F^ zr>q`!@+#c;DGv7olR0XwOCc3ij$G5`)FZ$LT!HDaZ#D6S+!UE#B!YnBvczVDm9Ea= zdX~hEk~%%}2odhr5F#kuNk8CS#)u30cBAq$;G1U1dA$$AH)kIC@{BJESKx0Cpf|;R zU@^rMm4&DL+iW>fFGyVW=Egl9rAGwyOb7-F3S~p>>PHN|`aAZUoH+=3^owC9$7RUd z31BEJJi1y|J04Pyo9T6v1FPx0PO)>K@ENaQ=;(B7LKV+#ZEvCwt8b((x2tYSw>4yL z6^nF7nAo?i#p#BsCHrw(=n<`T|-R}Bskd=VD;VqQ%$-9f0@;Uv zDxV{`3b}BiTGiD$C9kGWZCN%gubz$D-|GG20M3Pmmrd7vrQ3IVZmOC^2F%z%H)bMB zQQSzTTl_1{Dzru_tIkfcv|ohV_}!qkq0nU4?aH*$1fsOGtF8uFq7F5d{TjpkZnBXFQya? zLknlLq1>GW@}b4_V&?*q2@K*8SF!%iHvvlUFdRAuNgs=ml*(~+uyOx!IC%Q8{KD)uU~y z<88{!h9kv$e)J=o$x%`wM5fwMKj21PO8?J?U+$5{euhTdYk>6rh(P0+RPRUebPYv3 z8YcbWv(?*U1C#0v;;(LEgWJJSUA9MQQJhWYqrATkao;jg2073I&X>-|^y+7%@HO}J zsG;R%Iq}wtBqz~s6NP_KUlJ1xYxM?nk+zqSd>0hYfL}KNek`oMa_TKYh9%_0Xo@-GPonUwUs1s)3nV1qB2y9Bbs^!qmaihl#yKv5q8kvh0h3P1 zFv~b|*n{jN*i6GtMO-hO)VVh~!^d*N2MeIf5*@zM*{L}{Im?G{rwwS>GAp)>*u1_d z56!$-2rWuOW$nW9lRy(xv(-1IBU{n-@5`v*KKDo#9C}%sx$odF#D2U5AF>Jk;`vyn z^?F(Tu63vMT9rb3eLb8J->>`<0GgTrz?wnl{0));Bolge@d3IuZeO8cW2B7gvLX}He~M@ zcl%0^HY68fyS6OnSE_}yymfefNFqw95&YJVXaFf=KCp^Pys%ZGFY zzfC4!8tGAGAxTu(I#qTh zQIuH|2|D>Y35DnIg--4d|B`ej+gE#OJ(oLDBU}mA!`X1~Er$Ga+A4paJyv`4h2(3p zZfuiit(H-wSw?(ukDtzb{DQ6m%aJNyhPLooS{Z!C^7E$iMDWblh}rwe_g^UPKW41E z`y?>)e@>-)3jhH0|Bm8}>}*Xf%#=)=>Hh=bs&#DausITbdU^#B0tdJC6V}G3tijmk z1yibo!N<{-9D%M34dl0z{*gG#HS6IWJwFv=Hz^txy`xULaO%~;RKxlm^`hUm&BqkC z7v*E=h}rE+H??gz)bgn`b-x=l&*vAVSG(@sFNQe7;T6c`?p|k3zb(375vA>SSAU(~ zmm8s0raj`>+p!ei8&Yd6d(xbp=`tT$A)&4wND6C8uNkW+fhX^2+ln~;*D_nI}?bpC;^O|MIH zxU(A-QI*zLE3W?C#bMETZz7MAOL$erQj7fcoFAV!qf)1dY2(^j-;STVb25y-P9QS$ zf;BieT|O%jSHxskDUCR9bk{}n-y|w-PoXJ>RppFvTjOdNqH(1unSd>SWJWawUZ^>R~;i@LI($JNTMJy%3bkuBO%iPA13 zTy^RQ0e!ePqE>YzSgm`@3vmvRI?DTV>Z7md*LoObY7`%3)_#9HdA#Ocaw&QKY0 zVAN2pkNP*??*`@9851O60?*x?ZK3g_Cy0?8yfg$tL1&*pr#irEwl~C{>C0ZGR~31?M+F@II}o#rU`g~ZtL0N%dWaE!px6MKy1H-xyZOHL9f(v z(yjPKc1-@aD2mXvbulN~?)bo<#HB_%7=3Ane8J65%&OI7-1(Yqdv%tNQ7<^>by1@Z z9=YCDBZsb>)RX~5)>G);<{^!nlO){X@0p5R4xNC5rrmvR9I)#!fTVaK#Ac_pm@y6< zE`U-z>eA*oq7ffLr3C_&?R~B_f8C3E0G%c>oYSY2@a0+Dw^MgV1E)KwA`X6EyY=4a z1v{+2i|!>)5{zFZa28-mkBR;#iwZ<@Fp6tAd~S=dfP-E{B&EVf-(Ml;sD<1?!y*j; zwqUuZO=FXwSCuTx_nOAIn8GanzDg$eCC*gKQhJ$f6>B1g(*-?9dNoKQVgW(M1%Oz6 zr{s6IV`q=D@asP(px{8zWdf2>r)YrSvy6b#llsMsVNiW#IRiiLcE-gbId*N*xhKq2 z3;tw!6ChY5DAcVj|Ng~{)-d+JhDRWl(yVhwa28N0+Hw#<`35Mr=3v)@nAWbNLES#h z=$-Vjg!;iMJ;YoFj%P3~1QYv$0k{ql&Mf+=^xgg8fw&jD3||5;)2TCV^cxEkkMEz1 zO1aRym<rdW$2J!a0PKE z*!mwpr%DAj$Pw&FmD|mwFk6zF&kt+b85%#mcz|;bN(!-%Qx@Ye@c@>k0+r@zlRb7TM=v3`X7Mzc%c*Be4yLkQ(3dMlq6JEW+KXCT}_Rt-tgT ziz^6n)t5=;;&;QqdbQ?R89tR`;yK{FjkIn%dKWaL%6V_E4zruAQl&OgHZO$c>%#{} zC>aGP0ojV-5>7gFlpZv}^r6Mn3YZ|Kx4o<2#$=h3g=~rvH55W!%uY_&gu8ROhRTGa z1a~`)rWO`WGV=>W4_N{67IL`?^(dw;#=+?K^wugnMIvK zXOf44se)CJFEu`efK1O@dd1lFJfY!ZFovHZJUMQ3;o8IWKV3uAo4Zy zR2l|CMo8kuQ{~dHt2V4RElwzsZdYHnl&_Ilb}o?AZf^`}TG7Bi<+2smZb5!&F9!c3 z+n5ieCSMi(JwAW`1kD@MA!|@*P&$jn8l^BfnrQFIV*@({4X7D7vL~fc+J58$jZPdf z&0HCL&Ze598LU>x&C1`6Njg&3o%>xm_Ke2jd$S#FW=2Cmkel!oZt5o&8dddoibV=| z5ED4P1Hxc&j;WcY5;e!(LfpJ%Y?M&J0)$WD>CWCLO*#m<#+*S^a9%=pK)QlnrGhJr z9p{*t;3k>LjH&G#`K>;o9HO{?1!HY10taVKD27MTNIG2g3KLw*UeWCg&-grfd(g9{ z?F+Fn<>N5)FLMkmz4sr{r42iBzc7@qJcLRsej{ZDfI?uaV6PPx0A(dhpzZJ}q9n&? zEfj<>dbqD>V5~n2IEh1W_x|Sg1Yq{O6l@bPWE`;FLHGg$DAWDpLczZMSNs%Ewo7dE z6p9*vB950)pvO+|s?^xUhWzZ{X%LV?5}atA4D1G&G&W%Y>v#3D9(=veHZF94g^IDP9J9dDAk#e_@5kj?7C-A{z+qh#wT4V zIDi-1o{O+2Fs4kQMqUXbcktO#Ac$3rEYINJ%h{3EP=XcCJq)g^cJo-UXn?adJsoNd zKPX-0=|kPmg4~hv*5_O75(oz}ZD0N}DxLgZ&d~aAq7LkKf!RbT-4NeUPeGmdqUUig z4%az6;(FeT>AX-c8k4IM7cU#KI!pGU*2!!=!T=M=O2`UfBjWzn(<2u1JVc#=F*{Zm zFlpe1+sK{eIF2GBARL79qRBaXjfM1#oj8l78HxAl^(9HH{w<&{tjgWhR|yXF3C%WJ z?A*OZ0df*ZbnE2=Iwh@Rv;DHt>g$?7r=0LC>Oh?(OtLsM3f*8@oDU**wDJx}Z1t+j z7BZLb=7ad?VgdtHn!q0?ZHWy`aa~rYT6Boe^rHsDhFFphDbQ?B93fXBLpI^uWgk7M zEE9!0%G;hd+(pzOALw5Pk`-n=Fh>b}Nq`+cid9eXrvhOewpWr!$S?Km*TnI>&J^D? zmA^2`EMu)A12}v1?n9_((bTV7+&2)JKCV7BP^OCzB@tR@bM zlz```6_2ZLfS9sc1WziV;o)2Aab*v6+d77_qgKF(fo3zi7Z94bP0v$ksSo#oWAO^C z(EylQxY_wbBg{SmR2Cak^&4PKsNgd+uc3MRE+S)fP@g6mdLm6zBB8_=jB3;)N|uH; z`IW(8Y5z9aT;ux;(!RFigpIUiGOkzOzSc~0?hx&$94{7$T?-iO_< zQT1=<&v>$V-;#H*_#b4j;E%K=s+G}yhlRKJDe{HEg}*IULg>Ip8XLu4%DX(QH7`)m zmLWAvZCxtMU*llXHGWvTA(oo3E0KCzdLDNuV{d(*z-VAVa7CC~7(XMEG91$va~j0; z@;WzVLl4rSQ)hv?5R)^`Qh1(TY4)5Zg*l0IDimUKyjOH%+?0CBmgbKuCOe^wB$pe; zsyis{UFwtppvDVF)Z|RblHVFdPYNNr<7C2qCr99u&m(+TQR(%rB<->qv9_is~nJm zPHye}*EMf*E9TcS%`-^Mf>S#p-(t zyxS)W$=9+?$9>i_kt!AMog&6yFr*)yO7e%JT!#d_V&)=PeWy)hcoo5fTC8+Y#KAk- zeyr42G%|SpvwI}8Fw@c^f^bfFfE5Y-6^*OOy6*J#`vKS8hk3ehtTrh$H`cM0l|Zc@ zENYM-&TwRu?_V^O7alaH2<|XS8R|qtcc^5=E=xy_i{@?(?E$@L?QS%W&ge^Lu%dB4#=-!f>y!p#s(AHhbbk1qM4;og=!lmm$c)}@355*HrF4T=WZFL z*Pi8)1Y6>7d(T^BL5_^ux?G^t$g=yocj&PV*$HIS_1j2*+cx{5V#R*!*vywPamh4; zZk)L1$ZsO3ee4B3@#&lx37(f9XwJ}#9$S!imkf=VJ!0K18W!o7jCz{0CE1SRkIMBA z8$o^ru5uu>pfW|Zv>?h}8oVdn@q%dp6MfrYR8c6ZJEOhheaZ>%5@3#UlM{yU$vnLe zvp0m3w&(M;VfniLM$lUE{hZ6?+|)w1{ulns=Lmo~L~R9oJEpigh@EioX%ufd^)Bhf zO==kZ$j!2CRITf_v_8i%Aj$`%;;yE&-op~5o{Oaz8_UJ7s<)W_s%|y-4IJ;$ozbi! z(EWCRoeJG~Xc7K7Wg5FH*m4&UPJo(V)YN_){r>L5K<$^-fuf z)SJeFBi8~l8p__cC{Few_Ozr&D;^#khiz-W7lRTL_sQ@^-sT~2W(=p#D#px4QQx+! zVdk3PXxPi%Z|)0Y@3$j}*=+3kZk@XTzJ(GC2s2ZCGD52+w_ zk_D%NbmwfC`a)8yk8_9&*p#;N)!xj{u zAYaLx(e#G-D-A>5LRI|HM{>;&$V-q+^O`J3^^7XMltvFc-0S2w*$7>-9uUy)+ z{o|YR4lEQjyQE%Nw34E5*^B-E5C+ZgwT} z;$G$uaqpSu<37rNrp)z&B5$GCRbg+Z&yY~gwru6j*$yK+m@d#9CPydP4Vkb1Ix#`L z7@icGvf#pQ#VOg9kYL%(<-QRTJSgRo3Hu#*gAMmCA4hHVl%%pZ+rAnTLZfa=y_0I7 zDh>0`e6!eN)ei;dpkZY7W%OvavKhSHVb5--1>wR*jhD2YsQQ?_>0DCF!lzET?EsfN z?A1ApIQ!sYrud}OS$_R0>AT{hrm5`kYls4FrCgk8gi94rCzb`Qc?cx4IHbDA96L~3 zmpDG(=L~?>qxIc?ba8mM)>eub*_}dDEt8fCgU}P>Y2VN8j0cvKkWP9KVEN>B5Oeo9 zIk`ux!Bhs}b%oMSX0o|g_jeWkjn&fTCal5}r_<=u$S3!spvu?&sj@r2&eSuzEf3cJ zE^c48s2SARAt@tK7$bDc|Auq-uuqDB)N=JwzxXUu`FFh+4pQtU@}c>Gm2q^H%d1w*|%p$Oq{Py3+?vXMA`5`Wm!b%lW(BD>d?a{P>M6 z!HH4M$oBS)1|QA5NJpL!`tc@z=8p|Nsq8DRlKnbJnZDRAt0j6N=N@Kdj$ErPj*V7YB*YZf1S#C2A}(%stLna@DcDbQk0QVo zT-ie#8C0<0Gn-XStbo95Hb<0j(Jnp#r?y-x-^0a!wo6cso?b5*mQLZ~ zF{zw3xSDYrU}DXgya|?^(pBoKr?O(T(Y4Gg!RkVhG2TIpc|nC)t#Mz|rlwV_yU2xP z4)CYK!>#~M6~|l)SSmM0>=>1o5O?ydj$h5$);YcJ0&}ZLdv$^p4;roLGp!2w4<;6T zJsQl5)u9IgD>g2)JsVyh_I6fuP+1CIMOdUc3uaoIg1OH|Q1LzpfD3u5$2(T-C>#EJ z9M*oUF`FAC_2c8h3s{Yq5>}Flw?-oD=d--QUu7Z9{8rY_m+xFaHkf}C_XxE$ym3E} zA@Z1Bf&|`AG3=R|`K*1Eja1I-WmTM)ESC12FCNcdknJ-m`K*Riq#If#h~*f1x5&yp z@E9pl+V6j}gNywd;yNo1-26`_*3QFVO>)+QHpo z*(q#HM4oH-TT_d*#9;p*_~}TKxp>H)+VJXm_k{fR(D3TH>?DW;^3j~?P5DIv{j`hrM0NiKVT zKKV932v#T;b{BTTk3sjK>n7rL>)13b0P4T{%W|c& zua&telVAqbpW=)>l24=G?xtl27~5s3TYudVJ|Z44JWn=f4|b;^-c}a00Z-UBZhX%K zVrhRq^p9?y7pbE0k_IFq3aNGTsehlRSbe-q+#{VJx;%&S)a>YR?C<~>IvcK~sNO1r zk9a+Sn{x{<>*aBjgxA3b^m^5e^RqKnK)t~6l?Ytkxv-z7X_;j&u{UQo8Q?5n9Ll%O z6LZQ~0jD=}kD%WdH4CMZbKW2Cu9f;!I18lknzCiEr|S*suF&A%8l)?a#MPROyseon zXr4(kF*S=wTKs|aAO9+RykA_N&F}NMt^(yTy{Cl%|`OWAd&vKTh07I|DSML z&u?(g;~$jH|2MGyw{TkGUw`_4_;h1^?bx&exfBiM%+ze73gZ%!yrTHD)QsHtlvJw< zC5^;lvwTDAVS~fWtkk45ye!TAl+wL>Rkq%ij#lIES6~vxE$ug#Go89-I#Iq2LH6nDmI9h&(sj=LOQO|*kc6j&rLlGe za$eES+$~C|%OHjGVCVTv>0I`%j2pw>n*-JD99fW#<-hd<1FCstxS4!|lTbU(V8?)t z{Hd5xMGtTxNHjW@>$MjUsd>DUFb!&zijIJ>$>6)H2LNdALOQ?ypGrRYt0tzx0RX@` z|KE+&|F1>Z$=Sf!#MIi(?SJ`$b+nu|M^JrNYuEM@d5i?ShJnJ1qNt@JN?M8{oHwG# zmidW^2~Pg6KF$Ivs&4J$3?QI%!vN9<(n@zL<+z z;cX3HH~`k`l*Wno-5^V_y#Ki>W_~8+-j41E({+-D{)X_B3;P>Sz@_DD*hv!skVgrcQxTLz|V&HMXca zE{YF3qzVUu_lh{pbKSPQ7Oa1e$qT7`vtF&`)kMOws(GzEcj`(fiSFFX5j?NSMkm%} zf|=sA@zrcI!^;qTj-{AC-C%A@Na}QL4|e$k&JKQ|hDxY5bRnBp{vm|1Zd7y6bas}4 z#-qt59m8^`aAwD8w~Sw%x^JHc9LQY%w$A+f(00tU@iQCzZb_T#{pIlyDWeka>Yo;Y zn#Nz03+A>31vk;tD(#Zc1F_j5(I{M}te?#U?RN{#$@JZ_OxbX)ke>97q01vjjYCZJ z!)TII3@XrY^iJK=ZA!MzF0#NWu~c4PM79o0%S(d=JAlvGo-<%KzE|!K`b={gK7801 zC`-fsG~hwZnb*!2Fo<~`FCDJ+oAC0#Un}AxvPMj2$cW zv`4K6pppK)cHWK;dKngGG-omA(K%8%KT2vQT$L(5yUOPB@0PtrqJ^=qh#r(F+9Cx;59qe{orcuJbQVsk#3n%bB^Ifb+-c{Xk=HWb93Co#)jS?U>Ke^ZS$ZGqw96|}6r0_7{$g$} zobbeg+SGIMDH5#^$*Ns#X?O8&$kY6QV{ zK{(+wZc3V#Nir9p-BVhEN+a=3lZm`7uQEJq4pmSyiJ}f|S0OF3F~jaW$2ycVDT;H7 zLqrrCKfk9)M5W;(*EyXkp`^MpjyIfy$AGLdb1e zma{MM0-=f64Y3++t0MW6;}@yTDM%4J+cO@Baj$uqu|wS~P_BCd;u%5wLrsp=qnmhy z_p`;K9qM=o38(C>V5S`ESRpNgqetH~p~fpYoE-^dRhs^q zs&2IxQ_#jsZNJtV3dm}&DcbBSMtq~AQ=NjJKX?PrE~7wz>ZVkm0cfaoJU&jf?=0fB z39~3?)lDBCptNz);h<1(Ap>wD!4~zuuKJ}96%7_Sl#NdpNGLOkd)YXKhO!#y zKBhvK7IEo$D}azmp2mo)l;G)i#Y^3)37`$Vv3Pc2R#oq#GtGvWHQ~DyJGK*bYbL6) z^patGtt;-C)Bv0%OR#=^1#N|H7Y9I>FO5%m*@yR1l^IEa^La6D-*ixZYTytl;wBa% z8y`E;4KZtE`-dKVXWH*ulJ2Jzih!rL3JAK8YZ6g$*kovoX3f;EO-a7i#~sUDDgT)3 z76lbWRaBKhJl!U@1h^@;l4kJ^>cl-tU*JoSnkTA-4oMSxW+N7B^G=3|SM#~B0-Xv` z?0OJo--hIC=cU2mnV~ZgU@)&ib)+CYdTsximj<3-bBte<>kBaIU~tcybNIRGP!Wew7+5MN2n8DVxJn^6%%NxliHYUrLR!vdD># zm`sk@8jt#!XfBYDQ?*pe>H*`{u^WzS*mUh5L|JDBO%s*Ets^5JRLKb@4>9Jbpqo2q zQzMyEqY<_HLnEUpGurwn!N(aXwkf|RxSI8%JI5=%FV$zo+{aLULdYa4ahuLN!+Mu zPcJ}QBWb1Pu2^dvK_>6rWng(~Y_y|piO;`Hv`VgB9P*BirXeD@@jL-o65R4qnK3=D z2tV?#nd74@V{EV5sJUg{c>WYI1rhL7I_l|oV-RV{fIXjZ?quU&0BPJX?C1V6aI~gC zX!$9GYnV=1LHg*akeG-e0iUzZG{t#yxY;a+*0PL><#m!8>A9t&jm26@Ry;MhFz3Aq zNA9DOZ>4O(QWM{wgC0py1Rj+UV76||J``tk>G>3Hgar70kXzU~B8tFN9>n60C>A!f>_v6^Kr zkf`F#{Uq_j=Xw!zd51~QtW-Nh_qeVBf4a$v%U(1 zCAA5?_A|2Ua}-~>mA_PQ7gB9LDtCxrq3Hk;4JW_-58INO$>n_ea5wGe6$tTFjb282@Z~LfH$==i<0TQcFIuxA2niP> zb)y%ebYm8@Jw1*LPcFN;35BT+zU_=33C#s33i)}Rg>(1BQh6TEy&+AQ&S&8Os+ zwFR_B-1BvoQi!*>5C4#OaeuRQVU6?^Lo8h#widk9cU~{fiwEZ3dR-;6e9ck$!sUF5 zgQg&S4VQC_$6V3-HXK~}AsOc$8vz#NM^^$MS^kysi85Pq8=()}XXK=N`<%5dwHPtL zOme&lhmp%iYa_UGsou7?%k!67wE2R2r&{NG`$ZmVTAF$iPvCN4S-Q2Xs$or284KG8$=yLW)*8e_gaY? zIf+72p`^1c!E6|R)@tX~`OrQ;xY!FqSJ4=sP0zkEf4Kdo&2+Fi=-`n5hl@W44>3`a zNszgDP{tljXPnb>L>@Qx3spamf#Jzqw=2r-_<>RARj2qU2xaN?>{~$uIUM_T8MpNE zP7wG0WVh?K?IO>o;7VIO_r;F-OoKB_yMwtSN#9LwJK}tJ?b~Q@d$+4mmU}4TM7A(y zX$wCo4Yv?_-*re7CTbipIios-L(0sETTTcGW^MG@8T8N<;ZU~tTe9R~DpN7*gm6Tk z*tIa$=?3;G$oo)#xrN}zaBfB0K~!6L=o0q~UA4k36BX*|t;j@Xh;YxegY28~B%7Kf z*liPI@B2?UKd9Gibt83kJ@qz4xX#bFqoSHEiBjGQH0w=X3|V4Uc^ehNf$jSQ5IH$z zD0+w|(xGMNsWJFjiDwVcxLIw;`E^Kh-?k%n;AqKSKIjPxJArN01`ixqxqC|NG?y^8r|igan$*BA6xTw@Kq-pmZT5uF##WK^&}S;ht{}H`p?q$t zFvME;JthLfC`Fo_W&Or8BHYKdl~~Mit%=W)n1P{?@8%84P5Qn+h=5z~(?kP~pN^KB zY%#shd)r86$Wz}7Tu+H_vT4@RK{4T5n3JNxWMr{La4~yh4F74m7|~FH#rl+1sxcz= z!2}6i?LaRolF-9?5)jwng3DG1lc^%4LCqxzB168rJM!rmQqEiWXjDe0(YFZmD|)V7 zvIo3hM%y8QMQj#4{ES~h#-R7=g7D~zy;Z~#jhlkH)1)2VIouWWz%`eEqON4@!U?=iH=d;F^63 z7@4i&sQxJ)->|nQk6-6JY& z@tc%|=N=29A?e1dgw@uy4y7VaZ{O)gV9O}H*etNwe=Q-pZ5Y3Gj%340_j}2SAxr(9ZY_1 zR*sOATO5;cjC#Zr-xeyXuaHTVc#xBL?swl&>3)e`XN4L0ld!P%{0i}1(d%DvzQ3pY zueg`Sw!;QITCg7NaeBTu3S~8zJD1D_(u1I0lqw;gMvp<_;X#EF5dN5Vw)N^d^V7Uf zPZoG9Yf7Owp?$ zSfS5$V!*94mZ3GYF{K9p2(Ezj$8Q@aRfPCS2mX4fYzf0vh6ck zRZqTMH?jU6b-yZWGa3#es$tN2K~u5^DgR7o|C^( zd9c3!Pt-pgDDN`=F1T9rmt(jnn{@U*G-@8G*KK literal 0 HcmV?d00001 diff --git a/src/plugins/SLXParser/Translator.cs b/src/plugins/SLXParser/Translator.cs new file mode 100644 index 0000000..aeb0af8 --- /dev/null +++ b/src/plugins/SLXParser/Translator.cs @@ -0,0 +1,147 @@ +using SLXParser.Data; +using Stater.Models; +using State = Stater.Models.State; +using SLXState = SLXParser.Data.State; +using Transition = Stater.Models.Transition; +using SLXTransition = SLXParser.Data.Transition; +using SLXData = SLXParser.Data.Data; + +namespace SLXParser +{ + public class Translator + { + public StateMachine Convert(Stateflow stateflow) + { + var stateMachine = new StateMachine + { + // Type = "SLX", + Name = stateflow.Instance.Name, + States = ConvertChart(stateflow.Machine.Chart), + Variables = ConvertVariable(stateflow.Machine.Chart.ChildrenData), + }; + + stateMachine.Transitions.AddRange(ConvertChartTransitions(stateflow.Machine.Chart, stateMachine.States)); + + stateMachine.States[0] = stateMachine.States[0] with { Type = StateType.Start }; + stateMachine.States[^1] = stateMachine.States[^1] with { Type = StateType.End }; + + return stateMachine; + } + + private static List ConvertChart(Chart chart) + { + var states = new List(); + + foreach (var state in chart.ChildrenState) + { + states.AddRange(ConvertState(state)); + } + + return states; + } + + private static IEnumerable ConvertState(SLXState slxState) + { + var state = new State + { + Guid = new Guid(slxState.Id), + Name = slxState.LabelString, + Type = StateType.Common + }; + + var states = new List { state }; + + foreach (var slxStateChildren in slxState.ChildrenState) + { + states.AddRange(ConvertState(slxStateChildren)); + } + + return states; + } + + private List ConvertChartTransitions(Chart chart, List slxStateOriginList) + { + var transitions = new List(); + + foreach (var state in chart.ChildrenState) + { + transitions.AddRange(ConvertStateTransition(state, slxStateOriginList)); + } + + return transitions; + } + + private static IEnumerable ConvertStateTransition(SLXState slxState, List slxStateOriginList) + { + var transitions = new List(); + + foreach (var transition in slxState.ChildrenTransition) + { + var transition_ = ConvertTransition(transition, slxStateOriginList); + if (transition_ != null) + { + transitions.Add(transition_); + } + } + + foreach (var state in slxState.ChildrenState) + { + transitions.AddRange(ConvertStateTransition(state, slxStateOriginList)); + } + + return transitions; + } + + private static Transition ConvertTransition(SLXTransition slxTransition, List slxStateOriginList) + { + var transition = new Transition + { + Guid = new Guid(slxTransition.Id) + }; + + var start = FindStateById(new UID(slxTransition.Src.SSID), slxStateOriginList); + var end = FindStateById(new UID(slxTransition.Dst.SSID), slxStateOriginList); + + if (start == null || end == null) + { + return null; + } + + transition = transition with + { + Start = start.Guid, + End = end.Guid, + Name = slxTransition.LabelString + }; + + // start.Outgoing.Add(transition); + // end.Incoming.Add(transition); + + return transition; + } + + private static State FindStateById(UID id, List slxStateOriginList) + { + return slxStateOriginList.FirstOrDefault(state => { return state.ID.Value == id.Value; }); + } + + private static List ConvertVariable(List datas) + { + var result = new List(); + foreach (var data in datas) + { + // var variableValue = VariableValueBuilder.fromString(""); + + var variable = new Variable + { + Name = data.Name + }; + + // variable.ID = new UID(data.Id); + result.Add(variable); + } + + return result; + } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Utils/Color.cs b/src/plugins/SLXParser/Utils/Color.cs new file mode 100644 index 0000000..079c59f --- /dev/null +++ b/src/plugins/SLXParser/Utils/Color.cs @@ -0,0 +1,16 @@ +namespace SLXParser.Utils +{ + public class Color + { + public int R { get; set; } + public int G { get; set; } + public int B { get; set; } + + public Color(int r, int g, int b) + { + R = r; + G = g; + B = b; + } + } +} \ No newline at end of file diff --git a/src/plugins/SLXParser/Utils/Point2D.cs b/src/plugins/SLXParser/Utils/Point2D.cs new file mode 100644 index 0000000..a5d8935 --- /dev/null +++ b/src/plugins/SLXParser/Utils/Point2D.cs @@ -0,0 +1,39 @@ +namespace SLXParser.Utils +{ + public class Point2D + { + public float X { get; set; } + public float Y { get; set; } + + public Point2D(float x, float y) + { + X = x; + Y = y; + } + } + + public class DoublePoint + { + public Point2D X { get; set; } + public Point2D Y { get; set; } + + public DoublePoint(Point2D x, Point2D y) + { + X = x; + Y = y; + } + } + + + public class DoubleDoublePoint + { + public DoublePoint X { get; set; } + public DoublePoint Y { get; set; } + + public DoubleDoublePoint(DoublePoint x, DoublePoint y) + { + X = x; + Y = y; + } + } +} \ No newline at end of file From 02b8326e065be9a3d26db8913ba082fde3b9f084 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 7 Dec 2024 14:11:11 +0300 Subject: [PATCH 23/69] Add variables, save/load project, undo/redo, execution --- src/Stater/App.axaml.cs | 11 +- src/Stater/Models/Editors/IEditorManager.cs | 4 +- src/Stater/Models/Editors/IVariableEditor.cs | 11 ++ .../Models/Editors/impl/EditorManager.cs | 14 ++- .../Models/Editors/impl/TransitionEditor.cs | 1 - .../Models/Editors/impl/VariableEditor.cs | 22 ++++ src/Stater/Models/Executor/IExecutor.cs | 6 +- src/Stater/Models/Executor/impl/Executor.cs | 25 +++-- src/Stater/Models/IProjectManager.cs | 6 +- src/Stater/Models/Project.cs | 24 ++++- src/Stater/Models/State.cs | 2 +- src/Stater/Models/StateMachine.cs | 2 +- src/Stater/Models/Transition.cs | 2 +- src/Stater/Models/Variable.cs | 4 +- src/Stater/Models/impl/ProjectManager.cs | 102 ++++++++++++++---- src/Stater/TestSave.cs | 43 ++++++++ .../Editors/StateEditorViewModel.cs | 50 ++++++--- .../Editors/VariableEditorViewModel.cs | 55 ++++++++++ .../Execution/ExecutionControlViewModel.cs | 54 ++++++++++ .../Execution/ExecutionGroupViewModel.cs | 8 ++ .../Execution/VariablesViewModel.cs | 53 +++++++++ src/Stater/ViewModels/MainWindowViewModel.cs | 7 ++ src/Stater/Views/Editors/MainEditor.axaml | 4 + src/Stater/Views/Editors/StateEditor.axaml | 6 +- src/Stater/Views/Editors/VariableEditor.axaml | 19 ++++ .../Views/Editors/VariableEditor.axaml.cs | 18 ++++ .../Views/Execution/ExecutionControl.axaml | 36 ++++++- .../Views/Execution/ExecutionControl.axaml.cs | 7 +- .../Views/Execution/ExecutionGroup.axaml | 11 +- src/Stater/Views/Execution/Variables.axaml | 19 +++- src/Stater/Views/Execution/Variables.axaml.cs | 9 +- src/Stater/Views/MainWindow.axaml | 6 +- src/Stater/Views/MainWindow.axaml.cs | 2 +- 33 files changed, 560 insertions(+), 83 deletions(-) create mode 100644 src/Stater/Models/Editors/IVariableEditor.cs create mode 100644 src/Stater/Models/Editors/impl/VariableEditor.cs create mode 100644 src/Stater/TestSave.cs create mode 100644 src/Stater/ViewModels/Editors/VariableEditorViewModel.cs create mode 100644 src/Stater/ViewModels/Execution/ExecutionControlViewModel.cs create mode 100644 src/Stater/ViewModels/Execution/ExecutionGroupViewModel.cs create mode 100644 src/Stater/ViewModels/Execution/VariablesViewModel.cs create mode 100644 src/Stater/Views/Editors/VariableEditor.axaml create mode 100644 src/Stater/Views/Editors/VariableEditor.axaml.cs diff --git a/src/Stater/App.axaml.cs b/src/Stater/App.axaml.cs index 638f7e0..0c5eb28 100644 --- a/src/Stater/App.axaml.cs +++ b/src/Stater/App.axaml.cs @@ -1,3 +1,4 @@ +using System; using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Data.Core.Plugins; @@ -6,6 +7,8 @@ using Stater.Models; using Stater.Models.Editors; using Stater.Models.Editors.impl; +using Stater.Models.Executor; +using Stater.Models.Executor.impl; using Stater.Models.impl; using Stater.ViewModels; using Stater.Views; @@ -48,13 +51,19 @@ private void InitDependency() var stateMachineEditor = new StateMachineEditor(projectManager); var stateEditor = new StateEditor(projectManager); var transitionEditor = new TransitionEditor(projectManager); + var variableEditor = new VariableEditor(projectManager); + var execitor = new Executor(projectManager); + Locator.CurrentMutable.RegisterConstant(projectManager, typeof(IProjectManager)); - Locator.CurrentMutable.RegisterConstant(new EditorManager(stateMachineEditor, stateEditor, transitionEditor), + Locator.CurrentMutable.RegisterConstant( + new EditorManager(stateMachineEditor, stateEditor, transitionEditor, variableEditor), typeof(IEditorManager)); Locator.CurrentMutable.RegisterConstant(stateMachineEditor, typeof(IStateMachineEditor)); Locator.CurrentMutable.RegisterConstant(stateEditor, typeof(IStateEditor)); Locator.CurrentMutable.RegisterConstant(transitionEditor, typeof(ITransitionEditor)); + Locator.CurrentMutable.RegisterConstant(variableEditor, typeof(IVariableEditor)); + Locator.CurrentMutable.RegisterConstant(execitor, typeof(IExecutor)); } } \ No newline at end of file diff --git a/src/Stater/Models/Editors/IEditorManager.cs b/src/Stater/Models/Editors/IEditorManager.cs index 80308c5..6a12bd1 100644 --- a/src/Stater/Models/Editors/IEditorManager.cs +++ b/src/Stater/Models/Editors/IEditorManager.cs @@ -7,7 +7,8 @@ public enum EditorTypeEnum Null, StateMachine, State, - Transition + Transition, + Variable } public interface IEditorManager @@ -17,4 +18,5 @@ public interface IEditorManager void DoSelectStateMachine(StateMachine stateMachine); void DoSelectState(State state); void DoSelectTransition(Transition transition); + void DoSelectVariable(Variable variable); } \ No newline at end of file diff --git a/src/Stater/Models/Editors/IVariableEditor.cs b/src/Stater/Models/Editors/IVariableEditor.cs new file mode 100644 index 0000000..1d6d898 --- /dev/null +++ b/src/Stater/Models/Editors/IVariableEditor.cs @@ -0,0 +1,11 @@ +using System; + +namespace Stater.Models.Editors; + +public interface IVariableEditor +{ + IObservable Variable { get; } + + void DoSelect(Variable transition); + void Update(Variable transition); +} \ No newline at end of file diff --git a/src/Stater/Models/Editors/impl/EditorManager.cs b/src/Stater/Models/Editors/impl/EditorManager.cs index 387043d..e163ab1 100644 --- a/src/Stater/Models/Editors/impl/EditorManager.cs +++ b/src/Stater/Models/Editors/impl/EditorManager.cs @@ -11,14 +11,20 @@ public class EditorManager : IEditorManager private IStateMachineEditor _stateMachineEditor; private IStateEditor _stateEditor; private ITransitionEditor _transitionEditor; + private IVariableEditor _variableEditor; - public EditorManager(IStateMachineEditor stateMachineEditor, IStateEditor stateEditor, ITransitionEditor transitionEditor) + public EditorManager( + IStateMachineEditor stateMachineEditor, + IStateEditor stateEditor, + ITransitionEditor transitionEditor, + IVariableEditor variableEditor) { _editorType.OnNext(EditorTypeEnum.Null); _stateMachineEditor = stateMachineEditor; _stateEditor = stateEditor; _transitionEditor = transitionEditor; + _variableEditor = variableEditor; } @@ -39,4 +45,10 @@ public void DoSelectTransition(Transition transition) _transitionEditor.DoSelect(transition); _editorType.OnNext(EditorTypeEnum.Transition); } + + public void DoSelectVariable(Variable variable) + { + _variableEditor.DoSelect(variable); + _editorType.OnNext(EditorTypeEnum.Variable); + } } \ No newline at end of file diff --git a/src/Stater/Models/Editors/impl/TransitionEditor.cs b/src/Stater/Models/Editors/impl/TransitionEditor.cs index 996081c..302f905 100644 --- a/src/Stater/Models/Editors/impl/TransitionEditor.cs +++ b/src/Stater/Models/Editors/impl/TransitionEditor.cs @@ -1,6 +1,5 @@ using System; using System.Reactive.Subjects; -using Avalonia.Animation; namespace Stater.Models.Editors.impl; diff --git a/src/Stater/Models/Editors/impl/VariableEditor.cs b/src/Stater/Models/Editors/impl/VariableEditor.cs new file mode 100644 index 0000000..d0a32bf --- /dev/null +++ b/src/Stater/Models/Editors/impl/VariableEditor.cs @@ -0,0 +1,22 @@ +using System; +using System.Reactive.Subjects; + +namespace Stater.Models.Editors.impl; + +public class VariableEditor( + IProjectManager projectManager +) : IVariableEditor +{ + private readonly ReplaySubject _variable = new(); + public IObservable Variable => _variable; + + public void DoSelect(Variable variable) + { + _variable.OnNext(variable); + } + + public void Update(Variable variable) + { + projectManager.UpdateVariable(variable); + } +} \ No newline at end of file diff --git a/src/Stater/Models/Executor/IExecutor.cs b/src/Stater/Models/Executor/IExecutor.cs index 7716066..bc74659 100644 --- a/src/Stater/Models/Executor/IExecutor.cs +++ b/src/Stater/Models/Executor/IExecutor.cs @@ -5,10 +5,14 @@ namespace Stater.Models.Executor; +public record LogContainer( + List Logs +); + public interface IExecutor { IObservable State { get; } - IObservable> Logs { get; } + IObservable Logs { get; } IObservable?> Variables { get; } void Start(int stepTime); diff --git a/src/Stater/Models/Executor/impl/Executor.cs b/src/Stater/Models/Executor/impl/Executor.cs index 7319540..c8306a2 100644 --- a/src/Stater/Models/Executor/impl/Executor.cs +++ b/src/Stater/Models/Executor/impl/Executor.cs @@ -7,35 +7,33 @@ namespace Stater.Models.Executor.impl; -public class Executor : IExecutor +public class Executor(IProjectManager projectManager) : IExecutor { private readonly ReplaySubject _state = new(); public IObservable State => _state; private StateMachine? _stateMachine; - private readonly SourceList _logs = new(); - public IObservable> Logs => _logs.Connect(); + private readonly ReplaySubject _logs = new(); + public IObservable Logs => _logs; private readonly ReplaySubject?> _variables = new(); public IObservable?> Variables => _variables; - private readonly IProjectManager _projectManager; - private Thread? ExecuteThread; private bool StopExecution; - Executor(IProjectManager projectManager) - { - _projectManager = projectManager; - } - private void WriteLog( string message, int tab = 0, ExecuteLog.ExecuteLogStatusEnum executeLogStatus = ExecuteLog.ExecuteLogStatusEnum.Info) { - _logs.Add(new ExecuteLog(Text: message, Tab: tab, ExecuteLogStatus: executeLogStatus)); + LogContainer? logs = null; + var s = _logs.Subscribe(x => logs = x); + s.Dispose(); + logs ??= new LogContainer(new List()); + logs.Logs.Add(new ExecuteLog(Text: message, Tab: tab, ExecuteLogStatus: executeLogStatus)); + _logs.OnNext(logs); } private State? GetCurrentState() @@ -57,7 +55,7 @@ private void WriteLog( private StateMachine? GetCurrentStateMachine() { StateMachine? currentStateMachine = null; - var s = _projectManager.StateMachine.Subscribe(stateMachine => currentStateMachine = stateMachine); + var s = projectManager.StateMachine.Subscribe(stateMachine => currentStateMachine = stateMachine); s.Dispose(); return currentStateMachine; } @@ -67,6 +65,7 @@ public void Start(int stepTime) WriteLog("Starting executing."); if (_stateMachine == null) { + Console.WriteLine("YES"); var currentStateMachine = GetCurrentStateMachine(); if (currentStateMachine == null) { @@ -78,7 +77,7 @@ public void Start(int stepTime) _state.OnNext(null); _variables.OnNext(null); } - + WriteLog("State Machine: " + _stateMachine.Name); var state = GetCurrentState(); diff --git a/src/Stater/Models/IProjectManager.cs b/src/Stater/Models/IProjectManager.cs index c769ba5..b3346ea 100644 --- a/src/Stater/Models/IProjectManager.cs +++ b/src/Stater/Models/IProjectManager.cs @@ -12,7 +12,7 @@ public interface IProjectManager IObservable StateMachine { get; } void CreateProject(string name); - Project LoadProject(StreamReader sr); + Project? LoadProject(StreamReader sr); void SaveProject(StreamWriter sw); void Undo(); @@ -29,4 +29,8 @@ public interface IProjectManager void RemoveTransition(Guid guid); Transition? GetTransition(Guid guid); void UpdateTransition(Transition transition); + + Variable? CreateVariable(); + void RemoveVariable(Guid guid); + void UpdateVariable(Variable variable); } \ No newline at end of file diff --git a/src/Stater/Models/Project.cs b/src/Stater/Models/Project.cs index 10f6950..8720308 100644 --- a/src/Stater/Models/Project.cs +++ b/src/Stater/Models/Project.cs @@ -1,8 +1,24 @@ -using System.Collections.ObjectModel; +using System.Collections.Generic; +using System.Xml.Serialization; namespace Stater.Models; public record Project( - string Name, - string? Location -); \ No newline at end of file + [property: XmlAttribute("name")] string Name, + [property: XmlAttribute("Location")] string? Location +) +{ + public Project() : this("Project", null) + { + } +}; + +public record ExportProject( + [property: XmlElement("Project")] Project? Project, + [property: XmlElement("StateMachines")] List? StateMachines +) +{ + public ExportProject() : this(null, null) + { + } +} \ No newline at end of file diff --git a/src/Stater/Models/State.cs b/src/Stater/Models/State.cs index 834dc2d..acd60d4 100644 --- a/src/Stater/Models/State.cs +++ b/src/Stater/Models/State.cs @@ -22,7 +22,7 @@ List ExitEvents ) { public State() : this( - new Guid(), + Guid.NewGuid(), "State", "", StateType.Common, diff --git a/src/Stater/Models/StateMachine.cs b/src/Stater/Models/StateMachine.cs index 3970080..0d4fea6 100644 --- a/src/Stater/Models/StateMachine.cs +++ b/src/Stater/Models/StateMachine.cs @@ -12,7 +12,7 @@ List Variables ) { public StateMachine() : this( - new Guid(), + Guid.NewGuid(), "", new List(), new List(), diff --git a/src/Stater/Models/Transition.cs b/src/Stater/Models/Transition.cs index d8ca5cf..3f57707 100644 --- a/src/Stater/Models/Transition.cs +++ b/src/Stater/Models/Transition.cs @@ -13,7 +13,7 @@ public record Transition( ) { public Transition() : this( - new Guid(), + Guid.NewGuid(), "Transition", null, null, diff --git a/src/Stater/Models/Variable.cs b/src/Stater/Models/Variable.cs index 399fff8..094efb1 100644 --- a/src/Stater/Models/Variable.cs +++ b/src/Stater/Models/Variable.cs @@ -11,9 +11,9 @@ VariableValue StartValue ) { public Variable() : this( - new Guid(), + Guid.NewGuid(), "Variable", - VariableValueBuilder.fromString("") + VariableValueBuilder.fromString("0") ) { } diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index 70042af..77826da 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -3,10 +3,11 @@ using System.ComponentModel.DataAnnotations; using System.IO; using System.Linq; -using System.Net; +using System.Reactive.Linq; using System.Reactive.Subjects; using System.Xml; using DynamicData; +using DynamicData.Alias; namespace Stater.Models.impl; @@ -27,9 +28,9 @@ internal class ProjectManager : IProjectManager private readonly ReplaySubject _transtion = new(); public IObservable Transition => _transtion; - public Stack UndoStack = new(); - public Stack RedoStack = new(); - + private readonly Stack undoStack = new(); + private readonly Stack redoStack = new(); + private StateMachine? GetCurrentStateMachine() { StateMachine? currentStateMachine = null; @@ -37,7 +38,21 @@ internal class ProjectManager : IProjectManager s.Dispose(); return currentStateMachine; } - + + private Project? GetCurrentProject() + { + Project? currentProject = null; + var s = _project.Subscribe(x => currentProject = x); + s.Dispose(); + return currentProject; + } + + private List GetCurrentStateMachines() + { + var s = _stateMachines.KeyValues.Select(x => x.Value).ToList(); + return s; + } + public void CreateProject(string name) { var project = new Project( @@ -47,40 +62,49 @@ public void CreateProject(string name) _project.OnNext(project); } - public Project LoadProject(StreamReader sr) + public Project? LoadProject(StreamReader sr) { XmlDocument doc = new XmlDocument(); - var writer = new System.Xml.Serialization.XmlSerializer(typeof(Project)); + var writer = new System.Xml.Serialization.XmlSerializer(typeof(ExportProject)); var project = writer.Deserialize(sr); - if (project is not Project project1) throw new ValidationException(); - _project.OnNext(project1); - return project1; + if (project is not ExportProject project1) throw new ValidationException(); + if (project1.Project != null) _project.OnNext(project1.Project); + project1.StateMachines?.ForEach(UpdateStateMachine); + return project1?.Project; } public void SaveProject(StreamWriter sw) { - var writer = new System.Xml.Serialization.XmlSerializer(typeof(Project)); - writer.Serialize(sw, _project); + var writer = new System.Xml.Serialization.XmlSerializer(typeof(ExportProject)); + var exportProject = new ExportProject( + GetCurrentProject(), + GetCurrentStateMachines() + ); + writer.Serialize(sw, exportProject); sw.Close(); } public void Undo() { - var stateMachine = UndoStack.Peek(); - RedoStack.Push(stateMachine); - _stateMachine.OnNext(stateMachine); + Console.WriteLine("YES " + undoStack.Count); + if (undoStack.Count <= 1) return; + var stateMachine = undoStack.Pop(); + redoStack.Push(stateMachine); + _stateMachine.OnNext(undoStack.Peek()); } public void Redo() { - var stateMachine = RedoStack.Peek(); - UndoStack.Push(stateMachine); + if (redoStack.Count <= 0) return; + var stateMachine = redoStack.Pop(); + undoStack.Push(stateMachine); _stateMachine.OnNext(stateMachine); } public void UpdateStateMachine(StateMachine newStateMachine) { - UndoStack.Push(newStateMachine); + undoStack.Push(newStateMachine); + redoStack.Clear(); _stateMachines.AddOrUpdate(newStateMachine); _stateMachine.OnNext(newStateMachine); } @@ -103,10 +127,10 @@ public StateMachine CreateStateMachine() var currentStateMachine = GetCurrentStateMachine(); if (currentStateMachine?.Guid == guid) return null; var stateMachine = _stateMachines.KeyValues[guid.ToString()]; - UndoStack.Clear(); - RedoStack.Clear(); + undoStack.Clear(); + redoStack.Clear(); _stateMachine.OnNext(stateMachine); - UndoStack.Push(stateMachine); + undoStack.Push(stateMachine); return stateMachine; } @@ -201,4 +225,40 @@ public void UpdateTransition(Transition transition) }; UpdateStateMachine(newStateMachine); } + + public Variable? CreateVariable() + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine == null) return null; + + var variable = new Variable(); + currentStateMachine.Variables.Add(variable); + + UpdateStateMachine(currentStateMachine); + return variable; + } + + public void RemoveVariable(Guid guid) + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine == null) return; + var variables = currentStateMachine.Variables.Where(el => el.Guid != guid); + var newStateMachine = currentStateMachine with + { + Variables = variables.ToList() + }; + UpdateStateMachine(newStateMachine); + } + + public void UpdateVariable(Variable variable) + { + var currentStateMachine = GetCurrentStateMachine(); + if (currentStateMachine == null) return; + var variables = currentStateMachine.Variables.Where(el => el.Guid != variable.Guid); + var newStateMachine = currentStateMachine with + { + Variables = new List(variables) { variable } + }; + UpdateStateMachine(newStateMachine); + } } \ No newline at end of file diff --git a/src/Stater/TestSave.cs b/src/Stater/TestSave.cs new file mode 100644 index 0000000..4767c87 --- /dev/null +++ b/src/Stater/TestSave.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.IO; +using DynamicData; +using Stater.Models; +using Stater.Views.Editors; + +namespace Stater; + +public class TestSave +{ + public static void main() + { + var writer = new System.Xml.Serialization.XmlSerializer(typeof(ExportProject)); + + Project project = new("Project", null); + + var stateMachine1 = new StateMachine(); + + var state1 = new State(); + state1 = state1 with + { + Name = "A", + Type = StateType.Start + }; + + stateMachine1.States.Add(state1); + + var exportProject = new ExportProject( + project, + new List { stateMachine1 } + ); + + Console.WriteLine("YES1"); + var fileName = Path.GetFullPath("./statemachine.xml"); + Console.WriteLine(fileName); + var sw = new StreamWriter(fileName); + // Console.WriteLine(sw.); + writer.Serialize(sw, exportProject); + Console.WriteLine("YES3"); + sw.Close(); + } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs index 871d9cd..ad788e8 100644 --- a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Reactive; using System.Windows.Input; +using Avalonia; using ReactiveUI; using ReactiveUI.Fody.Helpers; using Stater.Models; @@ -25,18 +27,34 @@ public StateEditorViewModel(IStateEditor stateEditor, IProjectManager projectMan State = x; Name = x.Name; Description = x.Description; - Type = x.Type.ToString(); + TypeIndex = x.Type switch + { + StateType.Common => 0, + StateType.Start => 1, + StateType.End => 2, + _ => TypeIndex + }; }); - + projectManager .StateMachine .Subscribe(x => - { - AllStates = x.States; - Transitions = - x.Transitions.FindAll(y => State != null && (y.Start == State.Guid || y.End == State.Guid)); - } - ); + { + AllStates = x.States; + Transitions = x.Transitions.Select(y => + { + var startState = x.States.Find(s => s.Guid == y.Start); + var endState = x.States.Find(s => s.Guid == y.End); + return new AssociateTransition( + Transition: y, + StartPoint: new Point(startState.X, startState.Y), + EndPoint: new Point(endState.X, endState.Y), + Start: startState, + End: endState + ); + } + ).ToList(); + }); AddTransitionCommand = ReactiveCommand.Create(AddTransition); RemoveTransitionCommand = ReactiveCommand.Create(RemoveTransition); @@ -54,10 +72,10 @@ public StateEditorViewModel(IStateEditor stateEditor, IProjectManager projectMan [Reactive] public string Name { get; set; } [Reactive] public string Description { get; set; } - [Reactive] public string Type { get; set; } + [Reactive] public int TypeIndex { get; set; } [Reactive] public List AllStates { get; set; } - [Reactive] public List Transitions { get; set; } + [Reactive] public List Transitions { get; set; } private void AddTransition(State state) @@ -74,9 +92,15 @@ private void RemoveTransition(Transition transition) private void Save() { if (State == null) return; - var tryParse = Enum.TryParse(Type, out StateType type); - if (!tryParse) return; - var newState = State with { Name = Name, Description = Description, Type = type }; + var type = TypeIndex switch + { + 2 => StateType.End, + 1 => StateType.Start, + _ => StateType.Common + }; + var state = _projectManager.GetState(State.Guid); + if (state == null) return; + var newState = state with { Name = Name, Description = Description, Type = type }; _stateEditor.Update(newState); } } \ No newline at end of file diff --git a/src/Stater/ViewModels/Editors/VariableEditorViewModel.cs b/src/Stater/ViewModels/Editors/VariableEditorViewModel.cs new file mode 100644 index 0000000..db289b8 --- /dev/null +++ b/src/Stater/ViewModels/Editors/VariableEditorViewModel.cs @@ -0,0 +1,55 @@ +using System; +using System.Windows.Input; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Stater.Models; +using Stater.Models.Editors; + +namespace Stater.ViewModels.Editors; + +public class VariableEditorViewModel : ReactiveObject +{ + public VariableEditorViewModel(IVariableEditor variableEditor) + { + _variableEditor = variableEditor; + Console.WriteLine(variableEditor); + + _variableEditor + .Variable + .Subscribe(x => + { + try + { + Variable = x; + Name = x.Name; + Value = x.StartValue.ToString(); + } + catch (Exception e) + { + Console.WriteLine(e); + } + }); + + SaveCommand = ReactiveCommand.Create(Save); + } + + private readonly IVariableEditor _variableEditor; + + public ICommand SaveCommand { get; } + + private void Save() + { + if (Variable == null) return; + var variable = Variable with + { + Name = Name, + StartValue = VariableValueBuilder.fromString(Value) + }; + _variableEditor.Update(variable); + } + + [Reactive] private Variable? Variable { get; set; } + + [Reactive] public string Name { get; set; } + [Reactive] public string Value { get; set; } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/Execution/ExecutionControlViewModel.cs b/src/Stater/ViewModels/Execution/ExecutionControlViewModel.cs new file mode 100644 index 0000000..1b394da --- /dev/null +++ b/src/Stater/ViewModels/Execution/ExecutionControlViewModel.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Input; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Stater.Models.Executor; + +namespace Stater.ViewModels.Execution; + +public class ExecutionControlViewModel : ReactiveObject +{ + public ExecutionControlViewModel(IExecutor executor) + { + _executor = executor; + + StartCommand = ReactiveCommand.Create(Start); + StopCommand = ReactiveCommand.Create(Stop); + StepCommand = ReactiveCommand.Create(Step); + ResetCommand = ReactiveCommand.Create(Reset); + + _executor.Logs.Subscribe(x => { Logs = x.Logs.ToList(); }); + } + + private readonly IExecutor _executor; + + public ICommand StartCommand { get; } + public ICommand StopCommand { get; } + public ICommand StepCommand { get; } + public ICommand ResetCommand { get; } + + [Reactive] public string StepTime { get; set; } + [Reactive] public List Logs { get; set; } + + private void Start() + { + _executor.Start(int.Parse(StepTime)); + } + + private void Stop() + { + _executor.Stop(); + } + + private void Step() + { + _executor.Step(); + } + + private void Reset() + { + _executor.Reset(); + } +} \ No newline at end of file diff --git a/src/Stater/ViewModels/Execution/ExecutionGroupViewModel.cs b/src/Stater/ViewModels/Execution/ExecutionGroupViewModel.cs new file mode 100644 index 0000000..2e220e9 --- /dev/null +++ b/src/Stater/ViewModels/Execution/ExecutionGroupViewModel.cs @@ -0,0 +1,8 @@ +using ReactiveUI; + +namespace Stater.ViewModels.Execution; + +public class ExecutionGroupViewModel : ReactiveObject +{ + +} \ No newline at end of file diff --git a/src/Stater/ViewModels/Execution/VariablesViewModel.cs b/src/Stater/ViewModels/Execution/VariablesViewModel.cs new file mode 100644 index 0000000..210ba77 --- /dev/null +++ b/src/Stater/ViewModels/Execution/VariablesViewModel.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Input; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Stater.Models; +using Stater.Models.Editors; + +namespace Stater.ViewModels.Execution; + +public class VariablesViewModel : ReactiveObject +{ + public VariablesViewModel(IProjectManager projectManager, IEditorManager editorManager) + { + projectManager + .StateMachine + .Subscribe(x => + { + if (Variables != null && + Variables.Count == x.Variables.Count && + Variables.All(x.Variables.Contains) && + x.Variables.All(Variables.Contains)) return; + Variables = x.Variables.ToList(); + }); + _projectManager = projectManager; + _editorManager = editorManager; + + CreateVariableCommand = ReactiveCommand.Create(CreateVariable); + } + + private IProjectManager _projectManager; + private IEditorManager _editorManager; + + [Reactive] public List Variables { get; set; } + + private Variable _variable; + private StateMachine? stateMachine; + + public Variable Variable + { + get => _variable; + set + { + this.RaiseAndSetIfChanged(ref _variable, value); + _editorManager.DoSelectVariable(value); + } + } + + public ICommand CreateVariableCommand { get; } + + private void CreateVariable() => _projectManager.CreateVariable(); +} \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index 137d9b2..4998faa 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -36,6 +36,8 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor SaveCommand = ReactiveCommand.Create(SaveProject); NewStateMachineCommand = ReactiveCommand.Create(NewStateMachine); NewStateCommand = ReactiveCommand.Create(NewState); + UndoCommand = ReactiveCommand.Create(Undo); + RedoCommand = ReactiveCommand.Create(Redo); } private readonly IProjectManager _projectManager; @@ -66,6 +68,8 @@ public StateMachine StateMachine public ReactiveCommand SaveCommand { get; } public ICommand NewStateMachineCommand { get; } public ICommand NewStateCommand { get; } + public ICommand UndoCommand { get; } + public ICommand RedoCommand { get; } private void OpenProject(StreamReader sr) @@ -94,4 +98,7 @@ private void NewState() var state = _projectManager.CreateState(); if (state != null) _editorManager.DoSelectState(state); } + + private void Undo() => _projectManager.Undo(); + private void Redo() => _projectManager.Redo(); } \ No newline at end of file diff --git a/src/Stater/Views/Editors/MainEditor.axaml b/src/Stater/Views/Editors/MainEditor.axaml index 3fa0eb7..0f22c18 100644 --- a/src/Stater/Views/Editors/MainEditor.axaml +++ b/src/Stater/Views/Editors/MainEditor.axaml @@ -25,5 +25,9 @@ IsVisible="{Binding EditorType, Converter={StaticResource EditorTypeToBoolConverter}, ConverterParameter='Transition'}"> + + + \ No newline at end of file diff --git a/src/Stater/Views/Editors/StateEditor.axaml b/src/Stater/Views/Editors/StateEditor.axaml index 6fd715b..a21403c 100644 --- a/src/Stater/Views/Editors/StateEditor.axaml +++ b/src/Stater/Views/Editors/StateEditor.axaml @@ -16,7 +16,7 @@ Type: - + Common Start End @@ -37,9 +37,9 @@ - + - + diff --git a/src/Stater/Views/Editors/VariableEditor.axaml b/src/Stater/Views/Editors/VariableEditor.axaml new file mode 100644 index 0000000..816084f --- /dev/null +++ b/src/Stater/Views/Editors/VariableEditor.axaml @@ -0,0 +1,19 @@ + + + Name: + + + Start value: + + + + \ No newline at end of file diff --git a/src/Stater/Views/Editors/VariableEditor.axaml.cs b/src/Stater/Views/Editors/VariableEditor.axaml.cs new file mode 100644 index 0000000..e753430 --- /dev/null +++ b/src/Stater/Views/Editors/VariableEditor.axaml.cs @@ -0,0 +1,18 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Splat; +using Stater.Models.Editors; +using Stater.ViewModels.Editors; + +namespace Stater.Views.Editors; + +public partial class VariableEditor : UserControl +{ + public VariableEditor() + { + InitializeComponent(); + var variableEditor = Locator.Current.GetService(); + DataContext = new VariableEditorViewModel(variableEditor!); + } +} \ No newline at end of file diff --git a/src/Stater/Views/Execution/ExecutionControl.axaml b/src/Stater/Views/Execution/ExecutionControl.axaml index 1aa24c7..db379ba 100644 --- a/src/Stater/Views/Execution/ExecutionControl.axaml +++ b/src/Stater/Views/Execution/ExecutionControl.axaml @@ -3,6 +3,36 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" - x:Class="Stater.Views.Execution.ExecutionControl"> - Welcome to Avalonia! - + x:Class="Stater.Views.Execution.ExecutionControl" + xmlns:vm="using:Stater.ViewModels.Execution" + x:DataType="vm:ExecutionControlViewModel"> + + + Step Time: + + + + + + + + + + + + + + + + - + + + + + + + + + + + \ No newline at end of file diff --git a/src/Stater/Views/Execution/ExecutionControl.axaml.cs b/src/Stater/Views/Execution/ExecutionControl.axaml.cs index 18f997e..2adc00a 100644 --- a/src/Stater/Views/Execution/ExecutionControl.axaml.cs +++ b/src/Stater/Views/Execution/ExecutionControl.axaml.cs @@ -1,6 +1,7 @@ -using Avalonia; using Avalonia.Controls; -using Avalonia.Markup.Xaml; +using Splat; +using Stater.Models.Executor; +using Stater.ViewModels.Execution; namespace Stater.Views.Execution; @@ -9,5 +10,7 @@ public partial class ExecutionControl : UserControl public ExecutionControl() { InitializeComponent(); + var executor = Locator.Current.GetService(); + DataContext = new ExecutionControlViewModel(executor!); } } \ No newline at end of file diff --git a/src/Stater/Views/Execution/ExecutionGroup.axaml b/src/Stater/Views/Execution/ExecutionGroup.axaml index 06ba005..0c257e3 100644 --- a/src/Stater/Views/Execution/ExecutionGroup.axaml +++ b/src/Stater/Views/Execution/ExecutionGroup.axaml @@ -3,13 +3,14 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" - x:Class="Stater.Views.Execution.ExecutionGroup"> + x:Class="Stater.Views.Execution.ExecutionGroup" + xmlns:execution="using:Stater.Views.Execution"> - - Variables + + - - Execution Control + + \ No newline at end of file diff --git a/src/Stater/Views/Execution/Variables.axaml b/src/Stater/Views/Execution/Variables.axaml index 418c857..5d58994 100644 --- a/src/Stater/Views/Execution/Variables.axaml +++ b/src/Stater/Views/Execution/Variables.axaml @@ -2,11 +2,26 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:vm="using:Stater.ViewModels.Execution" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" + x:DataType="vm:VariablesViewModel" x:Class="Stater.Views.Execution.Variables"> - Variable + Variables: + + + + + + + + + + + + - + \ No newline at end of file diff --git a/src/Stater/Views/Execution/Variables.axaml.cs b/src/Stater/Views/Execution/Variables.axaml.cs index 0b4380e..b8a1d64 100644 --- a/src/Stater/Views/Execution/Variables.axaml.cs +++ b/src/Stater/Views/Execution/Variables.axaml.cs @@ -1,6 +1,8 @@ -using Avalonia; using Avalonia.Controls; -using Avalonia.Markup.Xaml; +using Splat; +using Stater.Models; +using Stater.Models.Editors; +using Stater.ViewModels.Execution; namespace Stater.Views.Execution; @@ -9,5 +11,8 @@ public partial class Variables : UserControl public Variables() { InitializeComponent(); + var projectManager = Locator.Current.GetService(); + var editorManager = Locator.Current.GetService(); + DataContext = new VariablesViewModel(projectManager!, editorManager!); } } \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml index 44ea302..f6bee00 100644 --- a/src/Stater/Views/MainWindow.axaml +++ b/src/Stater/Views/MainWindow.axaml @@ -30,8 +30,8 @@ - - + + @@ -46,7 +46,7 @@ - + Date: Sat, 14 Dec 2024 20:10:04 +0300 Subject: [PATCH 24/69] Add documentation, add slx parser plugin, edit states --- .gitignore | 1 + BasePlugin/BasePlugin.csproj | 9 + BasePlugin/Class1.cs | 5 + CFuncGenerator1/CGenerator.cs | 2 - README.md | 49 ++ SLXParser1/Parser.cs | 661 ----------------- SLXParser1/Program.cs | 18 - SLXParser1/Properties/AssemblyInfo.cs | 35 - SLXParser1/SLXParser1.csproj | 86 --- SLXParser1/SLXPlugin.cs | 36 - SLXParser1/Translator.cs | 140 ---- SLXParser1/packages.config | 4 - Stater.sln | 14 - changelog.md | 16 + src/Stater/Models/Editors/IEditorManager.cs | 2 + .../Models/Editors/impl/EditorManager.cs | 4 + src/Stater/Models/Executor/IExecutor.cs | 2 + src/Stater/Models/Executor/impl/Executor.cs | 17 +- src/Stater/Models/IProjectManager.cs | 10 + src/Stater/Models/Transition.cs | 4 +- src/Stater/Models/impl/ProjectManager.cs | 76 +- src/Stater/Plugin/ButtonFilePlugin.cs | 8 + src/Stater/Plugin/ButtonPlugin.cs | 5 +- src/Stater/Plugin/IPlugin.cs | 6 + .../Stater/SLXParser}/Data/BaseNode.cs | 4 +- .../Stater/SLXParser}/Data/Chart.cs | 0 .../Stater/SLXParser}/Data/Data.cs | 0 .../Stater/SLXParser}/Data/Instance.cs | 0 .../Stater/SLXParser}/Data/Machine.cs | 0 .../Stater/SLXParser}/Data/State.cs | 0 .../Stater/SLXParser}/Data/Stateflow.cs | 0 .../Stater/SLXParser}/Data/Transition.cs | 3 +- src/Stater/SLXParser/Parser.cs | 662 ++++++++++++++++++ src/Stater/SLXParser/Program.cs | 18 + src/Stater/SLXParser/SLXPlugin.cs | 23 + .../SLXParser}/TestData/BR_GATES_HDL.slx | Bin src/Stater/SLXParser/Translator.cs | 149 ++++ .../Stater/SLXParser}/Utils/Color.cs | 0 .../Stater/SLXParser}/Utils/Point2D.cs | 0 src/Stater/Stater.csproj | 5 + src/Stater/TestSave.cs | 1 + .../ViewModels/Board/BoardCanvasViewModel.cs | 33 +- .../Editors/StateEditorViewModel.cs | 86 ++- .../Editors/TransitionEditorViewModel.cs | 82 ++- .../Execution/ExecutionControlViewModel.cs | 26 +- src/Stater/ViewModels/MainWindowViewModel.cs | 31 +- src/Stater/Views/Editors/StateEditor.axaml | 64 +- src/Stater/Views/Editors/StateEditor.axaml.cs | 13 +- .../Views/Editors/TransitionEditor.axaml | 19 + .../Views/Execution/ExecutionControl.axaml | 1 + src/Stater/Views/MainWindow.axaml | 15 +- src/Stater/Views/MainWindow.axaml.cs | 34 +- src/plugins/SLXParser/Data/BaseNode.cs | 8 - src/plugins/SLXParser/Data/Chart.cs | 24 - src/plugins/SLXParser/Data/Data.cs | 29 - src/plugins/SLXParser/Data/Instance.cs | 7 - src/plugins/SLXParser/Data/Machine.cs | 8 - src/plugins/SLXParser/Data/State.cs | 29 - src/plugins/SLXParser/Data/Stateflow.cs | 8 - src/plugins/SLXParser/Data/Transition.cs | 26 - src/plugins/SLXParser/Parser.cs | 659 ----------------- src/plugins/SLXParser/Program.cs | 18 - src/plugins/SLXParser/SLXParser.csproj | 8 + src/plugins/SLXParser/SLXPlugin.cs | 28 - .../SLXParser/TestData/BR_GATES_HDL.slx | Bin 22601 -> 0 bytes src/plugins/SLXParser/Translator.cs | 147 ---- src/plugins/SLXParser/Utils/Color.cs | 16 - src/plugins/SLXParser/Utils/Point2D.cs | 39 -- 68 files changed, 1344 insertions(+), 2189 deletions(-) create mode 100644 BasePlugin/BasePlugin.csproj create mode 100644 BasePlugin/Class1.cs create mode 100644 README.md delete mode 100644 SLXParser1/Parser.cs delete mode 100644 SLXParser1/Program.cs delete mode 100644 SLXParser1/Properties/AssemblyInfo.cs delete mode 100644 SLXParser1/SLXParser1.csproj delete mode 100644 SLXParser1/SLXPlugin.cs delete mode 100644 SLXParser1/Translator.cs delete mode 100644 SLXParser1/packages.config create mode 100644 changelog.md create mode 100644 src/Stater/Plugin/ButtonFilePlugin.cs create mode 100644 src/Stater/Plugin/IPlugin.cs rename {SLXParser1 => src/Stater/SLXParser}/Data/BaseNode.cs (63%) rename {SLXParser1 => src/Stater/SLXParser}/Data/Chart.cs (100%) rename {SLXParser1 => src/Stater/SLXParser}/Data/Data.cs (100%) rename {SLXParser1 => src/Stater/SLXParser}/Data/Instance.cs (100%) rename {SLXParser1 => src/Stater/SLXParser}/Data/Machine.cs (100%) rename {SLXParser1 => src/Stater/SLXParser}/Data/State.cs (100%) rename {SLXParser1 => src/Stater/SLXParser}/Data/Stateflow.cs (100%) rename {SLXParser1 => src/Stater/SLXParser}/Data/Transition.cs (92%) create mode 100644 src/Stater/SLXParser/Parser.cs create mode 100644 src/Stater/SLXParser/Program.cs create mode 100644 src/Stater/SLXParser/SLXPlugin.cs rename {SLXParser1 => src/Stater/SLXParser}/TestData/BR_GATES_HDL.slx (100%) create mode 100644 src/Stater/SLXParser/Translator.cs rename {SLXParser1 => src/Stater/SLXParser}/Utils/Color.cs (100%) rename {SLXParser1 => src/Stater/SLXParser}/Utils/Point2D.cs (100%) delete mode 100644 src/plugins/SLXParser/Data/BaseNode.cs delete mode 100644 src/plugins/SLXParser/Data/Chart.cs delete mode 100644 src/plugins/SLXParser/Data/Data.cs delete mode 100644 src/plugins/SLXParser/Data/Instance.cs delete mode 100644 src/plugins/SLXParser/Data/Machine.cs delete mode 100644 src/plugins/SLXParser/Data/State.cs delete mode 100644 src/plugins/SLXParser/Data/Stateflow.cs delete mode 100644 src/plugins/SLXParser/Data/Transition.cs delete mode 100644 src/plugins/SLXParser/Parser.cs delete mode 100644 src/plugins/SLXParser/Program.cs delete mode 100644 src/plugins/SLXParser/SLXPlugin.cs delete mode 100644 src/plugins/SLXParser/TestData/BR_GATES_HDL.slx delete mode 100644 src/plugins/SLXParser/Translator.cs delete mode 100644 src/plugins/SLXParser/Utils/Color.cs delete mode 100644 src/plugins/SLXParser/Utils/Point2D.cs diff --git a/.gitignore b/.gitignore index 6ba7b14..3b9be07 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ StaterV/bu **/.svn FBDK/FBParser/exp .idea +.lib/* ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. diff --git a/BasePlugin/BasePlugin.csproj b/BasePlugin/BasePlugin.csproj new file mode 100644 index 0000000..3a63532 --- /dev/null +++ b/BasePlugin/BasePlugin.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/BasePlugin/Class1.cs b/BasePlugin/Class1.cs new file mode 100644 index 0000000..83d91b1 --- /dev/null +++ b/BasePlugin/Class1.cs @@ -0,0 +1,5 @@ +namespace BasePlugin; + +public class Class1 +{ +} \ No newline at end of file diff --git a/CFuncGenerator1/CGenerator.cs b/CFuncGenerator1/CGenerator.cs index 1d575a2..ea1177e 100644 --- a/CFuncGenerator1/CGenerator.cs +++ b/CFuncGenerator1/CGenerator.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; using PluginData; namespace CFuncGenerator diff --git a/README.md b/README.md new file mode 100644 index 0000000..cffad8a --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# Stater: редактор конечного автомата + +Stater — это мощное приложение, разработанное для упрощения создания, управления и выполнения конечных автоматов с использованием фреймворка C# Avalonia. Stater идеально подходит для разработчиков и дизайнеров, которые имеют дело со сложной логикой состояний. Stater предоставляет интуитивно понятный интерфейс для проектирования и управления конечными автоматами для различных приложений. + +## Функции + +- **Управление проектами:** Легкое создание и управление проектами, содержащими несколько конечных автоматов. +- **Редактирование конечного автомата:** Проектирование конечных автоматов с состояниями, переходами и условиями. +- **Моделирование выполнения:** Моделирование переходов состояний и отслеживание изменений в реальном времени. +- **Отмена/повтор действий:** Предоставляет функцию отмены/повтора для легкой навигации по различным этапам проектирования конечного автомата. +- **Поддержка плагинов:** Расширение функциональности с помощью пользовательских плагинов. +- **Ведение журнала и отслеживание переменных:** Мониторинг выполнения и состояний переменных во время моделирования. + +## Установка + +Клонируйте репозиторий и создайте приложение с помощью .NET с фреймворком Avalonia. + +```bash +dotnet build +dotnet run +``` + + +## Использование + +### Основные интерфейсы + +Stater использует несколько ключевых интерфейсов для обеспечения своей функциональности: + +- **`IProjectManager`**: управляет созданием проекта, загрузкой, сохранением и управлением конечными автоматами. +- **`IEditorManager`**: управляет взаимодействием пользователя с компонентами конечного автомата, такими как состояния, переходы и переменные. +- **`IExecutor`**: управляет моделированием выполнения конечных автоматов, включая запуск, остановку и пошаговое прохождение состояний. + +### Пример: создание конечного автомата + +Вот как можно программно создать конечный автомат и добавить состояния и переходы: + +```csharp +var projectManager = new ProjectManager(); +projectManager.CreateProject("Example Project"); +var stateMachine = projectManager.CreateStateMachine(); + +var state1 = projectManager.CreateState(); +var state2 = projectManager.CreateState(); + +var transition = projectManager.CreateTransition(state1, state2); + +projectManager.UpdateStateMachine(stateMachine); +``` \ No newline at end of file diff --git a/SLXParser1/Parser.cs b/SLXParser1/Parser.cs deleted file mode 100644 index fdbc947..0000000 --- a/SLXParser1/Parser.cs +++ /dev/null @@ -1,661 +0,0 @@ -using System; -using System.Globalization; -using System.IO; -using System.Xml; -using SLXParser.Data; -using SLXParser.Utils; - -namespace SLXParser -{ - public class Parser - { - private readonly string inFile; - private readonly string zipPath; - - public Parser(string path) - { - if (!File.Exists(path)) - { - throw new InvalidOperationException("Файл не найден"); - } - - inFile = path; - var parentDir = Directory.GetParent(inFile); - - if (parentDir == null) - { - throw new InvalidOperationException("Не удалось выбрать папку для распаковки"); - } - - zipPath = Path.Combine(parentDir.ToString(), "slx_parser.temp"); - } - - public Stateflow Parse() - { - System.IO.Compression.ZipFile.ExtractToDirectory(inFile, zipPath); - - var simulinkPath = Path.Combine(zipPath, "simulink", "stateflow.xml"); - - if (!File.Exists(simulinkPath)) - { - Directory.Delete(zipPath, true); - throw new InvalidOperationException("Не удалось найти файл от stateflow"); - } - - try - { - return ParseFile(simulinkPath); - } - catch (Exception e) - { - Console.WriteLine(e); - throw; - } - finally - { - Directory.Delete(zipPath, true); - } - } - - private Stateflow ParseFile(string file) - { - var xDoc = new XmlDocument(); - xDoc.Load(file); - var xRoot = xDoc.DocumentElement; - if (xRoot == null) - { - throw new InvalidOperationException("Проблема парсинга stateflow xml"); - } - - if (xRoot.Name != "Stateflow") - { - throw new InvalidOperationException("Главный элемент не является Stateflow"); - } - - return ParseStateflow(xRoot); - } - - private Stateflow ParseStateflow(XmlNode xmlNode) - { - var stateflow = new Stateflow(); - - foreach (XmlNode node in xmlNode.ChildNodes) - { - if (node.Name == "machine") - { - stateflow.Machine = ParseMachine(node); - } - - if (node.Name == "instance") - { - stateflow.Instance = ParseInstance(node); - } - } - - return stateflow; - } - - private Instance ParseInstance(XmlNode xmlNode) - { - var instance = new Instance - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - if (node.Name == "P") - { - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "name": - instance.Name = node.InnerText; - break; - } - - break; - } - } - } - - return instance; - } - - private Machine ParseMachine(XmlNode xmlNode) - { - var machine = new Machine - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "created": - machine.Created = node.InnerText; - break; - } - - break; - } - case "Children": - foreach (XmlNode childrenNode in node.ChildNodes) - { - if (childrenNode.Name == "chart") - { - machine.Chart = ParseChart(childrenNode); - } - } - - break; - } - } - - return machine; - } - - private Chart ParseChart(XmlNode xmlNode) - { - var chart = new Chart - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "name": - chart.Name = node.InnerText; - break; - case "windowPosition": - chart.WindowPosition = Parse4Point(node.InnerText); - break; - case "viewLimits": - chart.ViewLimits = Parse4Point(node.InnerText); - break; - case "zoomFactor": - chart.ZoomFactor = float.Parse(node.InnerText, CultureInfo.InvariantCulture); - break; - case "stateColor": - chart.StateColor = ParseColor(node.InnerText); - break; - case "stateLabelColor": - chart.StateLabelColor = ParseColor(node.InnerText); - break; - case "transitionColor": - chart.TransitionColor = ParseColor(node.InnerText); - break; - case "transitionLabelColor": - chart.TransitionLabelColor = ParseColor(node.InnerText); - break; - case "junctionColor": - chart.JunctionColor = ParseColor(node.InnerText); - break; - case "chartColor": - chart.ChartColor = ParseColor(node.InnerText); - break; - case "viewObj": - chart.ViewObj = int.Parse(node.InnerText); - break; - case "visible": - chart.Visible = ParseBool(node.InnerText); - break; - } - - break; - } - case "Children": - foreach (XmlNode childrenNode in node.ChildNodes) - { - switch (childrenNode.Name) - { - case "state": - chart.ChildrenState.Add(ParseState(childrenNode)); - break; - case "data": - chart.ChildrenData.Add(ParseData(childrenNode)); - break; - } - } - - break; - } - } - - return chart; - } - - private State ParseState(XmlNode xmlNode) - { - var state = new State - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "labelString": - state.LabelString = node.InnerText; - break; - case "position": - state.Position = Parse4Point(node.InnerText); - break; - case "fontSize": - state.FontSize = int.Parse(node.InnerText); - break; - case "visible": - state.Visible = ParseBool(node.InnerText); - break; - case "subviewer": - state.Subviewer = int.Parse(node.InnerText); - break; - case "type": - state.Type = node.InnerText; - break; - case "decomposition": - state.Decomposition = node.InnerText; - break; - case "executionOrder": - state.ExecutionOrder = int.Parse(node.InnerText); - break; - } - - break; - } - case "activeStateOutput": - { - foreach (XmlNode childrenNode in node.ChildNodes) - { - if (childrenNode.Name == "P") - { - var name = childrenNode.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "useCustomName": - State.ActiveStateOutput.UseCustomName = ParseBool(node.InnerText); - break; - case "customName": - State.ActiveStateOutput.CustomName = node.InnerText; - break; - case "useCustomEnumTypeName": - State.ActiveStateOutput.UseCustomEnumTypeName = ParseBool(node.InnerText); - break; - case "enumTypeName": - State.ActiveStateOutput.EnumTypeName = node.InnerText; - break; - } - } - } - - break; - } - case "Children": - foreach (XmlNode childrenNode in node.ChildNodes) - { - switch (childrenNode.Name) - { - case "state": - state.ChildrenState.Add(ParseState(childrenNode)); - break; - case "transition": - state.ChildrenTransition.Add(ParseTransition(childrenNode)); - break; - } - } - - break; - } - } - - return state; - } - - - private Transition ParseTransition(XmlNode xmlNode) - { - var transition = new Transition - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "labelString": - transition.LabelString = node.InnerText; - break; - case "labelPosition": - transition.LabelPosition = Parse4Point(node.InnerText); - break; - case "fontSize": - transition.FontSize = int.Parse(node.InnerText); - break; - case "midPoint": - transition.MidPoint = ParsePoint(node.InnerText); - break; - case "dataLimits": - transition.DataLimits = Parse4Point(node.InnerText); - break; - case "subviewer": - transition.Subviewer = int.Parse(node.InnerText); - break; - case "drawStyle": - transition.DrawStyle = node.InnerText; - break; - case "executionOrder": - transition.ExecutionOrder = int.Parse(node.InnerText); - break; - } - - break; - } - case "src": - transition.Src = ParseAddress(node); - break; - case "dst": - transition.Dst = ParseAddress(node); - break; - } - } - - return transition; - } - - private static Address ParseAddress(XmlNode xmlNode) - { - var address = new Address(); - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "SSID": - address.SSID = int.Parse(node.InnerText); - break; - case "intersection": - address.Intersection = Parse8Point(node.InnerText); - break; - } - - break; - } - } - } - - return address; - } - - - private static Data.Data ParseData(XmlNode xmlNode) - { - var data = new Data.Data - { - Id = ParseId(xmlNode), - Name = ParseName(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "scope": - data.Scope = node.InnerText; - break; - case "dataType": - data.DataType = node.InnerText; - break; - } - - break; - } - case "props": - foreach (XmlNode childrenNode in node.ChildNodes) - { - switch (childrenNode.Name) - { - case "P": - { - var name = childrenNode.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "frame": - data.Props.Frame = childrenNode.InnerText; - break; - } - - break; - } - case "type": - { - foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) - { - if (childrenNode2.Name == "P") - { - var name = childrenNode2.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "method": - data.Props.TypeMethod = childrenNode2.InnerText; - break; - case "primitive": - data.Props.TypePrimitive = childrenNode2.InnerText; - break; - case "wordLength": - data.Props.TypeWordLength = int.Parse(childrenNode2.InnerText); - break; - } - - break; - } - - switch (childrenNode2.Name) - { - case "fixpt": - { - foreach (XmlNode childrenNode3 in childrenNode2.ChildNodes) - { - if (childrenNode3.Name == "P") - { - var name = childrenNode3.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "scalingMode": - data.Props.TypeFixptScalingMode = - childrenNode3.InnerText; - break; - case "fractionLength": - data.Props.TypeFixptFractionLength = - int.Parse(childrenNode3.InnerText); - break; - case "slope": - data.Props.TypeFixptSlope = childrenNode3.InnerText; - break; - case "bias": - data.Props.TypeFixptBias = - int.Parse(childrenNode3.InnerText); - break; - } - } - } - - break; - } - } - } - - break; - } - case "unit": - { - foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) - { - if (childrenNode2.Name == "P") - { - var name = childrenNode2.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "frame": - data.Props.UnitName = childrenNode2.InnerText; - break; - } - } - } - - break; - } - } - } - - break; - } - } - - return data; - } - - private static int ParseId(XmlNode xmlNode) - { - var id = xmlNode.Attributes?["id"]; - if (id != null) return int.Parse(id.Value); - var name = xmlNode.Attributes?["Name"]; - if (name != null && name.Value == "SSID") - { - return int.Parse(xmlNode.InnerText); - } - var ssid = xmlNode.Attributes?["SSID"]; - if (ssid != null) - { - return int.Parse(ssid.Value); - } - - return -1; - } - - - private static string ParseName(XmlNode xmlNode) - { - var name = xmlNode.Attributes?["name"].Value; - return name ?? ""; - } - - private static Point2D ParsePoint(string line) - { - line = line.Substring(1, line.Length - 2); - var numbers = line.Split(' '); - - var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); - var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); - - return new Point2D(x1, y1); - } - - private static DoublePoint Parse4Point(string line) - { - line = line.Substring(1, line.Length - 2); - - var numbers = line.Split(' '); - - var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); - var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); - var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); - var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); - - return new DoublePoint(new Point2D(x1, y1), new Point2D(x2, y2)); - } - - private static DoubleDoublePoint Parse8Point(string line) - { - line = line.Substring(1, line.Length - 2); - var numbers = line.Split(' '); - - var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); - var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); - var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); - var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); - var x3 = float.Parse(numbers[4], CultureInfo.InvariantCulture); - var y3 = float.Parse(numbers[5], CultureInfo.InvariantCulture); - var x4 = float.Parse(numbers[6], CultureInfo.InvariantCulture); - var y4 = float.Parse(numbers[7], CultureInfo.InvariantCulture); - - return new DoubleDoublePoint(new DoublePoint(new Point2D(x1, y1), new Point2D(x2, y2)), - new DoublePoint(new Point2D(x3, y3), new Point2D(x4, y4))); - } - - private static Color ParseColor(string line) - { - line = line.Substring(1, line.Length - 2); - var numbers = line.Split(' '); - - var r = (int)(double.Parse(numbers[0], CultureInfo.InvariantCulture) * 256); - var g = (int)(double.Parse(numbers[1], CultureInfo.InvariantCulture) * 256); - var b = (int)(double.Parse(numbers[2], CultureInfo.InvariantCulture) * 256); - - return new Color(r, g, b); - } - - private static bool ParseBool(string line) - { - return line == "1"; - } - } -} \ No newline at end of file diff --git a/SLXParser1/Program.cs b/SLXParser1/Program.cs deleted file mode 100644 index 1c46a94..0000000 --- a/SLXParser1/Program.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -namespace SLXParser -{ - internal class Program - { - public static void Main(string[] args) - { - const string path = "/Users/vnazarov/PycharmProjects/ya-hakaton/BR_GATES_HDL.slx"; - - var parser = new Parser(path); - var stateflow = parser.Parse(); - var pluginStateflow = new Translator().Convert(stateflow); - - Console.WriteLine(stateflow.Machine.Chart.ChildrenState); - Console.WriteLine(stateflow.Machine.Chart.ChildrenState.Count); - } - } -} \ No newline at end of file diff --git a/SLXParser1/Properties/AssemblyInfo.cs b/SLXParser1/Properties/AssemblyInfo.cs deleted file mode 100644 index 7172619..0000000 --- a/SLXParser1/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("SLXParser1")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("SLXParser1")] -[assembly: AssemblyCopyright("Copyright © 2024")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3917F540-90B0-4DBB-9B3F-95967F2549B7")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/SLXParser1/SLXParser1.csproj b/SLXParser1/SLXParser1.csproj deleted file mode 100644 index 0d4eaec..0000000 --- a/SLXParser1/SLXParser1.csproj +++ /dev/null @@ -1,86 +0,0 @@ - - - - - Debug - AnyCPU - {3917F540-90B0-4DBB-9B3F-95967F2549B7} - Library - Properties - SLXParser - SLXParser1 - v4.5 - 512 - true - - - AnyCPU - true - full - false - ../StaterV/bin/Release/plugins/SLXParser - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - ../StaterV/bin/Release/plugins/SLXParser - TRACE - prompt - 4 - - - - - - - - - ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - {41a0b9e4-c529-4f6d-8f69-ab0ee1ae6951} - PluginData - - - - - - - - - diff --git a/SLXParser1/SLXPlugin.cs b/SLXParser1/SLXPlugin.cs deleted file mode 100644 index bfd9ee4..0000000 --- a/SLXParser1/SLXPlugin.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Windows.Forms; -using PluginData; - -namespace SLXParser -{ - public class SLXPlugin : IndependentPlugin - { - public override IReturn Start(IParams param) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "Function block files|*.slx"; - ofd.FilterIndex = 0; - var dialogResult = ofd.ShowDialog(); - var result = new IReturn(); - result.Message = "OK"; - if (dialogResult != DialogResult.OK) - { - result.Message = "DialogResult is not OK"; - return result; - } - - var parser = new Parser(ofd.FileName); - var stateflow = parser.Parse(); - var pluginStateflow = new Translator().Convert(stateflow); - Console.WriteLine(pluginStateflow); - result.ChangedMachines.Add(pluginStateflow); - return result; - } - - public override bool NeedParams - { - get { return false; } - } - } -} \ No newline at end of file diff --git a/SLXParser1/Translator.cs b/SLXParser1/Translator.cs deleted file mode 100644 index a9e6161..0000000 --- a/SLXParser1/Translator.cs +++ /dev/null @@ -1,140 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using PluginData; -using SLXParser.Data; -using State = PluginData.State; -using SLXState = SLXParser.Data.State; -using Transition = PluginData.Transition; -using SLXTransition = SLXParser.Data.Transition; -using SLXData = SLXParser.Data.Data; - -namespace SLXParser -{ - public class Translator - { - public StateMachine Convert(Stateflow stateflow) - { - var stateMachine = new StateMachine - { - Type = "SLX", - Name = stateflow.Instance.Name, - States = ConvertChart(stateflow.Machine.Chart), - Variables = ConvertVariable(stateflow.Machine.Chart.ChildrenData), - }; - - stateMachine.Transitions = ConvertChartTransitions(stateflow.Machine.Chart, stateMachine.States); - stateMachine.StartState = stateMachine.States[0]; - stateMachine.EndStates.Add(stateMachine.States[stateMachine.States.Count - 1]); - return stateMachine; - } - - private static List ConvertChart(Chart chart) - { - var states = new List(); - - foreach (var state in chart.ChildrenState) - { - states.AddRange(ConvertState(state)); - } - - return states; - } - - private static IEnumerable ConvertState(SLXState slxState) - { - var state = new State - { - ID = new UID(slxState.Id), - Name = slxState.LabelString, - Type = State.StateType.Common - }; - - var states = new List { state }; - - foreach (var slxStateChildren in slxState.ChildrenState) - { - states.AddRange(ConvertState(slxStateChildren)); - } - - return states; - } - - private List ConvertChartTransitions(Chart chart, List slxStateOriginList) - { - var transitions = new List(); - - foreach (var state in chart.ChildrenState) - { - transitions.AddRange(ConvertStateTransition(state, slxStateOriginList)); - } - - return transitions; - } - - private static IEnumerable ConvertStateTransition(SLXState slxState, List slxStateOriginList) - { - var transitions = new List(); - - foreach (var transition in slxState.ChildrenTransition) - { - var transition_ = ConvertTransition(transition, slxStateOriginList); - if (transition_ != null) - { - transitions.Add(transition_); - } - } - - foreach (var state in slxState.ChildrenState) - { - transitions.AddRange(ConvertStateTransition(state, slxStateOriginList)); - } - - return transitions; - } - - private static Transition ConvertTransition(SLXTransition slxTransition, List slxStateOriginList) - { - var transition = new Transition - { - ID = new UID(slxTransition.Id) - }; - - var start = FindStateById(new UID(slxTransition.Src.SSID), slxStateOriginList); - var end = FindStateById(new UID(slxTransition.Dst.SSID), slxStateOriginList); - - if (start == null || end == null) - { - return null; - } - - transition.Start = start; - transition.End = end; - transition.Name = slxTransition.LabelString; - - start.Outgoing.Add(transition); - end.Incoming.Add(transition); - - return transition; - } - - private static State FindStateById(UID id, List slxStateOriginList) - { - return slxStateOriginList.FirstOrDefault(state => { return state.ID.Value == id.Value; }); - } - - private static List ConvertVariable(List datas) - { - var result = new List(); - foreach (var data in datas) - { - var variable = new SingleVariable(); - variable.Name = data.Name; - variable.ID = new UID(data.Id); - result.Add(variable); - } - - return result; - } - } -} \ No newline at end of file diff --git a/SLXParser1/packages.config b/SLXParser1/packages.config deleted file mode 100644 index becd077..0000000 --- a/SLXParser1/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Stater.sln b/Stater.sln index a850102..a404e19 100644 --- a/Stater.sln +++ b/Stater.sln @@ -51,14 +51,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CFuncGenerator1", "CFuncGen EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater", "src\Stater\Stater.csproj", "{EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SLXParser1", "SLXParser1\SLXParser1.csproj", "{3917F540-90B0-4DBB-9B3F-95967F2549B7}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpCodeGenerator", "src\plugins\CSharpCodeGenerator\CSharpCodeGenerator.csproj", "{1FEC7964-E23A-4C78-99BC-13EFB4A55583}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CFuncGenerator", "src\plugins\CFuncGenerator\CFuncGenerator.csproj", "{D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SLXParser", "src\plugins\SLXParser\SLXParser.csproj", "{1E9A9735-462C-4194-B128-7959F51596EB}" -EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = Stater.vsmdi @@ -140,10 +136,6 @@ Global {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Debug|Any CPU.Build.0 = Debug|Any CPU {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Release|Any CPU.ActiveCfg = Release|Any CPU {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Release|Any CPU.Build.0 = Release|Any CPU - {3917F540-90B0-4DBB-9B3F-95967F2549B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3917F540-90B0-4DBB-9B3F-95967F2549B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3917F540-90B0-4DBB-9B3F-95967F2549B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3917F540-90B0-4DBB-9B3F-95967F2549B7}.Release|Any CPU.Build.0 = Release|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Debug|Any CPU.Build.0 = Debug|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -156,10 +148,6 @@ Global {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Debug|Any CPU.Build.0 = Debug|Any CPU {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Release|Any CPU.ActiveCfg = Release|Any CPU {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Release|Any CPU.Build.0 = Release|Any CPU - {1E9A9735-462C-4194-B128-7959F51596EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E9A9735-462C-4194-B128-7959F51596EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E9A9735-462C-4194-B128-7959F51596EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E9A9735-462C-4194-B128-7959F51596EB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -176,9 +164,7 @@ Global {5E9FF3AA-0784-4B4A-BCD2-9CCBC39D4D66} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {09FED13A-1642-496C-AE3F-F0A2770BE9A2} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {EA67DB8A-BB10-4343-87A0-E91EDD783C8B} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {3917F540-90B0-4DBB-9B3F-95967F2549B7} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {1FEC7964-E23A-4C78-99BC-13EFB4A55583} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {1E9A9735-462C-4194-B128-7959F51596EB} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} EndGlobalSection EndGlobal diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..f4a0eb4 --- /dev/null +++ b/changelog.md @@ -0,0 +1,16 @@ +# Changelog + +## [Unreleased] + +### Добавления +- Добавлена возможность запуска автомата +- Добавлено окно справа для контрукторов рекдактирования состояний, переходов.. +- Добавлено окно слева для перехода между конечными автоматами + +### Изменения +- Изменена версия C#: C# Framework 4 -> C# net 8 +- Изменена директория с решением проекта, теперь основное решения находитсяв /src/Stater +- Изменен фреймворк для интерфейса Windows Forms -> Avalonia +- Изменена структура приложения, на данный момент приложение использует MVVM архитектуру +- Изменена система UNDO-REDO, раньше каждая команда требовала отдельного написания для класса, сейчас сохраняется каждое изменение StateMachine, что не требует функциональности для REDO +- Изменена система плагинов, на данный момент плагин не является отдельным решением diff --git a/src/Stater/Models/Editors/IEditorManager.cs b/src/Stater/Models/Editors/IEditorManager.cs index 6a12bd1..e9ddd5e 100644 --- a/src/Stater/Models/Editors/IEditorManager.cs +++ b/src/Stater/Models/Editors/IEditorManager.cs @@ -15,6 +15,8 @@ public interface IEditorManager { IObservable EditorType { get; } + void DoSelectNull(); + void DoSelectStateMachine(StateMachine stateMachine); void DoSelectState(State state); void DoSelectTransition(Transition transition); diff --git a/src/Stater/Models/Editors/impl/EditorManager.cs b/src/Stater/Models/Editors/impl/EditorManager.cs index e163ab1..ce257ce 100644 --- a/src/Stater/Models/Editors/impl/EditorManager.cs +++ b/src/Stater/Models/Editors/impl/EditorManager.cs @@ -13,6 +13,10 @@ public class EditorManager : IEditorManager private ITransitionEditor _transitionEditor; private IVariableEditor _variableEditor; + public void DoSelectNull() + { + _editorType.OnNext(EditorTypeEnum.Null); + } public EditorManager( IStateMachineEditor stateMachineEditor, diff --git a/src/Stater/Models/Executor/IExecutor.cs b/src/Stater/Models/Executor/IExecutor.cs index bc74659..032adc9 100644 --- a/src/Stater/Models/Executor/IExecutor.cs +++ b/src/Stater/Models/Executor/IExecutor.cs @@ -19,4 +19,6 @@ public interface IExecutor void Stop(); void Reset(); void Step(); + + void ClearLog(); } \ No newline at end of file diff --git a/src/Stater/Models/Executor/impl/Executor.cs b/src/Stater/Models/Executor/impl/Executor.cs index c8306a2..29e3b97 100644 --- a/src/Stater/Models/Executor/impl/Executor.cs +++ b/src/Stater/Models/Executor/impl/Executor.cs @@ -41,6 +41,7 @@ private void WriteLog( State? currentState = null; var subscribe = _state.Subscribe(s => currentState = s); subscribe.Dispose(); + Console.WriteLine(currentState); return currentState; } @@ -77,7 +78,7 @@ public void Start(int stepTime) _state.OnNext(null); _variables.OnNext(null); } - + WriteLog("State Machine: " + _stateMachine.Name); var state = GetCurrentState(); @@ -190,6 +191,15 @@ public void Step() if (res) { WriteLog($"Transition {transition.Name} condition is true", 1); + if (transition.Event != null) + { + var newVariables = EventLogic.Evaluate(transition.Event, GetCurrentVariables()); + foreach (var keyValuePair in newVariables) + { + variables[keyValuePair.Key] = keyValuePair.Value; + } + } + var newState = _stateMachine.States.First(s => s.Guid == transition.End); _state.OnNext(newState); return; @@ -201,4 +211,9 @@ public void Step() WriteLog("No transition was suitable", 0, ExecuteLog.ExecuteLogStatusEnum.Warning); Stop(); } + + public void ClearLog() + { + _logs.OnNext(new LogContainer(new List())); + } } \ No newline at end of file diff --git a/src/Stater/Models/IProjectManager.cs b/src/Stater/Models/IProjectManager.cs index b3346ea..afd6f51 100644 --- a/src/Stater/Models/IProjectManager.cs +++ b/src/Stater/Models/IProjectManager.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using Avalonia.Animation; using DynamicData; @@ -15,13 +16,20 @@ public interface IProjectManager Project? LoadProject(StreamReader sr); void SaveProject(StreamWriter sw); + Project? GetProject(); + StateMachine? GetStateMachine(); + List GetStateMachines(); + void Undo(); void Redo(); StateMachine CreateStateMachine(); + void RemoveStateMachine(Guid guid); void UpdateStateMachine(StateMachine newStateMachine); StateMachine? OpenStateMachine(Guid guid); + State? CreateState(); + void RemoveState(Guid guid); State? GetState(Guid guid); void UpdateState(State state); @@ -33,4 +41,6 @@ public interface IProjectManager Variable? CreateVariable(); void RemoveVariable(Guid guid); void UpdateVariable(Variable variable); + + void ChangeStateMachines(List stateMachines); } \ No newline at end of file diff --git a/src/Stater/Models/Transition.cs b/src/Stater/Models/Transition.cs index 3f57707..33089db 100644 --- a/src/Stater/Models/Transition.cs +++ b/src/Stater/Models/Transition.cs @@ -9,7 +9,8 @@ public record Transition( string Name, Guid? Start, Guid? End, - Condition? Condition + Condition? Condition, + Event? Event ) { public Transition() : this( @@ -17,6 +18,7 @@ public Transition() : this( "Transition", null, null, + null, null ) { diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index 77826da..28514dd 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -3,11 +3,9 @@ using System.ComponentModel.DataAnnotations; using System.IO; using System.Linq; -using System.Reactive.Linq; using System.Reactive.Subjects; using System.Xml; using DynamicData; -using DynamicData.Alias; namespace Stater.Models.impl; @@ -22,37 +20,38 @@ internal class ProjectManager : IProjectManager private readonly ReplaySubject _stateMachine = new(); public IObservable StateMachine => _stateMachine; - private readonly ReplaySubject _state = new(); - public IObservable State => _state; + // private readonly ReplaySubject _state = new(); + // public IObservable State => _state; - private readonly ReplaySubject _transtion = new(); - public IObservable Transition => _transtion; + // private readonly ReplaySubject _transtion = new(); + // public IObservable Transition => _transtion; private readonly Stack undoStack = new(); private readonly Stack redoStack = new(); - private StateMachine? GetCurrentStateMachine() + public StateMachine? GetStateMachine() { StateMachine? currentStateMachine = null; var s = _stateMachine.Subscribe(stateMachine => currentStateMachine = stateMachine); s.Dispose(); return currentStateMachine; } - - private Project? GetCurrentProject() + + public Project? GetProject() { Project? currentProject = null; var s = _project.Subscribe(x => currentProject = x); s.Dispose(); return currentProject; } - - private List GetCurrentStateMachines() + + public List GetStateMachines() { var s = _stateMachines.KeyValues.Select(x => x.Value).ToList(); return s; } - + + public void CreateProject(string name) { var project = new Project( @@ -77,9 +76,9 @@ public void SaveProject(StreamWriter sw) { var writer = new System.Xml.Serialization.XmlSerializer(typeof(ExportProject)); var exportProject = new ExportProject( - GetCurrentProject(), - GetCurrentStateMachines() - ); + GetProject(), + GetStateMachines() + ); writer.Serialize(sw, exportProject); sw.Close(); } @@ -109,6 +108,11 @@ public void UpdateStateMachine(StateMachine newStateMachine) _stateMachine.OnNext(newStateMachine); } + public void RemoveStateMachine(Guid guid) + { + _stateMachines.Remove(guid.ToString()); + } + public StateMachine CreateStateMachine() { var stateMachine = new StateMachine( @@ -124,7 +128,7 @@ public StateMachine CreateStateMachine() public StateMachine? OpenStateMachine(Guid guid) { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); if (currentStateMachine?.Guid == guid) return null; var stateMachine = _stateMachines.KeyValues[guid.ToString()]; undoStack.Clear(); @@ -136,7 +140,7 @@ public StateMachine CreateStateMachine() public State? CreateState() { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); if (currentStateMachine == null) return null; var state = new State( Guid: Guid.NewGuid(), @@ -156,15 +160,27 @@ public StateMachine CreateStateMachine() return state; } + public void RemoveState(Guid guid) + { + var currentStateMachine = GetStateMachine(); + if (currentStateMachine == null) return; + var states = currentStateMachine.States.Where(el => el.Guid != guid); + var newStateMachine = currentStateMachine with + { + States = new List(states) + }; + UpdateStateMachine(newStateMachine); + } + public State? GetState(Guid guid) { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); return currentStateMachine?.States.FirstOrDefault(e => e.Guid == guid); } public void UpdateState(State state) { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); if (currentStateMachine == null) return; var states = currentStateMachine.States.Where(el => el.Guid != state.Guid); var newStateMachine = currentStateMachine with @@ -176,14 +192,15 @@ public void UpdateState(State state) public Transition? CreateTransition(State start, State end) { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); if (currentStateMachine == null) return null; Transition transition = new( Guid: Guid.NewGuid(), Name: "State", Start: start.Guid, End: end.Guid, - Condition: null + Condition: null, + Event: null ); var newStateMachine = currentStateMachine with { @@ -198,13 +215,13 @@ public void UpdateState(State state) public Transition? GetTransition(Guid guid) { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); return currentStateMachine?.Transitions.FirstOrDefault(e => e.Guid == guid); } public void RemoveTransition(Guid guid) { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); if (currentStateMachine == null) return; var transitions = currentStateMachine.Transitions.Where(el => el.Guid != guid); var newStateMachine = currentStateMachine with @@ -216,7 +233,7 @@ public void RemoveTransition(Guid guid) public void UpdateTransition(Transition transition) { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); if (currentStateMachine == null) return; var transitions = currentStateMachine.Transitions.Where(el => el.Guid != transition.Guid); var newStateMachine = currentStateMachine with @@ -228,7 +245,7 @@ public void UpdateTransition(Transition transition) public Variable? CreateVariable() { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); if (currentStateMachine == null) return null; var variable = new Variable(); @@ -240,7 +257,7 @@ public void UpdateTransition(Transition transition) public void RemoveVariable(Guid guid) { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); if (currentStateMachine == null) return; var variables = currentStateMachine.Variables.Where(el => el.Guid != guid); var newStateMachine = currentStateMachine with @@ -252,7 +269,7 @@ public void RemoveVariable(Guid guid) public void UpdateVariable(Variable variable) { - var currentStateMachine = GetCurrentStateMachine(); + var currentStateMachine = GetStateMachine(); if (currentStateMachine == null) return; var variables = currentStateMachine.Variables.Where(el => el.Guid != variable.Guid); var newStateMachine = currentStateMachine with @@ -261,4 +278,9 @@ public void UpdateVariable(Variable variable) }; UpdateStateMachine(newStateMachine); } + + public void ChangeStateMachines(List stateMachines) + { + stateMachines.ForEach(e => _stateMachines.AddOrUpdate(e)); + } } \ No newline at end of file diff --git a/src/Stater/Plugin/ButtonFilePlugin.cs b/src/Stater/Plugin/ButtonFilePlugin.cs new file mode 100644 index 0000000..6be38c4 --- /dev/null +++ b/src/Stater/Plugin/ButtonFilePlugin.cs @@ -0,0 +1,8 @@ +namespace Stater.Plugin; + +public abstract class ButtonFilePlugin : IPlugin +{ + public abstract PluginOutput Start(PluginInput pluginInput, string path); + + public virtual string Name => "ButtonFilePlugin"; +} \ No newline at end of file diff --git a/src/Stater/Plugin/ButtonPlugin.cs b/src/Stater/Plugin/ButtonPlugin.cs index 4e34cba..6c23b4a 100644 --- a/src/Stater/Plugin/ButtonPlugin.cs +++ b/src/Stater/Plugin/ButtonPlugin.cs @@ -1,7 +1,8 @@ namespace Stater.Plugin; -public abstract class ButtonPlugin +public abstract class ButtonPlugin : IPlugin { - public abstract PluginOutput Start(PluginInput pluginInput); + + public virtual string Name => "ButtonPlugin"; } \ No newline at end of file diff --git a/src/Stater/Plugin/IPlugin.cs b/src/Stater/Plugin/IPlugin.cs new file mode 100644 index 0000000..e890ec5 --- /dev/null +++ b/src/Stater/Plugin/IPlugin.cs @@ -0,0 +1,6 @@ +namespace Stater.Plugin; + +public interface IPlugin +{ + string Name { get; } +} \ No newline at end of file diff --git a/SLXParser1/Data/BaseNode.cs b/src/Stater/SLXParser/Data/BaseNode.cs similarity index 63% rename from SLXParser1/Data/BaseNode.cs rename to src/Stater/SLXParser/Data/BaseNode.cs index 4055189..5d8dd0f 100644 --- a/SLXParser1/Data/BaseNode.cs +++ b/src/Stater/SLXParser/Data/BaseNode.cs @@ -1,8 +1,10 @@ +using System; + namespace SLXParser.Data { public class BaseNode { // id или SSID - public int Id { get; set; } + public Guid Id { get; set; } } } \ No newline at end of file diff --git a/SLXParser1/Data/Chart.cs b/src/Stater/SLXParser/Data/Chart.cs similarity index 100% rename from SLXParser1/Data/Chart.cs rename to src/Stater/SLXParser/Data/Chart.cs diff --git a/SLXParser1/Data/Data.cs b/src/Stater/SLXParser/Data/Data.cs similarity index 100% rename from SLXParser1/Data/Data.cs rename to src/Stater/SLXParser/Data/Data.cs diff --git a/SLXParser1/Data/Instance.cs b/src/Stater/SLXParser/Data/Instance.cs similarity index 100% rename from SLXParser1/Data/Instance.cs rename to src/Stater/SLXParser/Data/Instance.cs diff --git a/SLXParser1/Data/Machine.cs b/src/Stater/SLXParser/Data/Machine.cs similarity index 100% rename from SLXParser1/Data/Machine.cs rename to src/Stater/SLXParser/Data/Machine.cs diff --git a/SLXParser1/Data/State.cs b/src/Stater/SLXParser/Data/State.cs similarity index 100% rename from SLXParser1/Data/State.cs rename to src/Stater/SLXParser/Data/State.cs diff --git a/SLXParser1/Data/Stateflow.cs b/src/Stater/SLXParser/Data/Stateflow.cs similarity index 100% rename from SLXParser1/Data/Stateflow.cs rename to src/Stater/SLXParser/Data/Stateflow.cs diff --git a/SLXParser1/Data/Transition.cs b/src/Stater/SLXParser/Data/Transition.cs similarity index 92% rename from SLXParser1/Data/Transition.cs rename to src/Stater/SLXParser/Data/Transition.cs index 689afda..ce47a35 100644 --- a/SLXParser1/Data/Transition.cs +++ b/src/Stater/SLXParser/Data/Transition.cs @@ -1,3 +1,4 @@ +using System; using SLXParser.Utils; namespace SLXParser.Data @@ -20,7 +21,7 @@ public class Transition : BaseNode public class Address { - public int SSID { get; set; } + public Guid SSID { get; set; } public DoubleDoublePoint Intersection { get; set; } } } \ No newline at end of file diff --git a/src/Stater/SLXParser/Parser.cs b/src/Stater/SLXParser/Parser.cs new file mode 100644 index 0000000..64aca72 --- /dev/null +++ b/src/Stater/SLXParser/Parser.cs @@ -0,0 +1,662 @@ +using System; +using System.Globalization; +using System.IO; +using System.Xml; +using SLXParser.Data; +using SLXParser.Utils; + +namespace SLXParser; + +public class Parser +{ + private readonly string inFile; + private readonly string zipPath; + + public Parser(string path) + { + if (!File.Exists(path)) + { + throw new InvalidOperationException("Файл не найден"); + } + + inFile = path; + var parentDir = Directory.GetParent(inFile); + + if (parentDir == null) + { + throw new InvalidOperationException("Не удалось выбрать папку для распаковки"); + } + + zipPath = Path.Combine(parentDir.ToString(), "slx_parser.temp"); + } + + public Stateflow Parse() + { + System.IO.Compression.ZipFile.ExtractToDirectory(inFile, zipPath); + + var simulinkPath = Path.Combine(zipPath, "simulink", "stateflow.xml"); + + if (!File.Exists(simulinkPath)) + { + Directory.Delete(zipPath, true); + throw new InvalidOperationException("Не удалось найти файл от stateflow"); + } + + try + { + return ParseFile(simulinkPath); + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } + finally + { + Directory.Delete(zipPath, true); + } + } + + private Stateflow ParseFile(string file) + { + var xDoc = new XmlDocument(); + xDoc.Load(file); + var xRoot = xDoc.DocumentElement; + if (xRoot == null) + { + throw new InvalidOperationException("Проблема парсинга stateflow xml"); + } + + if (xRoot.Name != "Stateflow") + { + throw new InvalidOperationException("Главный элемент не является Stateflow"); + } + + return ParseStateflow(xRoot); + } + + private Stateflow ParseStateflow(XmlNode xmlNode) + { + var stateflow = new Stateflow(); + + foreach (XmlNode node in xmlNode.ChildNodes) + { + if (node.Name == "machine") + { + stateflow.Machine = ParseMachine(node); + } + + if (node.Name == "instance") + { + stateflow.Instance = ParseInstance(node); + } + } + + return stateflow; + } + + private Instance ParseInstance(XmlNode xmlNode) + { + var instance = new Instance + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + if (node.Name == "P") + { + { + var name = node.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "name": + instance.Name = node.InnerText; + break; + } + + break; + } + } + } + + return instance; + } + + private Machine ParseMachine(XmlNode xmlNode) + { + var machine = new Machine + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "created": + machine.Created = node.InnerText; + break; + } + + break; + } + case "Children": + foreach (XmlNode childrenNode in node.ChildNodes) + { + if (childrenNode.Name == "chart") + { + machine.Chart = ParseChart(childrenNode); + } + } + + break; + } + } + + return machine; + } + + private Chart ParseChart(XmlNode xmlNode) + { + var chart = new Chart + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "name": + chart.Name = node.InnerText; + break; + case "windowPosition": + chart.WindowPosition = Parse4Point(node.InnerText); + break; + case "viewLimits": + chart.ViewLimits = Parse4Point(node.InnerText); + break; + case "zoomFactor": + chart.ZoomFactor = float.Parse(node.InnerText, CultureInfo.InvariantCulture); + break; + case "stateColor": + chart.StateColor = ParseColor(node.InnerText); + break; + case "stateLabelColor": + chart.StateLabelColor = ParseColor(node.InnerText); + break; + case "transitionColor": + chart.TransitionColor = ParseColor(node.InnerText); + break; + case "transitionLabelColor": + chart.TransitionLabelColor = ParseColor(node.InnerText); + break; + case "junctionColor": + chart.JunctionColor = ParseColor(node.InnerText); + break; + case "chartColor": + chart.ChartColor = ParseColor(node.InnerText); + break; + case "viewObj": + chart.ViewObj = int.Parse(node.InnerText); + break; + case "visible": + chart.Visible = ParseBool(node.InnerText); + break; + } + + break; + } + case "Children": + foreach (XmlNode childrenNode in node.ChildNodes) + { + switch (childrenNode.Name) + { + case "state": + chart.ChildrenState.Add(ParseState(childrenNode)); + break; + case "data": + chart.ChildrenData.Add(ParseData(childrenNode)); + break; + } + } + + break; + } + } + + return chart; + } + + private State ParseState(XmlNode xmlNode) + { + var state = new State + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "labelString": + state.LabelString = node.InnerText; + break; + case "position": + state.Position = Parse4Point(node.InnerText); + break; + case "fontSize": + state.FontSize = int.Parse(node.InnerText); + break; + case "visible": + state.Visible = ParseBool(node.InnerText); + break; + case "subviewer": + state.Subviewer = int.Parse(node.InnerText); + break; + case "type": + state.Type = node.InnerText; + break; + case "decomposition": + state.Decomposition = node.InnerText; + break; + case "executionOrder": + state.ExecutionOrder = int.Parse(node.InnerText); + break; + } + + break; + } + case "activeStateOutput": + { + foreach (XmlNode childrenNode in node.ChildNodes) + { + if (childrenNode.Name == "P") + { + var name = childrenNode.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "useCustomName": + State.ActiveStateOutput.UseCustomName = ParseBool(node.InnerText); + break; + case "customName": + State.ActiveStateOutput.CustomName = node.InnerText; + break; + case "useCustomEnumTypeName": + State.ActiveStateOutput.UseCustomEnumTypeName = ParseBool(node.InnerText); + break; + case "enumTypeName": + State.ActiveStateOutput.EnumTypeName = node.InnerText; + break; + } + } + } + + break; + } + case "Children": + foreach (XmlNode childrenNode in node.ChildNodes) + { + switch (childrenNode.Name) + { + case "state": + state.ChildrenState.Add(ParseState(childrenNode)); + break; + case "transition": + state.ChildrenTransition.Add(ParseTransition(childrenNode)); + break; + } + } + + break; + } + } + + return state; + } + + + private Transition ParseTransition(XmlNode xmlNode) + { + var transition = new Transition + { + Id = ParseId(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "labelString": + transition.LabelString = node.InnerText; + break; + case "labelPosition": + transition.LabelPosition = Parse4Point(node.InnerText); + break; + case "fontSize": + transition.FontSize = int.Parse(node.InnerText); + break; + case "midPoint": + transition.MidPoint = ParsePoint(node.InnerText); + break; + case "dataLimits": + transition.DataLimits = Parse4Point(node.InnerText); + break; + case "subviewer": + transition.Subviewer = int.Parse(node.InnerText); + break; + case "drawStyle": + transition.DrawStyle = node.InnerText; + break; + case "executionOrder": + transition.ExecutionOrder = int.Parse(node.InnerText); + break; + } + + break; + } + case "src": + transition.Src = ParseAddress(node); + break; + case "dst": + transition.Dst = ParseAddress(node); + break; + } + } + + return transition; + } + + private static Address ParseAddress(XmlNode xmlNode) + { + var address = new Address(); + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "SSID": + address.SSID = Int2Guid(int.Parse(node.InnerText)); + break; + case "intersection": + address.Intersection = Parse8Point(node.InnerText); + break; + } + + break; + } + } + } + + return address; + } + + + private static Data.Data ParseData(XmlNode xmlNode) + { + var data = new Data.Data + { + Id = ParseId(xmlNode), + Name = ParseName(xmlNode) + }; + + foreach (XmlNode node in xmlNode.ChildNodes) + { + switch (node.Name) + { + case "P": + { + var name = node.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "scope": + data.Scope = node.InnerText; + break; + case "dataType": + data.DataType = node.InnerText; + break; + } + + break; + } + case "props": + foreach (XmlNode childrenNode in node.ChildNodes) + { + switch (childrenNode.Name) + { + case "P": + { + var name = childrenNode.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "frame": + data.Props.Frame = childrenNode.InnerText; + break; + } + + break; + } + case "type": + { + foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) + { + if (childrenNode2.Name == "P") + { + var name = childrenNode2.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "method": + data.Props.TypeMethod = childrenNode2.InnerText; + break; + case "primitive": + data.Props.TypePrimitive = childrenNode2.InnerText; + break; + case "wordLength": + data.Props.TypeWordLength = int.Parse(childrenNode2.InnerText); + break; + } + + break; + } + + switch (childrenNode2.Name) + { + case "fixpt": + { + foreach (XmlNode childrenNode3 in childrenNode2.ChildNodes) + { + if (childrenNode3.Name == "P") + { + var name = childrenNode3.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "scalingMode": + data.Props.TypeFixptScalingMode = + childrenNode3.InnerText; + break; + case "fractionLength": + data.Props.TypeFixptFractionLength = + int.Parse(childrenNode3.InnerText); + break; + case "slope": + data.Props.TypeFixptSlope = childrenNode3.InnerText; + break; + case "bias": + data.Props.TypeFixptBias = + int.Parse(childrenNode3.InnerText); + break; + } + } + } + + break; + } + } + } + + break; + } + case "unit": + { + foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) + { + if (childrenNode2.Name == "P") + { + var name = childrenNode2.Attributes?["Name"]?.Value; + switch (name) + { + case null: + continue; + case "frame": + data.Props.UnitName = childrenNode2.InnerText; + break; + } + } + } + + break; + } + } + } + + break; + } + } + + return data; + } + + public static Guid Int2Guid(int value) + { + byte[] bytes = new byte[16]; + BitConverter.GetBytes(value).CopyTo(bytes, 0); + return new Guid(bytes); + } + + private static Guid ParseId(XmlNode xmlNode) + { + var id = xmlNode.Attributes?["id"]; + if (id != null) return Int2Guid(int.Parse(id.Value)); + var name = xmlNode.Attributes?["Name"]; + if (name != null && name.Value == "SSID") + { + return Int2Guid(int.Parse(xmlNode.InnerText)); + } + var ssid = xmlNode.Attributes?["SSID"]; + return ssid != null ? Int2Guid(int.Parse(ssid.Value)) : new Guid(); + } + + + private static string ParseName(XmlNode xmlNode) + { + var name = xmlNode.Attributes?["name"]?.Value; + return name ?? ""; + } + + private static Point2D ParsePoint(string line) + { + line = line.Substring(1, line.Length - 2); + var numbers = line.Split(' '); + + var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); + var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); + + return new Point2D(x1, y1); + } + + private static DoublePoint Parse4Point(string line) + { + line = line.Substring(1, line.Length - 2); + + var numbers = line.Split(' '); + + var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); + var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); + var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); + var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); + + return new DoublePoint(new Point2D(x1, y1), new Point2D(x2, y2)); + } + + private static DoubleDoublePoint Parse8Point(string line) + { + line = line.Substring(1, line.Length - 2); + var numbers = line.Split(' '); + + var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); + var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); + var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); + var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); + var x3 = float.Parse(numbers[4], CultureInfo.InvariantCulture); + var y3 = float.Parse(numbers[5], CultureInfo.InvariantCulture); + var x4 = float.Parse(numbers[6], CultureInfo.InvariantCulture); + var y4 = float.Parse(numbers[7], CultureInfo.InvariantCulture); + + return new DoubleDoublePoint(new DoublePoint(new Point2D(x1, y1), new Point2D(x2, y2)), + new DoublePoint(new Point2D(x3, y3), new Point2D(x4, y4))); + } + + private static Color ParseColor(string line) + { + line = line.Substring(1, line.Length - 2); + var numbers = line.Split(' '); + + var r = (int)(double.Parse(numbers[0], CultureInfo.InvariantCulture) * 256); + var g = (int)(double.Parse(numbers[1], CultureInfo.InvariantCulture) * 256); + var b = (int)(double.Parse(numbers[2], CultureInfo.InvariantCulture) * 256); + + return new Color(r, g, b); + } + + private static bool ParseBool(string line) + { + return line == "1"; + } +} \ No newline at end of file diff --git a/src/Stater/SLXParser/Program.cs b/src/Stater/SLXParser/Program.cs new file mode 100644 index 0000000..c13c16d --- /dev/null +++ b/src/Stater/SLXParser/Program.cs @@ -0,0 +1,18 @@ +using System; + +namespace SLXParser; + +internal class SLXProgram +{ + public static void Start(string[] args) + { + const string path = "/Users/vnazarov/PycharmProjects/ya-hakaton/BR_GATES_HDL.slx"; + + var parser = new Parser(path); + var stateflow = parser.Parse(); + var pluginStateflow = new Translator().Convert(stateflow); + + Console.WriteLine(stateflow.Machine.Chart.ChildrenState); + Console.WriteLine(stateflow.Machine.Chart.ChildrenState.Count); + } +} \ No newline at end of file diff --git a/src/Stater/SLXParser/SLXPlugin.cs b/src/Stater/SLXParser/SLXPlugin.cs new file mode 100644 index 0000000..c95ff08 --- /dev/null +++ b/src/Stater/SLXParser/SLXPlugin.cs @@ -0,0 +1,23 @@ +using Stater.Plugin; + +namespace SLXParser; + +public class SLXPPlugin: ButtonFilePlugin +{ + public override PluginOutput Start(PluginInput pluginInput, string file) + { + // if (dialogResult != DialogResult.OK) + // { + // result = PluginOutput.From("DialogResult is not OK"); + // return result; + // } + var parser = new Parser(file); + var stateflow = parser.Parse(); + var pluginStateflow = new Translator().Convert(stateflow); + var result = PluginOutput.From("Ok"); + result.ChangedStateMachines.Add(pluginStateflow); + return result; + } + + public override string Name => "SLXParser"; +} \ No newline at end of file diff --git a/SLXParser1/TestData/BR_GATES_HDL.slx b/src/Stater/SLXParser/TestData/BR_GATES_HDL.slx similarity index 100% rename from SLXParser1/TestData/BR_GATES_HDL.slx rename to src/Stater/SLXParser/TestData/BR_GATES_HDL.slx diff --git a/src/Stater/SLXParser/Translator.cs b/src/Stater/SLXParser/Translator.cs new file mode 100644 index 0000000..0239a57 --- /dev/null +++ b/src/Stater/SLXParser/Translator.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using SLXParser.Data; +using Stater.Models; +using State = Stater.Models.State; +using SLXState = SLXParser.Data.State; +using Transition = Stater.Models.Transition; +using SLXTransition = SLXParser.Data.Transition; +using SLXData = SLXParser.Data.Data; + +namespace SLXParser; + +public class Translator +{ + public StateMachine Convert(Stateflow stateflow) + { + var stateMachine = new StateMachine + { + // Type = "SLX", + Name = stateflow.Instance.Name, + States = ConvertChart(stateflow.Machine.Chart), + Variables = ConvertVariable(stateflow.Machine.Chart.ChildrenData), + }; + + stateMachine.Transitions.AddRange(ConvertChartTransitions(stateflow.Machine.Chart, stateMachine.States)); + + stateMachine.States[0] = stateMachine.States[0] with { Type = StateType.Start }; + stateMachine.States[^1] = stateMachine.States[^1] with { Type = StateType.End }; + + return stateMachine; + } + + private static List ConvertChart(Chart chart) + { + var states = new List(); + + foreach (var state in chart.ChildrenState) + { + states.AddRange(ConvertState(state)); + } + + return states; + } + + private static IEnumerable ConvertState(SLXState slxState) + { + var state = new State + { + Guid = slxState.Id, + Name = slxState.LabelString, + Type = StateType.Common + }; + + var states = new List { state }; + + foreach (var slxStateChildren in slxState.ChildrenState) + { + states.AddRange(ConvertState(slxStateChildren)); + } + + return states; + } + + private List ConvertChartTransitions(Chart chart, List slxStateOriginList) + { + var transitions = new List(); + + foreach (var state in chart.ChildrenState) + { + transitions.AddRange(ConvertStateTransition(state, slxStateOriginList)); + } + + return transitions; + } + + private static IEnumerable ConvertStateTransition(SLXState slxState, List slxStateOriginList) + { + var transitions = new List(); + + foreach (var transition in slxState.ChildrenTransition) + { + var transition_ = ConvertTransition(transition, slxStateOriginList); + if (transition_ != null) + { + transitions.Add(transition_); + } + } + + foreach (var state in slxState.ChildrenState) + { + transitions.AddRange(ConvertStateTransition(state, slxStateOriginList)); + } + + return transitions; + } + + private static Transition ConvertTransition(SLXTransition slxTransition, List slxStateOriginList) + { + var transition = new Transition + { + Guid = slxTransition.Id + }; + + var start = FindStateById(slxTransition.Src.SSID, slxStateOriginList); + var end = FindStateById(slxTransition.Dst.SSID, slxStateOriginList); + + if (start == null || end == null) + { + return null; + } + + transition = transition with + { + Start = start.Guid, + End = end.Guid, + Name = slxTransition.LabelString + }; + + // start.Outgoing.Add(transition); + // end.Incoming.Add(transition); + + return transition; + } + + private static State FindStateById(Guid id, List slxStateOriginList) + { + return slxStateOriginList.FirstOrDefault(state => state.Guid == id); + } + + private static List ConvertVariable(List datas) + { + var result = new List(); + foreach (var data in datas) + { + // var variableValue = VariableValueBuilder.fromString(""); + + var variable = new Variable + { + Name = data.Name + }; + + // variable.ID = new UID(data.Id); + result.Add(variable); + } + + return result; + } +} \ No newline at end of file diff --git a/SLXParser1/Utils/Color.cs b/src/Stater/SLXParser/Utils/Color.cs similarity index 100% rename from SLXParser1/Utils/Color.cs rename to src/Stater/SLXParser/Utils/Color.cs diff --git a/SLXParser1/Utils/Point2D.cs b/src/Stater/SLXParser/Utils/Point2D.cs similarity index 100% rename from SLXParser1/Utils/Point2D.cs rename to src/Stater/SLXParser/Utils/Point2D.cs diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index c23b85f..b571ac3 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -36,4 +36,9 @@ Code + + + + + diff --git a/src/Stater/TestSave.cs b/src/Stater/TestSave.cs index 4767c87..1432e98 100644 --- a/src/Stater/TestSave.cs +++ b/src/Stater/TestSave.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Reflection; using DynamicData; using Stater.Models; using Stater.Views.Editors; diff --git a/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs b/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs index fa383a3..05f2df6 100644 --- a/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs +++ b/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs @@ -24,18 +24,23 @@ public BoardCanvasViewModel(IProjectManager projectManager, IEditorManager edito { StateMachine = x; Transitions = x.Transitions.Select(y => - { - var startState = x.States.Find(s => s.Guid == y.Start); - var endState = x.States.Find(s => s.Guid == y.End); - return new AssociateTransition( - Transition: y, - StartPoint: new Point(startState.X, startState.Y), - EndPoint: new Point(endState.X, endState.Y), - Start: startState, - End: endState - ); - } - ).ToList(); + { + var startState = x.States.Find(s => s.Guid == y.Start); + var endState = x.States.Find(s => s.Guid == y.End); + if (startState != null && endState != null) + return new AssociateTransition( + Transition: y, + StartPoint: new Point(startState.X, startState.Y), + EndPoint: new Point(endState.X, endState.Y), + Start: startState, + End: endState + ); + return null; + } + ) + .Where(y => y != null) + .OfType() + .ToList(); }); StateClickCommand = ReactiveCommand.Create(OnStateClicked); @@ -52,9 +57,9 @@ public BoardCanvasViewModel(IProjectManager projectManager, IEditorManager edito public ReactiveCommand StateClickCommand { get; } public ReactiveCommand UpdateStateCoordsCommand { get; } - + public ReactiveCommand TransitionClickCommand { get; } - + private void OnStateClicked(State state) { var selectedState = _projectManager.GetState(state.Guid); diff --git a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs index ad788e8..5a99ec8 100644 --- a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs @@ -13,10 +13,11 @@ namespace Stater.ViewModels.Editors; public class StateEditorViewModel : ReactiveObject { - public StateEditorViewModel(IStateEditor stateEditor, IProjectManager projectManager) + public StateEditorViewModel(IStateEditor stateEditor, IProjectManager projectManager, IEditorManager editorManager) { _stateEditor = stateEditor; _projectManager = projectManager; + _editorManager = editorManager; SaveCommand = ReactiveCommand.Create(Save); @@ -24,46 +25,64 @@ public StateEditorViewModel(IStateEditor stateEditor, IProjectManager projectMan .State .Subscribe(x => { - State = x; - Name = x.Name; - Description = x.Description; - TypeIndex = x.Type switch + try { - StateType.Common => 0, - StateType.Start => 1, - StateType.End => 2, - _ => TypeIndex - }; - }); - - projectManager - .StateMachine - .Subscribe(x => - { - AllStates = x.States; - Transitions = x.Transitions.Select(y => + State = x; + Name = x.Name; + Description = x.Description; + TypeIndex = x.Type switch { - var startState = x.States.Find(s => s.Guid == y.Start); - var endState = x.States.Find(s => s.Guid == y.End); - return new AssociateTransition( - Transition: y, - StartPoint: new Point(startState.X, startState.Y), - EndPoint: new Point(endState.X, endState.Y), - Start: startState, - End: endState - ); - } - ).ToList(); + StateType.Common => 0, + StateType.Start => 1, + StateType.End => 2, + _ => TypeIndex + }; + } + catch (Exception e) + { + Console.WriteLine(e); + } }); + if (State != null) + projectManager + .StateMachine + .Subscribe(x => + { + AllStates = x.States; + Transitions = x.Transitions + .Where(t => t.Start == State?.Guid || t.End == State?.Guid) + .Select(y => + { + var startState = x.States.Find(s => s.Guid == y.Start); + var endState = x.States.Find(s => s.Guid == y.End); + if (startState != null && endState != null) + return new AssociateTransition( + Transition: y, + StartPoint: new Point(startState.X, startState.Y), + EndPoint: new Point(endState.X, endState.Y), + Start: startState, + End: endState + ); + return null; + } + ) + .Where(y => y != null) + .OfType() + .ToList(); + }); + AddTransitionCommand = ReactiveCommand.Create(AddTransition); RemoveTransitionCommand = ReactiveCommand.Create(RemoveTransition); + RemoveCommand = ReactiveCommand.Create(Remove); } private readonly IStateEditor _stateEditor; private readonly IProjectManager _projectManager; + private readonly IEditorManager _editorManager; public ICommand SaveCommand { get; } + public ICommand RemoveCommand { get; } public ReactiveCommand AddTransitionCommand { get; } public ReactiveCommand RemoveTransitionCommand { get; } @@ -76,7 +95,7 @@ public StateEditorViewModel(IStateEditor stateEditor, IProjectManager projectMan [Reactive] public List AllStates { get; set; } [Reactive] public List Transitions { get; set; } - + private void AddTransition(State state) { @@ -103,4 +122,11 @@ private void Save() var newState = state with { Name = Name, Description = Description, Type = type }; _stateEditor.Update(newState); } + + private void Remove() + { + if (State == null) return; + _editorManager.DoSelectNull(); + _projectManager.RemoveState(State.Guid); + } } \ No newline at end of file diff --git a/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs b/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs index 6310adf..b3297a0 100644 --- a/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs @@ -23,17 +23,41 @@ public TransitionEditorViewModel(ITransitionEditor transitionEditor, IProjectMan .Transition .Subscribe(x => { - Transition = x; - Name = x.Name; + try + { + Transition = x; + Name = x.Name; + + var condition = x.Condition; + Condition = null; + Variable = null; + Value = null; + + VariableMath = null; + MathType = null; + EventValue = null; + + if (condition is Condition.VariableCondition) + { + var t = (Condition.VariableCondition)condition; + Condition = t.ConditionType.ToString(); + Variable = t.VariableGuid.ToString(); + Value = t.Value.ToString(); + } - var condition = x.Condition; + var event_ = x.Event; - if (condition is Condition.VariableCondition) + if (event_ is Event.VariableMath) + { + var t = (Event.VariableMath)event_; + VariableMath = t.VariableGuid.ToString(); + MathType = t.MathType.ToString(); + EventValue = t.Value.ToString(); + } + } + catch (Exception e) { - var t = (Condition.VariableCondition)condition; - Condition = t.ConditionType.ToString(); - Variable = t.VariableGuid.ToString(); - Value = t.Value.ToString(); + Console.WriteLine(e); } }); @@ -54,23 +78,55 @@ public TransitionEditorViewModel(ITransitionEditor transitionEditor, IProjectMan [Reactive] public string Condition { get; set; } [Reactive] public string Value { get; set; } + + [Reactive] public string VariableMath { get; set; } + [Reactive] public string MathType { get; set; } + [Reactive] public string EventValue { get; set; } + public ICommand SaveCommand { get; } private void Save() { if (Transition == null) return; Condition? condition = null; - var tryParse = Enum.TryParse(Condition, out Condition.VariableCondition.ConditionTypeEnum conditionType); - if (!tryParse) + Event? @event = null; + + if (Variable != null && Value != null) { + var type = Condition switch + { + "<" => Models.Condition.VariableCondition.ConditionTypeEnum.Lt, + "<=" => Models.Condition.VariableCondition.ConditionTypeEnum.Le, + "==" => Models.Condition.VariableCondition.ConditionTypeEnum.Eq, + "!=" => Models.Condition.VariableCondition.ConditionTypeEnum.Ne, + ">" => Models.Condition.VariableCondition.ConditionTypeEnum.Gt, + _ => Models.Condition.VariableCondition.ConditionTypeEnum.Ge, + }; condition = new Condition.VariableCondition( VariableGuid: Guid.Parse(Variable), - ConditionType: conditionType, + ConditionType: type, Value: VariableValueBuilder.fromString(Value) ); } - - var newTransition = Transition with { Name = Name, Condition = condition }; + + if (VariableMath != null && EventValue != null) + { + var type = MathType switch + { + "+" => Event.VariableMath.MathTypeEnum.Sum, + "-" => Event.VariableMath.MathTypeEnum.Sub, + "*" => Event.VariableMath.MathTypeEnum.Mul, + _ => Event.VariableMath.MathTypeEnum.Div, + }; + @event = new Event.VariableMath( + VariableGuid: Guid.Parse(VariableMath), + MathType: type, + Value: VariableValueBuilder.fromString(EventValue) + ); + } + + + var newTransition = Transition with { Name = Name, Condition = condition, Event = @event }; _transitionEditor.Update(newTransition); } } \ No newline at end of file diff --git a/src/Stater/ViewModels/Execution/ExecutionControlViewModel.cs b/src/Stater/ViewModels/Execution/ExecutionControlViewModel.cs index 1b394da..78f6bd0 100644 --- a/src/Stater/ViewModels/Execution/ExecutionControlViewModel.cs +++ b/src/Stater/ViewModels/Execution/ExecutionControlViewModel.cs @@ -18,6 +18,7 @@ public ExecutionControlViewModel(IExecutor executor) StopCommand = ReactiveCommand.Create(Stop); StepCommand = ReactiveCommand.Create(Step); ResetCommand = ReactiveCommand.Create(Reset); + ClearCommand = ReactiveCommand.Create(Clear); _executor.Logs.Subscribe(x => { Logs = x.Logs.ToList(); }); } @@ -28,27 +29,14 @@ public ExecutionControlViewModel(IExecutor executor) public ICommand StopCommand { get; } public ICommand StepCommand { get; } public ICommand ResetCommand { get; } + public ICommand ClearCommand { get; } [Reactive] public string StepTime { get; set; } [Reactive] public List Logs { get; set; } - private void Start() - { - _executor.Start(int.Parse(StepTime)); - } - - private void Stop() - { - _executor.Stop(); - } - - private void Step() - { - _executor.Step(); - } - - private void Reset() - { - _executor.Reset(); - } + private void Start() => _executor.Start(int.Parse(StepTime)); + private void Stop() => _executor.Stop(); + private void Step() => _executor.Step(); + private void Reset() => _executor.Reset(); + private void Clear() => _executor.ClearLog(); } \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index 4998faa..14fb74b 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Reactive; @@ -7,10 +8,16 @@ using ReactiveUI.Fody.Helpers; using Stater.Models; using ReactiveUI; +using SLXParser; using Stater.Models.Editors; +using Stater.Plugin; namespace Stater.ViewModels; +public record PathPluginDto( + ButtonFilePlugin Plugin, string Path +); + public class MainWindowViewModel : ReactiveObject { public MainWindowViewModel(IProjectManager projectManager, IEditorManager editorManager) @@ -38,6 +45,7 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor NewStateCommand = ReactiveCommand.Create(NewState); UndoCommand = ReactiveCommand.Create(Undo); RedoCommand = ReactiveCommand.Create(Redo); + PluginButtinCommand = ReactiveCommand.Create(StartButtonFilePlugin); } private readonly IProjectManager _projectManager; @@ -45,13 +53,20 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor [Reactive] public Project Project { get; private set; } + public List Plugins => + new() + { + new SLXPPlugin() + }; + private StateMachine _stateMachine; - public StateMachine StateMachine + public StateMachine? StateMachine { get => _stateMachine; set { + if (value == null) return; this.RaiseAndSetIfChanged(ref _stateMachine, value); var openStateMachine = _projectManager.OpenStateMachine(value.Guid); if (openStateMachine != null) @@ -66,6 +81,7 @@ public StateMachine StateMachine public ICommand NewCommand { get; } public ReactiveCommand OpenCommand { get; } public ReactiveCommand SaveCommand { get; } + public ReactiveCommand PluginButtinCommand { get; } public ICommand NewStateMachineCommand { get; } public ICommand NewStateCommand { get; } public ICommand UndoCommand { get; } @@ -101,4 +117,17 @@ private void NewState() private void Undo() => _projectManager.Undo(); private void Redo() => _projectManager.Redo(); + + private void StartButtonFilePlugin(PathPluginDto pathPluginDto) + { + var input = new PluginInput( + Project: _projectManager.GetProject(), + StateMachine: _projectManager.GetStateMachine(), + StateMachines: _projectManager.GetStateMachines(), + ProjectManager: _projectManager + ); + var res = pathPluginDto.Plugin.Start(input, pathPluginDto.Path); + + _projectManager.ChangeStateMachines(res.ChangedStateMachines); + } } \ No newline at end of file diff --git a/src/Stater/Views/Editors/StateEditor.axaml b/src/Stater/Views/Editors/StateEditor.axaml index a21403c..d849e64 100644 --- a/src/Stater/Views/Editors/StateEditor.axaml +++ b/src/Stater/Views/Editors/StateEditor.axaml @@ -6,26 +6,37 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Stater.Views.Editors.StateEditor" x:DataType="vm:StateEditorViewModel"> - - - Name: - - Description: - - Type: - - Common - Start - End - + + + + Data + + + Name: + + Description: + + Type: + + Common + Start + End + - - - Transitions: - + + + + + + + + + Transitions + + @@ -40,15 +51,20 @@ + + - Include: - + + + Add transition + + @@ -59,7 +75,7 @@ \ No newline at end of file diff --git a/src/Stater/Views/Execution/ExecutionControl.axaml b/src/Stater/Views/Execution/ExecutionControl.axaml index db379ba..4fbbd2d 100644 --- a/src/Stater/Views/Execution/ExecutionControl.axaml +++ b/src/Stater/Views/Execution/ExecutionControl.axaml @@ -14,6 +14,7 @@ + diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml index f6bee00..ce9e380 100644 --- a/src/Stater/Views/MainWindow.axaml +++ b/src/Stater/Views/MainWindow.axaml @@ -30,8 +30,8 @@ - - + + @@ -40,6 +40,15 @@ + + + + + + + + + @@ -48,7 +57,7 @@ DockPanel.Dock="Bottom"> - + ChildrenState = new List(); - public List ChildrenData = new List(); - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Data.cs b/src/plugins/SLXParser/Data/Data.cs deleted file mode 100644 index da6c9de..0000000 --- a/src/plugins/SLXParser/Data/Data.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace SLXParser.Data -{ - public class Data : BaseNode - { - public string Name { get; set; } - public string Scope { get; set; } - public Props Props = new Props(); - public string DataType { get; set; } - } - - public class Props - { - public string Frame { get; set; } - - // Type - public string TypeMethod { get; set; } - public string TypePrimitive { get; set; } - public int TypeWordLength { get; set; } - - // Type Fixpt - public string TypeFixptScalingMode { get; set; } - public int TypeFixptFractionLength { get; set; } - public string TypeFixptSlope { get; set; } - public int TypeFixptBias { get; set; } - - // Unit - public string UnitName { get; set; } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Instance.cs b/src/plugins/SLXParser/Data/Instance.cs deleted file mode 100644 index 166d484..0000000 --- a/src/plugins/SLXParser/Data/Instance.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace SLXParser.Data -{ - public class Instance : BaseNode - { - public string Name { get; set; } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Machine.cs b/src/plugins/SLXParser/Data/Machine.cs deleted file mode 100644 index ebeb559..0000000 --- a/src/plugins/SLXParser/Data/Machine.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace SLXParser.Data -{ - public class Machine : BaseNode - { - public Chart Chart { get; set; } - public string Created { get; set; } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/State.cs b/src/plugins/SLXParser/Data/State.cs deleted file mode 100644 index ba316b9..0000000 --- a/src/plugins/SLXParser/Data/State.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using SLXParser.Utils; - -namespace SLXParser.Data -{ - public class State : BaseNode - { - public string LabelString { get; set; } - public DoublePoint Position { get; set; } - public int FontSize { get; set; } - public bool Visible { get; set; } - public int Subviewer { get; set; } - public string Type { get; set; } - public string Decomposition { get; set; } - public int ExecutionOrder { get; set; } - - public static ActiveStateOutput ActiveStateOutput = new ActiveStateOutput(); - public List ChildrenState = new List(); - public List ChildrenTransition = new List(); - } - - public class ActiveStateOutput - { - public bool UseCustomName { get; set; } - public string CustomName { get; set; } - public bool UseCustomEnumTypeName { get; set; } - public string EnumTypeName { get; set; } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Stateflow.cs b/src/plugins/SLXParser/Data/Stateflow.cs deleted file mode 100644 index f5546a4..0000000 --- a/src/plugins/SLXParser/Data/Stateflow.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace SLXParser.Data -{ - public class Stateflow - { - public Machine Machine { get; set; } - public Instance Instance { get; set; } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Data/Transition.cs b/src/plugins/SLXParser/Data/Transition.cs deleted file mode 100644 index 689afda..0000000 --- a/src/plugins/SLXParser/Data/Transition.cs +++ /dev/null @@ -1,26 +0,0 @@ -using SLXParser.Utils; - -namespace SLXParser.Data -{ - public class Transition : BaseNode - { - public string LabelString { get; set; } - - public DoublePoint LabelPosition { get; set; } - public int FontSize { get; set; } - - public Address Src { get; set; } - public Address Dst { get; set; } - public Point2D MidPoint { get; set; } - public DoublePoint DataLimits { get; set; } - public int Subviewer { get; set; } - public string DrawStyle { get; set; } - public int ExecutionOrder { get; set; } - } - - public class Address - { - public int SSID { get; set; } - public DoubleDoublePoint Intersection { get; set; } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Parser.cs b/src/plugins/SLXParser/Parser.cs deleted file mode 100644 index 1a9d93c..0000000 --- a/src/plugins/SLXParser/Parser.cs +++ /dev/null @@ -1,659 +0,0 @@ -using System.Globalization; -using System.Xml; -using SLXParser.Data; -using SLXParser.Utils; - -namespace SLXParser -{ - public class Parser - { - private readonly string inFile; - private readonly string zipPath; - - public Parser(string path) - { - if (!File.Exists(path)) - { - throw new InvalidOperationException("Файл не найден"); - } - - inFile = path; - var parentDir = Directory.GetParent(inFile); - - if (parentDir == null) - { - throw new InvalidOperationException("Не удалось выбрать папку для распаковки"); - } - - zipPath = Path.Combine(parentDir.ToString(), "slx_parser.temp"); - } - - public Stateflow Parse() - { - System.IO.Compression.ZipFile.ExtractToDirectory(inFile, zipPath); - - var simulinkPath = Path.Combine(zipPath, "simulink", "stateflow.xml"); - - if (!File.Exists(simulinkPath)) - { - Directory.Delete(zipPath, true); - throw new InvalidOperationException("Не удалось найти файл от stateflow"); - } - - try - { - return ParseFile(simulinkPath); - } - catch (Exception e) - { - Console.WriteLine(e); - throw; - } - finally - { - Directory.Delete(zipPath, true); - } - } - - private Stateflow ParseFile(string file) - { - var xDoc = new XmlDocument(); - xDoc.Load(file); - var xRoot = xDoc.DocumentElement; - if (xRoot == null) - { - throw new InvalidOperationException("Проблема парсинга stateflow xml"); - } - - if (xRoot.Name != "Stateflow") - { - throw new InvalidOperationException("Главный элемент не является Stateflow"); - } - - return ParseStateflow(xRoot); - } - - private Stateflow ParseStateflow(XmlNode xmlNode) - { - var stateflow = new Stateflow(); - - foreach (XmlNode node in xmlNode.ChildNodes) - { - if (node.Name == "machine") - { - stateflow.Machine = ParseMachine(node); - } - - if (node.Name == "instance") - { - stateflow.Instance = ParseInstance(node); - } - } - - return stateflow; - } - - private Instance ParseInstance(XmlNode xmlNode) - { - var instance = new Instance - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - if (node.Name == "P") - { - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "name": - instance.Name = node.InnerText; - break; - } - - break; - } - } - } - - return instance; - } - - private Machine ParseMachine(XmlNode xmlNode) - { - var machine = new Machine - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "created": - machine.Created = node.InnerText; - break; - } - - break; - } - case "Children": - foreach (XmlNode childrenNode in node.ChildNodes) - { - if (childrenNode.Name == "chart") - { - machine.Chart = ParseChart(childrenNode); - } - } - - break; - } - } - - return machine; - } - - private Chart ParseChart(XmlNode xmlNode) - { - var chart = new Chart - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "name": - chart.Name = node.InnerText; - break; - case "windowPosition": - chart.WindowPosition = Parse4Point(node.InnerText); - break; - case "viewLimits": - chart.ViewLimits = Parse4Point(node.InnerText); - break; - case "zoomFactor": - chart.ZoomFactor = float.Parse(node.InnerText, CultureInfo.InvariantCulture); - break; - case "stateColor": - chart.StateColor = ParseColor(node.InnerText); - break; - case "stateLabelColor": - chart.StateLabelColor = ParseColor(node.InnerText); - break; - case "transitionColor": - chart.TransitionColor = ParseColor(node.InnerText); - break; - case "transitionLabelColor": - chart.TransitionLabelColor = ParseColor(node.InnerText); - break; - case "junctionColor": - chart.JunctionColor = ParseColor(node.InnerText); - break; - case "chartColor": - chart.ChartColor = ParseColor(node.InnerText); - break; - case "viewObj": - chart.ViewObj = int.Parse(node.InnerText); - break; - case "visible": - chart.Visible = ParseBool(node.InnerText); - break; - } - - break; - } - case "Children": - foreach (XmlNode childrenNode in node.ChildNodes) - { - switch (childrenNode.Name) - { - case "state": - chart.ChildrenState.Add(ParseState(childrenNode)); - break; - case "data": - chart.ChildrenData.Add(ParseData(childrenNode)); - break; - } - } - - break; - } - } - - return chart; - } - - private State ParseState(XmlNode xmlNode) - { - var state = new State - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "labelString": - state.LabelString = node.InnerText; - break; - case "position": - state.Position = Parse4Point(node.InnerText); - break; - case "fontSize": - state.FontSize = int.Parse(node.InnerText); - break; - case "visible": - state.Visible = ParseBool(node.InnerText); - break; - case "subviewer": - state.Subviewer = int.Parse(node.InnerText); - break; - case "type": - state.Type = node.InnerText; - break; - case "decomposition": - state.Decomposition = node.InnerText; - break; - case "executionOrder": - state.ExecutionOrder = int.Parse(node.InnerText); - break; - } - - break; - } - case "activeStateOutput": - { - foreach (XmlNode childrenNode in node.ChildNodes) - { - if (childrenNode.Name == "P") - { - var name = childrenNode.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "useCustomName": - State.ActiveStateOutput.UseCustomName = ParseBool(node.InnerText); - break; - case "customName": - State.ActiveStateOutput.CustomName = node.InnerText; - break; - case "useCustomEnumTypeName": - State.ActiveStateOutput.UseCustomEnumTypeName = ParseBool(node.InnerText); - break; - case "enumTypeName": - State.ActiveStateOutput.EnumTypeName = node.InnerText; - break; - } - } - } - - break; - } - case "Children": - foreach (XmlNode childrenNode in node.ChildNodes) - { - switch (childrenNode.Name) - { - case "state": - state.ChildrenState.Add(ParseState(childrenNode)); - break; - case "transition": - state.ChildrenTransition.Add(ParseTransition(childrenNode)); - break; - } - } - - break; - } - } - - return state; - } - - - private Transition ParseTransition(XmlNode xmlNode) - { - var transition = new Transition - { - Id = ParseId(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "labelString": - transition.LabelString = node.InnerText; - break; - case "labelPosition": - transition.LabelPosition = Parse4Point(node.InnerText); - break; - case "fontSize": - transition.FontSize = int.Parse(node.InnerText); - break; - case "midPoint": - transition.MidPoint = ParsePoint(node.InnerText); - break; - case "dataLimits": - transition.DataLimits = Parse4Point(node.InnerText); - break; - case "subviewer": - transition.Subviewer = int.Parse(node.InnerText); - break; - case "drawStyle": - transition.DrawStyle = node.InnerText; - break; - case "executionOrder": - transition.ExecutionOrder = int.Parse(node.InnerText); - break; - } - - break; - } - case "src": - transition.Src = ParseAddress(node); - break; - case "dst": - transition.Dst = ParseAddress(node); - break; - } - } - - return transition; - } - - private static Address ParseAddress(XmlNode xmlNode) - { - var address = new Address(); - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "SSID": - address.SSID = int.Parse(node.InnerText); - break; - case "intersection": - address.Intersection = Parse8Point(node.InnerText); - break; - } - - break; - } - } - } - - return address; - } - - - private static Data.Data ParseData(XmlNode xmlNode) - { - var data = new Data.Data - { - Id = ParseId(xmlNode), - Name = ParseName(xmlNode) - }; - - foreach (XmlNode node in xmlNode.ChildNodes) - { - switch (node.Name) - { - case "P": - { - var name = node.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "scope": - data.Scope = node.InnerText; - break; - case "dataType": - data.DataType = node.InnerText; - break; - } - - break; - } - case "props": - foreach (XmlNode childrenNode in node.ChildNodes) - { - switch (childrenNode.Name) - { - case "P": - { - var name = childrenNode.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "frame": - data.Props.Frame = childrenNode.InnerText; - break; - } - - break; - } - case "type": - { - foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) - { - if (childrenNode2.Name == "P") - { - var name = childrenNode2.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "method": - data.Props.TypeMethod = childrenNode2.InnerText; - break; - case "primitive": - data.Props.TypePrimitive = childrenNode2.InnerText; - break; - case "wordLength": - data.Props.TypeWordLength = int.Parse(childrenNode2.InnerText); - break; - } - - break; - } - - switch (childrenNode2.Name) - { - case "fixpt": - { - foreach (XmlNode childrenNode3 in childrenNode2.ChildNodes) - { - if (childrenNode3.Name == "P") - { - var name = childrenNode3.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "scalingMode": - data.Props.TypeFixptScalingMode = - childrenNode3.InnerText; - break; - case "fractionLength": - data.Props.TypeFixptFractionLength = - int.Parse(childrenNode3.InnerText); - break; - case "slope": - data.Props.TypeFixptSlope = childrenNode3.InnerText; - break; - case "bias": - data.Props.TypeFixptBias = - int.Parse(childrenNode3.InnerText); - break; - } - } - } - - break; - } - } - } - - break; - } - case "unit": - { - foreach (XmlNode childrenNode2 in childrenNode.ChildNodes) - { - if (childrenNode2.Name == "P") - { - var name = childrenNode2.Attributes?["Name"].Value; - switch (name) - { - case null: - continue; - case "frame": - data.Props.UnitName = childrenNode2.InnerText; - break; - } - } - } - - break; - } - } - } - - break; - } - } - - return data; - } - - private static int ParseId(XmlNode xmlNode) - { - var id = xmlNode.Attributes?["id"]; - if (id != null) return int.Parse(id.Value); - var name = xmlNode.Attributes?["Name"]; - if (name != null && name.Value == "SSID") - { - return int.Parse(xmlNode.InnerText); - } - var ssid = xmlNode.Attributes?["SSID"]; - if (ssid != null) - { - return int.Parse(ssid.Value); - } - - return -1; - } - - - private static string ParseName(XmlNode xmlNode) - { - var name = xmlNode.Attributes?["name"].Value; - return name ?? ""; - } - - private static Point2D ParsePoint(string line) - { - line = line.Substring(1, line.Length - 2); - var numbers = line.Split(' '); - - var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); - var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); - - return new Point2D(x1, y1); - } - - private static DoublePoint Parse4Point(string line) - { - line = line.Substring(1, line.Length - 2); - - var numbers = line.Split(' '); - - var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); - var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); - var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); - var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); - - return new DoublePoint(new Point2D(x1, y1), new Point2D(x2, y2)); - } - - private static DoubleDoublePoint Parse8Point(string line) - { - line = line.Substring(1, line.Length - 2); - var numbers = line.Split(' '); - - var x1 = float.Parse(numbers[0], CultureInfo.InvariantCulture); - var y1 = float.Parse(numbers[1], CultureInfo.InvariantCulture); - var x2 = float.Parse(numbers[2], CultureInfo.InvariantCulture); - var y2 = float.Parse(numbers[3], CultureInfo.InvariantCulture); - var x3 = float.Parse(numbers[4], CultureInfo.InvariantCulture); - var y3 = float.Parse(numbers[5], CultureInfo.InvariantCulture); - var x4 = float.Parse(numbers[6], CultureInfo.InvariantCulture); - var y4 = float.Parse(numbers[7], CultureInfo.InvariantCulture); - - return new DoubleDoublePoint(new DoublePoint(new Point2D(x1, y1), new Point2D(x2, y2)), - new DoublePoint(new Point2D(x3, y3), new Point2D(x4, y4))); - } - - private static Color ParseColor(string line) - { - line = line.Substring(1, line.Length - 2); - var numbers = line.Split(' '); - - var r = (int)(double.Parse(numbers[0], CultureInfo.InvariantCulture) * 256); - var g = (int)(double.Parse(numbers[1], CultureInfo.InvariantCulture) * 256); - var b = (int)(double.Parse(numbers[2], CultureInfo.InvariantCulture) * 256); - - return new Color(r, g, b); - } - - private static bool ParseBool(string line) - { - return line == "1"; - } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Program.cs b/src/plugins/SLXParser/Program.cs deleted file mode 100644 index 1c46a94..0000000 --- a/src/plugins/SLXParser/Program.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -namespace SLXParser -{ - internal class Program - { - public static void Main(string[] args) - { - const string path = "/Users/vnazarov/PycharmProjects/ya-hakaton/BR_GATES_HDL.slx"; - - var parser = new Parser(path); - var stateflow = parser.Parse(); - var pluginStateflow = new Translator().Convert(stateflow); - - Console.WriteLine(stateflow.Machine.Chart.ChildrenState); - Console.WriteLine(stateflow.Machine.Chart.ChildrenState.Count); - } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/SLXParser.csproj b/src/plugins/SLXParser/SLXParser.csproj index 51e7a05..ad31220 100644 --- a/src/plugins/SLXParser/SLXParser.csproj +++ b/src/plugins/SLXParser/SLXParser.csproj @@ -6,6 +6,14 @@ enable + + ../../Stater/lib/ + + + + ../../Stater/lib/ + + diff --git a/src/plugins/SLXParser/SLXPlugin.cs b/src/plugins/SLXParser/SLXPlugin.cs deleted file mode 100644 index f877d2f..0000000 --- a/src/plugins/SLXParser/SLXPlugin.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Avalonia.Controls; -using Stater.Plugin; - -namespace SLXParser; - -public class SLXPlugin : ButtonPlugin -{ - public override PluginOutput Start(PluginInput pluginInput) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "Function block files|*.slx"; - ofd.FilterIndex = 0; - var dialogResult = ofd.ShowDialog(); - var result = PluginOutput.From("OK"); - if (dialogResult != DialogResult.OK) - { - result = new PluginOutput(Message: "DialogResult is not OK"); - return result; - } - - var parser = new Parser(ofd.FileName); - var stateflow = parser.Parse(); - var pluginStateflow = new Translator().Convert(stateflow); - Console.WriteLine(pluginStateflow); - result.ChangedMachines.Add(pluginStateflow); - return result; - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/TestData/BR_GATES_HDL.slx b/src/plugins/SLXParser/TestData/BR_GATES_HDL.slx deleted file mode 100644 index ec512fa26929bb63167abf7ed5ad9695361d53a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22601 zcmaI7Q?O`3v#q&o+k4rzZQHhOYcJcjZQHhO+g`o@+tGc_>ArCv>ZN8rROYCPs`{5%6HT_Ke+=JBy)}CU{Eht^B z%(*QWFd(Dy0eE*pqy{o`s4XF{7Ci3GNA!A1Sr zdxAcqzIO+RNr`7ls2B^@lM?Rp{zeL<_6-QMbgCy9C%L$I6&25BYVx+GR2|aIS@fxK zY4`%m{|}As?xz<<{%IrjPbb{}u91z~|6e7OSOHmJ1{jfAB$L^qYaoIo3AgP4c?xj) z@a1sQ`a<@msq68;VHj$gcb;Fn*jNxID@l^#sZCQ9ZO$lJAxHS7E z=m=FYv&U_x;noRIt4Q(+FL6ybEHr{Y_oTogm`im;@AbBhAe+i2j(2r6XiO999(mZe1S*r_ zk6Et5wN&o;c3wFm;LNqKb4a0fg$ppdSfE{V>vU(1hX$w%#~ed_AexYZvQ!e zsmD-I4+sDN2*>~cX#YJoXLA=DLt6t2Yg&6-vupQvt|Yy;-i6FK9TY~*IO}f6bt2)F z1QR5~uqy(X5COZ-o~Ww?60MfBlKv!<5c&jq7*eg2esweIpxMRSUB11~_L|xDn#Zim zo*Abar<>1qz1mNg9CxQh@T;o8Di|1;s}Qh`*ns+1JHA;E?n`T4G(h0UTEMm3fB=Ro zJ3gYH8Tq7ufYL>IwNDBA{txCWi4}KZ+en~Tq+?k$m_@0WNT<%mDnAuI4en0nZ_!w- zp0;sg=WO)QHW&s3#&)$zAR^Y)v?%W(urAiYOSOH;dD-RrJ?ZQXwEI!EBTT#Zx?UZ$ z;w@Zxz5$pWoNBf=-y#1 z$lE}JLrRqIoJc1fXGU`h+tD-9(zxqeRP8T#cbAro^{ubEdO55@%PMPJ3v8rAub0`w zB&77-`bBJY)}VHFDPEZTx5NFC;WS7M2>G9?XdJJAbL1q`#b*wICj7(pO~Yqp3ugTj zubHLa^mp!4l2D+rFQe_zhbS@Z|SiQ}E31cf86fIOS9z21V zF7q}x3hDA1`SG#S@%^stoOMpStE8o-MimzqJH&q+_maV@pB=B9f;=Pr_}tnM6_sc3 zGEbF1m+k^)AfBJOgOAT+Jeuz2YiL+6h(e@yrxfqO6t*=zEbqiQ81u#<>5_ZhZLlV{ z%@BKjx?+K(CgdbO_N~1IwzRmu5!MwKH92c2DS^SEFp$Kh><(?QF*hyY&Pv@WE7DOi z-gCO$Xlsgw#AIe-Ls(!Xgau96g0hM4a+mQ04RK&T=~5VfDtW6MEDej@j5}@Q#DKjP zOHGQ6N~EIl-tH|c51hLNgt=JzPM8`Q1!c{_`$JkIbRPr;L`JR|c6)7?xgCV!i@!zs?CCvjGxDBGi36t5ssk__9tn9O83-FcBT|FmqD`%-PR&&;YMWDbx zb4yyXm$HNc`Z9X;5FEOi>WGaPfl0=*B_`3pS74!C}yt;NI-h?KyKwOtsx6&l|+o zY-SjmO;;MXC72BrpR+`r8AGRPF#Bg{k9HE=X*?#fzQ!p_{@=YX3?nQe6*HMaM>USY zr}vBMz=JXcL>k|Ln2ofz$P>w?S*i)lTjzNch1Da>#W{saTJj*fH{|81RAzxl_&RL2 z#?SO zTS*z&QcSJKR?dOXfk$0|r-%z0 zg@mM+UzOqh0v|$1HB=~@u}D4w%2#ogvN%7GVPFRdf-OfvfCA;RzhLt=ejhI+%Sw7@mPB_bV8QxMV8M84A~8W1(qBIil4o;NEjut zn~USUX*sg&_R2dbTF-M)c(DIrhe;#g1U;x2;NvUx?%cxzzPf4z1y!p!tXlWci6?x- z!>vM;yDQ%OAeDb^dqz(ME#C!etc%Jr;6znb9sh3kD?_zMX33JCcm9lyO}&jjAJsiKYw-^ZX@W@rd?&# zF8X1Kz&EbYcblYXz^Zww)dW*^VvpAd6J!yPMEVtmpLU2OZ|x#(Nj;HuysPZvQ4p0# zBiVqI+J6c;U0j>BLIK*Eaa7)ET`o&vw=WCSguEdkO}ip$2iR>+*O~0ilypLldoD6_ zeV<1PEve+Lp=3zH#B(P?LPBbopM#G(9m18Ph{>QQJ2y6(mmB%~zWigW*ke_-OplM$ zxqZ3CxCWol`icjAOZmrYO(;;_i8jEHYvvahfyJ;uw@_OIo{lIyzeKvfVNH&+1_u$q zLYEK;YG>ES39&pRB+&1MHOqsfsd$IANCOsLxLozVy&NSFL$!oHsW3RV;?P&UKc1WB zWj-@nUc#4d!}f@x7ow9`=#R=T;ipR=vQJBIP(R9@VnIbWuH-$$%K3MO>Yxq$Qm_S1 z6O-*G#^*1-?A)6dOlBj)!%YYf9%y&p#iI#-lbTxyV_4_1?!<1N1LRozjA>~J00oeQ zN^{H#zEWpya+CeKKZ281UJKs!g}CgED(H4g3*qgL6I9zc2N9zM$5jhjsQ^WWUIviO zNlrmR7WoS*M$Au}6GqdRf%lf@&PL4-wGFygy*%}}R)IavXqN-zx2s%GnN zE@a=iX9MDzjlMUI7U1tBG4Tm?#cV%u$DiC-B`!-LYU5ZW4QGc&ec&QbP7gkK@H#rn z(%GWn9!hHhW*HfEQ`}+-uO2hXt%UL^^P8e`M0)*jT~bI5|8Aus|2=Q)ncb_aDXlU( z7N7(yb6a3xZy*OgN636!*xuACOsE6+WwpFT)!2xz zpKrdO>?o?Zcb7gMy-Ym0@Yjzghnrl}z{-G^7vbxqs55n3glQ;R#qOG zpxb{16S@(?UtM2c-yIsl8Buo^5fQTkt^CEp#U(|6K=OhM|5n8C5<)d;Ky5G|JC{xf zGX(su(hLSmN;bUeKGI|7%y9PLjC-UtWXs@0i(gZ0lN{zs=l@_F8UXdBl93b2iPwll z;JLjjdhaq4J%ohv1xo_kNtd#q?mB2Ck{ytaWRZcwmBG0OrIZkyz+Mha>`FErMs02e z9`lpj0JH!~!q{`>w}FSK|9rS0)L62rA!K)b%6z#O9=Zif=zcSeuojWiS1`_8bf}XH zoH}hs=gAo4;fx^wvdq7I*gs86a}N&wcx^pdjv)YCI5aP)XU6Y6I5@1W!23`EdN-9U zpoTq~0pAbZ1+qx$UU(W3#NYYhuX70=E)XIIvt z!>`t+bW^D~QE+ahs^Yqs39)vaP90AWr>))xn9;kV#zLmycGSnYMz7abWBk$PFu{w5 zv1uO7+IGgokkB6snL??jux!lfJVC(O&sk@-rQ}aM$1h>Jw6BYr``&f$d~@>x;T)*# z)Ke-l-D`WdLuhgGgkeR9-dWg(P3j5ft*iZ_Dw(*)=l&uSQu>6r-S5H8_^e9~u;#88 z?<9m27LVSe8if;@6Bd-HxkPS5aZbWISX`QIds3AwH0o?ja)hy6{LzuICp)d76XK|x zQxe513}niaf7VG2O&x1=vk_vpV>B7w89bP~csw73GXoA+TqOXoLHV@mHI3dlV1+z? z4;B{I%*;sO&r#wTYEsG}7Tu|1=H0;+rxr0h1TzSA*pyy~<9;3MfOm{gz2C>n#fF&f z5Q%nBej&Q;M@@jCfzDTn=K?e((^`RHp?DZru;T5|DQA38M9fLbW>2x(E#$-Vlo&29 z?yg@uUYFrGO6douVujXK(33|bn!H#_Trw(eyIl}JUFkii0@HvTJ5sIXyU zFeMeG;YR-%{4(3HouAILQZC|HqSgC;6F3JBzssRL6hWu0UU(b;pz6Ved#(klk!a!U z=FNC{hCHWBKHXz&2SCM+f!JQCF}l5~>kAP$I1|5mOsVYo>Sw7*4wt9h{24M1db4-F z+r{RI6hV03>{~)IG&2Frm_*#n$QE68!3jfB6b~7RP?k&IA~(?Z znH;W2W-(2Ku-M&DFe*!@Y3uFh>#}K-OPM%jO-D%yre4{JrG<%$I}FHgW@jlGf)pbK z!{?%Ku(l$GZ~j|_837TT6oyfi)eLHm8xaVvE*E3k`r8HsZ0xqip;bIp3oeG~thGPO zg0NxgI)jbo9asSWE=!>M+s*Cchs5Vr+vN?iR`6q3;yrNJK%+zbicKhbe+ zV(dy5-{{=6-Tu0U-B0>HD>O<|18aX*l|QZGDC47>*%S?p7Zw4#-cqBzwzKk*R`guo zglE0$9%%QVgnw8?MFmc%)H9S39y}Zz)b6v1eYyHv|| zZ(9_zfHNYW$`!D-#B-CW%e)6#N^cI})*>hZrG0O}zOTruXY%Tl_Z^b|0o0~c-$EHx zkN71WIku$9+a}Djv!GXMb0f0V?@!p6ng!q$q;(Av((%Gkod%+bK+KhWoz$I9uDHDUKu ztuCo!X?uALt^75rfM&d5q@qELSBj};Lwf==K5vLcFyR0gpTf*EaqDDK zIHfb-Mzj~(UewQPeRBf&*?ZE(*Rss4Iz$k6n}yo!Q;7&>>Ll;J^}cgH+DhJQKdq*f z4A7raZ;|}aEn-064%xd$g*TDsyWGKOt0mLLovP8Uh1U;-l7=|COb$)D1qD^m20f-}4DTubZcGZ=zL8s=YqfF^qHJ%l|8w-W&(BA0mN052omMo$ccz)cj=IAu&u!_ctXC^Y zmUX1MQMGf^vN(Q`S1OKj?2;2?YQVpuk`lx?NQ7+tbE! zcz1ySK**)qp)?%$W`R9tndr-@y&R8}7y#f+^zpwJ>=3if>-)yGZMsw04s#^?{Zsa{ z@VpSq$lGzF8E8`&ORvuEUpQaesQn=()+DIOrXNApQ12bFCw9r>>n&E1tD5%wK9M%XmMnyEeJa zzT>ni`eC41<>1^3bh9dAQ!0SRZN3p}wJCN44xlHRm=Oz{Hy5$3HFhTIN34D_)BGW> zc9?lQ3|+?{Heob6=d@}|8#jR;cX`EoC69N5Rq9MRqSR-TsX^DCOPL9QS)GO)rwp>l zjh>u;LqKWU@-}%OU0^h2)pf3C?gVoU^qh^_A7kBgIzz2Kgl*QLR%sdLw5UznL5oJc z-jU?V?jlKxTRf*CI=&5dA{5X3+_t~7^v@`(064N?tSmBkVI#aOH}0(06hE(HHZGbt zc~pFAnU`HJt7_qzZsf7e2UA#az7##1+Uruk&j(zjt-OSA8j5wV-jS!$dg#D|K%OQZ z7>I?6#DCu~k8X=0*g0LqIb|ZT7FRi>?6D91KIh?hWe57c9k9Krg#yk*t%$a(Z;iNN zhAaKA;G-Q%i_3YcS*|2s@?DeoM?cHV#$}ewImxFrr(|QurQCX=b5-!ECVmaq2RfEv9(8J+#;|Wv z8nnxAQR9xJL{$#20PgZM!=$VS%7^RtKvB(+$upmzNdm4e!Q1MDi9l!nNmXv3(hpyA zTXMTb7%vm%Cxdb5Mu8cUh%Pphmy!w^fZfQtN` zxFWVf;n2H}S7(Dv1+%Ywi<( zcA4eGm#XXoHYyt!fU=P+ih%fGfcQr8Cr>;qknxVx{yoVr6gxexE0BT1qJe#RcpC<^ zX(#aY-JfqCi;hw6Gdrbxt%Zc3lfZGlY6*+dLi(8M9oQLo19)Bx@sx5xmA|qo6Xf7L z+PmG-$I2iThjxYp&@zdGo-?}*H{lj+b5~P65N7vfRgv)cPFmP~(=uMo7c}KrZKBVN z%YsxI^;-3Mf)_5OVtaB1=t-}tC0jhQLOc*&E$=q$M%HbbU1tU9<%PD^iD)cA*u@{% zjT5uPbHIbKOqhei3+#@Q4~b+)zwwpBDP-6ggooF?qizC%UxdSDHep%KUhnGjBiI({ zjELATLXs=)_Ho$oTH+i!ZI*9}sG8X%ni3M)(n3=6v=v66^&5gIJSco7iA=uj6)54k zR|BsQd&eMJ@FTYxHF0wHpsJe7m0;7B#W!u%oZ698NTB^y6p$fcqCEo$4(fwucrFBs zO-jc*IC_PhDP!k6gGQmj9--SWTha-SuC`p+CvbY- z>i}ePo5b`bqx$-e;+6iowdB%wQtIDRIZ=s=5b>?g8k{P2k_X zkBM#~8Uvuiy|S3KNd>XirMb}+>9d;MXlS2zm&=mh0+S3-b%|2UE0ak`k%ziiFa-`C zNn@`?&1;-HRMKWoN~v2X0^p4Z2oBH+a6aA`SzsoqE_%91iiW4`KfrS}y3*j4R{)$9 zbv~XnrA1D<6kyKR;B;>2%pL*6un z)p*t2d69PCBEnV3Z4wMni(N4|;pMWQ5k;$Xj^%^=k*5^@z=XsZjpH74Vf$I9Bj=|(m z=V$#2Gkl#R*V0Mg3MMhvka=%=!oV$SaVK5g=;`vra_Mz?Bf;T&rZC($-nZjO%~$74 z62>b3<0Gf5|I71*C;h}Xq$9YVg4}B;r!Nw~F3_4cUmJ0`R$FT0UzpK)2coxp1i3U% z1kQGGyQqJPh3e%u^D?*?ZG6ISe-i`=!^qV9XY#ffg)>wvl5;J^7PNH;I!)N!e1hD% zST@EToyV}*T%q-dzq{D1A4;L9F5Kvi)0^hz4A|Y?lMy~yZ|g6L9+Kpv2i<%PQQix`aj0i4#4ChG>VT;(2gv- zt7w>NOpTq?jmF-qz`Qav?@{a}4Qqq*!+Xo8!-~|~pk(9Bnp&aAqCug_2 zV$J%%`g-9CrrBRfnK8H9$>d8Ue!y9$Rz1wp6U zh6rQ zt3@Fm^{uY+d*^o&ecg{FXF0LKWUqIgh<_2@Do6#tsl~M*WrOvZbJUH5k`lY=JSL{i z0;W2RltQ2U0s_^7sHJNnI+IuLkXP`&=zk$cgcAZ5ftr7xreL9eB31(^GN1a<5K*F^ zr>q`!@+#c;DGv7olR0XwOCc3ij$G5`)FZ$LT!HDaZ#D6S+!UE#B!YnBvczVDm9Ea= zdX~hEk~%%}2odhr5F#kuNk8CS#)u30cBAq$;G1U1dA$$AH)kIC@{BJESKx0Cpf|;R zU@^rMm4&DL+iW>fFGyVW=Egl9rAGwyOb7-F3S~p>>PHN|`aAZUoH+=3^owC9$7RUd z31BEJJi1y|J04Pyo9T6v1FPx0PO)>K@ENaQ=;(B7LKV+#ZEvCwt8b((x2tYSw>4yL z6^nF7nAo?i#p#BsCHrw(=n<`T|-R}Bskd=VD;VqQ%$-9f0@;Uv zDxV{`3b}BiTGiD$C9kGWZCN%gubz$D-|GG20M3Pmmrd7vrQ3IVZmOC^2F%z%H)bMB zQQSzTTl_1{Dzru_tIkfcv|ohV_}!qkq0nU4?aH*$1fsOGtF8uFq7F5d{TjpkZnBXFQya? zLknlLq1>GW@}b4_V&?*q2@K*8SF!%iHvvlUFdRAuNgs=ml*(~+uyOx!IC%Q8{KD)uU~y z<88{!h9kv$e)J=o$x%`wM5fwMKj21PO8?J?U+$5{euhTdYk>6rh(P0+RPRUebPYv3 z8YcbWv(?*U1C#0v;;(LEgWJJSUA9MQQJhWYqrATkao;jg2073I&X>-|^y+7%@HO}J zsG;R%Iq}wtBqz~s6NP_KUlJ1xYxM?nk+zqSd>0hYfL}KNek`oMa_TKYh9%_0Xo@-GPonUwUs1s)3nV1qB2y9Bbs^!qmaihl#yKv5q8kvh0h3P1 zFv~b|*n{jN*i6GtMO-hO)VVh~!^d*N2MeIf5*@zM*{L}{Im?G{rwwS>GAp)>*u1_d z56!$-2rWuOW$nW9lRy(xv(-1IBU{n-@5`v*KKDo#9C}%sx$odF#D2U5AF>Jk;`vyn z^?F(Tu63vMT9rb3eLb8J->>`<0GgTrz?wnl{0));Bolge@d3IuZeO8cW2B7gvLX}He~M@ zcl%0^HY68fyS6OnSE_}yymfefNFqw95&YJVXaFf=KCp^Pys%ZGFY zzfC4!8tGAGAxTu(I#qTh zQIuH|2|D>Y35DnIg--4d|B`ej+gE#OJ(oLDBU}mA!`X1~Er$Ga+A4paJyv`4h2(3p zZfuiit(H-wSw?(ukDtzb{DQ6m%aJNyhPLooS{Z!C^7E$iMDWblh}rwe_g^UPKW41E z`y?>)e@>-)3jhH0|Bm8}>}*Xf%#=)=>Hh=bs&#DausITbdU^#B0tdJC6V}G3tijmk z1yibo!N<{-9D%M34dl0z{*gG#HS6IWJwFv=Hz^txy`xULaO%~;RKxlm^`hUm&BqkC z7v*E=h}rE+H??gz)bgn`b-x=l&*vAVSG(@sFNQe7;T6c`?p|k3zb(375vA>SSAU(~ zmm8s0raj`>+p!ei8&Yd6d(xbp=`tT$A)&4wND6C8uNkW+fhX^2+ln~;*D_nI}?bpC;^O|MIH zxU(A-QI*zLE3W?C#bMETZz7MAOL$erQj7fcoFAV!qf)1dY2(^j-;STVb25y-P9QS$ zf;BieT|O%jSHxskDUCR9bk{}n-y|w-PoXJ>RppFvTjOdNqH(1unSd>SWJWawUZ^>R~;i@LI($JNTMJy%3bkuBO%iPA13 zTy^RQ0e!ePqE>YzSgm`@3vmvRI?DTV>Z7md*LoObY7`%3)_#9HdA#Ocaw&QKY0 zVAN2pkNP*??*`@9851O60?*x?ZK3g_Cy0?8yfg$tL1&*pr#irEwl~C{>C0ZGR~31?M+F@II}o#rU`g~ZtL0N%dWaE!px6MKy1H-xyZOHL9f(v z(yjPKc1-@aD2mXvbulN~?)bo<#HB_%7=3Ane8J65%&OI7-1(Yqdv%tNQ7<^>by1@Z z9=YCDBZsb>)RX~5)>G);<{^!nlO){X@0p5R4xNC5rrmvR9I)#!fTVaK#Ac_pm@y6< zE`U-z>eA*oq7ffLr3C_&?R~B_f8C3E0G%c>oYSY2@a0+Dw^MgV1E)KwA`X6EyY=4a z1v{+2i|!>)5{zFZa28-mkBR;#iwZ<@Fp6tAd~S=dfP-E{B&EVf-(Ml;sD<1?!y*j; zwqUuZO=FXwSCuTx_nOAIn8GanzDg$eCC*gKQhJ$f6>B1g(*-?9dNoKQVgW(M1%Oz6 zr{s6IV`q=D@asP(px{8zWdf2>r)YrSvy6b#llsMsVNiW#IRiiLcE-gbId*N*xhKq2 z3;tw!6ChY5DAcVj|Ng~{)-d+JhDRWl(yVhwa28N0+Hw#<`35Mr=3v)@nAWbNLES#h z=$-Vjg!;iMJ;YoFj%P3~1QYv$0k{ql&Mf+=^xgg8fw&jD3||5;)2TCV^cxEkkMEz1 zO1aRym<rdW$2J!a0PKE z*!mwpr%DAj$Pw&FmD|mwFk6zF&kt+b85%#mcz|;bN(!-%Qx@Ye@c@>k0+r@zlRb7TM=v3`X7Mzc%c*Be4yLkQ(3dMlq6JEW+KXCT}_Rt-tgT ziz^6n)t5=;;&;QqdbQ?R89tR`;yK{FjkIn%dKWaL%6V_E4zruAQl&OgHZO$c>%#{} zC>aGP0ojV-5>7gFlpZv}^r6Mn3YZ|Kx4o<2#$=h3g=~rvH55W!%uY_&gu8ROhRTGa z1a~`)rWO`WGV=>W4_N{67IL`?^(dw;#=+?K^wugnMIvK zXOf44se)CJFEu`efK1O@dd1lFJfY!ZFovHZJUMQ3;o8IWKV3uAo4Zy zR2l|CMo8kuQ{~dHt2V4RElwzsZdYHnl&_Ilb}o?AZf^`}TG7Bi<+2smZb5!&F9!c3 z+n5ieCSMi(JwAW`1kD@MA!|@*P&$jn8l^BfnrQFIV*@({4X7D7vL~fc+J58$jZPdf z&0HCL&Ze598LU>x&C1`6Njg&3o%>xm_Ke2jd$S#FW=2Cmkel!oZt5o&8dddoibV=| z5ED4P1Hxc&j;WcY5;e!(LfpJ%Y?M&J0)$WD>CWCLO*#m<#+*S^a9%=pK)QlnrGhJr z9p{*t;3k>LjH&G#`K>;o9HO{?1!HY10taVKD27MTNIG2g3KLw*UeWCg&-grfd(g9{ z?F+Fn<>N5)FLMkmz4sr{r42iBzc7@qJcLRsej{ZDfI?uaV6PPx0A(dhpzZJ}q9n&? zEfj<>dbqD>V5~n2IEh1W_x|Sg1Yq{O6l@bPWE`;FLHGg$DAWDpLczZMSNs%Ewo7dE z6p9*vB950)pvO+|s?^xUhWzZ{X%LV?5}atA4D1G&G&W%Y>v#3D9(=veHZF94g^IDP9J9dDAk#e_@5kj?7C-A{z+qh#wT4V zIDi-1o{O+2Fs4kQMqUXbcktO#Ac$3rEYINJ%h{3EP=XcCJq)g^cJo-UXn?adJsoNd zKPX-0=|kPmg4~hv*5_O75(oz}ZD0N}DxLgZ&d~aAq7LkKf!RbT-4NeUPeGmdqUUig z4%az6;(FeT>AX-c8k4IM7cU#KI!pGU*2!!=!T=M=O2`UfBjWzn(<2u1JVc#=F*{Zm zFlpe1+sK{eIF2GBARL79qRBaXjfM1#oj8l78HxAl^(9HH{w<&{tjgWhR|yXF3C%WJ z?A*OZ0df*ZbnE2=Iwh@Rv;DHt>g$?7r=0LC>Oh?(OtLsM3f*8@oDU**wDJx}Z1t+j z7BZLb=7ad?VgdtHn!q0?ZHWy`aa~rYT6Boe^rHsDhFFphDbQ?B93fXBLpI^uWgk7M zEE9!0%G;hd+(pzOALw5Pk`-n=Fh>b}Nq`+cid9eXrvhOewpWr!$S?Km*TnI>&J^D? zmA^2`EMu)A12}v1?n9_((bTV7+&2)JKCV7BP^OCzB@tR@bM zlz```6_2ZLfS9sc1WziV;o)2Aab*v6+d77_qgKF(fo3zi7Z94bP0v$ksSo#oWAO^C z(EylQxY_wbBg{SmR2Cak^&4PKsNgd+uc3MRE+S)fP@g6mdLm6zBB8_=jB3;)N|uH; z`IW(8Y5z9aT;ux;(!RFigpIUiGOkzOzSc~0?hx&$94{7$T?-iO_< zQT1=<&v>$V-;#H*_#b4j;E%K=s+G}yhlRKJDe{HEg}*IULg>Ip8XLu4%DX(QH7`)m zmLWAvZCxtMU*llXHGWvTA(oo3E0KCzdLDNuV{d(*z-VAVa7CC~7(XMEG91$va~j0; z@;WzVLl4rSQ)hv?5R)^`Qh1(TY4)5Zg*l0IDimUKyjOH%+?0CBmgbKuCOe^wB$pe; zsyis{UFwtppvDVF)Z|RblHVFdPYNNr<7C2qCr99u&m(+TQR(%rB<->qv9_is~nJm zPHye}*EMf*E9TcS%`-^Mf>S#p-(t zyxS)W$=9+?$9>i_kt!AMog&6yFr*)yO7e%JT!#d_V&)=PeWy)hcoo5fTC8+Y#KAk- zeyr42G%|SpvwI}8Fw@c^f^bfFfE5Y-6^*OOy6*J#`vKS8hk3ehtTrh$H`cM0l|Zc@ zENYM-&TwRu?_V^O7alaH2<|XS8R|qtcc^5=E=xy_i{@?(?E$@L?QS%W&ge^Lu%dB4#=-!f>y!p#s(AHhbbk1qM4;og=!lmm$c)}@355*HrF4T=WZFL z*Pi8)1Y6>7d(T^BL5_^ux?G^t$g=yocj&PV*$HIS_1j2*+cx{5V#R*!*vywPamh4; zZk)L1$ZsO3ee4B3@#&lx37(f9XwJ}#9$S!imkf=VJ!0K18W!o7jCz{0CE1SRkIMBA z8$o^ru5uu>pfW|Zv>?h}8oVdn@q%dp6MfrYR8c6ZJEOhheaZ>%5@3#UlM{yU$vnLe zvp0m3w&(M;VfniLM$lUE{hZ6?+|)w1{ulns=Lmo~L~R9oJEpigh@EioX%ufd^)Bhf zO==kZ$j!2CRITf_v_8i%Aj$`%;;yE&-op~5o{Oaz8_UJ7s<)W_s%|y-4IJ;$ozbi! z(EWCRoeJG~Xc7K7Wg5FH*m4&UPJo(V)YN_){r>L5K<$^-fuf z)SJeFBi8~l8p__cC{Few_Ozr&D;^#khiz-W7lRTL_sQ@^-sT~2W(=p#D#px4QQx+! zVdk3PXxPi%Z|)0Y@3$j}*=+3kZk@XTzJ(GC2s2ZCGD52+w_ zk_D%NbmwfC`a)8yk8_9&*p#;N)!xj{u zAYaLx(e#G-D-A>5LRI|HM{>;&$V-q+^O`J3^^7XMltvFc-0S2w*$7>-9uUy)+ z{o|YR4lEQjyQE%Nw34E5*^B-E5C+ZgwT} z;$G$uaqpSu<37rNrp)z&B5$GCRbg+Z&yY~gwru6j*$yK+m@d#9CPydP4Vkb1Ix#`L z7@icGvf#pQ#VOg9kYL%(<-QRTJSgRo3Hu#*gAMmCA4hHVl%%pZ+rAnTLZfa=y_0I7 zDh>0`e6!eN)ei;dpkZY7W%OvavKhSHVb5--1>wR*jhD2YsQQ?_>0DCF!lzET?EsfN z?A1ApIQ!sYrud}OS$_R0>AT{hrm5`kYls4FrCgk8gi94rCzb`Qc?cx4IHbDA96L~3 zmpDG(=L~?>qxIc?ba8mM)>eub*_}dDEt8fCgU}P>Y2VN8j0cvKkWP9KVEN>B5Oeo9 zIk`ux!Bhs}b%oMSX0o|g_jeWkjn&fTCal5}r_<=u$S3!spvu?&sj@r2&eSuzEf3cJ zE^c48s2SARAt@tK7$bDc|Auq-uuqDB)N=JwzxXUu`FFh+4pQtU@}c>Gm2q^H%d1w*|%p$Oq{Py3+?vXMA`5`Wm!b%lW(BD>d?a{P>M6 z!HH4M$oBS)1|QA5NJpL!`tc@z=8p|Nsq8DRlKnbJnZDRAt0j6N=N@Kdj$ErPj*V7YB*YZf1S#C2A}(%stLna@DcDbQk0QVo zT-ie#8C0<0Gn-XStbo95Hb<0j(Jnp#r?y-x-^0a!wo6cso?b5*mQLZ~ zF{zw3xSDYrU}DXgya|?^(pBoKr?O(T(Y4Gg!RkVhG2TIpc|nC)t#Mz|rlwV_yU2xP z4)CYK!>#~M6~|l)SSmM0>=>1o5O?ydj$h5$);YcJ0&}ZLdv$^p4;roLGp!2w4<;6T zJsQl5)u9IgD>g2)JsVyh_I6fuP+1CIMOdUc3uaoIg1OH|Q1LzpfD3u5$2(T-C>#EJ z9M*oUF`FAC_2c8h3s{Yq5>}Flw?-oD=d--QUu7Z9{8rY_m+xFaHkf}C_XxE$ym3E} zA@Z1Bf&|`AG3=R|`K*1Eja1I-WmTM)ESC12FCNcdknJ-m`K*Riq#If#h~*f1x5&yp z@E9pl+V6j}gNywd;yNo1-26`_*3QFVO>)+QHpo z*(q#HM4oH-TT_d*#9;p*_~}TKxp>H)+VJXm_k{fR(D3TH>?DW;^3j~?P5DIv{j`hrM0NiKVT zKKV932v#T;b{BTTk3sjK>n7rL>)13b0P4T{%W|c& zua&telVAqbpW=)>l24=G?xtl27~5s3TYudVJ|Z44JWn=f4|b;^-c}a00Z-UBZhX%K zVrhRq^p9?y7pbE0k_IFq3aNGTsehlRSbe-q+#{VJx;%&S)a>YR?C<~>IvcK~sNO1r zk9a+Sn{x{<>*aBjgxA3b^m^5e^RqKnK)t~6l?Ytkxv-z7X_;j&u{UQo8Q?5n9Ll%O z6LZQ~0jD=}kD%WdH4CMZbKW2Cu9f;!I18lknzCiEr|S*suF&A%8l)?a#MPROyseon zXr4(kF*S=wTKs|aAO9+RykA_N&F}NMt^(yTy{Cl%|`OWAd&vKTh07I|DSML z&u?(g;~$jH|2MGyw{TkGUw`_4_;h1^?bx&exfBiM%+ze73gZ%!yrTHD)QsHtlvJw< zC5^;lvwTDAVS~fWtkk45ye!TAl+wL>Rkq%ij#lIES6~vxE$ug#Go89-I#Iq2LH6nDmI9h&(sj=LOQO|*kc6j&rLlGe za$eES+$~C|%OHjGVCVTv>0I`%j2pw>n*-JD99fW#<-hd<1FCstxS4!|lTbU(V8?)t z{Hd5xMGtTxNHjW@>$MjUsd>DUFb!&zijIJ>$>6)H2LNdALOQ?ypGrRYt0tzx0RX@` z|KE+&|F1>Z$=Sf!#MIi(?SJ`$b+nu|M^JrNYuEM@d5i?ShJnJ1qNt@JN?M8{oHwG# zmidW^2~Pg6KF$Ivs&4J$3?QI%!vN9<(n@zL<+z z;cX3HH~`k`l*Wno-5^V_y#Ki>W_~8+-j41E({+-D{)X_B3;P>Sz@_DD*hv!skVgrcQxTLz|V&HMXca zE{YF3qzVUu_lh{pbKSPQ7Oa1e$qT7`vtF&`)kMOws(GzEcj`(fiSFFX5j?NSMkm%} zf|=sA@zrcI!^;qTj-{AC-C%A@Na}QL4|e$k&JKQ|hDxY5bRnBp{vm|1Zd7y6bas}4 z#-qt59m8^`aAwD8w~Sw%x^JHc9LQY%w$A+f(00tU@iQCzZb_T#{pIlyDWeka>Yo;Y zn#Nz03+A>31vk;tD(#Zc1F_j5(I{M}te?#U?RN{#$@JZ_OxbX)ke>97q01vjjYCZJ z!)TII3@XrY^iJK=ZA!MzF0#NWu~c4PM79o0%S(d=JAlvGo-<%KzE|!K`b={gK7801 zC`-fsG~hwZnb*!2Fo<~`FCDJ+oAC0#Un}AxvPMj2$cW zv`4K6pppK)cHWK;dKngGG-omA(K%8%KT2vQT$L(5yUOPB@0PtrqJ^=qh#r(F+9Cx;59qe{orcuJbQVsk#3n%bB^Ifb+-c{Xk=HWb93Co#)jS?U>Ke^ZS$ZGqw96|}6r0_7{$g$} zobbeg+SGIMDH5#^$*Ns#X?O8&$kY6QV{ zK{(+wZc3V#Nir9p-BVhEN+a=3lZm`7uQEJq4pmSyiJ}f|S0OF3F~jaW$2ycVDT;H7 zLqrrCKfk9)M5W;(*EyXkp`^MpjyIfy$AGLdb1e zma{MM0-=f64Y3++t0MW6;}@yTDM%4J+cO@Baj$uqu|wS~P_BCd;u%5wLrsp=qnmhy z_p`;K9qM=o38(C>V5S`ESRpNgqetH~p~fpYoE-^dRhs^q zs&2IxQ_#jsZNJtV3dm}&DcbBSMtq~AQ=NjJKX?PrE~7wz>ZVkm0cfaoJU&jf?=0fB z39~3?)lDBCptNz);h<1(Ap>wD!4~zuuKJ}96%7_Sl#NdpNGLOkd)YXKhO!#y zKBhvK7IEo$D}azmp2mo)l;G)i#Y^3)37`$Vv3Pc2R#oq#GtGvWHQ~DyJGK*bYbL6) z^patGtt;-C)Bv0%OR#=^1#N|H7Y9I>FO5%m*@yR1l^IEa^La6D-*ixZYTytl;wBa% z8y`E;4KZtE`-dKVXWH*ulJ2Jzih!rL3JAK8YZ6g$*kovoX3f;EO-a7i#~sUDDgT)3 z76lbWRaBKhJl!U@1h^@;l4kJ^>cl-tU*JoSnkTA-4oMSxW+N7B^G=3|SM#~B0-Xv` z?0OJo--hIC=cU2mnV~ZgU@)&ib)+CYdTsximj<3-bBte<>kBaIU~tcybNIRGP!Wew7+5MN2n8DVxJn^6%%NxliHYUrLR!vdD># zm`sk@8jt#!XfBYDQ?*pe>H*`{u^WzS*mUh5L|JDBO%s*Ets^5JRLKb@4>9Jbpqo2q zQzMyEqY<_HLnEUpGurwn!N(aXwkf|RxSI8%JI5=%FV$zo+{aLULdYa4ahuLN!+Mu zPcJ}QBWb1Pu2^dvK_>6rWng(~Y_y|piO;`Hv`VgB9P*BirXeD@@jL-o65R4qnK3=D z2tV?#nd74@V{EV5sJUg{c>WYI1rhL7I_l|oV-RV{fIXjZ?quU&0BPJX?C1V6aI~gC zX!$9GYnV=1LHg*akeG-e0iUzZG{t#yxY;a+*0PL><#m!8>A9t&jm26@Ry;MhFz3Aq zNA9DOZ>4O(QWM{wgC0py1Rj+UV76||J``tk>G>3Hgar70kXzU~B8tFN9>n60C>A!f>_v6^Kr zkf`F#{Uq_j=Xw!zd51~QtW-Nh_qeVBf4a$v%U(1 zCAA5?_A|2Ua}-~>mA_PQ7gB9LDtCxrq3Hk;4JW_-58INO$>n_ea5wGe6$tTFjb282@Z~LfH$==i<0TQcFIuxA2niP> zb)y%ebYm8@Jw1*LPcFN;35BT+zU_=33C#s33i)}Rg>(1BQh6TEy&+AQ&S&8Os+ zwFR_B-1BvoQi!*>5C4#OaeuRQVU6?^Lo8h#widk9cU~{fiwEZ3dR-;6e9ck$!sUF5 zgQg&S4VQC_$6V3-HXK~}AsOc$8vz#NM^^$MS^kysi85Pq8=()}XXK=N`<%5dwHPtL zOme&lhmp%iYa_UGsou7?%k!67wE2R2r&{NG`$ZmVTAF$iPvCN4S-Q2Xs$or284KG8$=yLW)*8e_gaY? zIf+72p`^1c!E6|R)@tX~`OrQ;xY!FqSJ4=sP0zkEf4Kdo&2+Fi=-`n5hl@W44>3`a zNszgDP{tljXPnb>L>@Qx3spamf#Jzqw=2r-_<>RARj2qU2xaN?>{~$uIUM_T8MpNE zP7wG0WVh?K?IO>o;7VIO_r;F-OoKB_yMwtSN#9LwJK}tJ?b~Q@d$+4mmU}4TM7A(y zX$wCo4Yv?_-*re7CTbipIios-L(0sETTTcGW^MG@8T8N<;ZU~tTe9R~DpN7*gm6Tk z*tIa$=?3;G$oo)#xrN}zaBfB0K~!6L=o0q~UA4k36BX*|t;j@Xh;YxegY28~B%7Kf z*liPI@B2?UKd9Gibt83kJ@qz4xX#bFqoSHEiBjGQH0w=X3|V4Uc^ehNf$jSQ5IH$z zD0+w|(xGMNsWJFjiDwVcxLIw;`E^Kh-?k%n;AqKSKIjPxJArN01`ixqxqC|NG?y^8r|igan$*BA6xTw@Kq-pmZT5uF##WK^&}S;ht{}H`p?q$t zFvME;JthLfC`Fo_W&Or8BHYKdl~~Mit%=W)n1P{?@8%84P5Qn+h=5z~(?kP~pN^KB zY%#shd)r86$Wz}7Tu+H_vT4@RK{4T5n3JNxWMr{La4~yh4F74m7|~FH#rl+1sxcz= z!2}6i?LaRolF-9?5)jwng3DG1lc^%4LCqxzB168rJM!rmQqEiWXjDe0(YFZmD|)V7 zvIo3hM%y8QMQj#4{ES~h#-R7=g7D~zy;Z~#jhlkH)1)2VIouWWz%`eEqON4@!U?=iH=d;F^63 z7@4i&sQxJ)->|nQk6-6JY& z@tc%|=N=29A?e1dgw@uy4y7VaZ{O)gV9O}H*etNwe=Q-pZ5Y3Gj%340_j}2SAxr(9ZY_1 zR*sOATO5;cjC#Zr-xeyXuaHTVc#xBL?swl&>3)e`XN4L0ld!P%{0i}1(d%DvzQ3pY zueg`Sw!;QITCg7NaeBTu3S~8zJD1D_(u1I0lqw;gMvp<_;X#EF5dN5Vw)N^d^V7Uf zPZoG9Yf7Owp?$ zSfS5$V!*94mZ3GYF{K9p2(Ezj$8Q@aRfPCS2mX4fYzf0vh6ck zRZqTMH?jU6b-yZWGa3#es$tN2K~u5^DgR7o|C^( zd9c3!Pt-pgDDN`=F1T9rmt(jnn{@U*G-@8G*KK diff --git a/src/plugins/SLXParser/Translator.cs b/src/plugins/SLXParser/Translator.cs deleted file mode 100644 index aeb0af8..0000000 --- a/src/plugins/SLXParser/Translator.cs +++ /dev/null @@ -1,147 +0,0 @@ -using SLXParser.Data; -using Stater.Models; -using State = Stater.Models.State; -using SLXState = SLXParser.Data.State; -using Transition = Stater.Models.Transition; -using SLXTransition = SLXParser.Data.Transition; -using SLXData = SLXParser.Data.Data; - -namespace SLXParser -{ - public class Translator - { - public StateMachine Convert(Stateflow stateflow) - { - var stateMachine = new StateMachine - { - // Type = "SLX", - Name = stateflow.Instance.Name, - States = ConvertChart(stateflow.Machine.Chart), - Variables = ConvertVariable(stateflow.Machine.Chart.ChildrenData), - }; - - stateMachine.Transitions.AddRange(ConvertChartTransitions(stateflow.Machine.Chart, stateMachine.States)); - - stateMachine.States[0] = stateMachine.States[0] with { Type = StateType.Start }; - stateMachine.States[^1] = stateMachine.States[^1] with { Type = StateType.End }; - - return stateMachine; - } - - private static List ConvertChart(Chart chart) - { - var states = new List(); - - foreach (var state in chart.ChildrenState) - { - states.AddRange(ConvertState(state)); - } - - return states; - } - - private static IEnumerable ConvertState(SLXState slxState) - { - var state = new State - { - Guid = new Guid(slxState.Id), - Name = slxState.LabelString, - Type = StateType.Common - }; - - var states = new List { state }; - - foreach (var slxStateChildren in slxState.ChildrenState) - { - states.AddRange(ConvertState(slxStateChildren)); - } - - return states; - } - - private List ConvertChartTransitions(Chart chart, List slxStateOriginList) - { - var transitions = new List(); - - foreach (var state in chart.ChildrenState) - { - transitions.AddRange(ConvertStateTransition(state, slxStateOriginList)); - } - - return transitions; - } - - private static IEnumerable ConvertStateTransition(SLXState slxState, List slxStateOriginList) - { - var transitions = new List(); - - foreach (var transition in slxState.ChildrenTransition) - { - var transition_ = ConvertTransition(transition, slxStateOriginList); - if (transition_ != null) - { - transitions.Add(transition_); - } - } - - foreach (var state in slxState.ChildrenState) - { - transitions.AddRange(ConvertStateTransition(state, slxStateOriginList)); - } - - return transitions; - } - - private static Transition ConvertTransition(SLXTransition slxTransition, List slxStateOriginList) - { - var transition = new Transition - { - Guid = new Guid(slxTransition.Id) - }; - - var start = FindStateById(new UID(slxTransition.Src.SSID), slxStateOriginList); - var end = FindStateById(new UID(slxTransition.Dst.SSID), slxStateOriginList); - - if (start == null || end == null) - { - return null; - } - - transition = transition with - { - Start = start.Guid, - End = end.Guid, - Name = slxTransition.LabelString - }; - - // start.Outgoing.Add(transition); - // end.Incoming.Add(transition); - - return transition; - } - - private static State FindStateById(UID id, List slxStateOriginList) - { - return slxStateOriginList.FirstOrDefault(state => { return state.ID.Value == id.Value; }); - } - - private static List ConvertVariable(List datas) - { - var result = new List(); - foreach (var data in datas) - { - // var variableValue = VariableValueBuilder.fromString(""); - - var variable = new Variable - { - Name = data.Name - }; - - // variable.ID = new UID(data.Id); - result.Add(variable); - } - - return result; - } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Utils/Color.cs b/src/plugins/SLXParser/Utils/Color.cs deleted file mode 100644 index 079c59f..0000000 --- a/src/plugins/SLXParser/Utils/Color.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace SLXParser.Utils -{ - public class Color - { - public int R { get; set; } - public int G { get; set; } - public int B { get; set; } - - public Color(int r, int g, int b) - { - R = r; - G = g; - B = b; - } - } -} \ No newline at end of file diff --git a/src/plugins/SLXParser/Utils/Point2D.cs b/src/plugins/SLXParser/Utils/Point2D.cs deleted file mode 100644 index a5d8935..0000000 --- a/src/plugins/SLXParser/Utils/Point2D.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace SLXParser.Utils -{ - public class Point2D - { - public float X { get; set; } - public float Y { get; set; } - - public Point2D(float x, float y) - { - X = x; - Y = y; - } - } - - public class DoublePoint - { - public Point2D X { get; set; } - public Point2D Y { get; set; } - - public DoublePoint(Point2D x, Point2D y) - { - X = x; - Y = y; - } - } - - - public class DoubleDoublePoint - { - public DoublePoint X { get; set; } - public DoublePoint Y { get; set; } - - public DoubleDoublePoint(DoublePoint x, DoublePoint y) - { - X = x; - Y = y; - } - } -} \ No newline at end of file From 21ed44c196535f75e8bd96b1546c92acbf5107e9 Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 17 Dec 2024 19:41:10 +0300 Subject: [PATCH 25/69] Add parsing XY in from slx --- src/Stater/SLXParser/Translator.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Stater/SLXParser/Translator.cs b/src/Stater/SLXParser/Translator.cs index 0239a57..1bc5f31 100644 --- a/src/Stater/SLXParser/Translator.cs +++ b/src/Stater/SLXParser/Translator.cs @@ -49,7 +49,9 @@ private static IEnumerable ConvertState(SLXState slxState) { Guid = slxState.Id, Name = slxState.LabelString, - Type = StateType.Common + Type = StateType.Common, + X = slxState.Position.X.X, + Y = slxState.Position.X.Y, }; var states = new List { state }; From 7f521975028318459c25639d13088a423aea3e7f Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 17 Dec 2024 21:35:20 +0300 Subject: [PATCH 26/69] bugfix save project --- src/Stater/Models/Condition.cs | 7 + src/Stater/Models/Event.cs | 7 + src/Stater/Models/Executor/impl/Executor.cs | 8 + src/Stater/Models/Variable.cs | 22 + src/Stater/Models/impl/ProjectManager.cs | 2 + src/Stater/Stater.csproj | 5 + src/Stater/TestData/min | 517 ++++++++++++++++++ src/Stater/TestSave.cs | 25 +- .../Editors/StateEditorViewModel.cs | 56 +- .../Editors/TransitionEditorViewModel.cs | 63 ++- .../Views/Editors/TransitionEditor.axaml | 9 +- 11 files changed, 661 insertions(+), 60 deletions(-) create mode 100644 src/Stater/TestData/min diff --git a/src/Stater/Models/Condition.cs b/src/Stater/Models/Condition.cs index 04a050c..c03c084 100644 --- a/src/Stater/Models/Condition.cs +++ b/src/Stater/Models/Condition.cs @@ -1,7 +1,10 @@ using System; +using System.Xml.Serialization; namespace Stater.Models; +[XmlInclude(typeof(VariableCondition))] +[Serializable] public abstract record Condition { public record VariableCondition( @@ -19,5 +22,9 @@ public enum ConditionTypeEnum Gt, // > Ge, // >= } + + public VariableCondition() : this(Guid.Empty, ConditionTypeEnum.Lt, null) + { + } } } \ No newline at end of file diff --git a/src/Stater/Models/Event.cs b/src/Stater/Models/Event.cs index f793708..766f944 100644 --- a/src/Stater/Models/Event.cs +++ b/src/Stater/Models/Event.cs @@ -1,7 +1,10 @@ using System; +using System.Xml.Serialization; namespace Stater.Models; +[XmlInclude(typeof(VariableMath))] +[Serializable] public abstract record Event { public record VariableMath( @@ -17,5 +20,9 @@ public enum MathTypeEnum Mul, // * Div, // / } + + public VariableMath() : this(Guid.Empty, MathTypeEnum.Sum, null) + { + } } } \ No newline at end of file diff --git a/src/Stater/Models/Executor/impl/Executor.cs b/src/Stater/Models/Executor/impl/Executor.cs index 29e3b97..77958d5 100644 --- a/src/Stater/Models/Executor/impl/Executor.cs +++ b/src/Stater/Models/Executor/impl/Executor.cs @@ -149,6 +149,13 @@ public void Step() return; } + if (state.Type == StateType.End) + { + WriteLog("State is end", 0, ExecuteLog.ExecuteLogStatusEnum.Info); + Stop(); + return; + } + if (_stateMachine == null) { WriteLog("Step is incorrect: StateMachine is not set", 0, ExecuteLog.ExecuteLogStatusEnum.Error); @@ -196,6 +203,7 @@ public void Step() var newVariables = EventLogic.Evaluate(transition.Event, GetCurrentVariables()); foreach (var keyValuePair in newVariables) { + Console.WriteLine(keyValuePair.Key + " " + keyValuePair.Value); variables[keyValuePair.Key] = keyValuePair.Value; } } diff --git a/src/Stater/Models/Variable.cs b/src/Stater/Models/Variable.cs index 094efb1..5fe847e 100644 --- a/src/Stater/Models/Variable.cs +++ b/src/Stater/Models/Variable.cs @@ -1,6 +1,7 @@ using System; using System.Globalization; using System.Linq; +using System.Xml.Serialization; namespace Stater.Models; @@ -57,10 +58,19 @@ public static VariableValue fromString(string input) } } +[XmlInclude(typeof(IntVariable))] +[XmlInclude(typeof(BoolVariable))] +[XmlInclude(typeof(FloatVariable))] +[XmlInclude(typeof(StringVariable))] +[Serializable] public abstract record VariableValue { public record IntVariable(int Value) : VariableValue { + public IntVariable() : this(0) + { + } + public override string ToString() => Value.ToString(); protected override VariableValue Default() => new IntVariable(0); @@ -104,6 +114,10 @@ public record IntVariable(int Value) : VariableValue public record BoolVariable(bool Value) : VariableValue { + public BoolVariable() : this(false) + { + } + public override string ToString() => Value.ToString(); protected override VariableValue Default() => new BoolVariable(false); @@ -135,6 +149,10 @@ protected override VariableValue Div(VariableValue otherVariableValue) public record FloatVariable(float Value) : VariableValue { + public FloatVariable() : this(0f) + { + } + public override string ToString() => Value.ToString(CultureInfo.InvariantCulture); protected override VariableValue Default() => new FloatVariable(0); @@ -176,6 +194,10 @@ public record FloatVariable(float Value) : VariableValue public record StringVariable(string Value) : VariableValue { + public StringVariable() : this("") + { + } + public override string ToString() => Value; protected override VariableValue Default() => new StringVariable(""); diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index 28514dd..fac74d7 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -59,6 +59,8 @@ public void CreateProject(string name) Location: null ); _project.OnNext(project); + GetStateMachines().ForEach(e => RemoveStateMachine(e.Guid)); + CreateStateMachine(); } public Project? LoadProject(StreamReader sr) diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index b571ac3..2109de3 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -41,4 +41,9 @@ + + + + + diff --git a/src/Stater/TestData/min b/src/Stater/TestData/min new file mode 100644 index 0000000..00da7d8 --- /dev/null +++ b/src/Stater/TestData/min @@ -0,0 +1,517 @@ + + + + + 3a2653f0-c0cc-4a17-8b4a-c48ec1c90eb6 + StateMachine 0 + + + 3ae1f825-65a4-487c-bb13-0c929579166f + Start + + Start + 10.269531 + 10.5390625 + + + + + 0dc5b654-d428-4bf7-b353-222845123f5d + Min + + Common + 10 + 92.556076 + + + + + acdb44a9-c58d-4f5d-b2da-cb7ff26da63d + Check + + Common + 266.55078 + 94.616295 + + + + + 86aa9a4c-4dce-482e-a191-f268609e45d6 + End + + End + 272.0586 + 171.8017 + + + + + 2f112f90-424f-4cdc-a907-0a39a6d61f3b + Pass + + Common + 125.096 + 174.51524 + + + + + + + ec5ebf48-25fd-4212-a2f7-c193c086243f + toPass + acdb44a9-c58d-4f5d-b2da-cb7ff26da63d + 2f112f90-424f-4cdc-a907-0a39a6d61f3b + + e5680cf9-cc87-4ff7-bff9-a3ef53e63c6e + Ne + + 5 + + + + + 1127c9fe-6ab3-4646-b518-289f9fd5c47c + toEnd + acdb44a9-c58d-4f5d-b2da-cb7ff26da63d + 86aa9a4c-4dce-482e-a191-f268609e45d6 + + e5680cf9-cc87-4ff7-bff9-a3ef53e63c6e + Eq + + 5 + + + + + b3a75179-b49e-4a60-b436-3e8cce241080 + State + 2f112f90-424f-4cdc-a907-0a39a6d61f3b + 0dc5b654-d428-4bf7-b353-222845123f5d + + e5680cf9-cc87-4ff7-bff9-a3ef53e63c6e + Gt + + 0 + + + + + 80e06dae-26ba-4f61-8d50-431c9d857021 + State + 3ae1f825-65a4-487c-bb13-0c929579166f + 0dc5b654-d428-4bf7-b353-222845123f5d + + e5680cf9-cc87-4ff7-bff9-a3ef53e63c6e + Gt + + 0 + + + + + 64cf3119-8cb3-4517-a265-60ea893839bf + State + 0dc5b654-d428-4bf7-b353-222845123f5d + acdb44a9-c58d-4f5d-b2da-cb7ff26da63d + + e5680cf9-cc87-4ff7-bff9-a3ef53e63c6e + Gt + + 0 + + + + e5680cf9-cc87-4ff7-bff9-a3ef53e63c6e + Sub + + 1 + + + + + + + e5680cf9-cc87-4ff7-bff9-a3ef53e63c6e + A + + 10 + + + + + + a931e318-d982-4b1c-b4fc-dc728315b529 + StateMachine 1 + + + 1f31bc1e-5e80-45ed-bd89-c728dee52eef + A + + Start + 9.797979 + 67.99305 + + + + + 930650f2-3138-48dc-aa0f-9d9363685bca + B + + Common + 273.92557 + 72.72873 + + + + + a1b24ba1-7923-44c7-b55f-a297ebd43cd9 + C + + Common + 155.5467 + 148.72523 + + + + + + + e858522a-e32f-4fac-b76e-8475823d6225 + State + 930650f2-3138-48dc-aa0f-9d9363685bca + a1b24ba1-7923-44c7-b55f-a297ebd43cd9 + + + 5222825d-d8a1-4a8d-9e77-a4b28958c33a + State + a1b24ba1-7923-44c7-b55f-a297ebd43cd9 + 1f31bc1e-5e80-45ed-bd89-c728dee52eef + + + d3ba65a7-894f-4a32-8ea2-8018d24b0119 + toB + 1f31bc1e-5e80-45ed-bd89-c728dee52eef + 930650f2-3138-48dc-aa0f-9d9363685bca + + 5f805493-8c5e-41ae-b16a-5f29da473d2c + Eq + + 1 + + + + + + + 5f805493-8c5e-41ae-b16a-5f29da473d2c + A + + 0 + + + + + + 9938e855-fa6e-4222-9f15-da4b9d491b0c + BR_GATES_CH + + + 00000061-0000-0000-0000-000000000000 + G0_G1 + + Start + 20.0875 + 77.985 + + + + + 00000086-0000-0000-0000-000000000000 + G2_G3 + + Common + 20.0875 + 410.485 + + + + + 00000080-0000-0000-0000-000000000000 + B1 + + Common + 28.8575 + 430.72 + + + + + 0000007a-0000-0000-0000-000000000000 + OFF +en: BxG2 = 0;... +BxG3 = 1; + + Common + 108.8575 + 439.58 + + + + + 0000007f-0000-0000-0000-000000000000 + dt +BxG3 = 0; + + Common + 38.5475 + 539.785 + + + + + 00000084-0000-0000-0000-000000000000 + dt1 +en: BxG2 = 0; + + Common + 180.7175 + 539.785 + + + + + 00000083-0000-0000-0000-000000000000 + ON +en: BxG2 = 1;... +BxG3 = 0; + + Common + 108.8575 + 645.925 + + + + + 00000081-0000-0000-0000-000000000000 + tri_state +en: BxG2 = 0;... +BxG3 = 0; + + + End + 347.3725 + 537.44 + + + + + 00000068-0000-0000-0000-000000000000 + OFF +en: BxG0 = 0;... +BxG1 = 1; + + Common + 179.98236 + 50.160686 + + + + + 00000072-0000-0000-0000-000000000000 + dt1 +en: BxG0 = 0; + + Common + 228.45139 + 163.88199 + + + + + 00000069-0000-0000-0000-000000000000 + dt +en: BxG1 = 0; + + Common + 30.665432 + 197.26773 + + + + + 0000006a-0000-0000-0000-000000000000 + ON +en: BxG0 = 1;... +BxG1 = 0; + + Common + 110.0875 + 301.97647 + + + + + 00000076-0000-0000-0000-000000000000 + B1 + + Common + 30.0875 + 136.94293 + + + + + 0000006c-0000-0000-0000-000000000000 + tri_state +en: BxG0 = 0;... +BxG1 = 0; + + + Common + 264.84747 + 248.10228 + + + + + + + 0000006f-0000-0000-0000-000000000000 + [BRx == 2 || ... +BRx == 3] + 0000006c-0000-0000-0000-000000000000 + 00000068-0000-0000-0000-000000000000 + + + 00000077-0000-0000-0000-000000000000 + [BRx == 0] + 00000076-0000-0000-0000-000000000000 + 0000006c-0000-0000-0000-000000000000 + + + 0000006e-0000-0000-0000-000000000000 + [BRx == 1 || ... +BRx == 4] + 0000006c-0000-0000-0000-000000000000 + 0000006a-0000-0000-0000-000000000000 + + + 00000070-0000-0000-0000-000000000000 + [BRx == 1 || ... +BRx == 4] + 00000068-0000-0000-0000-000000000000 + 00000069-0000-0000-0000-000000000000 + + + 00000074-0000-0000-0000-000000000000 + [after(dt,tick)] + 00000072-0000-0000-0000-000000000000 + 00000068-0000-0000-0000-000000000000 + + + 00000071-0000-0000-0000-000000000000 + [after(dt,tick)] + 00000069-0000-0000-0000-000000000000 + 0000006a-0000-0000-0000-000000000000 + + + 00000073-0000-0000-0000-000000000000 + [BRx == 2 || ... +BRx == 3] + 0000006a-0000-0000-0000-000000000000 + 00000072-0000-0000-0000-000000000000 + + + 00000079-0000-0000-0000-000000000000 + [BRx == 1 || ... +BRx == 2] + 00000081-0000-0000-0000-000000000000 + 0000007a-0000-0000-0000-000000000000 + + + 00000082-0000-0000-0000-000000000000 + [BRx == 0] + 00000080-0000-0000-0000-000000000000 + 00000081-0000-0000-0000-000000000000 + + + 00000078-0000-0000-0000-000000000000 + [BRx == 3 || ... +BRx == 4] + 00000081-0000-0000-0000-000000000000 + 00000083-0000-0000-0000-000000000000 + + + 0000007c-0000-0000-0000-000000000000 + [BRx == 3 || ... +BRx == 4] + 0000007a-0000-0000-0000-000000000000 + 0000007f-0000-0000-0000-000000000000 + + + 0000007d-0000-0000-0000-000000000000 + [after(dt,tick)] + 00000084-0000-0000-0000-000000000000 + 0000007a-0000-0000-0000-000000000000 + + + 0000007b-0000-0000-0000-000000000000 + [after(dt,tick)] + 0000007f-0000-0000-0000-000000000000 + 00000083-0000-0000-0000-000000000000 + + + 00000085-0000-0000-0000-000000000000 + [BRx == 1 || ... +BRx == 2] + 00000083-0000-0000-0000-000000000000 + 00000084-0000-0000-0000-000000000000 + + + + + a8643d72-a8cf-4630-a859-739c975bc40c + BRx + + 0 + + + + c634e3f8-75b4-40f9-b8e1-1fbe167edda9 + BxG0 + + 0 + + + + e6a69bb2-2ad0-4b0c-85c0-1fa7d7ccccf5 + BxG1 + + 0 + + + + e04d08ad-341d-42f3-b9c8-f09ce325d8c1 + BxG2 + + 0 + + + + 01ff732c-4d5a-4db9-9852-cae6eb2f8a71 + BxG3 + + 0 + + + + 204d00a4-17b0-4799-88e1-e66470ea1f93 + dt + + 0 + + + + + \ No newline at end of file diff --git a/src/Stater/TestSave.cs b/src/Stater/TestSave.cs index 1432e98..541cd52 100644 --- a/src/Stater/TestSave.cs +++ b/src/Stater/TestSave.cs @@ -18,14 +18,31 @@ public static void main() var stateMachine1 = new StateMachine(); - var state1 = new State(); - state1 = state1 with + var start = new State(); + start = start with { - Name = "A", + Name = "Start", Type = StateType.Start }; + stateMachine1.States.Add(start); - stateMachine1.States.Add(state1); + var end = new State(); + end = end with + { + Name = "End", + Type = StateType.End + }; + + var transition = new Transition(); + transition = transition with + { + Start = start.Guid, + End = end.Guid, + Condition = new Condition.VariableCondition() + }; + + stateMachine1.States.Add(end); + stateMachine1.Transitions.Add(transition); var exportProject = new ExportProject( project, diff --git a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs index 5a99ec8..6f3da0a 100644 --- a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs @@ -43,34 +43,34 @@ public StateEditorViewModel(IStateEditor stateEditor, IProjectManager projectMan Console.WriteLine(e); } }); - - if (State != null) - projectManager - .StateMachine - .Subscribe(x => - { - AllStates = x.States; - Transitions = x.Transitions - .Where(t => t.Start == State?.Guid || t.End == State?.Guid) - .Select(y => - { - var startState = x.States.Find(s => s.Guid == y.Start); - var endState = x.States.Find(s => s.Guid == y.End); - if (startState != null && endState != null) - return new AssociateTransition( - Transition: y, - StartPoint: new Point(startState.X, startState.Y), - EndPoint: new Point(endState.X, endState.Y), - Start: startState, - End: endState - ); - return null; - } - ) - .Where(y => y != null) - .OfType() - .ToList(); - }); + + projectManager + .StateMachine + .Subscribe(x => + { + AllStates = x.States; + Transitions = x.Transitions + .Where(t => t.Start == State?.Guid || t.End == State?.Guid) + .Select(y => + { + var startState = x.States.Find(s => s.Guid == y.Start); + var endState = x.States.Find(s => s.Guid == y.End); + if (startState != null && endState != null) + return new AssociateTransition( + Transition: y, + StartPoint: new Point(startState.X, startState.Y), + EndPoint: new Point(endState.X, endState.Y), + Start: startState, + End: endState + ); + return null; + } + ) + .Where(y => y != null) + .OfType() + .ToList(); + }); + AddTransitionCommand = ReactiveCommand.Create(AddTransition); RemoveTransitionCommand = ReactiveCommand.Create(RemoveTransition); diff --git a/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs b/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs index b3297a0..ad28c16 100644 --- a/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs @@ -3,6 +3,7 @@ using System.Collections.ObjectModel; using System.Reactive.Linq; using System.Windows.Input; +using Avalonia.Controls; using ReactiveUI; using ReactiveUI.Fody.Helpers; using Stater.Models; @@ -34,25 +35,37 @@ public TransitionEditorViewModel(ITransitionEditor transitionEditor, IProjectMan Value = null; VariableMath = null; - MathType = null; + MathType = 0; EventValue = null; - if (condition is Condition.VariableCondition) + if (condition is Condition.VariableCondition variableCondition) { - var t = (Condition.VariableCondition)condition; - Condition = t.ConditionType.ToString(); - Variable = t.VariableGuid.ToString(); - Value = t.Value.ToString(); + Condition = variableCondition.ConditionType switch + { + Models.Condition.VariableCondition.ConditionTypeEnum.Lt => 0, + Models.Condition.VariableCondition.ConditionTypeEnum.Le => 0, + Models.Condition.VariableCondition.ConditionTypeEnum.Ne => 1, + Models.Condition.VariableCondition.ConditionTypeEnum.Gt => 2, + Models.Condition.VariableCondition.ConditionTypeEnum.Ge => 3, + _ => 0, + }; + Console.WriteLine(Condition); + + Variable = variableCondition.VariableGuid.ToString(); + Value = variableCondition.Value.ToString(); } - var event_ = x.Event; - - if (event_ is Event.VariableMath) + if (x.Event is Event.VariableMath math) { - var t = (Event.VariableMath)event_; - VariableMath = t.VariableGuid.ToString(); - MathType = t.MathType.ToString(); - EventValue = t.Value.ToString(); + VariableMath = math.VariableGuid.ToString(); + MathType = math.MathType switch + { + Event.VariableMath.MathTypeEnum.Div => 0, + Event.VariableMath.MathTypeEnum.Sub => 1, + Event.VariableMath.MathTypeEnum.Sum => 2, + _ => 3, + }; + EventValue = math.Value.ToString(); } } catch (Exception e) @@ -75,12 +88,14 @@ public TransitionEditorViewModel(ITransitionEditor transitionEditor, IProjectMan [Reactive] public List Variables { get; set; } [Reactive] public string Variable { get; set; } - [Reactive] public string Condition { get; set; } + + [Reactive] public int? Condition { get; set; } + [Reactive] public string Value { get; set; } [Reactive] public string VariableMath { get; set; } - [Reactive] public string MathType { get; set; } + [Reactive] public int MathType { get; set; } [Reactive] public string EventValue { get; set; } public ICommand SaveCommand { get; } @@ -93,13 +108,15 @@ private void Save() if (Variable != null && Value != null) { + Console.WriteLine(Condition); var type = Condition switch { - "<" => Models.Condition.VariableCondition.ConditionTypeEnum.Lt, - "<=" => Models.Condition.VariableCondition.ConditionTypeEnum.Le, - "==" => Models.Condition.VariableCondition.ConditionTypeEnum.Eq, - "!=" => Models.Condition.VariableCondition.ConditionTypeEnum.Ne, - ">" => Models.Condition.VariableCondition.ConditionTypeEnum.Gt, + 4 => Models.Condition.VariableCondition.ConditionTypeEnum.Lt, + 5 => Models.Condition.VariableCondition.ConditionTypeEnum.Le, + 0 => Models.Condition.VariableCondition.ConditionTypeEnum.Eq, + 1 => Models.Condition.VariableCondition.ConditionTypeEnum.Ne, + 2 => Models.Condition.VariableCondition.ConditionTypeEnum.Gt, + 3 => Models.Condition.VariableCondition.ConditionTypeEnum.Ge, _ => Models.Condition.VariableCondition.ConditionTypeEnum.Ge, }; condition = new Condition.VariableCondition( @@ -113,9 +130,9 @@ private void Save() { var type = MathType switch { - "+" => Event.VariableMath.MathTypeEnum.Sum, - "-" => Event.VariableMath.MathTypeEnum.Sub, - "*" => Event.VariableMath.MathTypeEnum.Mul, + 0 => Event.VariableMath.MathTypeEnum.Sum, + 1 => Event.VariableMath.MathTypeEnum.Sub, + 2 => Event.VariableMath.MathTypeEnum.Mul, _ => Event.VariableMath.MathTypeEnum.Div, }; @event = new Event.VariableMath( diff --git a/src/Stater/Views/Editors/TransitionEditor.axaml b/src/Stater/Views/Editors/TransitionEditor.axaml index 3eae0f3..822235a 100644 --- a/src/Stater/Views/Editors/TransitionEditor.axaml +++ b/src/Stater/Views/Editors/TransitionEditor.axaml @@ -23,9 +23,9 @@ Condition: - + - + == != > @@ -43,7 +43,7 @@ - + + - * @@ -51,8 +51,7 @@ - - + \ No newline at end of file From 6c95f7e895637520055934e2522d718cf822ab2f Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 23 Mar 2025 17:22:52 +0300 Subject: [PATCH 27/69] Move into projects --- Stater.sln | 34 +- Stater.sln.DotSettings.user | 9 +- .../DoorStateMachineTestData.cs | 135 ++++++ .../Kotlin/KotlinAdapterDoorTests.cs | 120 ++++++ .../Stater.CodeGeneration.Tests.csproj | 18 + src/Stater.CodeGeneration/CodeGenerator.cs | 16 + .../Entity/GenerationSettings.cs | 9 + src/Stater.CodeGeneration/Entity/Language.cs | 13 + src/Stater.CodeGeneration/Entity/Mode.cs | 6 + .../LanguageAdapter/Base/ILanguageAdapter.cs | 9 + .../LanguageAdapter/Base/TemplateLoader.cs | 18 + .../LanguageAdapter/Java/JavaGenerator.cs | 8 + .../LanguageAdapter/Kotlin/KotlinAdapter.cs | 70 +++ .../Stater.CodeGeneration.csproj | 27 ++ .../Templates/Kotlin/builder.scriban | 41 ++ .../Templates/Kotlin/builderContext.scriban | 41 ++ .../Templates/Kotlin/builderState.scriban | 41 ++ .../Kotlin/builderStateContext.scriban | 41 ++ .../Templates/Kotlin/class.scriban | 19 + .../Templates/Kotlin/classContext.scriban | 41 ++ .../Templates/Kotlin/classState.scriban | 41 ++ .../Kotlin/classStateContext.scriban | 41 ++ .../Logic}/ConditionLogic.cs | 10 +- .../Logic}/EventLogic.cs | 6 +- .../Models/Condition.cs | 3 +- src/{Stater => Stater.Domain}/Models/Event.cs | 10 +- src/{Stater => Stater.Domain}/Models/State.cs | 5 +- src/Stater.Domain/Models/StateMachine.cs | 49 +++ src/Stater.Domain/Models/StateTransition.cs | 7 + .../Models/Transition.cs | 6 +- .../Models/Variable.cs | 4 +- .../Stater.Domain.csproj} | 1 + src/Stater.SLXParser/Models/BaseNode.cs | 7 + src/Stater.SLXParser/Models/Chart.cs | 22 + src/Stater.SLXParser/Models/Data.cs | 28 ++ src/Stater.SLXParser/Models/Instance.cs | 6 + src/Stater.SLXParser/Models/Machine.cs | 7 + src/Stater.SLXParser/Models/SlxState.cs | 27 ++ src/Stater.SLXParser/Models/SlxTransition.cs | 25 ++ src/Stater.SLXParser/Models/Stateflow.cs | 7 + .../SLXParser => Stater.SLXParser}/Parser.cs | 28 +- .../Stater.SLXParser.csproj} | 8 +- .../TestData/BR_GATES_HDL.slx | Bin .../Translator.cs | 38 +- src/Stater.SLXParser/Utils/Color.cs | 15 + src/Stater.SLXParser/Utils/Point2D.cs | 38 ++ src/Stater/App.axaml.cs | 1 - src/Stater/Models/AssociateTransition.cs | 8 + src/Stater/Models/Editors/IEditorManager.cs | 1 + src/Stater/Models/Editors/IStateEditor.cs | 1 + .../Models/Editors/IStateMachineEditor.cs | 1 + .../Models/Editors/ITransitionEditor.cs | 2 +- src/Stater/Models/Editors/IVariableEditor.cs | 1 + .../Models/Editors/impl/EditorManager.cs | 1 + src/Stater/Models/Editors/impl/StateEditor.cs | 1 + .../Models/Editors/impl/StateMachineEditor.cs | 1 + .../Models/Editors/impl/TransitionEditor.cs | 1 + .../Models/Editors/impl/VariableEditor.cs | 1 + src/Stater/Models/Executor/IExecutor.cs | 3 +- src/Stater/Models/Executor/impl/Executor.cs | 3 +- src/Stater/Models/IProjectManager.cs | 4 +- src/Stater/Models/Project.cs | 4 +- src/Stater/Models/StateMachine.cs | 28 -- src/Stater/Models/impl/ProjectManager.cs | 1 + src/Stater/Plugin/PluginInput.cs | 1 + src/Stater/Plugin/PluginOutput.cs | 2 +- src/Stater/{SLXParser => Plugin}/SLXPlugin.cs | 6 +- src/Stater/SLXParser/Data/BaseNode.cs | 10 - src/Stater/SLXParser/Data/Chart.cs | 24 -- src/Stater/SLXParser/Data/Data.cs | 29 -- src/Stater/SLXParser/Data/Instance.cs | 7 - src/Stater/SLXParser/Data/Machine.cs | 8 - src/Stater/SLXParser/Data/State.cs | 29 -- src/Stater/SLXParser/Data/Stateflow.cs | 8 - src/Stater/SLXParser/Data/Transition.cs | 27 -- src/Stater/SLXParser/Program.cs | 18 - src/Stater/SLXParser/Utils/Color.cs | 16 - src/Stater/SLXParser/Utils/Point2D.cs | 39 -- src/Stater/Stater.csproj | 35 +- src/Stater/TestSave.cs | 6 +- .../ViewModels/Board/BoardCanvasViewModel.cs | 1 + .../Editors/StateEditorViewModel.cs | 1 + .../Editors/StateMachineEditorViewModel.cs | 2 +- .../Editors/TransitionEditorViewModel.cs | 28 +- .../Editors/VariableEditorViewModel.cs | 2 +- .../Execution/VariablesViewModel.cs | 1 + src/Stater/ViewModels/MainWindowViewModel.cs | 4 +- src/Stater/Views/Board/BoardCanvas.axaml | 4 +- src/Stater/Views/Board/BoardCanvas.axaml.cs | 1 + src/Stater/Views/Editors/StateEditor.axaml.cs | 1 - .../Views/Editors/StateMachineEditor.axaml.cs | 3 - .../Views/Editors/VariableEditor.axaml.cs | 2 - .../Views/Execution/ExecutionGroup.axaml.cs | 2 - src/plugins/CFuncGenerator/CGenerator.cs | 196 --------- src/plugins/CFuncGenerator/CPlugin.cs | 19 - src/plugins/CSharpCodeGenerator/Plugin.cs | 399 ------------------ src/plugins/SLXParser/SLXParser.csproj | 21 - 97 files changed, 1146 insertions(+), 1024 deletions(-) create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj create mode 100644 src/Stater.CodeGeneration/CodeGenerator.cs create mode 100644 src/Stater.CodeGeneration/Entity/GenerationSettings.cs create mode 100644 src/Stater.CodeGeneration/Entity/Language.cs create mode 100644 src/Stater.CodeGeneration/Entity/Mode.cs create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/Base/ILanguageAdapter.cs create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/Java/JavaGenerator.cs create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs create mode 100644 src/Stater.CodeGeneration/Stater.CodeGeneration.csproj create mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/builder.scriban create mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/builderContext.scriban create mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/builderState.scriban create mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/builderStateContext.scriban create mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/class.scriban create mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/classContext.scriban create mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/classState.scriban create mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/classStateContext.scriban rename src/{Stater/Models => Stater.Domain/Logic}/ConditionLogic.cs (86%) rename src/{Stater/Models => Stater.Domain/Logic}/EventLogic.cs (93%) rename src/{Stater => Stater.Domain}/Models/Condition.cs (93%) rename src/{Stater => Stater.Domain}/Models/Event.cs (77%) rename src/{Stater => Stater.Domain}/Models/State.cs (85%) create mode 100644 src/Stater.Domain/Models/StateMachine.cs create mode 100644 src/Stater.Domain/Models/StateTransition.cs rename src/{Stater => Stater.Domain}/Models/Transition.cs (74%) rename src/{Stater => Stater.Domain}/Models/Variable.cs (99%) rename src/{plugins/CFuncGenerator/CFuncGenerator.csproj => Stater.Domain/Stater.Domain.csproj} (80%) create mode 100644 src/Stater.SLXParser/Models/BaseNode.cs create mode 100644 src/Stater.SLXParser/Models/Chart.cs create mode 100644 src/Stater.SLXParser/Models/Data.cs create mode 100644 src/Stater.SLXParser/Models/Instance.cs create mode 100644 src/Stater.SLXParser/Models/Machine.cs create mode 100644 src/Stater.SLXParser/Models/SlxState.cs create mode 100644 src/Stater.SLXParser/Models/SlxTransition.cs create mode 100644 src/Stater.SLXParser/Models/Stateflow.cs rename src/{Stater/SLXParser => Stater.SLXParser}/Parser.cs (96%) rename src/{plugins/CSharpCodeGenerator/CSharpCodeGenerator.csproj => Stater.SLXParser/Stater.SLXParser.csproj} (77%) rename src/{Stater/SLXParser => Stater.SLXParser}/TestData/BR_GATES_HDL.slx (100%) rename src/{Stater/SLXParser => Stater.SLXParser}/Translator.cs (77%) create mode 100644 src/Stater.SLXParser/Utils/Color.cs create mode 100644 src/Stater.SLXParser/Utils/Point2D.cs delete mode 100644 src/Stater/Models/StateMachine.cs rename src/Stater/{SLXParser => Plugin}/SLXPlugin.cs (86%) delete mode 100644 src/Stater/SLXParser/Data/BaseNode.cs delete mode 100644 src/Stater/SLXParser/Data/Chart.cs delete mode 100644 src/Stater/SLXParser/Data/Data.cs delete mode 100644 src/Stater/SLXParser/Data/Instance.cs delete mode 100644 src/Stater/SLXParser/Data/Machine.cs delete mode 100644 src/Stater/SLXParser/Data/State.cs delete mode 100644 src/Stater/SLXParser/Data/Stateflow.cs delete mode 100644 src/Stater/SLXParser/Data/Transition.cs delete mode 100644 src/Stater/SLXParser/Program.cs delete mode 100644 src/Stater/SLXParser/Utils/Color.cs delete mode 100644 src/Stater/SLXParser/Utils/Point2D.cs delete mode 100644 src/plugins/CFuncGenerator/CGenerator.cs delete mode 100644 src/plugins/CFuncGenerator/CPlugin.cs delete mode 100644 src/plugins/CSharpCodeGenerator/Plugin.cs delete mode 100644 src/plugins/SLXParser/SLXParser.csproj diff --git a/Stater.sln b/Stater.sln index a404e19..e13fb41 100644 --- a/Stater.sln +++ b/Stater.sln @@ -51,9 +51,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CFuncGenerator1", "CFuncGen EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater", "src\Stater\Stater.csproj", "{EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpCodeGenerator", "src\plugins\CSharpCodeGenerator\CSharpCodeGenerator.csproj", "{1FEC7964-E23A-4C78-99BC-13EFB4A55583}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.CodeGeneration.Tests", "src\Stater.CodeGeneration.Tests\Stater.CodeGeneration.Tests.csproj", "{879047E1-76DD-4892-AF8F-8EC562514AD7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CFuncGenerator", "src\plugins\CFuncGenerator\CFuncGenerator.csproj", "{D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.Domain", "src\Stater.Domain\Stater.Domain.csproj", "{3A09EFE1-C88B-46E6-B0C8-00F7A9D00795}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.CodeGeneration", "src\Stater.CodeGeneration\Stater.CodeGeneration.csproj", "{E7786CE3-7E88-456D-ADFE-11035E842ABB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.SLXParser", "src\Stater.SLXParser\Stater.SLXParser.csproj", "{1CE08542-B4A2-4632-A066-68462E0BC603}" EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution @@ -140,14 +144,22 @@ Global {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Debug|Any CPU.Build.0 = Debug|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Release|Any CPU.ActiveCfg = Release|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Release|Any CPU.Build.0 = Release|Any CPU - {1FEC7964-E23A-4C78-99BC-13EFB4A55583}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1FEC7964-E23A-4C78-99BC-13EFB4A55583}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1FEC7964-E23A-4C78-99BC-13EFB4A55583}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1FEC7964-E23A-4C78-99BC-13EFB4A55583}.Release|Any CPU.Build.0 = Release|Any CPU - {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93}.Release|Any CPU.Build.0 = Release|Any CPU + {879047E1-76DD-4892-AF8F-8EC562514AD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {879047E1-76DD-4892-AF8F-8EC562514AD7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {879047E1-76DD-4892-AF8F-8EC562514AD7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {879047E1-76DD-4892-AF8F-8EC562514AD7}.Release|Any CPU.Build.0 = Release|Any CPU + {3A09EFE1-C88B-46E6-B0C8-00F7A9D00795}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A09EFE1-C88B-46E6-B0C8-00F7A9D00795}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A09EFE1-C88B-46E6-B0C8-00F7A9D00795}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A09EFE1-C88B-46E6-B0C8-00F7A9D00795}.Release|Any CPU.Build.0 = Release|Any CPU + {E7786CE3-7E88-456D-ADFE-11035E842ABB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7786CE3-7E88-456D-ADFE-11035E842ABB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7786CE3-7E88-456D-ADFE-11035E842ABB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7786CE3-7E88-456D-ADFE-11035E842ABB}.Release|Any CPU.Build.0 = Release|Any CPU + {1CE08542-B4A2-4632-A066-68462E0BC603}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1CE08542-B4A2-4632-A066-68462E0BC603}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1CE08542-B4A2-4632-A066-68462E0BC603}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1CE08542-B4A2-4632-A066-68462E0BC603}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -164,7 +176,5 @@ Global {5E9FF3AA-0784-4B4A-BCD2-9CCBC39D4D66} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {09FED13A-1642-496C-AE3F-F0A2770BE9A2} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} {EA67DB8A-BB10-4343-87A0-E91EDD783C8B} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {1FEC7964-E23A-4C78-99BC-13EFB4A55583} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {D6FCD3EA-3037-4EC4-B12A-ACB6B84E4D93} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} EndGlobalSection EndGlobal diff --git a/Stater.sln.DotSettings.user b/Stater.sln.DotSettings.user index f1837b3..b17c6e5 100644 --- a/Stater.sln.DotSettings.user +++ b/Stater.sln.DotSettings.user @@ -5,7 +5,14 @@ False SOLUTION + <SessionState ContinuousTestingMode="0" IsActive="True" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests.ClazGenerate</TestId> + </TestAncestor> +</SessionState> True True TestArrayW1 - <Session><Elements /></Session> \ No newline at end of file + <Session><Elements /></Session> + + True \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs new file mode 100644 index 0000000..cb6aa67 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs @@ -0,0 +1,135 @@ +using System.Collections; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class DoorStateMachineTestData : IEnumerable +{ + public IEnumerator GetEnumerator() + { + var open = new State( + Guid.NewGuid(), + "OPEN", + "Open door", + StateType.Start, + 0, + 0, + new List(), + new List() + ); + + var close = new State( + Guid.NewGuid(), + "CLOSE", + "Close door", + StateType.End, + 0, + 0, + new List(), + new List() + ); + + var ajar = new State( + Guid.NewGuid(), + "AJAR", + "Ajar door", + StateType.Common, + 0, + 0, + new List(), + new List() + ); + + var states = new List + { + open, ajar, close + }; + + var degreeOfOpening = new Variable( + Guid.NewGuid(), + "degreeOfOpening", + new VariableValue.IntVariable(0) + ); + + + var preOpen = new Transition( + Guid.NewGuid(), + "preOpen", + close.Guid, + ajar.Guid, + null, + new Event.VariableSet(degreeOfOpening.Guid, new VariableValue.IntVariable(1)) + ); + + var preClose = new Transition( + Guid.NewGuid(), + "preClose", + open.Guid, + ajar.Guid, + null, + new Event.VariableSet(degreeOfOpening.Guid, new VariableValue.IntVariable(99)) + ); + + var openEvent = new Transition( + Guid.NewGuid(), + "open", + ajar.Guid, + open.Guid, + new Condition.VariableCondition(degreeOfOpening.Guid, Condition.VariableCondition.ConditionTypeEnum.Ge, + new VariableValue.IntVariable(99)), + new Event.VariableSet(degreeOfOpening.Guid, new VariableValue.IntVariable(100)) + ); + + var closeEvent = new Transition( + Guid.NewGuid(), + "close", + ajar.Guid, + close.Guid, + new Condition.VariableCondition(degreeOfOpening.Guid, Condition.VariableCondition.ConditionTypeEnum.Le, + new VariableValue.IntVariable(1)), + new Event.VariableSet(degreeOfOpening.Guid, new VariableValue.IntVariable(0)) + ); + + var ajarPlus = new Transition( + Guid.NewGuid(), + "ajarPlus", + ajar.Guid, + ajar.Guid, + null, // TODO + new Event.VariableMath(degreeOfOpening.Guid, Event.VariableMath.MathTypeEnum.Sum, + new VariableValue.IntVariable(1)) + ); + + var ajarMinus = new Transition( + Guid.NewGuid(), + "ajarMinus", + ajar.Guid, + ajar.Guid, + null, // TODO + new Event.VariableMath(degreeOfOpening.Guid, Event.VariableMath.MathTypeEnum.Sub, + new VariableValue.IntVariable(1)) + ); + + + var transitions = new List + { + preOpen, + preClose, + openEvent, + closeEvent, + ajarPlus, + ajarMinus + }; + + var stateMachine = new StateMachine( + Guid.NewGuid(), + "Door", + states, + transitions, + new List { degreeOfOpening } + ); + yield return new object[] { stateMachine }; + } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs new file mode 100644 index 0000000..aff1c06 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs @@ -0,0 +1,120 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Kotlin; +using Stater.Domain.Models; +using Xunit; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin; + + +public class KotlinAdapterDoorTests +{ + private readonly KotlinAdapter adapter = new(); + + [Theory] + [ClassData(typeof(DoorStateMachineTestData))] + public void ClazGenerate(StateMachine stateMachine) + { + var settings = new GenerationSettings( + Language.Kotlin, + Mode.Claz, + false, + false, + false + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = EmptyContext() + ) + """, result); + } + + [Theory] + [ClassData(typeof(DoorStateMachineTestData))] + public void ClazGenerateWithInterface(StateMachine stateMachine) + { + var settings = new GenerationSettings( + Language.Kotlin, + Mode.Claz, + false, + false, + true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = EmptyContext() + ) + """, result); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj b/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj new file mode 100644 index 0000000..068f71b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj @@ -0,0 +1,18 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + diff --git a/src/Stater.CodeGeneration/CodeGenerator.cs b/src/Stater.CodeGeneration/CodeGenerator.cs new file mode 100644 index 0000000..c6a8127 --- /dev/null +++ b/src/Stater.CodeGeneration/CodeGenerator.cs @@ -0,0 +1,16 @@ +using Stater.CodeGeneration.Entity; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration; + +public class CodeGenerator +{ + private CodeGenerator() + { + } + + static void Generate(StateMachine stateMachine, Language language) + { + + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Entity/GenerationSettings.cs b/src/Stater.CodeGeneration/Entity/GenerationSettings.cs new file mode 100644 index 0000000..951d35c --- /dev/null +++ b/src/Stater.CodeGeneration/Entity/GenerationSettings.cs @@ -0,0 +1,9 @@ +namespace Stater.CodeGeneration.Entity; + +public record GenerationSettings( + Language Language, + Mode Mode, + bool GenerateStates, + bool GenerateContext, + bool GenerateInterface +); \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Entity/Language.cs b/src/Stater.CodeGeneration/Entity/Language.cs new file mode 100644 index 0000000..9d6a279 --- /dev/null +++ b/src/Stater.CodeGeneration/Entity/Language.cs @@ -0,0 +1,13 @@ +namespace Stater.CodeGeneration.Entity; + +public enum Language +{ + Kotlin, + Java, + CSharp, + Python3, + JavaScript, + TypeScript, + C, + CPlusPlus +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Entity/Mode.cs b/src/Stater.CodeGeneration/Entity/Mode.cs new file mode 100644 index 0000000..b54a1be --- /dev/null +++ b/src/Stater.CodeGeneration/Entity/Mode.cs @@ -0,0 +1,6 @@ +namespace Stater.CodeGeneration.Entity; + +public enum Mode +{ + Claz, Builder +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/ILanguageAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/ILanguageAdapter.cs new file mode 100644 index 0000000..4e7fc51 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/ILanguageAdapter.cs @@ -0,0 +1,9 @@ +using Stater.CodeGeneration.Entity; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.LanguageAdapter.Base; + +public interface ILanguageAdapter +{ + string Generate(StateMachine stateMachine, GenerationSettings settings); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs new file mode 100644 index 0000000..5d9d4a4 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs @@ -0,0 +1,18 @@ +using System.Reflection; + +namespace Stater.CodeGeneration.LanguageAdapter.Base; + +public static class TemplateLoader +{ + public static string LoadTemplate(string templateName) + { + var resourceName = $"Stater.CodeGeneration.Templates.{templateName}.scriban"; + + using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName); + if (stream == null) + throw new FileNotFoundException($"Template {templateName} not found"); + + using var reader = new StreamReader(stream); + return reader.ReadToEnd(); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Java/JavaGenerator.cs b/src/Stater.CodeGeneration/LanguageAdapter/Java/JavaGenerator.cs new file mode 100644 index 0000000..54f5368 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/Java/JavaGenerator.cs @@ -0,0 +1,8 @@ +namespace Stater.CodeGeneration.LanguageAdapter.Java; + +// public class JavaGenerator : ILanguageCodeGenerator +// { +// public void Generate(StateMachine stateMachine) +// { +// } +// } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs new file mode 100644 index 0000000..645d161 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs @@ -0,0 +1,70 @@ +using Scriban; +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.LanguageAdapter.Kotlin; + +public class KotlinAdapter : ILanguageAdapter +{ + public string Generate(StateMachine stateMachine, GenerationSettings settings) + { + switch (settings.Mode) + { + case Mode.Claz when settings is { GenerateContext: true, GenerateStates: true }: + return GenerateClassStateContext(stateMachine, settings.GenerateInterface); + case Mode.Claz when settings.GenerateStates: + return GenerateClassState(stateMachine, settings.GenerateInterface); + case Mode.Claz when settings.GenerateContext: + return GenerateClassState(stateMachine, settings.GenerateInterface); + case Mode.Claz: + return GenerateClass(stateMachine, settings.GenerateInterface); + case Mode.Builder: + break; + default: + throw new ArgumentOutOfRangeException(nameof(settings)); + } + + return ""; + } + + private static string GenerateClass(StateMachine stateMachine, bool generateInterface) + { + var templateContent = TemplateLoader.LoadTemplate("Kotlin.class"); + var template = Template.Parse(templateContent); + return template.Render(new + { + fsm = stateMachine, generateInterface + }); + } + + private static string GenerateClassContext(StateMachine stateMachine, bool generateInterface) + { + var templateContent = TemplateLoader.LoadTemplate("Kotlin.classContext"); + var template = Template.Parse(templateContent); + return template.Render(new + { + fsm = stateMachine, generateInterface + }); + } + + private static string GenerateClassState(StateMachine stateMachine, bool generateInterface) + { + var templateContent = TemplateLoader.LoadTemplate("Kotlin.classState"); + var template = Template.Parse(templateContent); + return template.Render(new + { + fsm = stateMachine, generateInterface + }); + } + + private static string GenerateClassStateContext(StateMachine stateMachine, bool generateInterface) + { + var templateContent = TemplateLoader.LoadTemplate("Kotlin.classStateContext"); + var template = Template.Parse(templateContent); + return template.Render(new + { + fsm = stateMachine, generateInterface + }); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj new file mode 100644 index 0000000..3e288d3 --- /dev/null +++ b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + net8.0 + enable + enable + + + diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/builder.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/builder.scriban new file mode 100644 index 0000000..ab2a15d --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/Kotlin/builder.scriban @@ -0,0 +1,41 @@ +class {{ fsm.name }}StateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + states = listOf( + "OPEN", + "CLOSE", + "AJAR" + ), + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/builderContext.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/builderContext.scriban new file mode 100644 index 0000000..ab2a15d --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/Kotlin/builderContext.scriban @@ -0,0 +1,41 @@ +class {{ fsm.name }}StateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + states = listOf( + "OPEN", + "CLOSE", + "AJAR" + ), + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/builderState.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/builderState.scriban new file mode 100644 index 0000000..ab2a15d --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/Kotlin/builderState.scriban @@ -0,0 +1,41 @@ +class {{ fsm.name }}StateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + states = listOf( + "OPEN", + "CLOSE", + "AJAR" + ), + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/builderStateContext.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/builderStateContext.scriban new file mode 100644 index 0000000..ab2a15d --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/Kotlin/builderStateContext.scriban @@ -0,0 +1,41 @@ +class {{ fsm.name }}StateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + states = listOf( + "OPEN", + "CLOSE", + "AJAR" + ), + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/class.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/class.scriban new file mode 100644 index 0000000..d4846c3 --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/Kotlin/class.scriban @@ -0,0 +1,19 @@ +class {{ fsm.name }}StateMachine : StaterStateMachine( + transitions = listOf( + {{- for item in fsm.state_transitions }} + Transition( + name = "{{ item.transition.name }}", + start = "{{ item.start_state.name }}", + end = "{{ item.end_state.name }}" + ){{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ), + {{- if fsm.start_state != null }} + startState = "{{ fsm.start_state.name }}", + {{- end }} + context = EmptyContext() +) { + {{- for item in fsm.transitions }} + fun {{ item.name }}() = transition("{{ item.name }}") + {{- end }} +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/classContext.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/classContext.scriban new file mode 100644 index 0000000..ab2a15d --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/Kotlin/classContext.scriban @@ -0,0 +1,41 @@ +class {{ fsm.name }}StateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + states = listOf( + "OPEN", + "CLOSE", + "AJAR" + ), + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/classState.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/classState.scriban new file mode 100644 index 0000000..ab2a15d --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/Kotlin/classState.scriban @@ -0,0 +1,41 @@ +class {{ fsm.name }}StateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + states = listOf( + "OPEN", + "CLOSE", + "AJAR" + ), + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/classStateContext.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/classStateContext.scriban new file mode 100644 index 0000000..ab2a15d --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/Kotlin/classStateContext.scriban @@ -0,0 +1,41 @@ +class {{ fsm.name }}StateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + states = listOf( + "OPEN", + "CLOSE", + "AJAR" + ), + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater/Models/ConditionLogic.cs b/src/Stater.Domain/Logic/ConditionLogic.cs similarity index 86% rename from src/Stater/Models/ConditionLogic.cs rename to src/Stater.Domain/Logic/ConditionLogic.cs index b1e03f4..2f52b0f 100644 --- a/src/Stater/Models/ConditionLogic.cs +++ b/src/Stater.Domain/Logic/ConditionLogic.cs @@ -1,14 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using Stater.Domain.Models; -namespace Stater.Models; +namespace Stater.Domain.Logic; public static class ConditionLogic { - private static VariableValue GetValueByVariable(Guid Guid, IDictionary variables) + private static VariableValue GetValueByVariable(Guid guid, IDictionary variables) { - var variable = variables.Keys.First(v => v == Guid); + var variable = variables.Keys.First(v => v == guid); return variables[variable]; } diff --git a/src/Stater/Models/EventLogic.cs b/src/Stater.Domain/Logic/EventLogic.cs similarity index 93% rename from src/Stater/Models/EventLogic.cs rename to src/Stater.Domain/Logic/EventLogic.cs index e88258e..2334465 100644 --- a/src/Stater/Models/EventLogic.cs +++ b/src/Stater.Domain/Logic/EventLogic.cs @@ -1,8 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using Stater.Domain.Models; -namespace Stater.Models; +namespace Stater.Domain.Logic; public class EventLogic { diff --git a/src/Stater/Models/Condition.cs b/src/Stater.Domain/Models/Condition.cs similarity index 93% rename from src/Stater/Models/Condition.cs rename to src/Stater.Domain/Models/Condition.cs index c03c084..1ddf5e4 100644 --- a/src/Stater/Models/Condition.cs +++ b/src/Stater.Domain/Models/Condition.cs @@ -1,7 +1,6 @@ -using System; using System.Xml.Serialization; -namespace Stater.Models; +namespace Stater.Domain.Models; [XmlInclude(typeof(VariableCondition))] [Serializable] diff --git a/src/Stater/Models/Event.cs b/src/Stater.Domain/Models/Event.cs similarity index 77% rename from src/Stater/Models/Event.cs rename to src/Stater.Domain/Models/Event.cs index 766f944..13c4baf 100644 --- a/src/Stater/Models/Event.cs +++ b/src/Stater.Domain/Models/Event.cs @@ -1,7 +1,6 @@ -using System; using System.Xml.Serialization; -namespace Stater.Models; +namespace Stater.Domain.Models; [XmlInclude(typeof(VariableMath))] [Serializable] @@ -25,4 +24,11 @@ public VariableMath() : this(Guid.Empty, MathTypeEnum.Sum, null) { } } + + public record VariableSet( + Guid VariableGuid, + VariableValue Value + ) : Event + { + } } \ No newline at end of file diff --git a/src/Stater/Models/State.cs b/src/Stater.Domain/Models/State.cs similarity index 85% rename from src/Stater/Models/State.cs rename to src/Stater.Domain/Models/State.cs index acd60d4..8f94a5e 100644 --- a/src/Stater/Models/State.cs +++ b/src/Stater.Domain/Models/State.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; - -namespace Stater.Models; +namespace Stater.Domain.Models; public enum StateType { diff --git a/src/Stater.Domain/Models/StateMachine.cs b/src/Stater.Domain/Models/StateMachine.cs new file mode 100644 index 0000000..22be4c9 --- /dev/null +++ b/src/Stater.Domain/Models/StateMachine.cs @@ -0,0 +1,49 @@ +namespace Stater.Domain.Models; + +public record StateMachine( + Guid Guid, + string Name, + List States, + List Transitions, + List Variables +) +{ + public StateMachine() : this( + Guid.NewGuid(), + "", + new List(), + new List(), + new List() + ) + { + } + + public State? StartState + { + get { return States.Find(x => x.Type == StateType.Start); } + } + + public List StateTransitions + { + get + { + return Transitions + .Select(y => + { + var startState = States.Find(s => s.Guid == y.Start); + var endState = States.Find(s => s.Guid == y.End); + if (startState != null && endState != null) + return new StateTransition( + Transition: y, + StartState: startState, + EndState: endState + ); + return null; + } + ) + .Where(item => item != null) + .Cast() + .ToList(); + } + } +} \ No newline at end of file diff --git a/src/Stater.Domain/Models/StateTransition.cs b/src/Stater.Domain/Models/StateTransition.cs new file mode 100644 index 0000000..78e89e5 --- /dev/null +++ b/src/Stater.Domain/Models/StateTransition.cs @@ -0,0 +1,7 @@ +namespace Stater.Domain.Models; + +public record StateTransition( + State StartState, + State EndState, + Transition Transition +); \ No newline at end of file diff --git a/src/Stater/Models/Transition.cs b/src/Stater.Domain/Models/Transition.cs similarity index 74% rename from src/Stater/Models/Transition.cs rename to src/Stater.Domain/Models/Transition.cs index 33089db..19976c6 100644 --- a/src/Stater/Models/Transition.cs +++ b/src/Stater.Domain/Models/Transition.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using Avalonia.Animation; - -namespace Stater.Models; +namespace Stater.Domain.Models; public record Transition( Guid Guid, diff --git a/src/Stater/Models/Variable.cs b/src/Stater.Domain/Models/Variable.cs similarity index 99% rename from src/Stater/Models/Variable.cs rename to src/Stater.Domain/Models/Variable.cs index 5fe847e..0c7289b 100644 --- a/src/Stater/Models/Variable.cs +++ b/src/Stater.Domain/Models/Variable.cs @@ -1,9 +1,7 @@ -using System; using System.Globalization; -using System.Linq; using System.Xml.Serialization; -namespace Stater.Models; +namespace Stater.Domain.Models; public record Variable( Guid Guid, diff --git a/src/plugins/CFuncGenerator/CFuncGenerator.csproj b/src/Stater.Domain/Stater.Domain.csproj similarity index 80% rename from src/plugins/CFuncGenerator/CFuncGenerator.csproj rename to src/Stater.Domain/Stater.Domain.csproj index 3a63532..825b107 100644 --- a/src/plugins/CFuncGenerator/CFuncGenerator.csproj +++ b/src/Stater.Domain/Stater.Domain.csproj @@ -4,6 +4,7 @@ net8.0 enable enable + Stater.Domain diff --git a/src/Stater.SLXParser/Models/BaseNode.cs b/src/Stater.SLXParser/Models/BaseNode.cs new file mode 100644 index 0000000..6abbe65 --- /dev/null +++ b/src/Stater.SLXParser/Models/BaseNode.cs @@ -0,0 +1,7 @@ +namespace Stater.SLXParser.Models; + +public class BaseNode +{ + // id или SSID + public Guid Id { get; set; } +} \ No newline at end of file diff --git a/src/Stater.SLXParser/Models/Chart.cs b/src/Stater.SLXParser/Models/Chart.cs new file mode 100644 index 0000000..ef1dd0d --- /dev/null +++ b/src/Stater.SLXParser/Models/Chart.cs @@ -0,0 +1,22 @@ +using Stater.SLXParser.Utils; + +namespace Stater.SLXParser.Models; + +public class Chart : BaseNode +{ + public string Name { get; set; } + public DoublePoint WindowPosition { get; set; } + public DoublePoint ViewLimits { get; set; } + public float ZoomFactor { get; set; } + public Color StateColor { get; set; } + public Color StateLabelColor { get; set; } + public Color TransitionColor { get; set; } + public Color TransitionLabelColor { get; set; } + public Color JunctionColor { get; set; } + public Color ChartColor { get; set; } + public int ViewObj { get; set; } + public bool Visible { get; set; } + + public List ChildrenState = new List(); + public List ChildrenData = new List(); +} \ No newline at end of file diff --git a/src/Stater.SLXParser/Models/Data.cs b/src/Stater.SLXParser/Models/Data.cs new file mode 100644 index 0000000..e3169fb --- /dev/null +++ b/src/Stater.SLXParser/Models/Data.cs @@ -0,0 +1,28 @@ +namespace Stater.SLXParser.Models; + +public class Data : BaseNode +{ + public string Name { get; set; } + public string Scope { get; set; } + public Props Props = new Props(); + public string DataType { get; set; } +} + +public class Props +{ + public string Frame { get; set; } + + // Type + public string TypeMethod { get; set; } + public string TypePrimitive { get; set; } + public int TypeWordLength { get; set; } + + // Type Fixpt + public string TypeFixptScalingMode { get; set; } + public int TypeFixptFractionLength { get; set; } + public string TypeFixptSlope { get; set; } + public int TypeFixptBias { get; set; } + + // Unit + public string UnitName { get; set; } +} \ No newline at end of file diff --git a/src/Stater.SLXParser/Models/Instance.cs b/src/Stater.SLXParser/Models/Instance.cs new file mode 100644 index 0000000..07192ce --- /dev/null +++ b/src/Stater.SLXParser/Models/Instance.cs @@ -0,0 +1,6 @@ +namespace Stater.SLXParser.Models; + +public class Instance : BaseNode +{ + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/Stater.SLXParser/Models/Machine.cs b/src/Stater.SLXParser/Models/Machine.cs new file mode 100644 index 0000000..ba70a0a --- /dev/null +++ b/src/Stater.SLXParser/Models/Machine.cs @@ -0,0 +1,7 @@ +namespace Stater.SLXParser.Models; + +public class Machine : BaseNode +{ + public Chart Chart { get; set; } + public string Created { get; set; } +} \ No newline at end of file diff --git a/src/Stater.SLXParser/Models/SlxState.cs b/src/Stater.SLXParser/Models/SlxState.cs new file mode 100644 index 0000000..643282e --- /dev/null +++ b/src/Stater.SLXParser/Models/SlxState.cs @@ -0,0 +1,27 @@ +using Stater.SLXParser.Utils; + +namespace Stater.SLXParser.Models; + +public class SlxState : BaseNode +{ + public string LabelString { get; set; } + public DoublePoint Position { get; set; } + public int FontSize { get; set; } + public bool Visible { get; set; } + public int Subviewer { get; set; } + public string Type { get; set; } + public string Decomposition { get; set; } + public int ExecutionOrder { get; set; } + + public static ActiveStateOutput ActiveStateOutput = new ActiveStateOutput(); + public List ChildrenState = new List(); + public List ChildrenTransition = new List(); +} + +public class ActiveStateOutput +{ + public bool UseCustomName { get; set; } + public string CustomName { get; set; } + public bool UseCustomEnumTypeName { get; set; } + public string EnumTypeName { get; set; } +} \ No newline at end of file diff --git a/src/Stater.SLXParser/Models/SlxTransition.cs b/src/Stater.SLXParser/Models/SlxTransition.cs new file mode 100644 index 0000000..64dcc50 --- /dev/null +++ b/src/Stater.SLXParser/Models/SlxTransition.cs @@ -0,0 +1,25 @@ +using Stater.SLXParser.Utils; + +namespace Stater.SLXParser.Models; + +public class SlxTransition : BaseNode +{ + public string LabelString { get; set; } + + public DoublePoint LabelPosition { get; set; } + public int FontSize { get; set; } + + public Address Src { get; set; } + public Address Dst { get; set; } + public Point2D MidPoint { get; set; } + public DoublePoint DataLimits { get; set; } + public int Subviewer { get; set; } + public string DrawStyle { get; set; } + public int ExecutionOrder { get; set; } +} + +public class Address +{ + public Guid SSID { get; set; } + public DoubleDoublePoint Intersection { get; set; } +} \ No newline at end of file diff --git a/src/Stater.SLXParser/Models/Stateflow.cs b/src/Stater.SLXParser/Models/Stateflow.cs new file mode 100644 index 0000000..82f0c2b --- /dev/null +++ b/src/Stater.SLXParser/Models/Stateflow.cs @@ -0,0 +1,7 @@ +namespace Stater.SLXParser.Models; + +public class Stateflow +{ + public Machine Machine { get; set; } + public Instance Instance { get; set; } +} \ No newline at end of file diff --git a/src/Stater/SLXParser/Parser.cs b/src/Stater.SLXParser/Parser.cs similarity index 96% rename from src/Stater/SLXParser/Parser.cs rename to src/Stater.SLXParser/Parser.cs index 64aca72..835789d 100644 --- a/src/Stater/SLXParser/Parser.cs +++ b/src/Stater.SLXParser/Parser.cs @@ -1,11 +1,9 @@ -using System; using System.Globalization; -using System.IO; using System.Xml; -using SLXParser.Data; -using SLXParser.Utils; +using Stater.SLXParser.Models; +using Stater.SLXParser.Utils; -namespace SLXParser; +namespace Stater.SLXParser; public class Parser { @@ -245,9 +243,9 @@ private Chart ParseChart(XmlNode xmlNode) return chart; } - private State ParseState(XmlNode xmlNode) + private SlxState ParseState(XmlNode xmlNode) { - var state = new State + var state = new SlxState { Id = ParseId(xmlNode) }; @@ -303,16 +301,16 @@ private State ParseState(XmlNode xmlNode) case null: continue; case "useCustomName": - State.ActiveStateOutput.UseCustomName = ParseBool(node.InnerText); + SlxState.ActiveStateOutput.UseCustomName = ParseBool(node.InnerText); break; case "customName": - State.ActiveStateOutput.CustomName = node.InnerText; + SlxState.ActiveStateOutput.CustomName = node.InnerText; break; case "useCustomEnumTypeName": - State.ActiveStateOutput.UseCustomEnumTypeName = ParseBool(node.InnerText); + SlxState.ActiveStateOutput.UseCustomEnumTypeName = ParseBool(node.InnerText); break; case "enumTypeName": - State.ActiveStateOutput.EnumTypeName = node.InnerText; + SlxState.ActiveStateOutput.EnumTypeName = node.InnerText; break; } } @@ -342,9 +340,9 @@ private State ParseState(XmlNode xmlNode) } - private Transition ParseTransition(XmlNode xmlNode) + private SlxTransition ParseTransition(XmlNode xmlNode) { - var transition = new Transition + var transition = new SlxTransition { Id = ParseId(xmlNode) }; @@ -431,9 +429,9 @@ private static Address ParseAddress(XmlNode xmlNode) } - private static Data.Data ParseData(XmlNode xmlNode) + private static Models.Data ParseData(XmlNode xmlNode) { - var data = new Data.Data + var data = new Models.Data { Id = ParseId(xmlNode), Name = ParseName(xmlNode) diff --git a/src/plugins/CSharpCodeGenerator/CSharpCodeGenerator.csproj b/src/Stater.SLXParser/Stater.SLXParser.csproj similarity index 77% rename from src/plugins/CSharpCodeGenerator/CSharpCodeGenerator.csproj rename to src/Stater.SLXParser/Stater.SLXParser.csproj index 51e7a05..00f6239 100644 --- a/src/plugins/CSharpCodeGenerator/CSharpCodeGenerator.csproj +++ b/src/Stater.SLXParser/Stater.SLXParser.csproj @@ -1,13 +1,13 @@  + + + + net8.0 enable enable - - - - diff --git a/src/Stater/SLXParser/TestData/BR_GATES_HDL.slx b/src/Stater.SLXParser/TestData/BR_GATES_HDL.slx similarity index 100% rename from src/Stater/SLXParser/TestData/BR_GATES_HDL.slx rename to src/Stater.SLXParser/TestData/BR_GATES_HDL.slx diff --git a/src/Stater/SLXParser/Translator.cs b/src/Stater.SLXParser/Translator.cs similarity index 77% rename from src/Stater/SLXParser/Translator.cs rename to src/Stater.SLXParser/Translator.cs index 1bc5f31..a986cc3 100644 --- a/src/Stater/SLXParser/Translator.cs +++ b/src/Stater.SLXParser/Translator.cs @@ -1,15 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using SLXParser.Data; -using Stater.Models; -using State = Stater.Models.State; -using SLXState = SLXParser.Data.State; -using Transition = Stater.Models.Transition; -using SLXTransition = SLXParser.Data.Transition; -using SLXData = SLXParser.Data.Data; - -namespace SLXParser; +using Stater.Domain.Models; +using Stater.SLXParser.Models; + +namespace Stater.SLXParser; public class Translator { @@ -43,20 +35,20 @@ private static List ConvertChart(Chart chart) return states; } - private static IEnumerable ConvertState(SLXState slxState) + private static IEnumerable ConvertState(SlxState slxSlxState) { var state = new State { - Guid = slxState.Id, - Name = slxState.LabelString, + Guid = slxSlxState.Id, + Name = slxSlxState.LabelString, Type = StateType.Common, - X = slxState.Position.X.X, - Y = slxState.Position.X.Y, + X = slxSlxState.Position.X.X, + Y = slxSlxState.Position.X.Y, }; var states = new List { state }; - foreach (var slxStateChildren in slxState.ChildrenState) + foreach (var slxStateChildren in slxSlxState.ChildrenState) { states.AddRange(ConvertState(slxStateChildren)); } @@ -76,11 +68,11 @@ private List ConvertChartTransitions(Chart chart, List slxSta return transitions; } - private static IEnumerable ConvertStateTransition(SLXState slxState, List slxStateOriginList) + private static IEnumerable ConvertStateTransition(SlxState slxSlxState, List slxStateOriginList) { var transitions = new List(); - foreach (var transition in slxState.ChildrenTransition) + foreach (var transition in slxSlxState.ChildrenTransition) { var transition_ = ConvertTransition(transition, slxStateOriginList); if (transition_ != null) @@ -89,7 +81,7 @@ private static IEnumerable ConvertStateTransition(SLXState slxState, } } - foreach (var state in slxState.ChildrenState) + foreach (var state in slxSlxState.ChildrenState) { transitions.AddRange(ConvertStateTransition(state, slxStateOriginList)); } @@ -97,7 +89,7 @@ private static IEnumerable ConvertStateTransition(SLXState slxState, return transitions; } - private static Transition ConvertTransition(SLXTransition slxTransition, List slxStateOriginList) + private static Transition ConvertTransition(SlxTransition slxTransition, List slxStateOriginList) { var transition = new Transition { @@ -130,7 +122,7 @@ private static State FindStateById(Guid id, List slxStateOriginList) return slxStateOriginList.FirstOrDefault(state => state.Guid == id); } - private static List ConvertVariable(List datas) + private static List ConvertVariable(List datas) { var result = new List(); foreach (var data in datas) diff --git a/src/Stater.SLXParser/Utils/Color.cs b/src/Stater.SLXParser/Utils/Color.cs new file mode 100644 index 0000000..62dbcb8 --- /dev/null +++ b/src/Stater.SLXParser/Utils/Color.cs @@ -0,0 +1,15 @@ +namespace Stater.SLXParser.Utils; + +public class Color +{ + public int R { get; set; } + public int G { get; set; } + public int B { get; set; } + + public Color(int r, int g, int b) + { + R = r; + G = g; + B = b; + } +} \ No newline at end of file diff --git a/src/Stater.SLXParser/Utils/Point2D.cs b/src/Stater.SLXParser/Utils/Point2D.cs new file mode 100644 index 0000000..628eafd --- /dev/null +++ b/src/Stater.SLXParser/Utils/Point2D.cs @@ -0,0 +1,38 @@ +namespace Stater.SLXParser.Utils; + +public class Point2D +{ + public float X { get; set; } + public float Y { get; set; } + + public Point2D(float x, float y) + { + X = x; + Y = y; + } +} + +public class DoublePoint +{ + public Point2D X { get; set; } + public Point2D Y { get; set; } + + public DoublePoint(Point2D x, Point2D y) + { + X = x; + Y = y; + } +} + + +public class DoubleDoublePoint +{ + public DoublePoint X { get; set; } + public DoublePoint Y { get; set; } + + public DoubleDoublePoint(DoublePoint x, DoublePoint y) + { + X = x; + Y = y; + } +} \ No newline at end of file diff --git a/src/Stater/App.axaml.cs b/src/Stater/App.axaml.cs index 0c5eb28..0daae44 100644 --- a/src/Stater/App.axaml.cs +++ b/src/Stater/App.axaml.cs @@ -1,4 +1,3 @@ -using System; using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Data.Core.Plugins; diff --git a/src/Stater/Models/AssociateTransition.cs b/src/Stater/Models/AssociateTransition.cs index a8010f5..7a12204 100644 --- a/src/Stater/Models/AssociateTransition.cs +++ b/src/Stater/Models/AssociateTransition.cs @@ -1,4 +1,5 @@ using Avalonia; +using Stater.Domain.Models; namespace Stater.Models; @@ -8,4 +9,11 @@ public record AssociateTransition( State? End, Point EndPoint, Transition Transition +); + + +public record StateTransition( + State StartState, + State EndState, + Transition Transition ); \ No newline at end of file diff --git a/src/Stater/Models/Editors/IEditorManager.cs b/src/Stater/Models/Editors/IEditorManager.cs index e9ddd5e..7f0bb56 100644 --- a/src/Stater/Models/Editors/IEditorManager.cs +++ b/src/Stater/Models/Editors/IEditorManager.cs @@ -1,4 +1,5 @@ using System; +using Stater.Domain.Models; namespace Stater.Models.Editors; diff --git a/src/Stater/Models/Editors/IStateEditor.cs b/src/Stater/Models/Editors/IStateEditor.cs index 5db1f33..4517af9 100644 --- a/src/Stater/Models/Editors/IStateEditor.cs +++ b/src/Stater/Models/Editors/IStateEditor.cs @@ -1,4 +1,5 @@ using System; +using Stater.Domain.Models; namespace Stater.Models.Editors; diff --git a/src/Stater/Models/Editors/IStateMachineEditor.cs b/src/Stater/Models/Editors/IStateMachineEditor.cs index a960ccc..009905c 100644 --- a/src/Stater/Models/Editors/IStateMachineEditor.cs +++ b/src/Stater/Models/Editors/IStateMachineEditor.cs @@ -1,4 +1,5 @@ using System; +using Stater.Domain.Models; namespace Stater.Models.Editors; diff --git a/src/Stater/Models/Editors/ITransitionEditor.cs b/src/Stater/Models/Editors/ITransitionEditor.cs index 17c92ec..55a1d45 100644 --- a/src/Stater/Models/Editors/ITransitionEditor.cs +++ b/src/Stater/Models/Editors/ITransitionEditor.cs @@ -1,5 +1,5 @@ using System; -using Avalonia.Animation; +using Stater.Domain.Models; namespace Stater.Models.Editors; diff --git a/src/Stater/Models/Editors/IVariableEditor.cs b/src/Stater/Models/Editors/IVariableEditor.cs index 1d6d898..f455400 100644 --- a/src/Stater/Models/Editors/IVariableEditor.cs +++ b/src/Stater/Models/Editors/IVariableEditor.cs @@ -1,4 +1,5 @@ using System; +using Stater.Domain.Models; namespace Stater.Models.Editors; diff --git a/src/Stater/Models/Editors/impl/EditorManager.cs b/src/Stater/Models/Editors/impl/EditorManager.cs index ce257ce..c6114b7 100644 --- a/src/Stater/Models/Editors/impl/EditorManager.cs +++ b/src/Stater/Models/Editors/impl/EditorManager.cs @@ -1,5 +1,6 @@ using System; using System.Reactive.Subjects; +using Stater.Domain.Models; namespace Stater.Models.Editors.impl; diff --git a/src/Stater/Models/Editors/impl/StateEditor.cs b/src/Stater/Models/Editors/impl/StateEditor.cs index 64493bf..50dff18 100644 --- a/src/Stater/Models/Editors/impl/StateEditor.cs +++ b/src/Stater/Models/Editors/impl/StateEditor.cs @@ -1,5 +1,6 @@ using System; using System.Reactive.Subjects; +using Stater.Domain.Models; namespace Stater.Models.Editors.impl; diff --git a/src/Stater/Models/Editors/impl/StateMachineEditor.cs b/src/Stater/Models/Editors/impl/StateMachineEditor.cs index 3f8f8e3..77d5ee4 100644 --- a/src/Stater/Models/Editors/impl/StateMachineEditor.cs +++ b/src/Stater/Models/Editors/impl/StateMachineEditor.cs @@ -1,5 +1,6 @@ using System; using System.Reactive.Subjects; +using Stater.Domain.Models; namespace Stater.Models.Editors.impl; diff --git a/src/Stater/Models/Editors/impl/TransitionEditor.cs b/src/Stater/Models/Editors/impl/TransitionEditor.cs index 302f905..7cc5765 100644 --- a/src/Stater/Models/Editors/impl/TransitionEditor.cs +++ b/src/Stater/Models/Editors/impl/TransitionEditor.cs @@ -1,5 +1,6 @@ using System; using System.Reactive.Subjects; +using Stater.Domain.Models; namespace Stater.Models.Editors.impl; diff --git a/src/Stater/Models/Editors/impl/VariableEditor.cs b/src/Stater/Models/Editors/impl/VariableEditor.cs index d0a32bf..b979d4e 100644 --- a/src/Stater/Models/Editors/impl/VariableEditor.cs +++ b/src/Stater/Models/Editors/impl/VariableEditor.cs @@ -1,5 +1,6 @@ using System; using System.Reactive.Subjects; +using Stater.Domain.Models; namespace Stater.Models.Editors.impl; diff --git a/src/Stater/Models/Executor/IExecutor.cs b/src/Stater/Models/Executor/IExecutor.cs index 032adc9..637f19a 100644 --- a/src/Stater/Models/Executor/IExecutor.cs +++ b/src/Stater/Models/Executor/IExecutor.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; -using DynamicData; -using DynamicData.Binding; +using Stater.Domain.Models; namespace Stater.Models.Executor; diff --git a/src/Stater/Models/Executor/impl/Executor.cs b/src/Stater/Models/Executor/impl/Executor.cs index 77958d5..54f7bfe 100644 --- a/src/Stater/Models/Executor/impl/Executor.cs +++ b/src/Stater/Models/Executor/impl/Executor.cs @@ -3,7 +3,8 @@ using System.Linq; using System.Reactive.Subjects; using System.Threading; -using DynamicData; +using Stater.Domain.Logic; +using Stater.Domain.Models; namespace Stater.Models.Executor.impl; diff --git a/src/Stater/Models/IProjectManager.cs b/src/Stater/Models/IProjectManager.cs index afd6f51..1eb5668 100644 --- a/src/Stater/Models/IProjectManager.cs +++ b/src/Stater/Models/IProjectManager.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; using System.IO; -using Avalonia.Animation; using DynamicData; +using Stater.Domain.Models; namespace Stater.Models; @@ -25,7 +25,7 @@ public interface IProjectManager StateMachine CreateStateMachine(); void RemoveStateMachine(Guid guid); - void UpdateStateMachine(StateMachine newStateMachine); + void UpdateStateMachine(Domain.Models.StateMachine newStateMachine); StateMachine? OpenStateMachine(Guid guid); State? CreateState(); diff --git a/src/Stater/Models/Project.cs b/src/Stater/Models/Project.cs index 8720308..c5abc51 100644 --- a/src/Stater/Models/Project.cs +++ b/src/Stater/Models/Project.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Xml.Serialization; +using Stater.Domain.Models; namespace Stater.Models; @@ -15,7 +16,8 @@ public Project() : this("Project", null) public record ExportProject( [property: XmlElement("Project")] Project? Project, - [property: XmlElement("StateMachines")] List? StateMachines + [property: XmlElement("StateMachines")] + List? StateMachines ) { public ExportProject() : this(null, null) diff --git a/src/Stater/Models/StateMachine.cs b/src/Stater/Models/StateMachine.cs deleted file mode 100644 index 0d4fea6..0000000 --- a/src/Stater/Models/StateMachine.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Stater.Models; - -public record StateMachine( - Guid Guid, - string Name, - List States, - List Transitions, - List Variables -) -{ - public StateMachine() : this( - Guid.NewGuid(), - "", - new List(), - new List(), - new List() - ) - { - } - - public State? StartState - { - get { return States.Find(x => x.Type == StateType.Start); } - } -} \ No newline at end of file diff --git a/src/Stater/Models/impl/ProjectManager.cs b/src/Stater/Models/impl/ProjectManager.cs index fac74d7..cc37224 100644 --- a/src/Stater/Models/impl/ProjectManager.cs +++ b/src/Stater/Models/impl/ProjectManager.cs @@ -6,6 +6,7 @@ using System.Reactive.Subjects; using System.Xml; using DynamicData; +using Stater.Domain.Models; namespace Stater.Models.impl; diff --git a/src/Stater/Plugin/PluginInput.cs b/src/Stater/Plugin/PluginInput.cs index fa54098..741b73d 100644 --- a/src/Stater/Plugin/PluginInput.cs +++ b/src/Stater/Plugin/PluginInput.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Stater.Domain.Models; using Stater.Models; namespace Stater.Plugin; diff --git a/src/Stater/Plugin/PluginOutput.cs b/src/Stater/Plugin/PluginOutput.cs index 0a6bde4..35f8cd5 100644 --- a/src/Stater/Plugin/PluginOutput.cs +++ b/src/Stater/Plugin/PluginOutput.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using Stater.Models; +using Stater.Domain.Models; namespace Stater.Plugin; diff --git a/src/Stater/SLXParser/SLXPlugin.cs b/src/Stater/Plugin/SLXPlugin.cs similarity index 86% rename from src/Stater/SLXParser/SLXPlugin.cs rename to src/Stater/Plugin/SLXPlugin.cs index c95ff08..2a7b441 100644 --- a/src/Stater/SLXParser/SLXPlugin.cs +++ b/src/Stater/Plugin/SLXPlugin.cs @@ -1,8 +1,8 @@ -using Stater.Plugin; +using Stater.SLXParser; -namespace SLXParser; +namespace Stater.Plugin; -public class SLXPPlugin: ButtonFilePlugin +public class SLXPlugin: ButtonFilePlugin { public override PluginOutput Start(PluginInput pluginInput, string file) { diff --git a/src/Stater/SLXParser/Data/BaseNode.cs b/src/Stater/SLXParser/Data/BaseNode.cs deleted file mode 100644 index 5d8dd0f..0000000 --- a/src/Stater/SLXParser/Data/BaseNode.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace SLXParser.Data -{ - public class BaseNode - { - // id или SSID - public Guid Id { get; set; } - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Data/Chart.cs b/src/Stater/SLXParser/Data/Chart.cs deleted file mode 100644 index 8fd7e0c..0000000 --- a/src/Stater/SLXParser/Data/Chart.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; -using SLXParser.Utils; - -namespace SLXParser.Data -{ - public class Chart : BaseNode - { - public string Name { get; set; } - public DoublePoint WindowPosition { get; set; } - public DoublePoint ViewLimits { get; set; } - public float ZoomFactor { get; set; } - public Color StateColor { get; set; } - public Color StateLabelColor { get; set; } - public Color TransitionColor { get; set; } - public Color TransitionLabelColor { get; set; } - public Color JunctionColor { get; set; } - public Color ChartColor { get; set; } - public int ViewObj { get; set; } - public bool Visible { get; set; } - - public List ChildrenState = new List(); - public List ChildrenData = new List(); - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Data/Data.cs b/src/Stater/SLXParser/Data/Data.cs deleted file mode 100644 index da6c9de..0000000 --- a/src/Stater/SLXParser/Data/Data.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace SLXParser.Data -{ - public class Data : BaseNode - { - public string Name { get; set; } - public string Scope { get; set; } - public Props Props = new Props(); - public string DataType { get; set; } - } - - public class Props - { - public string Frame { get; set; } - - // Type - public string TypeMethod { get; set; } - public string TypePrimitive { get; set; } - public int TypeWordLength { get; set; } - - // Type Fixpt - public string TypeFixptScalingMode { get; set; } - public int TypeFixptFractionLength { get; set; } - public string TypeFixptSlope { get; set; } - public int TypeFixptBias { get; set; } - - // Unit - public string UnitName { get; set; } - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Data/Instance.cs b/src/Stater/SLXParser/Data/Instance.cs deleted file mode 100644 index 166d484..0000000 --- a/src/Stater/SLXParser/Data/Instance.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace SLXParser.Data -{ - public class Instance : BaseNode - { - public string Name { get; set; } - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Data/Machine.cs b/src/Stater/SLXParser/Data/Machine.cs deleted file mode 100644 index ebeb559..0000000 --- a/src/Stater/SLXParser/Data/Machine.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace SLXParser.Data -{ - public class Machine : BaseNode - { - public Chart Chart { get; set; } - public string Created { get; set; } - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Data/State.cs b/src/Stater/SLXParser/Data/State.cs deleted file mode 100644 index ba316b9..0000000 --- a/src/Stater/SLXParser/Data/State.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using SLXParser.Utils; - -namespace SLXParser.Data -{ - public class State : BaseNode - { - public string LabelString { get; set; } - public DoublePoint Position { get; set; } - public int FontSize { get; set; } - public bool Visible { get; set; } - public int Subviewer { get; set; } - public string Type { get; set; } - public string Decomposition { get; set; } - public int ExecutionOrder { get; set; } - - public static ActiveStateOutput ActiveStateOutput = new ActiveStateOutput(); - public List ChildrenState = new List(); - public List ChildrenTransition = new List(); - } - - public class ActiveStateOutput - { - public bool UseCustomName { get; set; } - public string CustomName { get; set; } - public bool UseCustomEnumTypeName { get; set; } - public string EnumTypeName { get; set; } - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Data/Stateflow.cs b/src/Stater/SLXParser/Data/Stateflow.cs deleted file mode 100644 index f5546a4..0000000 --- a/src/Stater/SLXParser/Data/Stateflow.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace SLXParser.Data -{ - public class Stateflow - { - public Machine Machine { get; set; } - public Instance Instance { get; set; } - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Data/Transition.cs b/src/Stater/SLXParser/Data/Transition.cs deleted file mode 100644 index ce47a35..0000000 --- a/src/Stater/SLXParser/Data/Transition.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using SLXParser.Utils; - -namespace SLXParser.Data -{ - public class Transition : BaseNode - { - public string LabelString { get; set; } - - public DoublePoint LabelPosition { get; set; } - public int FontSize { get; set; } - - public Address Src { get; set; } - public Address Dst { get; set; } - public Point2D MidPoint { get; set; } - public DoublePoint DataLimits { get; set; } - public int Subviewer { get; set; } - public string DrawStyle { get; set; } - public int ExecutionOrder { get; set; } - } - - public class Address - { - public Guid SSID { get; set; } - public DoubleDoublePoint Intersection { get; set; } - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Program.cs b/src/Stater/SLXParser/Program.cs deleted file mode 100644 index c13c16d..0000000 --- a/src/Stater/SLXParser/Program.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; - -namespace SLXParser; - -internal class SLXProgram -{ - public static void Start(string[] args) - { - const string path = "/Users/vnazarov/PycharmProjects/ya-hakaton/BR_GATES_HDL.slx"; - - var parser = new Parser(path); - var stateflow = parser.Parse(); - var pluginStateflow = new Translator().Convert(stateflow); - - Console.WriteLine(stateflow.Machine.Chart.ChildrenState); - Console.WriteLine(stateflow.Machine.Chart.ChildrenState.Count); - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Utils/Color.cs b/src/Stater/SLXParser/Utils/Color.cs deleted file mode 100644 index 079c59f..0000000 --- a/src/Stater/SLXParser/Utils/Color.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace SLXParser.Utils -{ - public class Color - { - public int R { get; set; } - public int G { get; set; } - public int B { get; set; } - - public Color(int r, int g, int b) - { - R = r; - G = g; - B = b; - } - } -} \ No newline at end of file diff --git a/src/Stater/SLXParser/Utils/Point2D.cs b/src/Stater/SLXParser/Utils/Point2D.cs deleted file mode 100644 index a5d8935..0000000 --- a/src/Stater/SLXParser/Utils/Point2D.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace SLXParser.Utils -{ - public class Point2D - { - public float X { get; set; } - public float Y { get; set; } - - public Point2D(float x, float y) - { - X = x; - Y = y; - } - } - - public class DoublePoint - { - public Point2D X { get; set; } - public Point2D Y { get; set; } - - public DoublePoint(Point2D x, Point2D y) - { - X = x; - Y = y; - } - } - - - public class DoubleDoublePoint - { - public DoublePoint X { get; set; } - public DoublePoint Y { get; set; } - - public DoubleDoublePoint(DoublePoint x, DoublePoint y) - { - X = x; - Y = y; - } - } -} \ No newline at end of file diff --git a/src/Stater/Stater.csproj b/src/Stater/Stater.csproj index 2109de3..c5c7f3c 100644 --- a/src/Stater/Stater.csproj +++ b/src/Stater/Stater.csproj @@ -15,35 +15,32 @@ - + - + - - + + + - - MainEditor.axaml - Code - - - BoardCanvas.axaml - Code - + + MainEditor.axaml + Code + + + BoardCanvas.axaml + Code + - - - - - - - + + + diff --git a/src/Stater/TestSave.cs b/src/Stater/TestSave.cs index 541cd52..cbae5bc 100644 --- a/src/Stater/TestSave.cs +++ b/src/Stater/TestSave.cs @@ -1,16 +1,14 @@ using System; using System.Collections.Generic; using System.IO; -using System.Reflection; -using DynamicData; +using Stater.Domain.Models; using Stater.Models; -using Stater.Views.Editors; namespace Stater; public class TestSave { - public static void main() + public static void main2() { var writer = new System.Xml.Serialization.XmlSerializer(typeof(ExportProject)); diff --git a/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs b/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs index 05f2df6..414855c 100644 --- a/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs +++ b/src/Stater/ViewModels/Board/BoardCanvasViewModel.cs @@ -6,6 +6,7 @@ using Avalonia; using ReactiveUI; using ReactiveUI.Fody.Helpers; +using Stater.Domain.Models; using Stater.Models; using Stater.Models.Editors; diff --git a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs index 6f3da0a..234ca7a 100644 --- a/src/Stater/ViewModels/Editors/StateEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/StateEditorViewModel.cs @@ -6,6 +6,7 @@ using Avalonia; using ReactiveUI; using ReactiveUI.Fody.Helpers; +using Stater.Domain.Models; using Stater.Models; using Stater.Models.Editors; diff --git a/src/Stater/ViewModels/Editors/StateMachineEditorViewModel.cs b/src/Stater/ViewModels/Editors/StateMachineEditorViewModel.cs index 00ecbe1..87daf25 100644 --- a/src/Stater/ViewModels/Editors/StateMachineEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/StateMachineEditorViewModel.cs @@ -2,7 +2,7 @@ using System.Windows.Input; using ReactiveUI; using ReactiveUI.Fody.Helpers; -using Stater.Models; +using Stater.Domain.Models; using Stater.Models.Editors; namespace Stater.ViewModels.Editors; diff --git a/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs b/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs index ad28c16..e536b17 100644 --- a/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/TransitionEditorViewModel.cs @@ -1,11 +1,9 @@ using System; using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Reactive.Linq; using System.Windows.Input; -using Avalonia.Controls; using ReactiveUI; using ReactiveUI.Fody.Helpers; +using Stater.Domain.Models; using Stater.Models; using Stater.Models.Editors; @@ -42,11 +40,11 @@ public TransitionEditorViewModel(ITransitionEditor transitionEditor, IProjectMan { Condition = variableCondition.ConditionType switch { - Models.Condition.VariableCondition.ConditionTypeEnum.Lt => 0, - Models.Condition.VariableCondition.ConditionTypeEnum.Le => 0, - Models.Condition.VariableCondition.ConditionTypeEnum.Ne => 1, - Models.Condition.VariableCondition.ConditionTypeEnum.Gt => 2, - Models.Condition.VariableCondition.ConditionTypeEnum.Ge => 3, + Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Lt => 0, + Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Le => 0, + Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Ne => 1, + Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Gt => 2, + Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Ge => 3, _ => 0, }; Console.WriteLine(Condition); @@ -111,13 +109,13 @@ private void Save() Console.WriteLine(Condition); var type = Condition switch { - 4 => Models.Condition.VariableCondition.ConditionTypeEnum.Lt, - 5 => Models.Condition.VariableCondition.ConditionTypeEnum.Le, - 0 => Models.Condition.VariableCondition.ConditionTypeEnum.Eq, - 1 => Models.Condition.VariableCondition.ConditionTypeEnum.Ne, - 2 => Models.Condition.VariableCondition.ConditionTypeEnum.Gt, - 3 => Models.Condition.VariableCondition.ConditionTypeEnum.Ge, - _ => Models.Condition.VariableCondition.ConditionTypeEnum.Ge, + 4 => Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Lt, + 5 => Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Le, + 0 => Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Eq, + 1 => Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Ne, + 2 => Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Gt, + 3 => Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Ge, + _ => Domain.Models.Condition.VariableCondition.ConditionTypeEnum.Ge, }; condition = new Condition.VariableCondition( VariableGuid: Guid.Parse(Variable), diff --git a/src/Stater/ViewModels/Editors/VariableEditorViewModel.cs b/src/Stater/ViewModels/Editors/VariableEditorViewModel.cs index db289b8..97c6a70 100644 --- a/src/Stater/ViewModels/Editors/VariableEditorViewModel.cs +++ b/src/Stater/ViewModels/Editors/VariableEditorViewModel.cs @@ -2,7 +2,7 @@ using System.Windows.Input; using ReactiveUI; using ReactiveUI.Fody.Helpers; -using Stater.Models; +using Stater.Domain.Models; using Stater.Models.Editors; namespace Stater.ViewModels.Editors; diff --git a/src/Stater/ViewModels/Execution/VariablesViewModel.cs b/src/Stater/ViewModels/Execution/VariablesViewModel.cs index 210ba77..6950623 100644 --- a/src/Stater/ViewModels/Execution/VariablesViewModel.cs +++ b/src/Stater/ViewModels/Execution/VariablesViewModel.cs @@ -4,6 +4,7 @@ using System.Windows.Input; using ReactiveUI; using ReactiveUI.Fody.Helpers; +using Stater.Domain.Models; using Stater.Models; using Stater.Models.Editors; diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index 14fb74b..c153cb9 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -8,7 +8,7 @@ using ReactiveUI.Fody.Helpers; using Stater.Models; using ReactiveUI; -using SLXParser; +using Stater.Domain.Models; using Stater.Models.Editors; using Stater.Plugin; @@ -56,7 +56,7 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor public List Plugins => new() { - new SLXPPlugin() + new SLXPlugin() }; private StateMachine _stateMachine; diff --git a/src/Stater/Views/Board/BoardCanvas.axaml b/src/Stater/Views/Board/BoardCanvas.axaml index 9a6994f..967e6d0 100644 --- a/src/Stater/Views/Board/BoardCanvas.axaml +++ b/src/Stater/Views/Board/BoardCanvas.axaml @@ -6,15 +6,13 @@ x:Class="Stater.Views.Board.BoardCanvas" xmlns:vm="using:Stater.ViewModels.Board" x:DataType="vm:BoardCanvasViewModel" - xmlns:models="clr-namespace:Stater.Models"> + xmlns:models="clr-namespace:Stater.Domain.Models;assembly=Stater.Domain"> - - diff --git a/src/Stater/Views/Board/BoardCanvas.axaml.cs b/src/Stater/Views/Board/BoardCanvas.axaml.cs index af0863f..455d999 100644 --- a/src/Stater/Views/Board/BoardCanvas.axaml.cs +++ b/src/Stater/Views/Board/BoardCanvas.axaml.cs @@ -6,6 +6,7 @@ using Avalonia.Input; using Avalonia.Media; using Splat; +using Stater.Domain.Models; using Stater.Models; using Stater.Models.Editors; using Stater.ViewModels.Board; diff --git a/src/Stater/Views/Editors/StateEditor.axaml.cs b/src/Stater/Views/Editors/StateEditor.axaml.cs index 5984cd3..0aa973d 100644 --- a/src/Stater/Views/Editors/StateEditor.axaml.cs +++ b/src/Stater/Views/Editors/StateEditor.axaml.cs @@ -1,6 +1,5 @@ using System; using Avalonia.Controls; -using Avalonia.Input; using Avalonia.Interactivity; using Splat; using Stater.Models; diff --git a/src/Stater/Views/Editors/StateMachineEditor.axaml.cs b/src/Stater/Views/Editors/StateMachineEditor.axaml.cs index f6dfeba..8fd14d3 100644 --- a/src/Stater/Views/Editors/StateMachineEditor.axaml.cs +++ b/src/Stater/Views/Editors/StateMachineEditor.axaml.cs @@ -1,8 +1,5 @@ -using Avalonia; using Avalonia.Controls; -using Avalonia.Markup.Xaml; using Splat; -using Stater.Models; using Stater.Models.Editors; using Stater.ViewModels.Editors; diff --git a/src/Stater/Views/Editors/VariableEditor.axaml.cs b/src/Stater/Views/Editors/VariableEditor.axaml.cs index e753430..dd7fede 100644 --- a/src/Stater/Views/Editors/VariableEditor.axaml.cs +++ b/src/Stater/Views/Editors/VariableEditor.axaml.cs @@ -1,6 +1,4 @@ -using Avalonia; using Avalonia.Controls; -using Avalonia.Markup.Xaml; using Splat; using Stater.Models.Editors; using Stater.ViewModels.Editors; diff --git a/src/Stater/Views/Execution/ExecutionGroup.axaml.cs b/src/Stater/Views/Execution/ExecutionGroup.axaml.cs index d903504..ff9c1b5 100644 --- a/src/Stater/Views/Execution/ExecutionGroup.axaml.cs +++ b/src/Stater/Views/Execution/ExecutionGroup.axaml.cs @@ -1,6 +1,4 @@ -using Avalonia; using Avalonia.Controls; -using Avalonia.Markup.Xaml; namespace Stater.Views.Execution; diff --git a/src/plugins/CFuncGenerator/CGenerator.cs b/src/plugins/CFuncGenerator/CGenerator.cs deleted file mode 100644 index 89c8bef..0000000 --- a/src/plugins/CFuncGenerator/CGenerator.cs +++ /dev/null @@ -1,196 +0,0 @@ -namespace CFuncGenerator; - -class CGenerator - { - public CGenerator(IParams p) - { - iParams = p; - } - - private IParams iParams; - private Indent indent; - - public bool GenerateAll() - { - bool res = true; - foreach (var stateMachine in iParams.Machines.AsParallel().Where(stateMachine => !GenerateOneMachine(stateMachine))) - { - res = false; - } - return res; - } - - private bool GenerateOneMachine(StateMachine stateMachine) - { - //Check the file. - var pathHeader = iParams.WorkDirectory + @"\" + GetHeaderName(stateMachine); - if (!GoodHeader(stateMachine, pathHeader)) - { - if (!GenInitHeader(stateMachine, pathHeader)) - { - return false; - } - } - else - { - if (!IterativeGenHeader(stateMachine, pathHeader)) - { - return false; - } - } - - var pathModule = iParams.WorkDirectory + @"\" + GetModuleName(stateMachine); - if (!GoodModule(stateMachine, pathModule)) - { - if (!GenInitModule(stateMachine, pathModule)) - { - return false; - } - } - else - { - if (!IterativeGenModule(stateMachine, pathModule)) - { - return false; - } - } - return false; - } - - private bool GenInitModule(StateMachine stateMachine, string pathModule) - { - try - { - var code = new List(); - code.AddRange(CreateInclude(stateMachine)); - //code.AddRange(); - code.AddRange(CreateUserDefinitions(stateMachine)); - } - catch (Exception ex) - { - return false; - } - return true; - } - - private IEnumerable CreateInclude(StateMachine stateMachine) - { - var res = new List(); - res.Add("/*User includes*/"); - res.Add(""); - res.Add("/*End user includes*/"); - res.Add(""); - res.Add("#include \"" + GetHeaderName(stateMachine) + "\""); - res.Add(""); - - return res; - } - - private IEnumerable CreateUserDefinitions(StateMachine stateMachine) - { - var res = new List(); - res.Add("/*User definitions*/"); - res.Add(""); - res.Add("/*End user definitions*/"); - res.Add(""); - return res; - } - - - private string GetHeaderName(StateMachine stateMachine) - { - return stateMachine.Name + ".h"; - } - - private string GetModuleName(StateMachine stateMachine) - { - return stateMachine.Name + ".c"; - } - - private bool IterativeGenModule(StateMachine stateMachine, string pathModule) - { - throw new NotImplementedException(); - } - - private bool GenInitHeader(StateMachine stateMachine, string pathHeader) - { - try - { - var code = new List(); - code.AddRange(CreateOnce(stateMachine)); - - code.AddRange(CreatePrototype(stateMachine)); - - code.AddRange(CreateEndif(stateMachine)); - - WriteCode(pathHeader, code); - } - catch (Exception ex) - { - return false; - } - return true; - } - - private IEnumerable CreatePrototype(StateMachine stateMachine) - { - List res = new List(); - res.Add("void " + stateMachine.Name + "();"); - res.Add(""); - return res; - } - - private static void WriteCode(string pathHeader, List code) - { - using (var sw = new StreamWriter(pathHeader)) - { - foreach (var line in code) - { - sw.WriteLine(line); - } - } - } - - private IEnumerable CreateEndif(StateMachine stateMachine) - { - var res = new List(); - res.Add("#endif"); - res.Add(""); - return res; - } - - private IEnumerable CreateOnce(StateMachine stateMachine) - { - List res = new List(); - res.Add("#ifndef _" + stateMachine.Name + "_H"); - res.Add("#define _" + stateMachine.Name + "_H"); - res.Add(""); - return res; - } - - private bool IterativeGenHeader(StateMachine stateMachine, string pathHeader) - { - return true; - } - - private bool GoodModule(StateMachine stateMachine, string pathModule) - { - return false; - if (!File.Exists(pathModule)) - { - return false; - } - return true; - } - - private bool GoodHeader(StateMachine stateMachine, string pathHeader) - { - return false; - if (!File.Exists(pathHeader)) - { - return false; - } - return true; - } - - } \ No newline at end of file diff --git a/src/plugins/CFuncGenerator/CPlugin.cs b/src/plugins/CFuncGenerator/CPlugin.cs deleted file mode 100644 index 432bf71..0000000 --- a/src/plugins/CFuncGenerator/CPlugin.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace CFuncGenerator; - -public class CPlugin : IndependentPlugin -{ - public override IReturn Start(IParams param) - { - IReturn res = new IReturn(); - - CGenerator generator = new CGenerator(param); - generator.GenerateAll(); - - return res; - } - - public override bool NeedParams - { - get { return true; } - } -} \ No newline at end of file diff --git a/src/plugins/CSharpCodeGenerator/Plugin.cs b/src/plugins/CSharpCodeGenerator/Plugin.cs deleted file mode 100644 index 7c3245f..0000000 --- a/src/plugins/CSharpCodeGenerator/Plugin.cs +++ /dev/null @@ -1,399 +0,0 @@ -using Stater.Models; -using Stater.Plugin; - -namespace CSharpCodeGenerator; - -public class Plugin : ButtonPlugin - { - /// - /// Эта функция вызывается по нажатию кнопки в Stater. - /// - /// - /// - public override PluginOutput Start(PluginInput _pluginParams) - { - var res = PluginOutput.From("OK"); - // machine = _machines; - - pluginParams = _pluginParams; - - var machineList = _pluginParams.StateMachines; - - if (machineList.Count == 0) - { - return res; - } - - // TODO-PRACTICE: DO file dialog - WriteEvents(machineList, _pluginParams.pm.Info.GetWorkFolder()); - foreach (var machine in machineList) - { - path = machine.Name + ".cs"; - GenerateCode(machine); - - } - /* - if (machine.Name == "1") - { - return 1; - } - * */ - return res; - } - - public override PluginRetVal SilentStart(PluginParams _pluginParams) - { - return Start(_pluginParams); - } - - private PluginParams pluginParams; - - private void WriteEvents(List machineList, string _location) - { - var sw = new StreamWriter(_location + "\\Events.cs"); - var indent = 0; - - sw.WriteLine(DoIndent(indent) + "namespace " + pluginParams.pm.Info.Name); - sw.WriteLine(DoIndent(indent) + "{"); - ++indent; - - sw.WriteLine(DoIndent(indent) + "public enum Events"); - sw.WriteLine(DoIndent(indent) + "{"); - ++indent; - - var evtList = new Dictionary(); - foreach (var machine in machineList) - { - foreach (var anEvent in machine.Events) - { - //evtList.Add(anEvent); - //evtList.Add(anEvent.Name, anEvent); - evtList[anEvent.Name] = anEvent; - /* - if (anEvent != StaterV.Attributes.Event.CreateEpsilon()) - { - sw.WriteLine(DoIndent(indent) + anEvent.SafeName + ","); - } - */ - } - } - - foreach (KeyValuePair @event in evtList) - { - sw.WriteLine(DoIndent(indent) + @event.Value.SafeName + ","); - } - //sw.WriteLine(DoIndent(indent) + StaterV.Attributes.Event.CreateEpsilon().SafeName + ","); - --indent; - sw.WriteLine(DoIndent(indent) + "}"); - - --indent; - sw.WriteLine(DoIndent(indent) + "}"); - sw.Close(); - } - - //private StaterV.StateMachine.StateMachine machine; - private string path; - - private const string statesEnumName = "States"; - //private const string transitionsEnumName = "Transitions"; - private const string eventsEnumName = "Events"; - private const string stateVariableName = "state"; - private const string eventArg = "_event"; - - private string DoIndent(int count) - { - var res = ""; - for (int i = 0; i < count; i++) - { - res += "\t"; - } - return res; - } - - private void WriteConstructor(StreamWriter sr, int _indentCount, StateMachine machine) - { - var indentCount = _indentCount; - sr.WriteLine(DoIndent(indentCount) + "public {0}()", machine.Name); - sr.WriteLine(DoIndent(indentCount) + "{"); - indentCount++; - sr.WriteLine(DoIndent(indentCount) + "{0} = {1}.{2};", - stateVariableName, statesEnumName, - machine.StartState.TheAttributes.Name); - indentCount--; - sr.WriteLine(DoIndent(indentCount) + "}"); - //Запись стартового состояния в конструкторе. - } - - private void WriteStateProcessor(StreamWriter sr, int _indentCount, StateMachine machine, bool withStrings) - { - var indentCount = _indentCount; - - if (withStrings) - { - sr.WriteLine(DoIndent(indentCount) + "public void ProcessEventStr(string {0})", - eventArg); - } - else - { - sr.WriteLine(DoIndent(indentCount) + "public void ProcessEvent(Events {0})", - eventArg); - } - sr.WriteLine(DoIndent(indentCount) + "{"); - indentCount++; - - //switch по состояниям. - sr.WriteLine(DoIndent(indentCount) + "switch ({0})", stateVariableName); - sr.WriteLine(DoIndent(indentCount) + "{"); - foreach (var state in machine.States) - { - sr.WriteLine(DoIndent(indentCount) + "case {0}.{1}:", - statesEnumName, state.TheAttributes.Name); - indentCount++; - WriteEventSwitch(sr, indentCount, state, withStrings); - sr.WriteLine(DoIndent(indentCount) + "break;"); - indentCount--; - } - sr.WriteLine(DoIndent(indentCount) + "}"); - - indentCount--; - sr.WriteLine(DoIndent(indentCount) + "}"); - } - - private void WriteActionsDeclarations(StreamWriter sr, int _indentCount, StateMachine machine) - { - var indentCount = _indentCount; - - //Создаем список выходных воздействий. - HashSet actionSet = new HashSet(); - foreach (var state in machine.States) - { - PutActionsToSet(ref actionSet, state.TheAttributes.EntryActions); - PutActionsToSet(ref actionSet, state.TheAttributes.ExitActions); - - foreach (var arrow in state.OutgoingArrows) - { - var trans = arrow as Transition; - if (trans == null) - { - throw new StaterV.Exceptions.FormStructureException("From state " + state.TheAttributes.Name + - " doing out not transition!"); - } - PutActionsToSet(ref actionSet, trans.TheAttributes.Actions); - } - } - - //Печатаем. - foreach (var action in actionSet) - { - sr.WriteLine(DoIndent(indentCount) + "/// "); - sr.WriteLine(DoIndent(indentCount) + "///" + action.Comment); - sr.WriteLine(DoIndent(indentCount) + "/// "); - sr.WriteLine(DoIndent(indentCount) + "public abstract void " + action.Name + "();"); - } - } - - private void PutActionsToSet(ref HashSet actionSet, IEnumerable actions) - { - foreach (var action in actions) - { - actionSet.Add(action); - } - } - - /// - /// Process one state. - /// - /// - /// - /// - /// - private void WriteEventSwitch(StreamWriter sr, int _indentCount, State state, bool withStrings) - { - var indentCount = _indentCount; - - string processFunction = (withStrings) ? "ProcessEventStr" : "ProcessEvent"; - - sr.WriteLine(DoIndent(indentCount) + "switch ({0})", eventArg); - sr.WriteLine(DoIndent(indentCount) + "{"); - foreach (var arr in state.OutgoingArrows) - { - var trans = arr as Transition; - if (trans != null) - { - if (trans.TheAttributes.TheEvent != null) - { - if (withStrings) - { - sr.WriteLine(DoIndent(indentCount) + "case \"{0}\":", - trans.TheAttributes.TheEvent.Name); - } - else - { - sr.WriteLine(DoIndent(indentCount) + "case {0}.{1}:", eventsEnumName, - trans.TheAttributes.TheEvent.SafeName); - } - indentCount++; - - //Сделать переход. - State st = (State)trans.End; - sr.WriteLine(DoIndent(indentCount) + "{0} = {1}.{2};", - stateVariableName, statesEnumName, st.TheAttributes.Name); - - //Выходные воздействия при выходе из состояния. - WriteActions(sr, indentCount, state.TheAttributes.ExitActions); - - //Выходные воздействия на переходе. - WriteActions(sr, indentCount, trans.TheAttributes.Actions); - - //Выходные воздействия при входе в состояние. - State newState = trans.End as State; - if (newState == null) - { - throw (new StaterV.Exceptions.InvalidDiagramException("End of transition from state " + - state.TheAttributes.Name + " is not a State!")); - } - WriteActions(sr, indentCount, newState.TheAttributes.EntryActions); - - sr.WriteLine(DoIndent(indentCount) + "break;"); - indentCount--; - } - else - { - throw (new Exception()); - } - } - else - { - throw (new Exception()); - } - - } - - //Вложенный автомат. - if (state.TheAttributes.NestedMachines != null) - { - if (state.TheAttributes.NestedMachines.Count > 0) - { - sr.WriteLine(DoIndent(indentCount) + "default:"); - ++indentCount; - foreach (var machine in state.TheAttributes.NestedMachines) - { - //sr.WriteLine(DoIndent(indentCount) + "{0}_{1}.{2}({3});", - // state.TheAttributes.Name, machine, processFunction, eventArg); - sr.WriteLine(DoIndent(indentCount) + "{0}.{1}({2});", - machine.Name, processFunction, eventArg); - } - sr.WriteLine(DoIndent(indentCount) + "break;"); - --indentCount; - - } - } - - sr.WriteLine(DoIndent(indentCount) + "}"); - } - - private void WriteActions(StreamWriter sr, int _indentCount, List actions) - { - var indentCount = _indentCount; - - if (actions == null) - { - return; - } - - foreach (var act in actions) - { - sr.WriteLine(DoIndent(indentCount) + act.Name + "();"); - } - } - - private void GenerateCode(StateMachine machine) - { - StreamWriter sr = new StreamWriter(path); - var indentCount = 0; - - sr.WriteLine(DoIndent(indentCount) + "namespace " + pluginParams.pm.Info.Name); - sr.WriteLine(DoIndent(indentCount) + "{"); - ++indentCount; - - sr.WriteLine(DoIndent(indentCount) + "public abstract class " + machine.Name); - sr.WriteLine(DoIndent(indentCount) + "{"); - indentCount++; - - //Состояния. - sr.WriteLine(DoIndent(indentCount) + "public enum " + statesEnumName); - sr.WriteLine(DoIndent(indentCount) + "{"); - indentCount++; - foreach (var state in machine.States) - { - sr.WriteLine(DoIndent(indentCount) + state.TheAttributes.Name + ","); - } - indentCount--; - sr.WriteLine(DoIndent(indentCount) + "}"); - - //Переходы. - sr.WriteLine(DoIndent(indentCount) + "public enum Transitions"); - sr.WriteLine(DoIndent(indentCount) + "{"); - indentCount++; - foreach (var transition in machine.Transitions) - { - sr.WriteLine(DoIndent(indentCount) + transition.TheAttributes.Name + ","); - } - indentCount--; - sr.WriteLine(DoIndent(indentCount) + "}"); - - //События. - /* - sr.WriteLine(DoIndent(indentCount) + "public enum Events"); - sr.WriteLine(DoIndent(indentCount) + "{"); - indentCount++; - foreach (var anEvent in machine.Events) - { - sr.WriteLine(DoIndent(indentCount) + anEvent.SafeName + ","); - } - indentCount--; - sr.WriteLine(DoIndent(indentCount) + "}"); - * */ - - //Переменная, в которой хранится состояние. - sr.WriteLine(DoIndent(indentCount) + "private {0} state;", statesEnumName); - - WriteNestedMachines(sr, indentCount, machine); - - WriteConstructor(sr, indentCount, machine); - - //Объявления выходных воздействий. - WriteActionsDeclarations(sr, indentCount, machine); - - //Функция обработки событий. - WriteStateProcessor(sr, indentCount, machine, false); - - WriteStateProcessor(sr, indentCount, machine, true); - - indentCount--; - sr.WriteLine(DoIndent(indentCount) + "}"); - - --indentCount; - sr.WriteLine(DoIndent(indentCount) + "}"); - sr.Close(); - } - - #region definitions - private void WriteNestedMachines(StreamWriter sr, int _indentCount, StateMachine machine) - { - int indentCount = _indentCount; - foreach (var state in machine.States) - { - if (state.TheAttributes.NestedMachines == null) - { - continue; - } - - foreach (var nestedMachine in state.TheAttributes.NestedMachines) - { - sr.WriteLine(DoIndent(indentCount) + "public {0} {1} {{ get; set; }}", nestedMachine.Type, nestedMachine.Name); - } - } - } - #endregion - } \ No newline at end of file diff --git a/src/plugins/SLXParser/SLXParser.csproj b/src/plugins/SLXParser/SLXParser.csproj deleted file mode 100644 index ad31220..0000000 --- a/src/plugins/SLXParser/SLXParser.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - net8.0 - enable - enable - - - - ../../Stater/lib/ - - - - ../../Stater/lib/ - - - - - - - From e37c2e1e4defcb8bbfc1129c7122ed9fc747f1f0 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 23 Mar 2025 19:28:28 +0300 Subject: [PATCH 28/69] Kotlin testing --- Stater.sln.DotSettings.user | 2 +- .../DoorStateMachineTestData.cs | 10 +- .../Kotlin/KotlinAdapterDoorTests.cs | 775 +++++++++++++++++- src/Stater.CodeGeneration/CodeGenerator.cs | 17 +- .../Entity/GenerationSettings.cs | 9 +- src/Stater.CodeGeneration/Entity/Mode.cs | 2 +- .../LanguageAdapter/Kotlin/KotlinAdapter.cs | 54 +- .../Stater.CodeGeneration.csproj | 13 +- .../Templates/Kotlin/builder.scriban | 41 - .../Templates/Kotlin/builderContext.scriban | 41 - .../Templates/Kotlin/builderState.scriban | 41 - .../Kotlin/builderStateContext.scriban | 41 - .../Templates/Kotlin/class.scriban | 19 - .../Templates/Kotlin/classContext.scriban | 41 - .../Templates/Kotlin/classState.scriban | 41 - .../Kotlin/classStateContext.scriban | 41 - .../Templates/kotlin.scriban | 54 ++ 17 files changed, 844 insertions(+), 398 deletions(-) delete mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/builder.scriban delete mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/builderContext.scriban delete mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/builderState.scriban delete mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/builderStateContext.scriban delete mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/class.scriban delete mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/classContext.scriban delete mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/classState.scriban delete mode 100644 src/Stater.CodeGeneration/Templates/Kotlin/classStateContext.scriban create mode 100644 src/Stater.CodeGeneration/Templates/kotlin.scriban diff --git a/Stater.sln.DotSettings.user b/Stater.sln.DotSettings.user index b17c6e5..622ba79 100644 --- a/Stater.sln.DotSettings.user +++ b/Stater.sln.DotSettings.user @@ -7,7 +7,7 @@ SOLUTION <SessionState ContinuousTestingMode="0" IsActive="True" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <TestAncestor> - <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests.ClazGenerate</TestId> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> </TestAncestor> </SessionState> True diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs index cb6aa67..7de3d72 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs @@ -1,11 +1,10 @@ -using System.Collections; using Stater.Domain.Models; namespace Stater.CodeGeneration.Tests.LanguageAdapter; -public class DoorStateMachineTestData : IEnumerable +public static class DoorStateMachineTestData { - public IEnumerator GetEnumerator() + public static StateMachine CreateDoorStateMachine() { var open = new State( Guid.NewGuid(), @@ -121,15 +120,12 @@ public IEnumerator GetEnumerator() ajarMinus }; - var stateMachine = new StateMachine( + return new StateMachine( Guid.NewGuid(), "Door", states, transitions, new List { degreeOfOpening } ); - yield return new object[] { stateMachine }; } - - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs index aff1c06..0521ae9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs @@ -5,21 +5,67 @@ namespace Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin; - public class KotlinAdapterDoorTests { private readonly KotlinAdapter adapter = new(); - [Theory] - [ClassData(typeof(DoorStateMachineTestData))] - public void ClazGenerate(StateMachine stateMachine) + [Fact] + public void ClazzGenerate() { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = EmptyContext() + ) + """, result); + } + + [Fact] + public void ClazzGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var settings = new GenerationSettings( Language.Kotlin, - Mode.Claz, - false, - false, - false + GenerateInterface: true ); var result = adapter.Generate(stateMachine, settings); @@ -60,20 +106,417 @@ class DoorStateMachine : StaterStateMachine( ), startState = "OPEN", context = EmptyContext() + ) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + } + """, result); + } + + [Fact] + public void ClazzStateGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + GenerateStates: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + enum class States { + OPEN, + AJAR, + CLOSE + } + + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() ) """, result); } + + [Fact] + public void ClazzStateGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + GenerateStates: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + enum class States { + OPEN, + AJAR, + CLOSE + } + + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() + ) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + } + """, result); + } + + [Fact] + public void ClazzContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + GenerateContext: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + data class DoorFSMContext( + var degreeOfOpening: Int = 100, + ) : Context + + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = DoorFSMContext() + ) + """, result); + } + + [Fact] + public void ClazzContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + GenerateContext: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + data class DoorFSMContext( + var degreeOfOpening: Int = 100, + ) : Context + + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = DoorFSMContext() + ) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + } + """, result); + } + + [Fact] + public void ClazzStateContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + GenerateStates: true, + GenerateContext: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + enum class States { + OPEN, + AJAR, + CLOSE + } + + data class DoorFSMContext( + var degreeOfOpening: Int = 100, + ) : Context + + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = DoorFSMContext() + ) + """, result); + } + + [Fact] + public void ClazzStateContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + GenerateStates: true, + GenerateContext: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + enum class States { + OPEN, + AJAR, + CLOSE + } + + data class DoorFSMContext( + var degreeOfOpening: Int = 100, + ) : Context + + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = DoorFSMContext() + ) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + } + """, result); + } - [Theory] - [ClassData(typeof(DoorStateMachineTestData))] - public void ClazGenerateWithInterface(StateMachine stateMachine) + [Fact] + public void BuilderGenerate() { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var settings = new GenerationSettings( Language.Kotlin, - Mode.Claz, - false, - false, - true + Mode.Builder + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") + """, result); + } + + [Fact] + public void BuilderGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + Mode.Builder, + GenerateInterface: true ); var result = adapter.Generate(stateMachine, settings); @@ -114,7 +557,307 @@ class DoorStateMachine : StaterStateMachine( ), startState = "OPEN", context = EmptyContext() - ) + ) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + } + """, result); + } + + [Fact] + public void BuilderStateGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + Mode.Builder, + GenerateStates: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + enum class States { + OPEN, + AJAR, + CLOSE + } + + val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) """, result); } + + [Fact] + public void BuilderStateGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + Mode.Builder, + GenerateStates: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + enum class States { + OPEN, + AJAR, + CLOSE + } + + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() + ) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + } + """, result); + } + + [Fact] + public void BuilderContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + Mode.Builder, + GenerateContext: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + data class DoorFSMContext( + var degreeOfOpening: Int = 100, + ) : Context + + val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(DoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") + """, result); + } + + [Fact] + public void BuilderContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + Mode.Builder, + GenerateContext: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + data class DoorFSMContext( + var degreeOfOpening: Int = 100, + ) : Context + + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = DoorFSMContext() + ) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + } + """, result); + } + + [Fact] + public void BuilderStateContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + Mode.Builder, + GenerateStates: true, + GenerateContext: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + enum class States { + OPEN, + AJAR, + CLOSE + } + + data class DoorFSMContext( + var degreeOfOpening: Int = 100, + ) : Context + + val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(DoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + """, result); + } + + [Fact] + public void BuilderStateContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Kotlin, + Mode.Builder, + GenerateStates: true, + GenerateContext: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + enum class States { + OPEN, + AJAR, + CLOSE + } + + data class DoorFSMContext( + var degreeOfOpening: Int = 100, + ) : Context + + class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() + ) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + } + """, result); + } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/CodeGenerator.cs b/src/Stater.CodeGeneration/CodeGenerator.cs index c6a8127..9a34f37 100644 --- a/src/Stater.CodeGeneration/CodeGenerator.cs +++ b/src/Stater.CodeGeneration/CodeGenerator.cs @@ -1,16 +1,25 @@ using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Kotlin; using Stater.Domain.Models; namespace Stater.CodeGeneration; public class CodeGenerator { - private CodeGenerator() - { - } + private readonly KotlinAdapter kotlinAdapter = new(); - static void Generate(StateMachine stateMachine, Language language) + public string Generate(StateMachine stateMachine, GenerationSettings generationSettings) { + if (generationSettings is { GenerateEventAndCondition: true, GenerateContext: false }) + { + throw new InvalidDataException(); + } + switch (generationSettings.Language) + { + case Language.Kotlin: return kotlinAdapter.Generate(stateMachine, generationSettings); + } + + return ""; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Entity/GenerationSettings.cs b/src/Stater.CodeGeneration/Entity/GenerationSettings.cs index 951d35c..d30b505 100644 --- a/src/Stater.CodeGeneration/Entity/GenerationSettings.cs +++ b/src/Stater.CodeGeneration/Entity/GenerationSettings.cs @@ -2,8 +2,9 @@ namespace Stater.CodeGeneration.Entity; public record GenerationSettings( Language Language, - Mode Mode, - bool GenerateStates, - bool GenerateContext, - bool GenerateInterface + Mode Mode = Mode.Clazz, + bool GenerateStates = false, + bool GenerateContext = false, + bool GenerateInterface = false, + bool GenerateEventAndCondition = false ); \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Entity/Mode.cs b/src/Stater.CodeGeneration/Entity/Mode.cs index b54a1be..8f2cfa4 100644 --- a/src/Stater.CodeGeneration/Entity/Mode.cs +++ b/src/Stater.CodeGeneration/Entity/Mode.cs @@ -2,5 +2,5 @@ namespace Stater.CodeGeneration.Entity; public enum Mode { - Claz, Builder + Clazz, Builder } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs index 645d161..61da7e9 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs @@ -9,62 +9,16 @@ public class KotlinAdapter : ILanguageAdapter { public string Generate(StateMachine stateMachine, GenerationSettings settings) { - switch (settings.Mode) - { - case Mode.Claz when settings is { GenerateContext: true, GenerateStates: true }: - return GenerateClassStateContext(stateMachine, settings.GenerateInterface); - case Mode.Claz when settings.GenerateStates: - return GenerateClassState(stateMachine, settings.GenerateInterface); - case Mode.Claz when settings.GenerateContext: - return GenerateClassState(stateMachine, settings.GenerateInterface); - case Mode.Claz: - return GenerateClass(stateMachine, settings.GenerateInterface); - case Mode.Builder: - break; - default: - throw new ArgumentOutOfRangeException(nameof(settings)); - } - - return ""; - } - - private static string GenerateClass(StateMachine stateMachine, bool generateInterface) - { - var templateContent = TemplateLoader.LoadTemplate("Kotlin.class"); - var template = Template.Parse(templateContent); - return template.Render(new - { - fsm = stateMachine, generateInterface - }); - } - - private static string GenerateClassContext(StateMachine stateMachine, bool generateInterface) - { - var templateContent = TemplateLoader.LoadTemplate("Kotlin.classContext"); - var template = Template.Parse(templateContent); - return template.Render(new - { - fsm = stateMachine, generateInterface - }); - } - - private static string GenerateClassState(StateMachine stateMachine, bool generateInterface) - { - var templateContent = TemplateLoader.LoadTemplate("Kotlin.classState"); - var template = Template.Parse(templateContent); - return template.Render(new - { - fsm = stateMachine, generateInterface - }); + return RenderTemplate("kotlin", stateMachine, settings); } - private static string GenerateClassStateContext(StateMachine stateMachine, bool generateInterface) + private static string RenderTemplate(string templateName, StateMachine stateMachine, GenerationSettings settings) { - var templateContent = TemplateLoader.LoadTemplate("Kotlin.classStateContext"); + var templateContent = TemplateLoader.LoadTemplate(templateName); var template = Template.Parse(templateContent); return template.Render(new { - fsm = stateMachine, generateInterface + fsm = stateMachine, settings }); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj index 3e288d3..3315e9d 100644 --- a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj +++ b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj @@ -5,19 +5,14 @@ - - - - - - - + - + - + + net8.0 enable diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/builder.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/builder.scriban deleted file mode 100644 index ab2a15d..0000000 --- a/src/Stater.CodeGeneration/Templates/Kotlin/builder.scriban +++ /dev/null @@ -1,41 +0,0 @@ -class {{ fsm.name }}StateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - states = listOf( - "OPEN", - "CLOSE", - "AJAR" - ), - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/builderContext.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/builderContext.scriban deleted file mode 100644 index ab2a15d..0000000 --- a/src/Stater.CodeGeneration/Templates/Kotlin/builderContext.scriban +++ /dev/null @@ -1,41 +0,0 @@ -class {{ fsm.name }}StateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - states = listOf( - "OPEN", - "CLOSE", - "AJAR" - ), - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/builderState.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/builderState.scriban deleted file mode 100644 index ab2a15d..0000000 --- a/src/Stater.CodeGeneration/Templates/Kotlin/builderState.scriban +++ /dev/null @@ -1,41 +0,0 @@ -class {{ fsm.name }}StateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - states = listOf( - "OPEN", - "CLOSE", - "AJAR" - ), - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/builderStateContext.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/builderStateContext.scriban deleted file mode 100644 index ab2a15d..0000000 --- a/src/Stater.CodeGeneration/Templates/Kotlin/builderStateContext.scriban +++ /dev/null @@ -1,41 +0,0 @@ -class {{ fsm.name }}StateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - states = listOf( - "OPEN", - "CLOSE", - "AJAR" - ), - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/class.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/class.scriban deleted file mode 100644 index d4846c3..0000000 --- a/src/Stater.CodeGeneration/Templates/Kotlin/class.scriban +++ /dev/null @@ -1,19 +0,0 @@ -class {{ fsm.name }}StateMachine : StaterStateMachine( - transitions = listOf( - {{- for item in fsm.state_transitions }} - Transition( - name = "{{ item.transition.name }}", - start = "{{ item.start_state.name }}", - end = "{{ item.end_state.name }}" - ){{- if !for.last }}{{ "," }}{{- end }} - {{- end }} - ), - {{- if fsm.start_state != null }} - startState = "{{ fsm.start_state.name }}", - {{- end }} - context = EmptyContext() -) { - {{- for item in fsm.transitions }} - fun {{ item.name }}() = transition("{{ item.name }}") - {{- end }} -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/classContext.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/classContext.scriban deleted file mode 100644 index ab2a15d..0000000 --- a/src/Stater.CodeGeneration/Templates/Kotlin/classContext.scriban +++ /dev/null @@ -1,41 +0,0 @@ -class {{ fsm.name }}StateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - states = listOf( - "OPEN", - "CLOSE", - "AJAR" - ), - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/classState.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/classState.scriban deleted file mode 100644 index ab2a15d..0000000 --- a/src/Stater.CodeGeneration/Templates/Kotlin/classState.scriban +++ /dev/null @@ -1,41 +0,0 @@ -class {{ fsm.name }}StateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - states = listOf( - "OPEN", - "CLOSE", - "AJAR" - ), - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/Kotlin/classStateContext.scriban b/src/Stater.CodeGeneration/Templates/Kotlin/classStateContext.scriban deleted file mode 100644 index ab2a15d..0000000 --- a/src/Stater.CodeGeneration/Templates/Kotlin/classStateContext.scriban +++ /dev/null @@ -1,41 +0,0 @@ -class {{ fsm.name }}StateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - states = listOf( - "OPEN", - "CLOSE", - "AJAR" - ), - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/kotlin.scriban b/src/Stater.CodeGeneration/Templates/kotlin.scriban new file mode 100644 index 0000000..7cd77ed --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/kotlin.scriban @@ -0,0 +1,54 @@ +{{- if settings.generate_states -}} +enum class States { + {{- for item in fsm.states }} + {{ item.name }}{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} +} + +{{ end }} +{{- func state(name) -}} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end -}} +{{- if settings.generate_context -}} +data class {{ fsm.name }}FSMContext( + var degreeOfOpening: Int = 100, +) : Context + +{{ end -}} +{{- if !settings.generate_states; state_generic = "String"; else; state_generic = "States"; end }} +{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} +{{- if settings.mode == "Clazz" -}} +class {{ fsm.name }}StateMachine : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + transitions = listOf( + {{- for item in fsm.state_transitions }} + Transition( + name = "{{ item.transition.name }}", + start = {{ state item.start_state.name }}, + end = {{ state item.end_state.name }} + ){{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ), + {{- if fsm.start_state != null }} + startState = {{ state fsm.start_state.name }}, + {{- end }} + context = {{ context_generic }}() +){{- if settings.generate_interface }} { + {{- for item in fsm.transitions }} + fun {{ item.name }}() = transition("{{ item.name }}") + {{- end }} +} +{{- end }} +{{- else if settings.mode == "Builder" -}} +val builder{{ fsm.name }}StateMachine = StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() + {{- if fsm.start_state != null }} + .setStartState({{ state fsm.start_state.name }}) + {{- end }} + .setContext({{ context_generic }}()) + {{- for item in fsm.state_transitions }} + .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- end }} +{{- end }} \ No newline at end of file From 32453a4d3aa005d3808a79e239fd5c2535254dbc Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 23 Mar 2025 21:58:49 +0300 Subject: [PATCH 29/69] Complete kotlin --- .../Kotlin/KotlinAdapterDoorTests.cs | 424 +++++++++++------- .../LanguageAdapter/RandomFsmGenerator.cs | 6 + .../Stater.CodeGeneration.csproj | 1 + .../Templates/kotlin.scriban | 66 +++ .../Templates/python.scriban | 126 ++++++ 5 files changed, 467 insertions(+), 156 deletions(-) create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/RandomFsmGenerator.cs create mode 100644 src/Stater.CodeGeneration/Templates/python.scriban diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs index 0521ae9..171f458 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs @@ -522,49 +522,77 @@ public void BuilderGenerateWithInterface() var result = adapter.Generate(stateMachine, settings); Assert.Equal( """ - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = EmptyContext() + class TypesDoorStateMachine( + transitions: List>, + startState: String, + states: Set, + context: EmptyContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, + ) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter ) { + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") fun preOpen() = transition("preOpen") fun preClose() = transition("preClose") fun open() = transition("open") fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") } + + private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) + } + + val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") """, result); } @@ -618,50 +646,78 @@ enum class States { AJAR, CLOSE } - - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = EmptyContext() + + class TypesDoorStateMachine( + transitions: List>, + startState: States, + states: Set, + context: EmptyContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, + ) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter ) { + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") fun preOpen() = transition("preOpen") fun preClose() = transition("preClose") fun open() = transition("open") fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") } + + private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) + } + + val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) """, result); } @@ -709,50 +765,78 @@ public void BuilderContextGenerateWithContext() data class DoorFSMContext( var degreeOfOpening: Int = 100, ) : Context - - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = DoorFSMContext() + + class TypesDoorStateMachine( + transitions: List>, + startState: String, + states: Set, + context: DoorFSMContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, + ) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter ) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + } + + private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) } + + val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") """, result); } @@ -810,54 +894,82 @@ enum class States { AJAR, CLOSE } - + data class DoorFSMContext( var degreeOfOpening: Int = 100, ) : Context - - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = EmptyContext() + + class TypesDoorStateMachine( + transitions: List>, + startState: States, + states: Set, + context: DoorFSMContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, + ) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter ) { + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") fun preOpen() = transition("preOpen") fun preClose() = transition("preClose") fun open() = transition("open") fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") } + + private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) + } + + val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) """, result); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/RandomFsmGenerator.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/RandomFsmGenerator.cs new file mode 100644 index 0000000..e6f4c70 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/RandomFsmGenerator.cs @@ -0,0 +1,6 @@ +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class RandomFsmGenerator +{ + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj index 3315e9d..aa0b0e3 100644 --- a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj +++ b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj @@ -10,6 +10,7 @@ + diff --git a/src/Stater.CodeGeneration/Templates/kotlin.scriban b/src/Stater.CodeGeneration/Templates/kotlin.scriban index 7cd77ed..85644e9 100644 --- a/src/Stater.CodeGeneration/Templates/kotlin.scriban +++ b/src/Stater.CodeGeneration/Templates/kotlin.scriban @@ -43,11 +43,77 @@ class {{ fsm.name }}StateMachine : StaterStateMachine<{{ state_generic }}, {{ co } {{- end }} {{- else if settings.mode == "Builder" -}} +{{- if settings.generate_interface -}} +class Types{{ fsm.name }}StateMachine( + transitions: List>, + startState: {{ state_generic }}, + states: Set<{{ state_generic }}>, + context: {{ context_generic }}, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map<{{ state_generic }}, List>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter<{{ context_generic }}>? = null, +) : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") +} + +private val typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + Types{{ fsm.name }}StateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +{{ end -}} val builder{{ fsm.name }}StateMachine = StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() {{- if fsm.start_state != null }} .setStartState({{ state fsm.start_state.name }}) {{- end }} .setContext({{ context_generic }}()) + {{- if settings.generate_interface }} + .setFactory(typed{{ fsm.name }}Factory) + {{- end }} {{- for item in fsm.state_transitions }} .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) {{- end }} diff --git a/src/Stater.CodeGeneration/Templates/python.scriban b/src/Stater.CodeGeneration/Templates/python.scriban new file mode 100644 index 0000000..dbc0eea --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/python.scriban @@ -0,0 +1,126 @@ +{{- if settings.generate_states -}} +from enum import Enum +{{ end }} +{{- if settings.generate_states -}} +from pydantic import BaseModel +{{ end }} +from stater_state_machine import Context, StaterStateMachine, Transition, StaterStateMachineBuilder, ContextJsonAdapter + +{{- if settings.generate_states -}} +class States(Enum): + CLOSE = "CLOSE" + AJAR = "AJAR" + OPEN = "OPEN" + +{{ end }} +{{- func state(name) -}} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end -}} +{{- if settings.generate_context -}} +class DoorFSMContext(BaseModel, Context): + degree_of_opening: int = 100 + +{{ end -}} +{{- if !settings.generate_states; state_generic = "String"; else; state_generic = "States"; end }} +{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} +{{- if settings.mode == "Clazz" -}} +class {{ fsm.name }}StateMachine : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + transitions = listOf( + {{- for item in fsm.state_transitions }} + Transition( + name = "{{ item.transition.name }}", + start = {{ state item.start_state.name }}, + end = {{ state item.end_state.name }} + ){{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ), + {{- if fsm.start_state != null }} + startState = {{ state fsm.start_state.name }}, + {{- end }} + context = {{ context_generic }}() +){{- if settings.generate_interface }} { + {{- for item in fsm.transitions }} + fun {{ item.name }}() = transition("{{ item.name }}") + {{- end }} +} +{{- end }} +{{- else if settings.mode == "Builder" -}} +{{- if settings.generate_interface -}} +class Types{{ fsm.name }}StateMachine( + transitions: List>, + startState: {{ state_generic }}, + states: Set<{{ state_generic }}>, + context: {{ context_generic }}, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map<{{ state_generic }}, List>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter<{{ context_generic }}>? = null, +) : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") +} + +private val typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + Types{{ fsm.name }}StateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +{{ end -}} +val builder{{ fsm.name }}StateMachine = StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() + {{- if fsm.start_state != null }} + .setStartState({{ state fsm.start_state.name }}) + {{- end }} + .setContext({{ context_generic }}()) + {{- if settings.generate_interface }} + .setFactory(typed{{ fsm.name }}Factory) + {{- end }} + {{- for item in fsm.state_transitions }} + .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- end }} +{{- end }} \ No newline at end of file From 603b297d30937ec7b7a0d3b8d5eb9154c0653659 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 24 Mar 2025 09:02:42 +0300 Subject: [PATCH 30/69] SF-12: Add python tests --- Stater.sln.DotSettings.user | 1 + .../Python/PythonAdapterDoorTests.cs | 994 ++++++++++++++++++ src/Stater.CodeGeneration/CodeGenerator.cs | 17 + .../LanguageAdapter/Python/PythonAdapter.cs | 24 + .../Templates/python.scriban | 154 ++- 5 files changed, 1095 insertions(+), 95 deletions(-) create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python/PythonAdapterDoorTests.cs create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs diff --git a/Stater.sln.DotSettings.user b/Stater.sln.DotSettings.user index 622ba79..698b247 100644 --- a/Stater.sln.DotSettings.user +++ b/Stater.sln.DotSettings.user @@ -8,6 +8,7 @@ <SessionState ContinuousTestingMode="0" IsActive="True" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <TestAncestor> <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Python.PythonAdapterDoorTests</TestId> </TestAncestor> </SessionState> True diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python/PythonAdapterDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python/PythonAdapterDoorTests.cs new file mode 100644 index 0000000..7c57e7c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python/PythonAdapterDoorTests.cs @@ -0,0 +1,994 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Python; +using Xunit; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter.Python; + +public class PythonAdapterDoorTests +{ + private readonly PythonAdapter adapter = new(); + + [Fact] + public void ClazzGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3 + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + from stater_state_machine import EmptyContext + from stater_state_machine import StaterStateMachine + from stater_state_machine import Transition + + + class DoorStateMachine(StaterStateMachine[str, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR" + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR" + ), + Transition( + name="open", + start="AJAR", + end="OPEN" + ), + Transition( + name="close", + start="AJAR", + end="CLOSE" + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR" + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR" + ) + ], + context=EmptyContext(), + start_state="OPEN", + ) + """, result); + } + + [Fact] + public void ClazzGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + from stater_state_machine import EmptyContext + from stater_state_machine import StaterStateMachine + from stater_state_machine import Transition + + + class DoorStateMachine(StaterStateMachine[str, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR" + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR" + ), + Transition( + name="open", + start="AJAR", + end="OPEN" + ), + Transition( + name="close", + start="AJAR", + end="CLOSE" + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR" + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR" + ) + ], + context=EmptyContext(), + start_state="OPEN", + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + """, result); + } + + [Fact] + public void ClazzStateGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + GenerateStates: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + from enum import Enum + from stater_state_machine import EmptyContext + from stater_state_machine import StaterStateMachine + from stater_state_machine import Transition + + + class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + class DoorStateMachine(StaterStateMachine[States, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR + ) + ], + context=EmptyContext(), + start_state=States.OPEN, + ) + """, result); + } + + [Fact] + public void ClazzStateGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + GenerateStates: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + from enum import Enum + from stater_state_machine import EmptyContext + from stater_state_machine import StaterStateMachine + from stater_state_machine import Transition + + + class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + class DoorStateMachine(StaterStateMachine[States, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR + ) + ], + context=EmptyContext(), + start_state=States.OPEN, + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + """, result); + } + + [Fact] + public void ClazzContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + GenerateContext: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + from pydantic import BaseModel + from stater_state_machine import Context + from stater_state_machine import StaterStateMachine + from stater_state_machine import Transition + + + class DoorFSMContext(BaseModel, Context): + degree_of_opening: int = 100 + + + class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR" + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR" + ), + Transition( + name="open", + start="AJAR", + end="OPEN" + ), + Transition( + name="close", + start="AJAR", + end="CLOSE" + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR" + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR" + ) + ], + context=DoorFSMContext(), + start_state="OPEN", + ) + """, result); + } + + [Fact] + public void ClazzContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + GenerateContext: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + from pydantic import BaseModel + from stater_state_machine import Context + from stater_state_machine import StaterStateMachine + from stater_state_machine import Transition + + + class DoorFSMContext(BaseModel, Context): + degree_of_opening: int = 100 + + + class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR" + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR" + ), + Transition( + name="open", + start="AJAR", + end="OPEN" + ), + Transition( + name="close", + start="AJAR", + end="CLOSE" + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR" + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR" + ) + ], + context=DoorFSMContext(), + start_state="OPEN", + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + """, result); + } + + [Fact] + public void ClazzStateContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + GenerateStates: true, + GenerateContext: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + from enum import Enum + from pydantic import BaseModel + from stater_state_machine import Context + from stater_state_machine import StaterStateMachine + from stater_state_machine import Transition + + + class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + class DoorFSMContext(BaseModel, Context): + degree_of_opening: int = 100 + + + class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR + ) + ], + context=DoorFSMContext(), + start_state=States.OPEN, + ) + """, result); + } + + [Fact] + public void ClazzStateContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + GenerateStates: true, + GenerateContext: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + from enum import Enum + from pydantic import BaseModel + from stater_state_machine import Context + from stater_state_machine import StaterStateMachine + from stater_state_machine import Transition + + + class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + class DoorFSMContext(BaseModel, Context): + degree_of_opening: int = 100 + + + class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR + ) + ], + context=DoorFSMContext(), + start_state=States.OPEN, + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + """, result); + } + + [Fact] + public void BuilderGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + Mode.Builder + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + from stater_state_machine import EmptyContext + from stater_state_machine import StaterStateMachineBuilder + + + builder_Door_state_machine = ( + StaterStateMachineBuilder[str, EmptyContext]() + .set_start_state("OPEN") + .set_context(EmptyContext()) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR") + ) + """, result); + } + + [Fact] + public void BuilderGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + Mode.Builder, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + from stater_state_machine import EmptyContext + from stater_state_machine import StaterStateMachine + from stater_state_machine import StaterStateMachineBuilder + + + class TypesDoorStateMachine(StaterStateMachine[str, EmptyContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + + def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(StaterStateMachine(*args, **kwargs)) + + + builder_Door_state_machine = ( + StaterStateMachineBuilder[str, EmptyContext]() + .set_start_state("OPEN") + .set_context(EmptyContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR") + ) + """, result); + } + + [Fact] + public void BuilderStateGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + Mode.Builder, + GenerateStates: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + from enum import Enum + from stater_state_machine import EmptyContext + from stater_state_machine import StaterStateMachineBuilder + + + class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + builder_Door_state_machine = ( + StaterStateMachineBuilder[States, EmptyContext]() + .set_start_state(States.OPEN) + .set_context(EmptyContext()) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .add_transition("preClose", States.OPEN, States.AJAR) + .add_transition("open", States.AJAR, States.OPEN) + .add_transition("close", States.AJAR, States.CLOSE) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + ) + """, result); + } + + [Fact] + public void BuilderStateGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + Mode.Builder, + GenerateStates: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal( + """ + from enum import Enum + from stater_state_machine import EmptyContext + from stater_state_machine import StaterStateMachine + from stater_state_machine import StaterStateMachineBuilder + + + class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + class TypesDoorStateMachine(StaterStateMachine[States, EmptyContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + + def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(StaterStateMachine(*args, **kwargs)) + + + builder_Door_state_machine = ( + StaterStateMachineBuilder[States, EmptyContext]() + .set_start_state(States.OPEN) + .set_context(EmptyContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .add_transition("preClose", States.OPEN, States.AJAR) + .add_transition("open", States.AJAR, States.OPEN) + .add_transition("close", States.AJAR, States.CLOSE) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + ) + """, result); + } + + [Fact] + public void BuilderContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + Mode.Builder, + GenerateContext: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + from pydantic import BaseModel + from stater_state_machine import Context + from stater_state_machine import StaterStateMachineBuilder + + + class DoorFSMContext(BaseModel, Context): + degree_of_opening: int = 100 + + + builder_Door_state_machine = ( + StaterStateMachineBuilder[str, DoorFSMContext]() + .set_start_state("OPEN") + .set_context(DoorFSMContext()) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR") + ) + """, result); + } + + [Fact] + public void BuilderContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + Mode.Builder, + GenerateContext: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + from pydantic import BaseModel + from stater_state_machine import Context + from stater_state_machine import StaterStateMachine + from stater_state_machine import StaterStateMachineBuilder + + + class DoorFSMContext(BaseModel, Context): + degree_of_opening: int = 100 + + + class TypesDoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + + def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(StaterStateMachine(*args, **kwargs)) + + + builder_Door_state_machine = ( + StaterStateMachineBuilder[str, DoorFSMContext]() + .set_start_state("OPEN") + .set_context(DoorFSMContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR") + ) + """, result); + } + + [Fact] + public void BuilderStateContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + Mode.Builder, + GenerateStates: true, + GenerateContext: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + from enum import Enum + from pydantic import BaseModel + from stater_state_machine import Context + from stater_state_machine import StaterStateMachineBuilder + + + class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + class DoorFSMContext(BaseModel, Context): + degree_of_opening: int = 100 + + + builder_Door_state_machine = ( + StaterStateMachineBuilder[States, DoorFSMContext]() + .set_start_state(States.OPEN) + .set_context(DoorFSMContext()) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .add_transition("preClose", States.OPEN, States.AJAR) + .add_transition("open", States.AJAR, States.OPEN) + .add_transition("close", States.AJAR, States.CLOSE) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + ) + """, result); + } + + [Fact] + public void BuilderStateContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language.Python3, + Mode.Builder, + GenerateStates: true, + GenerateContext: true, + GenerateInterface: true + ); + + var result = adapter.Generate(stateMachine, settings); + Assert.Equal(""" + from enum import Enum + from pydantic import BaseModel + from stater_state_machine import Context + from stater_state_machine import StaterStateMachine + from stater_state_machine import StaterStateMachineBuilder + + + class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + class DoorFSMContext(BaseModel, Context): + degree_of_opening: int = 100 + + + class TypesDoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + + def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(StaterStateMachine(*args, **kwargs)) + + + builder_Door_state_machine = ( + StaterStateMachineBuilder[States, DoorFSMContext]() + .set_start_state(States.OPEN) + .set_context(DoorFSMContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .add_transition("preClose", States.OPEN, States.AJAR) + .add_transition("open", States.AJAR, States.OPEN) + .add_transition("close", States.AJAR, States.CLOSE) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + ) + """, result); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/CodeGenerator.cs b/src/Stater.CodeGeneration/CodeGenerator.cs index 9a34f37..a791612 100644 --- a/src/Stater.CodeGeneration/CodeGenerator.cs +++ b/src/Stater.CodeGeneration/CodeGenerator.cs @@ -1,5 +1,6 @@ using Stater.CodeGeneration.Entity; using Stater.CodeGeneration.LanguageAdapter.Kotlin; +using Stater.CodeGeneration.LanguageAdapter.Python; using Stater.Domain.Models; namespace Stater.CodeGeneration; @@ -7,6 +8,7 @@ namespace Stater.CodeGeneration; public class CodeGenerator { private readonly KotlinAdapter kotlinAdapter = new(); + private readonly PythonAdapter pythonAdapter = new(); public string Generate(StateMachine stateMachine, GenerationSettings generationSettings) { @@ -18,6 +20,21 @@ public string Generate(StateMachine stateMachine, GenerationSettings generationS switch (generationSettings.Language) { case Language.Kotlin: return kotlinAdapter.Generate(stateMachine, generationSettings); + case Language.Java: + break; + case Language.CSharp: + break; + case Language.Python3: return pythonAdapter.Generate(stateMachine, generationSettings); + case Language.JavaScript: + break; + case Language.TypeScript: + break; + case Language.C: + break; + case Language.CPlusPlus: + break; + default: + throw new ArgumentOutOfRangeException(nameof(generationSettings)); } return ""; diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs new file mode 100644 index 0000000..41c1bb2 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs @@ -0,0 +1,24 @@ +using Scriban; +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.LanguageAdapter.Python; + +public class PythonAdapter : ILanguageAdapter +{ + public string Generate(StateMachine stateMachine, GenerationSettings settings) + { + return RenderTemplate("python", stateMachine, settings); + } + + private static string RenderTemplate(string templateName, StateMachine stateMachine, GenerationSettings settings) + { + var templateContent = TemplateLoader.LoadTemplate(templateName); + var template = Template.Parse(templateContent); + return template.Render(new + { + fsm = stateMachine, settings + }); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/python.scriban b/src/Stater.CodeGeneration/Templates/python.scriban index dbc0eea..6433168 100644 --- a/src/Stater.CodeGeneration/Templates/python.scriban +++ b/src/Stater.CodeGeneration/Templates/python.scriban @@ -1,16 +1,16 @@ -{{- if settings.generate_states -}} -from enum import Enum -{{ end }} -{{- if settings.generate_states -}} -from pydantic import BaseModel -{{ end }} -from stater_state_machine import Context, StaterStateMachine, Transition, StaterStateMachineBuilder, ContextJsonAdapter +{{- if settings.generate_states }}from enum import Enum{{ "\n" }}{{- end }} +{{- if settings.generate_context }}from pydantic import BaseModel{{ "\n" }}{{- end }} +{{- if settings.generate_context }}from stater_state_machine import Context{{ "\n" }}{{- else }}from stater_state_machine import EmptyContext{{ "\n" }}{{- end }} +{{- if settings.generate_interface || settings.mode == "Clazz" }}from stater_state_machine import StaterStateMachine{{ "\n" }}{{- end }} +{{- if settings.mode == "Builder" }}from stater_state_machine import StaterStateMachineBuilder{{ "\n" }}{{- end }} +{{- if settings.mode == "Clazz" }}from stater_state_machine import Transition{{ "\n" }}{{- end }} -{{- if settings.generate_states -}} +{{ if settings.generate_states -}} class States(Enum): - CLOSE = "CLOSE" - AJAR = "AJAR" - OPEN = "OPEN" + {{- for item in fsm.states }} + {{ item.name }} = "{{ item.name }}" + {{- end }} + {{ end }} {{- func state(name) -}} @@ -24,103 +24,67 @@ States.{{ name }} class DoorFSMContext(BaseModel, Context): degree_of_opening: int = 100 + {{ end -}} -{{- if !settings.generate_states; state_generic = "String"; else; state_generic = "States"; end }} +{{- if !settings.generate_states; state_generic = "str"; else; state_generic = "States"; end }} {{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} {{- if settings.mode == "Clazz" -}} -class {{ fsm.name }}StateMachine : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( - transitions = listOf( - {{- for item in fsm.state_transitions }} - Transition( - name = "{{ item.transition.name }}", - start = {{ state item.start_state.name }}, - end = {{ state item.end_state.name }} - ){{- if !for.last }}{{ "," }}{{- end }} - {{- end }} - ), - {{- if fsm.start_state != null }} - startState = {{ state fsm.start_state.name }}, - {{- end }} - context = {{ context_generic }}() -){{- if settings.generate_interface }} { - {{- for item in fsm.transitions }} - fun {{ item.name }}() = transition("{{ item.name }}") - {{- end }} -} +class {{ fsm.name }}StateMachine(StaterStateMachine[{{ state_generic }}, {{ context_generic }}]): + def __init__(self): + super().__init__( + transitions=[ + {{- for item in fsm.state_transitions }} + Transition( + name="{{ item.transition.name }}", + start={{ state item.start_state.name }}, + end={{ state item.end_state.name }} + ){{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ], + context={{ context_generic }}(), + {{- if fsm.start_state != null }} + start_state={{ state fsm.start_state.name }}, + {{- end }} + ) +{{- if settings.generate_interface }} +{{ end -}} +{{- if settings.generate_interface }} +{{- for item in fsm.transitions }} + def {{ item.name }}(self): + self.transition("{{ item.name }}") +{{- if !for.last }} +{{ end -}} +{{- end -}} {{- end }} + {{- else if settings.mode == "Builder" -}} {{- if settings.generate_interface -}} -class Types{{ fsm.name }}StateMachine( - transitions: List>, - startState: {{ state_generic }}, - states: Set<{{ state_generic }}>, - context: {{ context_generic }}, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map<{{ state_generic }}, List>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter<{{ context_generic }}>? = null, -) : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -) { - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") -} +class Types{{ fsm.name }}StateMachine(StaterStateMachine[{{ state_generic }}, {{ context_generic }}]): + {{- for item in fsm.transitions }} + def {{ item.name }}(self): + self.transition("{{ item.name }}") + {{- if !for.last }} + {{ end -}} + + {{- end }} + + +def typed_{{ fsm.name }}_factory(*args, **kwargs): + return Types{{ fsm.name }}StateMachine(StaterStateMachine(*args, **kwargs)) -private val typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - Types{{ fsm.name }}StateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} {{ end -}} -val builder{{ fsm.name }}StateMachine = StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() +builder_{{ fsm.name }}_state_machine = ( + StaterStateMachineBuilder[{{ state_generic }}, {{ context_generic }}]() {{- if fsm.start_state != null }} - .setStartState({{ state fsm.start_state.name }}) + .set_start_state({{ state fsm.start_state.name }}) {{- end }} - .setContext({{ context_generic }}()) + .set_context({{ context_generic }}()) {{- if settings.generate_interface }} - .setFactory(typed{{ fsm.name }}Factory) + .set_factory(typed_{{ fsm.name }}_factory) {{- end }} {{- for item in fsm.state_transitions }} - .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + .add_transition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) {{- end }} +) {{- end }} \ No newline at end of file From 9cd20d8bc6487bcf5a3e4a227f1e8cb1bf3e41fd Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 25 Mar 2025 22:12:20 +0300 Subject: [PATCH 31/69] SF-12: add typescript generation --- src/Stater.CodeGeneration/CodeGenerator.cs | 10 +- .../LanguageAdapter/Base/TemplateLoader.cs | 13 +++ .../JavaScript/JavaScriptAdapter.cs | 13 +++ .../LanguageAdapter/Kotlin/KotlinAdapter.cs | 12 +-- .../LanguageAdapter/Python/PythonAdapter.cs | 12 +-- .../TypeScript/TypeScriptAdapter.cs | 13 +++ .../Stater.CodeGeneration.csproj | 2 + .../Templates/javascript.scriban | 0 .../Templates/typescript.scriban | 95 +++++++++++++++++++ 9 files changed, 144 insertions(+), 26 deletions(-) create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs create mode 100644 src/Stater.CodeGeneration/Templates/javascript.scriban create mode 100644 src/Stater.CodeGeneration/Templates/typescript.scriban diff --git a/src/Stater.CodeGeneration/CodeGenerator.cs b/src/Stater.CodeGeneration/CodeGenerator.cs index a791612..69b9b0f 100644 --- a/src/Stater.CodeGeneration/CodeGenerator.cs +++ b/src/Stater.CodeGeneration/CodeGenerator.cs @@ -1,6 +1,8 @@ using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.JavaScript; using Stater.CodeGeneration.LanguageAdapter.Kotlin; using Stater.CodeGeneration.LanguageAdapter.Python; +using Stater.CodeGeneration.LanguageAdapter.TypeScript; using Stater.Domain.Models; namespace Stater.CodeGeneration; @@ -9,6 +11,8 @@ public class CodeGenerator { private readonly KotlinAdapter kotlinAdapter = new(); private readonly PythonAdapter pythonAdapter = new(); + private readonly JavaScriptAdapter javaScriptAdapter = new(); + private readonly TypeScriptAdapter typeScriptAdapter = new(); public string Generate(StateMachine stateMachine, GenerationSettings generationSettings) { @@ -25,10 +29,8 @@ public string Generate(StateMachine stateMachine, GenerationSettings generationS case Language.CSharp: break; case Language.Python3: return pythonAdapter.Generate(stateMachine, generationSettings); - case Language.JavaScript: - break; - case Language.TypeScript: - break; + case Language.JavaScript:return javaScriptAdapter.Generate(stateMachine, generationSettings); + case Language.TypeScript:return typeScriptAdapter.Generate(stateMachine, generationSettings); case Language.C: break; case Language.CPlusPlus: diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs index 5d9d4a4..af725ea 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs @@ -1,4 +1,7 @@ using System.Reflection; +using Scriban; +using Stater.CodeGeneration.Entity; +using Stater.Domain.Models; namespace Stater.CodeGeneration.LanguageAdapter.Base; @@ -15,4 +18,14 @@ public static string LoadTemplate(string templateName) using var reader = new StreamReader(stream); return reader.ReadToEnd(); } + + public static string RenderTemplate(string templateName, StateMachine stateMachine, GenerationSettings settings) + { + var templateContent = LoadTemplate(templateName); + var template = Template.Parse(templateContent); + return template.Render(new + { + fsm = stateMachine, settings + }); + } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs new file mode 100644 index 0000000..40a93b2 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs @@ -0,0 +1,13 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.LanguageAdapter.JavaScript; + +public class JavaScriptAdapter : ILanguageAdapter +{ + public string Generate(StateMachine stateMachine, GenerationSettings settings) + { + return TemplateLoader.RenderTemplate("javascript", stateMachine, settings); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs index 61da7e9..20c444b 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs @@ -9,16 +9,6 @@ public class KotlinAdapter : ILanguageAdapter { public string Generate(StateMachine stateMachine, GenerationSettings settings) { - return RenderTemplate("kotlin", stateMachine, settings); - } - - private static string RenderTemplate(string templateName, StateMachine stateMachine, GenerationSettings settings) - { - var templateContent = TemplateLoader.LoadTemplate(templateName); - var template = Template.Parse(templateContent); - return template.Render(new - { - fsm = stateMachine, settings - }); + return TemplateLoader.RenderTemplate("kotlin", stateMachine, settings); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs index 41c1bb2..f674c82 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs @@ -9,16 +9,6 @@ public class PythonAdapter : ILanguageAdapter { public string Generate(StateMachine stateMachine, GenerationSettings settings) { - return RenderTemplate("python", stateMachine, settings); - } - - private static string RenderTemplate(string templateName, StateMachine stateMachine, GenerationSettings settings) - { - var templateContent = TemplateLoader.LoadTemplate(templateName); - var template = Template.Parse(templateContent); - return template.Render(new - { - fsm = stateMachine, settings - }); + return TemplateLoader.RenderTemplate("python", stateMachine, settings); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs new file mode 100644 index 0000000..81cbc40 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs @@ -0,0 +1,13 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.LanguageAdapter.TypeScript; + +public class TypeScriptAdapter : ILanguageAdapter +{ + public string Generate(StateMachine stateMachine, GenerationSettings settings) + { + return TemplateLoader.RenderTemplate("typescript", stateMachine, settings); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj index aa0b0e3..54cb3fb 100644 --- a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj +++ b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj @@ -11,6 +11,8 @@ + + diff --git a/src/Stater.CodeGeneration/Templates/javascript.scriban b/src/Stater.CodeGeneration/Templates/javascript.scriban new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration/Templates/typescript.scriban b/src/Stater.CodeGeneration/Templates/typescript.scriban new file mode 100644 index 0000000..75e73a5 --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/typescript.scriban @@ -0,0 +1,95 @@ +{{- if settings.generate_context }}import {Context} from "./StaterStateMachine";{{ "\n" }}{{- else }}import {EmptyContext} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.generate_interface }}import {StateMachineFactory} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.generate_interface || settings.mode == "Clazz" }}import {StaterStateMachine} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.mode == "Builder" }}import {StaterStateMachineBuilder} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.mode == "Clazz" }}{{ "\n" }}{{- end }} +{{ if settings.generate_states -}} +enum States { + {{- for item in fsm.states }} + {{ item.name }} = "{{ item.name }}"{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} +} + +{{ end }} +{{- func state(name) -}} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end -}} +{{- if settings.generate_context -}} +interface {{ fsm.name }}FSMContext extends Context { + degreeOfOpening: number +} + +const build{{ fsm.name }}FSMContext: () => {{ fsm.name }}FSMContext = () => { + return {degreeOfOpening: 100} +} + + +{{ end -}} +{{- if !settings.generate_states; state_generic = "string"; else; state_generic = "States"; end }} +{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} +{{- if !settings.generate_context; context_generic_builder = "new EmptyContext()"; else; context_generic_builder = "build"+fsm.name+"FSMContext()"; end -}} +{{- if settings.mode == "Clazz" -}} +class {{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { + constructor() { + super( + [ + {{- for item in fsm.state_transitions }} + { + name: "{{ item.transition.name }}", + start: {{ state item.start_state.name }}, + end: {{ state item.end_state.name }} + }{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ], + {{ context_generic_builder }}, + {{- if fsm.start_state != null }} + {{ state fsm.start_state.name }}, + {{- end }} + ) + } +{{- if settings.generate_interface }} +{{ end -}} +{{- if settings.generate_interface }} +{{- for item in fsm.transitions }} + {{ item.name }}() { + this.transition("{{ item.name }}") + } +{{- if !for.last }} +{{ end -}} +{{- end }} +{{- end }} +} + +{{- else if settings.mode == "Builder" -}} +{{- if settings.generate_interface -}} +class Types{{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { +{{- for item in fsm.transitions }} + {{ item.name }}() { + this.transition("{{ item.name }}") + } +{{- if !for.last }} +{{ end -}} +{{- end }} +} + +const typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = (...args): StaterStateMachine<{{ state_generic }}, {{ context_generic }}> => { + return new Types{{ fsm.name }}StateMachine(...args); +}; + +{{ end -}} +const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() + {{- if fsm.start_state != null }} + .setStartState({{ state fsm.start_state.name }}) + {{- end }} + .setContext({{ context_generic_builder }}) + {{- if settings.generate_interface }} + .setFactory(typed{{ fsm.name }}Factory) + {{- end }} + {{- for item in fsm.state_transitions }} + .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- end }} +{{- end }} \ No newline at end of file From d77f2cf9723e37f54f270288e0798da2c89e4fc5 Mon Sep 17 00:00:00 2001 From: phoenix Date: Wed, 26 Mar 2025 09:24:04 +0300 Subject: [PATCH 32/69] SF-12: add js --- .github/code_generation_tests.txt | 43 +++++++++ .../Templates/javascript.scriban | 89 +++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 .github/code_generation_tests.txt diff --git a/.github/code_generation_tests.txt b/.github/code_generation_tests.txt new file mode 100644 index 0000000..c354cf6 --- /dev/null +++ b/.github/code_generation_tests.txt @@ -0,0 +1,43 @@ +#name: Code Generation Tests +# +#on: +# push: +# pull_request: +# +#jobs: +# test-python: +# runs-on: ubuntu-latest +# strategy: +# matrix: +# python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] +# steps: +# - name: Set up Python +# uses: actions/setup-python@v2 +# with: +# python-version: ${{ matrix.python-version }} +# +# - name: Install Poetry +# run: | +# python -m pip install --upgrade pip +# pip install poetry +# +# - name: Install dependencies +# run: | +# cd projects/python +# poetry install --no-root +# +# - name: Install pytest and pytest-cov +# run: | +# cd projects/python +# poetry add --dev pytest pytest-cov +# +# - name: Run tests with pytest +# run: | +# cd projects/python +# poetry run pytest --cov --junitxml=junit.xml -o junit_family=legacy +# +## - name: Upload coverage reports to Codecov +## uses: codecov/test-results-action@v1 +## with: +## files: projects/python/junit.xml +## token: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/javascript.scriban b/src/Stater.CodeGeneration/Templates/javascript.scriban index e69de29..224c813 100644 --- a/src/Stater.CodeGeneration/Templates/javascript.scriban +++ b/src/Stater.CodeGeneration/Templates/javascript.scriban @@ -0,0 +1,89 @@ +{{- if settings.generate_context }}import {Context} from "./StaterStateMachine";{{ "\n" }}{{- else }}import {EmptyContext} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.generate_interface }}import {StateMachineFactory} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.generate_interface || settings.mode == "Clazz" }}import {StaterStateMachine} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.mode == "Builder" }}import {StaterStateMachineBuilder} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.mode == "Clazz" }}{{ "\n" }}{{- end }} +{{ if settings.generate_states -}} +const States = Object.freeze({ + {{- for item in fsm.states }} + {{ item.name }}: "{{ item.name }}"{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} +}); + +{{ end }} +{{- func state(name) -}} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end -}} +{{- if settings.generate_context -}} +const build{{ fsm.name }}FSMContext = () => { + return {degreeOfOpening: 100} +} + + +{{ end -}} +{{- if !settings.generate_states; state_generic = "string"; else; state_generic = "States"; end }} +{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} +{{- if !settings.generate_context; context_generic_builder = "new EmptyContext()"; else; context_generic_builder = "build"+fsm.name+"FSMContext()"; end -}} +{{- if settings.mode == "Clazz" -}} +class {{ fsm.name }}StateMachine extends StaterStateMachine { + constructor() { + super( + [ + {{- for item in fsm.state_transitions }} + { + name: "{{ item.transition.name }}", + start: {{ state item.start_state.name }}, + end: {{ state item.end_state.name }} + }{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ], + {{ context_generic_builder }}, + {{- if fsm.start_state != null }} + {{ state fsm.start_state.name }}, + {{- end }} + ) + } +{{- if settings.generate_interface }} +{{ end -}} +{{- if settings.generate_interface }} +{{- for item in fsm.transitions }} + {{ item.name }}() { + this.transition("{{ item.name }}") + } +{{- if !for.last }} +{{ end -}} +{{- end }} +{{- end }} +} + +{{- else if settings.mode == "Builder" -}} +{{- if settings.generate_interface -}} +class Types{{ fsm.name }}StateMachine extends StaterStateMachine { +{{- for item in fsm.transitions }} + {{ item.name }}() { + this.transition("{{ item.name }}") + } +{{- if !for.last }} +{{ end -}} +{{- end }} +} + +const typed{{ fsm.name }}Factory = (...args) => new Types{{ fsm.name }}StateMachine(...args); + +{{ end -}} +const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder() + {{- if fsm.start_state != null }} + .setStartState({{ state fsm.start_state.name }}) + {{- end }} + .setContext({{ context_generic_builder }}) + {{- if settings.generate_interface }} + .setFactory(typed{{ fsm.name }}Factory) + {{- end }} + {{- for item in fsm.state_transitions }} + .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- end }} +{{- end }} \ No newline at end of file From e1d17138d193cdad24d10e3abbd784d053238708 Mon Sep 17 00:00:00 2001 From: phoenix Date: Wed, 26 Mar 2025 21:27:20 +0300 Subject: [PATCH 33/69] SF-24: add serialize values in generated code --- .../DoorStateMachineTestData.cs | 17 ++++++++++- .../Base/BaseLanguageAdapter.cs | 23 +++++++++++++++ .../LanguageAdapter/Base/ILanguageAdapter.cs | 9 ------ .../LanguageAdapter/Base/TemplateLoader.cs | 23 +++++++++++---- .../JavaScript/JavaScriptAdapter.cs | 21 +++++++++++--- .../LanguageAdapter/Kotlin/KotlinAdapter.cs | 29 +++++++++++++++---- .../LanguageAdapter/Python/PythonAdapter.cs | 29 +++++++++++++++---- .../TypeScript/TypeScriptAdapter.cs | 28 +++++++++++++++--- .../Templates/javascript.scriban | 6 +++- .../Templates/kotlin.scriban | 4 ++- .../Templates/python.scriban | 5 ++-- .../Templates/typescript.scriban | 10 +++++-- src/Stater.Domain/Models/Event.cs | 4 +-- 13 files changed, 166 insertions(+), 42 deletions(-) create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs delete mode 100644 src/Stater.CodeGeneration/LanguageAdapter/Base/ILanguageAdapter.cs diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs index 7de3d72..2fad03e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/DoorStateMachineTestData.cs @@ -49,6 +49,21 @@ public static StateMachine CreateDoorStateMachine() "degreeOfOpening", new VariableValue.IntVariable(0) ); + var closeVariable = new Variable( + Guid.NewGuid(), + "closeVariable", + new VariableValue.BoolVariable(false) + ); + var nameVariable = new Variable( + Guid.NewGuid(), + "doorName", + new VariableValue.StringVariable("asd") + ); + var degreeOfOpeningFloat = new Variable( + Guid.NewGuid(), + "floatVariable", + new VariableValue.FloatVariable(0) + ); var preOpen = new Transition( @@ -125,7 +140,7 @@ public static StateMachine CreateDoorStateMachine() "Door", states, transitions, - new List { degreeOfOpening } + new List { degreeOfOpening, closeVariable, nameVariable, degreeOfOpeningFloat } ); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs new file mode 100644 index 0000000..9ad5364 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs @@ -0,0 +1,23 @@ +using Stater.CodeGeneration.Entity; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.LanguageAdapter.Base; + +public abstract class BaseLanguageAdapter +{ + protected abstract string TemplateName { get; } + + protected abstract string GetVariableValueTypeName(VariableValue value); + protected abstract string GetVariableValue(VariableValue value); + + public string Generate(StateMachine stateMachine, GenerationSettings settings) + { + return TemplateLoader.RenderTemplate( + TemplateName, + stateMachine, + settings, + GetVariableValueTypeName, + GetVariableValue + ); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/ILanguageAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/ILanguageAdapter.cs deleted file mode 100644 index 4e7fc51..0000000 --- a/src/Stater.CodeGeneration/LanguageAdapter/Base/ILanguageAdapter.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Stater.CodeGeneration.Entity; -using Stater.Domain.Models; - -namespace Stater.CodeGeneration.LanguageAdapter.Base; - -public interface ILanguageAdapter -{ - string Generate(StateMachine stateMachine, GenerationSettings settings); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs index af725ea..f28294c 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs @@ -1,5 +1,6 @@ using System.Reflection; using Scriban; +using Scriban.Runtime; using Stater.CodeGeneration.Entity; using Stater.Domain.Models; @@ -19,13 +20,25 @@ public static string LoadTemplate(string templateName) return reader.ReadToEnd(); } - public static string RenderTemplate(string templateName, StateMachine stateMachine, GenerationSettings settings) + public static string RenderTemplate( + string templateName, + StateMachine stateMachine, + GenerationSettings settings, + Func convertVariableType, + Func convertVariableValue + ) { + var scriptObject = new ScriptObject(); + scriptObject.Import("convert_variable_type", new Func(convertVariableType)); + scriptObject.Import("convert_variable_value", new Func(convertVariableValue)); + scriptObject["fsm"] = stateMachine; + scriptObject["settings"] = settings; + + var context = new TemplateContext(); + context.PushGlobal(scriptObject); + var templateContent = LoadTemplate(templateName); var template = Template.Parse(templateContent); - return template.Render(new - { - fsm = stateMachine, settings - }); + return template.Render(context); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs index 40a93b2..f8235cb 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs @@ -1,13 +1,26 @@ -using Stater.CodeGeneration.Entity; using Stater.CodeGeneration.LanguageAdapter.Base; using Stater.Domain.Models; namespace Stater.CodeGeneration.LanguageAdapter.JavaScript; -public class JavaScriptAdapter : ILanguageAdapter +public class JavaScriptAdapter : BaseLanguageAdapter { - public string Generate(StateMachine stateMachine, GenerationSettings settings) + protected override string TemplateName => "javascript"; + + protected override string GetVariableValueTypeName(VariableValue value) + { + throw new NotImplementedException(); + } + + protected override string GetVariableValue(VariableValue value) { - return TemplateLoader.RenderTemplate("javascript", stateMachine, settings); + return value switch + { + VariableValue.IntVariable variable => variable.ToString(), + VariableValue.BoolVariable variable => variable.Value ? "false" : "true", + VariableValue.StringVariable variable => '"' + variable.Value + '"', + VariableValue.FloatVariable variable => variable + ".0", + _ => "unknown" + }; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs index 20c444b..6499411 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs @@ -1,14 +1,33 @@ -using Scriban; -using Stater.CodeGeneration.Entity; using Stater.CodeGeneration.LanguageAdapter.Base; using Stater.Domain.Models; namespace Stater.CodeGeneration.LanguageAdapter.Kotlin; -public class KotlinAdapter : ILanguageAdapter +public class KotlinAdapter : BaseLanguageAdapter { - public string Generate(StateMachine stateMachine, GenerationSettings settings) + protected override string TemplateName => "kotlin"; + + protected override string GetVariableValueTypeName(VariableValue value) + { + return value switch + { + VariableValue.IntVariable => "Int", + VariableValue.BoolVariable => "Boolean", + VariableValue.StringVariable => "String", + VariableValue.FloatVariable => "Float", + _ => "unknown" + }; + } + + protected override string GetVariableValue(VariableValue value) { - return TemplateLoader.RenderTemplate("kotlin", stateMachine, settings); + return value switch + { + VariableValue.IntVariable variable => variable.ToString(), + VariableValue.BoolVariable variable => variable.Value ? "false" : "true", + VariableValue.StringVariable variable => '"' + variable.Value + '"', + VariableValue.FloatVariable variable => variable.ToString() + 'f', + _ => "unknown" + }; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs index f674c82..5793a7f 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs @@ -1,14 +1,33 @@ -using Scriban; -using Stater.CodeGeneration.Entity; using Stater.CodeGeneration.LanguageAdapter.Base; using Stater.Domain.Models; namespace Stater.CodeGeneration.LanguageAdapter.Python; -public class PythonAdapter : ILanguageAdapter +public class PythonAdapter : BaseLanguageAdapter { - public string Generate(StateMachine stateMachine, GenerationSettings settings) + protected override string TemplateName => "python"; + + protected override string GetVariableValueTypeName(VariableValue value) + { + return value switch + { + VariableValue.IntVariable => "int", + VariableValue.BoolVariable => "bool", + VariableValue.StringVariable => "str", + VariableValue.FloatVariable => "float", + _ => "unknown" + }; + } + + protected override string GetVariableValue(VariableValue value) { - return TemplateLoader.RenderTemplate("python", stateMachine, settings); + return value switch + { + VariableValue.IntVariable variable => variable.ToString(), + VariableValue.BoolVariable variable => variable.Value ? "False" : "True", + VariableValue.StringVariable variable => '"' + variable.Value + '"', + VariableValue.FloatVariable variable => variable.ToString(), + _ => "unknown" + }; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs index 81cbc40..89c88ac 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs @@ -1,13 +1,33 @@ -using Stater.CodeGeneration.Entity; using Stater.CodeGeneration.LanguageAdapter.Base; using Stater.Domain.Models; namespace Stater.CodeGeneration.LanguageAdapter.TypeScript; -public class TypeScriptAdapter : ILanguageAdapter +public class TypeScriptAdapter : BaseLanguageAdapter { - public string Generate(StateMachine stateMachine, GenerationSettings settings) + protected override string TemplateName => "typescript"; + + protected override string GetVariableValueTypeName(VariableValue value) + { + return value switch + { + VariableValue.IntVariable => "number", + VariableValue.BoolVariable => "boolean", + VariableValue.StringVariable => "string", + VariableValue.FloatVariable => "number", + _ => "unknown" + }; + } + + protected override string GetVariableValue(VariableValue value) { - return TemplateLoader.RenderTemplate("typescript", stateMachine, settings); + return value switch + { + VariableValue.IntVariable variable => variable.ToString(), + VariableValue.BoolVariable variable => variable.Value ? "false" : "true", + VariableValue.StringVariable variable => '"' + variable.Value + '"', + VariableValue.FloatVariable variable => variable + ".0", + _ => "unknown" + }; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/javascript.scriban b/src/Stater.CodeGeneration/Templates/javascript.scriban index 224c813..1016f82 100644 --- a/src/Stater.CodeGeneration/Templates/javascript.scriban +++ b/src/Stater.CodeGeneration/Templates/javascript.scriban @@ -20,7 +20,11 @@ States.{{ name }} {{- end -}} {{- if settings.generate_context -}} const build{{ fsm.name }}FSMContext = () => { - return {degreeOfOpening: 100} + return { +{{- for item in fsm.variables }} + {{ item.name }}: {{ convert_variable_value item.start_value }}{{- if !for.last }}{{ "," }}{{- end }} +{{- end}} + } } diff --git a/src/Stater.CodeGeneration/Templates/kotlin.scriban b/src/Stater.CodeGeneration/Templates/kotlin.scriban index 85644e9..3110b89 100644 --- a/src/Stater.CodeGeneration/Templates/kotlin.scriban +++ b/src/Stater.CodeGeneration/Templates/kotlin.scriban @@ -15,7 +15,9 @@ States.{{ name }} {{- end -}} {{- if settings.generate_context -}} data class {{ fsm.name }}FSMContext( - var degreeOfOpening: Int = 100, +{{- for item in fsm.variables }} + var {{ item.name }}: {{ convert_variable_type item.start_value }} = {{ convert_variable_value item.start_value }}{{- if !for.last }}{{ "," }}{{- end }} +{{- end}} ) : Context {{ end -}} diff --git a/src/Stater.CodeGeneration/Templates/python.scriban b/src/Stater.CodeGeneration/Templates/python.scriban index 6433168..ea870cf 100644 --- a/src/Stater.CodeGeneration/Templates/python.scriban +++ b/src/Stater.CodeGeneration/Templates/python.scriban @@ -22,8 +22,9 @@ States.{{ name }} {{- end -}} {{- if settings.generate_context -}} class DoorFSMContext(BaseModel, Context): - degree_of_opening: int = 100 - +{{- for item in fsm.variables }} + {{ item.name }}: {{ convert_variable_type item.start_value }} = {{ convert_variable_value item.start_value }} +{{- end}} {{ end -}} {{- if !settings.generate_states; state_generic = "str"; else; state_generic = "States"; end }} diff --git a/src/Stater.CodeGeneration/Templates/typescript.scriban b/src/Stater.CodeGeneration/Templates/typescript.scriban index 75e73a5..bd30d0a 100644 --- a/src/Stater.CodeGeneration/Templates/typescript.scriban +++ b/src/Stater.CodeGeneration/Templates/typescript.scriban @@ -20,11 +20,17 @@ States.{{ name }} {{- end -}} {{- if settings.generate_context -}} interface {{ fsm.name }}FSMContext extends Context { - degreeOfOpening: number +{{- for item in fsm.variables }} + {{ item.name }}: {{ convert_variable_value item.start_value }} +{{- end}} } const build{{ fsm.name }}FSMContext: () => {{ fsm.name }}FSMContext = () => { - return {degreeOfOpening: 100} + return { +{{- for item in fsm.variables }} + {{ item.name }}: {{ convert_variable_value item.start_value }}{{- if !for.last }}{{ "," }}{{- end }} +{{- end}} + } } diff --git a/src/Stater.Domain/Models/Event.cs b/src/Stater.Domain/Models/Event.cs index 13c4baf..935ea91 100644 --- a/src/Stater.Domain/Models/Event.cs +++ b/src/Stater.Domain/Models/Event.cs @@ -28,7 +28,5 @@ public VariableMath() : this(Guid.Empty, MathTypeEnum.Sum, null) public record VariableSet( Guid VariableGuid, VariableValue Value - ) : Event - { - } + ) : Event; } \ No newline at end of file From 98aa5ca5e5833d42bbc0376e140d54773bc67e2c Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 13:43:37 +0300 Subject: [PATCH 34/69] SF-22: Python3 support tests and events condition serialize --- Stater.sln | 137 +--------------- Stater.sln.DotSettings.user | 1 + StaterV/StaterV.csproj | 8 - src/Stater.CodeGeneration.App/Program.cs | 55 +++++++ .../RandomStateMachineGenerator.cs | 150 ++++++++++++++++++ .../Stater.CodeGeneration.App.csproj | 13 ++ .../LanguageAdapter/RandomFsmGenerator.cs | 6 - .../ScenarioFinderTests.cs | 17 ++ .../Stater.CodeGeneration.Tests.csproj | 7 +- src/Stater.CodeGeneration/CodeGenerator.cs | 28 ++++ .../Base/BaseLanguageAdapter.cs | 25 ++- .../LanguageAdapter/Base/TemplateLoader.cs | 18 ++- .../JavaScript/JavaScriptAdapter.cs | 11 ++ .../LanguageAdapter/Kotlin/KotlinAdapter.cs | 13 +- .../LanguageAdapter/Python/PythonAdapter.cs | 33 +++- .../TypeScript/TypeScriptAdapter.cs | 13 +- src/Stater.CodeGeneration/ScenarioFinder.cs | 84 ++++++++++ .../Stater.CodeGeneration.csproj | 1 + .../Templates/python-test.scriban | 36 +++++ .../Templates/python.scriban | 16 +- src/Stater.Domain/Models/Condition.cs | 11 ++ src/Stater.Domain/Models/Event.cs | 9 ++ src/Stater.Domain/Models/StateMachine.cs | 3 + 23 files changed, 535 insertions(+), 160 deletions(-) create mode 100644 src/Stater.CodeGeneration.App/Program.cs create mode 100644 src/Stater.CodeGeneration.App/RandomStateMachineGenerator.cs create mode 100644 src/Stater.CodeGeneration.App/Stater.CodeGeneration.App.csproj delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/RandomFsmGenerator.cs create mode 100644 src/Stater.CodeGeneration.Tests/ScenarioFinderTests.cs create mode 100644 src/Stater.CodeGeneration/ScenarioFinder.cs create mode 100644 src/Stater.CodeGeneration/Templates/python-test.scriban diff --git a/Stater.sln b/Stater.sln index e13fb41..abfa59c 100644 --- a/Stater.sln +++ b/Stater.sln @@ -1,54 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{1B39C48B-5F4B-4556-A2B3-E4AC50F30B43}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaterV", "StaterV\StaterV.csproj", "{B90AF5E3-3BFA-4501-ADAB-CF32D2677DB7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaterWPF", "StaterWPF\StaterWPF.csproj", "{8506DC5F-90B6-421A-88E8-CB3C33CE0C91}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirstPlugin", "FirstPlugin\FirstPlugin.csproj", "{5B7A672B-3DB0-4406-9DF1-D1BAE6726BF7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpCodeGenerator1", "CSharpCodeGenerator1\CSharpCodeGenerator1.csproj", "{B21D8C78-FB92-4C38-8773-6ABB244BF407}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common\Common.csproj", "{542E45C9-9853-42DB-B1C5-1D540FA1700E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CppCodeGenerator", "CppCodeGenerator\CppCodeGenerator.csproj", "{00BCE648-24B5-4523-8180-74841842DD3C}" - ProjectSection(ProjectDependencies) = postProject - {B90AF5E3-3BFA-4501-ADAB-CF32D2677DB7} = {B90AF5E3-3BFA-4501-ADAB-CF32D2677DB7} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpinVeriff", "SpinVeriff\SpinVeriff.csproj", "{BFBB771A-D679-4C13-885D-BA6425773924}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpinVeriffWPF", "SpinVeriffWPF\SpinVeriffWPF.csproj", "{C4AF1EE4-CD8F-4A7B-9818-CBCBBCC7B2BC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginData", "PluginData\PluginData.csproj", "{41A0B9E4-C529-4F6D-8F69-AB0EE1AE6951}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ind1", "Ind1\Ind1.csproj", "{29B57FE7-013D-49C5-AEBA-A062637D36A3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSMultyThread", "CSMultyThread\CSMultyThread.csproj", "{FC4128C8-7183-4097-9DFC-1C168D41F42B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextProcessor", "TextProcessor\TextProcessor.csproj", "{412DC173-85E2-4A92-B886-11F173CB40E4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaterVTest", "StaterVTest\StaterVTest.csproj", "{97A35264-A93D-46E4-9DCE-767D427DFA7D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{16AA45D4-5DC2-4EA5-9016-ED33F6C3F07E}" - ProjectSection(SolutionItems) = preProject - Local.testsettings = Local.testsettings - Stater.vsmdi = Stater.vsmdi - TraceAndTestImpact.testsettings = TraceAndTestImpact.testsettings - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpinVeriffTest", "SpinVeriffTest\SpinVeriffTest.csproj", "{D2D3393E-2248-4406-8065-FF4AEF919AC3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StateFlow", "StateFlow\StateFlow.csproj", "{2FC95B0A-B404-4E88-8FB0-11F357D2A7C1}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JavaMultyThread", "JavaMultyThread\JavaMultyThread.csproj", "{5E9FF3AA-0784-4B4A-BCD2-9CCBC39D4D66}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FBDK", "FBDK\FBDK.csproj", "{09FED13A-1642-496C-AE3F-F0A2770BE9A2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CFuncGenerator1", "CFuncGenerator1\CFuncGenerator1.csproj", "{EA67DB8A-BB10-4343-87A0-E91EDD783C8B}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater", "src\Stater\Stater.csproj", "{EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.CodeGeneration.Tests", "src\Stater.CodeGeneration.Tests\Stater.CodeGeneration.Tests.csproj", "{879047E1-76DD-4892-AF8F-8EC562514AD7}" @@ -59,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.CodeGeneration", "sr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.SLXParser", "src\Stater.SLXParser\Stater.SLXParser.csproj", "{1CE08542-B4A2-4632-A066-68462E0BC603}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.CodeGeneration.App", "src\Stater.CodeGeneration.App\Stater.CodeGeneration.App.csproj", "{EA6A952C-2854-4031-94E0-724CCC388807}" +EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = Stater.vsmdi @@ -68,78 +22,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B90AF5E3-3BFA-4501-ADAB-CF32D2677DB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B90AF5E3-3BFA-4501-ADAB-CF32D2677DB7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B90AF5E3-3BFA-4501-ADAB-CF32D2677DB7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B90AF5E3-3BFA-4501-ADAB-CF32D2677DB7}.Release|Any CPU.Build.0 = Release|Any CPU - {8506DC5F-90B6-421A-88E8-CB3C33CE0C91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8506DC5F-90B6-421A-88E8-CB3C33CE0C91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8506DC5F-90B6-421A-88E8-CB3C33CE0C91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8506DC5F-90B6-421A-88E8-CB3C33CE0C91}.Release|Any CPU.Build.0 = Release|Any CPU - {5B7A672B-3DB0-4406-9DF1-D1BAE6726BF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B7A672B-3DB0-4406-9DF1-D1BAE6726BF7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B7A672B-3DB0-4406-9DF1-D1BAE6726BF7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B7A672B-3DB0-4406-9DF1-D1BAE6726BF7}.Release|Any CPU.Build.0 = Release|Any CPU - {B21D8C78-FB92-4C38-8773-6ABB244BF407}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B21D8C78-FB92-4C38-8773-6ABB244BF407}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B21D8C78-FB92-4C38-8773-6ABB244BF407}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B21D8C78-FB92-4C38-8773-6ABB244BF407}.Release|Any CPU.Build.0 = Release|Any CPU - {542E45C9-9853-42DB-B1C5-1D540FA1700E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {542E45C9-9853-42DB-B1C5-1D540FA1700E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {542E45C9-9853-42DB-B1C5-1D540FA1700E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {542E45C9-9853-42DB-B1C5-1D540FA1700E}.Release|Any CPU.Build.0 = Release|Any CPU - {00BCE648-24B5-4523-8180-74841842DD3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00BCE648-24B5-4523-8180-74841842DD3C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00BCE648-24B5-4523-8180-74841842DD3C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00BCE648-24B5-4523-8180-74841842DD3C}.Release|Any CPU.Build.0 = Release|Any CPU - {BFBB771A-D679-4C13-885D-BA6425773924}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BFBB771A-D679-4C13-885D-BA6425773924}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BFBB771A-D679-4C13-885D-BA6425773924}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BFBB771A-D679-4C13-885D-BA6425773924}.Release|Any CPU.Build.0 = Release|Any CPU - {C4AF1EE4-CD8F-4A7B-9818-CBCBBCC7B2BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4AF1EE4-CD8F-4A7B-9818-CBCBBCC7B2BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4AF1EE4-CD8F-4A7B-9818-CBCBBCC7B2BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4AF1EE4-CD8F-4A7B-9818-CBCBBCC7B2BC}.Release|Any CPU.Build.0 = Release|Any CPU - {41A0B9E4-C529-4F6D-8F69-AB0EE1AE6951}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {41A0B9E4-C529-4F6D-8F69-AB0EE1AE6951}.Debug|Any CPU.Build.0 = Debug|Any CPU - {41A0B9E4-C529-4F6D-8F69-AB0EE1AE6951}.Release|Any CPU.ActiveCfg = Release|Any CPU - {41A0B9E4-C529-4F6D-8F69-AB0EE1AE6951}.Release|Any CPU.Build.0 = Release|Any CPU - {29B57FE7-013D-49C5-AEBA-A062637D36A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {29B57FE7-013D-49C5-AEBA-A062637D36A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {29B57FE7-013D-49C5-AEBA-A062637D36A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {29B57FE7-013D-49C5-AEBA-A062637D36A3}.Release|Any CPU.Build.0 = Release|Any CPU - {FC4128C8-7183-4097-9DFC-1C168D41F42B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FC4128C8-7183-4097-9DFC-1C168D41F42B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FC4128C8-7183-4097-9DFC-1C168D41F42B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FC4128C8-7183-4097-9DFC-1C168D41F42B}.Release|Any CPU.Build.0 = Release|Any CPU - {412DC173-85E2-4A92-B886-11F173CB40E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {412DC173-85E2-4A92-B886-11F173CB40E4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {412DC173-85E2-4A92-B886-11F173CB40E4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {412DC173-85E2-4A92-B886-11F173CB40E4}.Release|Any CPU.Build.0 = Release|Any CPU - {97A35264-A93D-46E4-9DCE-767D427DFA7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97A35264-A93D-46E4-9DCE-767D427DFA7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97A35264-A93D-46E4-9DCE-767D427DFA7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97A35264-A93D-46E4-9DCE-767D427DFA7D}.Release|Any CPU.Build.0 = Release|Any CPU - {D2D3393E-2248-4406-8065-FF4AEF919AC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D2D3393E-2248-4406-8065-FF4AEF919AC3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D2D3393E-2248-4406-8065-FF4AEF919AC3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D2D3393E-2248-4406-8065-FF4AEF919AC3}.Release|Any CPU.Build.0 = Release|Any CPU - {2FC95B0A-B404-4E88-8FB0-11F357D2A7C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2FC95B0A-B404-4E88-8FB0-11F357D2A7C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FC95B0A-B404-4E88-8FB0-11F357D2A7C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2FC95B0A-B404-4E88-8FB0-11F357D2A7C1}.Release|Any CPU.Build.0 = Release|Any CPU - {5E9FF3AA-0784-4B4A-BCD2-9CCBC39D4D66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5E9FF3AA-0784-4B4A-BCD2-9CCBC39D4D66}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5E9FF3AA-0784-4B4A-BCD2-9CCBC39D4D66}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5E9FF3AA-0784-4B4A-BCD2-9CCBC39D4D66}.Release|Any CPU.Build.0 = Release|Any CPU - {09FED13A-1642-496C-AE3F-F0A2770BE9A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09FED13A-1642-496C-AE3F-F0A2770BE9A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {09FED13A-1642-496C-AE3F-F0A2770BE9A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09FED13A-1642-496C-AE3F-F0A2770BE9A2}.Release|Any CPU.Build.0 = Release|Any CPU - {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EA67DB8A-BB10-4343-87A0-E91EDD783C8B}.Release|Any CPU.Build.0 = Release|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Debug|Any CPU.Build.0 = Debug|Any CPU {EA81CCF1-284B-4E2D-8CB8-AE9C8EACC01E}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -160,21 +42,14 @@ Global {1CE08542-B4A2-4632-A066-68462E0BC603}.Debug|Any CPU.Build.0 = Debug|Any CPU {1CE08542-B4A2-4632-A066-68462E0BC603}.Release|Any CPU.ActiveCfg = Release|Any CPU {1CE08542-B4A2-4632-A066-68462E0BC603}.Release|Any CPU.Build.0 = Release|Any CPU + {EA6A952C-2854-4031-94E0-724CCC388807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA6A952C-2854-4031-94E0-724CCC388807}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA6A952C-2854-4031-94E0-724CCC388807}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA6A952C-2854-4031-94E0-724CCC388807}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {B21D8C78-FB92-4C38-8773-6ABB244BF407} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {542E45C9-9853-42DB-B1C5-1D540FA1700E} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {00BCE648-24B5-4523-8180-74841842DD3C} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {BFBB771A-D679-4C13-885D-BA6425773924} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {C4AF1EE4-CD8F-4A7B-9818-CBCBBCC7B2BC} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {29B57FE7-013D-49C5-AEBA-A062637D36A3} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {FC4128C8-7183-4097-9DFC-1C168D41F42B} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {D2D3393E-2248-4406-8065-FF4AEF919AC3} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {5E9FF3AA-0784-4B4A-BCD2-9CCBC39D4D66} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {09FED13A-1642-496C-AE3F-F0A2770BE9A2} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} - {EA67DB8A-BB10-4343-87A0-E91EDD783C8B} = {1B39C48B-5F4B-4556-A2B3-E4AC50F30B43} EndGlobalSection EndGlobal diff --git a/Stater.sln.DotSettings.user b/Stater.sln.DotSettings.user index 698b247..ae1fb4e 100644 --- a/Stater.sln.DotSettings.user +++ b/Stater.sln.DotSettings.user @@ -9,6 +9,7 @@ <TestAncestor> <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Python.PythonAdapterDoorTests</TestId> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.ScenarioFinderTests.ClazzGenerate</TestId> </TestAncestor> </SessionState> True diff --git a/StaterV/StaterV.csproj b/StaterV/StaterV.csproj index 6e4ff96..fc3533e 100644 --- a/StaterV/StaterV.csproj +++ b/StaterV/StaterV.csproj @@ -384,14 +384,6 @@ - - {41A0B9E4-C529-4F6D-8F69-AB0EE1AE6951} - PluginData - - - {2FC95B0A-B404-4E88-8FB0-11F357D2A7C1} - StateFlow - {412DC173-85E2-4A92-B886-11F173CB40E4} TextProcessor diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs new file mode 100644 index 0000000..741e570 --- /dev/null +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -0,0 +1,55 @@ +// See https://aka.ms/new-console-template for more information + + +using Stater.CodeGeneration; +using Stater.CodeGeneration.App; +using Stater.CodeGeneration.Entity; + + +if (args.Length < 4) +{ + Console.WriteLine("Please write: [output-path] [seed] [language] [type: Matrix]"); +} + +var outputPath = args[0]; +var seed = int.Parse(args[1]); + +var randomStateMachineGenerator = new RandomStateMachineGenerator(seed); + +var states = new List { false, true }; +var codeGenerator = new CodeGenerator(); + +foreach (var generateMode in new List { Mode.Builder, Mode.Clazz }) +{ + foreach (var generateStates in states) + { + foreach (var generateContext in states) + { + foreach (var generateInterface in states) + { + var randomStateMachine = randomStateMachineGenerator.GenerateStateMachine(5, 10, 10, 10, 10); + + var path = outputPath + randomStateMachine.Name + ".py"; + var testPath = outputPath + "test_" + randomStateMachine.Name + ".py"; + + var settings = new GenerationSettings( + Language.Python3 + , generateMode + , GenerateStates: generateStates + , GenerateContext: generateContext + , GenerateInterface: generateInterface + ); + + using var sw = new StreamWriter(path); + var result = codeGenerator.Generate(randomStateMachine, settings); + sw.WriteLine(result); + + + using var swTest = new StreamWriter(testPath); + var results = ScenarioFinder.FindScenarios(randomStateMachine); + var resultTest = codeGenerator.GenerateTests(randomStateMachine, settings, results); + swTest.WriteLine(resultTest); + } + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.App/RandomStateMachineGenerator.cs b/src/Stater.CodeGeneration.App/RandomStateMachineGenerator.cs new file mode 100644 index 0000000..d260e12 --- /dev/null +++ b/src/Stater.CodeGeneration.App/RandomStateMachineGenerator.cs @@ -0,0 +1,150 @@ +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.App; + +public class RandomStateMachineGenerator(int seed) +{ + private readonly Random random = new(seed); + + private string RandomString(int length) + { + const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + return new string(Enumerable.Repeat(chars, length) + .Select(s => s[random.Next(s.Length)]).ToArray()); + } + + private State GenerateState() => new( + Guid.NewGuid(), + RandomString(10), + RandomString(20), + StateType.Common, + 0, + 0, + new List(), + new List() + ); + + private Transition GenerateTransition(IReadOnlyList states) => new( + Guid.NewGuid(), + RandomString(15), + states[random.Next(states.Count)].Guid, + states[random.Next(states.Count)].Guid, + null, + null + ); + + private VariableValue.StringVariable GenerateStringVariableValue() => new(RandomString(30)); + private VariableValue.IntVariable GenerateIntVariableValue() => new(random.Next(99999)); + private VariableValue.FloatVariable GenerateFloatVariableValue() => new((float)random.NextDouble()); + private VariableValue.BoolVariable GenerateBoolVariableValue() => new(random.Next(2) == 0); + + private VariableValue GenerateVariableValue() => random.Next(4) switch + { + 0 => GenerateStringVariableValue(), + 1 => GenerateIntVariableValue(), + 2 => GenerateFloatVariableValue(), + 3 => GenerateBoolVariableValue(), + _ => throw new ArgumentOutOfRangeException() + }; + + private VariableValue GenerateVariableValue(VariableValue variableValue) => variableValue switch + { + VariableValue.StringVariable => GenerateStringVariableValue(), + VariableValue.IntVariable => GenerateIntVariableValue(), + VariableValue.FloatVariable => GenerateFloatVariableValue(), + VariableValue.BoolVariable => GenerateBoolVariableValue(), + _ => throw new ArgumentOutOfRangeException() + }; + + private Variable GenerateVariable() => new(Guid.NewGuid(), RandomString(15), GenerateVariableValue()); + + private Event GenerateEvent(IReadOnlyList variables) + { + switch (random.Next(2)) + { + case 0: + var variable = variables[random.Next(variables.Count)]; + return new Event.VariableSet( + variable.Guid, + GenerateVariableValue(variable.StartValue) + ); + case 1: + var variable2 = variables[random.Next(variables.Count)]; + return new Event.VariableMath( + variable2.Guid, + random.Next(4) switch + { + 0 => Event.VariableMath.MathTypeEnum.Sum, + 1 => Event.VariableMath.MathTypeEnum.Div, + 2 => Event.VariableMath.MathTypeEnum.Sub, + 3 => Event.VariableMath.MathTypeEnum.Mul, + _ => throw new ArgumentOutOfRangeException() + }, + GenerateVariableValue(variable2.StartValue) + ); + } + + throw new ArgumentOutOfRangeException(); + } + + private Condition GenerateCondition(IReadOnlyList variables) + { + switch (random.Next(1)) + { + case 0: + var variable1 = variables[random.Next(variables.Count)]; + return new Condition.VariableCondition( + variable1.Guid, + random.Next(6) switch + { + 0 => Condition.VariableCondition.ConditionTypeEnum.Lt, + 1 => Condition.VariableCondition.ConditionTypeEnum.Le, + 2 => Condition.VariableCondition.ConditionTypeEnum.Eq, + 3 => Condition.VariableCondition.ConditionTypeEnum.Ne, + 4 => Condition.VariableCondition.ConditionTypeEnum.Gt, + 5 => Condition.VariableCondition.ConditionTypeEnum.Ge, + _ => throw new ArgumentOutOfRangeException() + }, + GenerateVariableValue(variable1.StartValue) + ); + } + + throw new ArgumentOutOfRangeException(); + } + + public StateMachine GenerateStateMachine( + int countState, + int countTransitions, + int countVariables, + int countEvents, + int countConditions + ) + { + var states = Enumerable.Range(0, countState).Select(_ => GenerateState()).ToList(); + var startStateIndex = random.Next(countState); + states[startStateIndex] = states[startStateIndex] with { Type = StateType.Start }; + var transitions = Enumerable.Range(0, countTransitions).Select(_ => GenerateTransition(states)).ToList(); + var variables = Enumerable.Range(0, countVariables).Select(_ => GenerateVariable()).ToList(); + + for (var i = 0; i < countEvents; i++) + { + var transitionIndex = random.Next(countTransitions); + transitions[transitionIndex] = transitions[transitionIndex] with { Event = GenerateEvent(variables) }; + } + + for (var i = 0; i < countConditions; i++) + { + var transitionIndex = random.Next(countTransitions); + transitions[transitionIndex] = + transitions[transitionIndex] with { Condition = GenerateCondition(variables) }; + } + + return new StateMachine( + Guid.NewGuid(), + RandomString(20), + states, + transitions, + variables + ); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.App/Stater.CodeGeneration.App.csproj b/src/Stater.CodeGeneration.App/Stater.CodeGeneration.App.csproj new file mode 100644 index 0000000..1fa968a --- /dev/null +++ b/src/Stater.CodeGeneration.App/Stater.CodeGeneration.App.csproj @@ -0,0 +1,13 @@ + + + + Exe + net8.0 + enable + enable + + + + + + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/RandomFsmGenerator.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/RandomFsmGenerator.cs deleted file mode 100644 index e6f4c70..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/RandomFsmGenerator.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Stater.CodeGeneration.Tests.LanguageAdapter; - -public class RandomFsmGenerator -{ - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/ScenarioFinderTests.cs b/src/Stater.CodeGeneration.Tests/ScenarioFinderTests.cs new file mode 100644 index 0000000..75dc42a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/ScenarioFinderTests.cs @@ -0,0 +1,17 @@ +using Stater.CodeGeneration.Tests.LanguageAdapter; +using Xunit; +using Xunit.Abstractions; + +namespace Stater.CodeGeneration.Tests; + +public class ScenarioFinderTests +{ + [Fact] + public void ClazzGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var results = ScenarioFinder.FindScenarios(stateMachine); + + Console.WriteLine(results.ToString()); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj b/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj index 068f71b..d6a2c00 100644 --- a/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj +++ b/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj @@ -7,12 +7,13 @@ - - + + + - + diff --git a/src/Stater.CodeGeneration/CodeGenerator.cs b/src/Stater.CodeGeneration/CodeGenerator.cs index 69b9b0f..7ea4937 100644 --- a/src/Stater.CodeGeneration/CodeGenerator.cs +++ b/src/Stater.CodeGeneration/CodeGenerator.cs @@ -41,4 +41,32 @@ public string Generate(StateMachine stateMachine, GenerationSettings generationS return ""; } + + public string GenerateTests(StateMachine stateMachine, GenerationSettings generationSettings, List> scenarios) + { + if (generationSettings is { GenerateEventAndCondition: true, GenerateContext: false }) + { + throw new InvalidDataException(); + } + + switch (generationSettings.Language) + { + case Language.Kotlin: return kotlinAdapter.GenerateTests(stateMachine, generationSettings, scenarios); + case Language.Java: + break; + case Language.CSharp: + break; + case Language.Python3: return pythonAdapter.GenerateTests(stateMachine, generationSettings, scenarios); + case Language.JavaScript:return javaScriptAdapter.GenerateTests(stateMachine, generationSettings, scenarios); + case Language.TypeScript:return typeScriptAdapter.GenerateTests(stateMachine, generationSettings, scenarios); + case Language.C: + break; + case Language.CPlusPlus: + break; + default: + throw new ArgumentOutOfRangeException(nameof(generationSettings)); + } + + return ""; + } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs index 9ad5364..af6bd14 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs @@ -6,10 +6,14 @@ namespace Stater.CodeGeneration.LanguageAdapter.Base; public abstract class BaseLanguageAdapter { protected abstract string TemplateName { get; } + protected abstract string TestTemplateName { get; } protected abstract string GetVariableValueTypeName(VariableValue value); protected abstract string GetVariableValue(VariableValue value); - + + protected abstract string GetCondition(Transition transition, Condition condition, StateMachine stateMachine); + protected abstract string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine); + public string Generate(StateMachine stateMachine, GenerationSettings settings) { return TemplateLoader.RenderTemplate( @@ -17,7 +21,24 @@ public string Generate(StateMachine stateMachine, GenerationSettings settings) stateMachine, settings, GetVariableValueTypeName, - GetVariableValue + GetVariableValue, + GetCondition, + GetEvent, + new List>() + ); + } + + public string GenerateTests(StateMachine stateMachine, GenerationSettings settings, List> scenarios) + { + return TemplateLoader.RenderTemplate( + TestTemplateName, + stateMachine, + settings, + GetVariableValueTypeName, + GetVariableValue, + GetCondition, + GetEvent, + scenarios ); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs index f28294c..37c67cd 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs @@ -25,18 +25,30 @@ public static string RenderTemplate( StateMachine stateMachine, GenerationSettings settings, Func convertVariableType, - Func convertVariableValue + Func convertVariableValue, + Func convertCondition, + Func convertEvent, + List> scenarios ) { var scriptObject = new ScriptObject(); scriptObject.Import("convert_variable_type", new Func(convertVariableType)); scriptObject.Import("convert_variable_value", new Func(convertVariableValue)); + + scriptObject.Import("convert_condition", + new Func((transition, condition) => + convertCondition(transition, condition, stateMachine))); + scriptObject.Import("convert_event", new Func((transition, eEvent) => + convertEvent(transition, eEvent, stateMachine))); scriptObject["fsm"] = stateMachine; scriptObject["settings"] = settings; - + scriptObject["scenarios"] = scenarios; + scriptObject.Import("get_variable_by_uuid", stateMachine.GetVariableByGuid); + scriptObject.Import("get_state_by_uuid", stateMachine.GetStateByGuid); + var context = new TemplateContext(); context.PushGlobal(scriptObject); - + var templateContent = LoadTemplate(templateName); var template = Template.Parse(templateContent); return template.Render(context); diff --git a/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs index f8235cb..9e38ecd 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs @@ -6,6 +6,7 @@ namespace Stater.CodeGeneration.LanguageAdapter.JavaScript; public class JavaScriptAdapter : BaseLanguageAdapter { protected override string TemplateName => "javascript"; + protected override string TestTemplateName => "javascript"; protected override string GetVariableValueTypeName(VariableValue value) { @@ -23,4 +24,14 @@ protected override string GetVariableValue(VariableValue value) _ => "unknown" }; } + + protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) + { + throw new NotImplementedException(); + } + + protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) + { + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs index 6499411..9fb3a10 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs @@ -6,7 +6,8 @@ namespace Stater.CodeGeneration.LanguageAdapter.Kotlin; public class KotlinAdapter : BaseLanguageAdapter { protected override string TemplateName => "kotlin"; - + protected override string TestTemplateName => "javascript"; + protected override string GetVariableValueTypeName(VariableValue value) { return value switch @@ -30,4 +31,14 @@ protected override string GetVariableValue(VariableValue value) _ => "unknown" }; } + + protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) + { + throw new NotImplementedException(); + } + + protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) + { + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs index 5793a7f..be2e627 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs @@ -6,6 +6,7 @@ namespace Stater.CodeGeneration.LanguageAdapter.Python; public class PythonAdapter : BaseLanguageAdapter { protected override string TemplateName => "python"; + protected override string TestTemplateName => "python-test"; protected override string GetVariableValueTypeName(VariableValue value) { @@ -15,7 +16,7 @@ protected override string GetVariableValueTypeName(VariableValue value) VariableValue.BoolVariable => "bool", VariableValue.StringVariable => "str", VariableValue.FloatVariable => "float", - _ => "unknown" + _ => "" }; } @@ -27,7 +28,35 @@ protected override string GetVariableValue(VariableValue value) VariableValue.BoolVariable variable => variable.Value ? "False" : "True", VariableValue.StringVariable variable => '"' + variable.Value + '"', VariableValue.FloatVariable variable => variable.ToString(), - _ => "unknown" + _ => "" }; } + + protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) + { + switch (condition) + { + case Condition.VariableCondition e: + var variable = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"ctx.{variable.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)}"; + } + + return ""; + } + + protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) + { + switch (eEvent) + { + case Event.VariableMath e: + var variable1 = stateMachine.GetVariableByGuid(e.VariableGuid); + return + $"setattr(ctx, '{variable1!.Name}', ctx.{variable1.Name} {e.GetDefaultMathTypeSign()} {GetVariableValue(e.Value)})"; + case Event.VariableSet e: + var variable2 = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"setattr(ctx, '{variable2!.Name}', {GetVariableValue(e.Value)})"; + } + + return ""; + } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs index 89c88ac..3862da6 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs @@ -6,7 +6,8 @@ namespace Stater.CodeGeneration.LanguageAdapter.TypeScript; public class TypeScriptAdapter : BaseLanguageAdapter { protected override string TemplateName => "typescript"; - + protected override string TestTemplateName => "javascript"; + protected override string GetVariableValueTypeName(VariableValue value) { return value switch @@ -30,4 +31,14 @@ protected override string GetVariableValue(VariableValue value) _ => "unknown" }; } + + protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) + { + throw new NotImplementedException(); + } + + protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) + { + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/ScenarioFinder.cs b/src/Stater.CodeGeneration/ScenarioFinder.cs new file mode 100644 index 0000000..b804827 --- /dev/null +++ b/src/Stater.CodeGeneration/ScenarioFinder.cs @@ -0,0 +1,84 @@ +using Stater.Domain.Models; + +namespace Stater.CodeGeneration; + +internal record MultipleGuid( + Guid Guid1, + Guid Guid2 +); + +public class ScenarioFinder +{ + public static List> FindScenarios(StateMachine stateMachine) + { + if (stateMachine.StartState == null) return new List>(); + var result = FindAllPaths(stateMachine.Transitions, stateMachine.StartState.Guid); + return result + .Where(el => el.Count > 0) + .DistinctBy(el => el + .Select(t => t.Guid.GetHashCode()) + .Aggregate(0, (acc, h) => HashCode.Combine(acc, h)) + ) + .OrderByDescending(el => el.Count) + .Take(3) + .ToList(); + } + + private static List> FindAllPaths(List transitions, Guid start) + { + var graph = BuildGraph(transitions); + var paths = new List>(); + var visited = new HashSet(); + Dfs(graph, transitions, null, start, new List(), visited, paths); + return paths; + } + + private static Dictionary> BuildGraph(List transitions) + { + var graph = new Dictionary>(); + + foreach (var transition in + transitions.Where(transition => transition.Start.HasValue && transition.End.HasValue)) + { + if (!graph.ContainsKey(transition.Start!.Value)) + graph[transition.Start.Value] = new List(); + + graph[transition.Start.Value].Add(transition.End!.Value); + } + + return graph; + } + + private static void Dfs( + IReadOnlyDictionary> graph, + IReadOnlyCollection transitions, + Guid? prev, + Guid current, + IList path, + ISet visited, + ICollection> paths) + { + if (prev != null) + visited.Add(new MultipleGuid((Guid)prev, current)); + + var isEnd = true; + if (graph.TryGetValue(current, out var value)) + { + foreach (var neighbor in value) + { + if (visited.Contains(new MultipleGuid(current, neighbor))) continue; + var transition = transitions.First(t => t.Start == current && t.End == neighbor); + path.Add(transition); + Dfs(graph, transitions, current, neighbor, path, visited, paths); + path.RemoveAt(path.Count - 1); + isEnd = false; + } + } + + if (isEnd) + paths.Add(new List(path)); + + if (prev != null) + visited.Remove(new MultipleGuid((Guid)prev, current)); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj index 54cb3fb..662ef11 100644 --- a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj +++ b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj @@ -11,6 +11,7 @@ + diff --git a/src/Stater.CodeGeneration/Templates/python-test.scriban b/src/Stater.CodeGeneration/Templates/python-test.scriban new file mode 100644 index 0000000..c4e763f --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/python-test.scriban @@ -0,0 +1,36 @@ +{{- if settings.mode == "Builder" }}from .{{ fsm.name }} import builder_{{ fsm.name }}_state_machine{{ "\n" }}{{- end }} +{{- if settings.mode == "Clazz" }}from .{{ fsm.name }} import {{ fsm.name }}StateMachine{{ "\n" }}{{- end }} +{{- if settings.generate_states }}from .{{ fsm.name }} import States{{ "\n" }}{{- end }} + +{{ func state(name) }} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{ end }} + +{{- if settings.mode == "Clazz"; build_generic = fsm.name + "StateMachine"; else; build_generic = "builder_" + fsm.name + "_state_machine.build"; end -}} + +def test_init(): + {{ build_generic }}() +{{ for index in 0..(scenarios.size - 1) }} + +def test_scenario_{{index}}(): + sm = {{ build_generic }}() + sm.disable_events() + +{{ for transition in scenarios[index] }} + {{- if settings.generate_interface }} + sm.{{ transition.name }}() + {{- else }} + sm.transition('{{ transition.name }}') + {{- end }} + assert sm.get_state() == {{ state get_state_by_uuid(transition.end).name }} +{{ end }} +{{- end }} + +def test_json_schema(): + sm = {{ build_generic }}() + assert sm.to_json_schema() + \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/python.scriban b/src/Stater.CodeGeneration/Templates/python.scriban index ea870cf..19c7049 100644 --- a/src/Stater.CodeGeneration/Templates/python.scriban +++ b/src/Stater.CodeGeneration/Templates/python.scriban @@ -21,7 +21,7 @@ States.{{ name }} {{- end -}} {{- end -}} {{- if settings.generate_context -}} -class DoorFSMContext(BaseModel, Context): +class {{ fsm.name }}FSMContext(BaseModel, Context): {{- for item in fsm.variables }} {{ item.name }}: {{ convert_variable_type item.start_value }} = {{ convert_variable_value item.start_value }} {{- end}} @@ -38,7 +38,11 @@ class {{ fsm.name }}StateMachine(StaterStateMachine[{{ state_generic }}, {{ cont Transition( name="{{ item.transition.name }}", start={{ state item.start_state.name }}, - end={{ state item.end_state.name }} + end={{ state item.end_state.name }} {{- if item.transition.condition }}, + condition=lambda ctx: {{ convert_condition item.transition item.transition.condition }} + {{- end }}{{- if item.transition.event }}, + event=lambda ctx: {{ convert_event item.transition item.transition.event }} + {{- end }} ){{- if !for.last }}{{ "," }}{{- end }} {{- end }} ], @@ -71,7 +75,7 @@ class Types{{ fsm.name }}StateMachine(StaterStateMachine[{{ state_generic }}, {{ def typed_{{ fsm.name }}_factory(*args, **kwargs): - return Types{{ fsm.name }}StateMachine(StaterStateMachine(*args, **kwargs)) + return Types{{ fsm.name }}StateMachine(*args, **kwargs) {{ end -}} @@ -86,6 +90,12 @@ builder_{{ fsm.name }}_state_machine = ( {{- end }} {{- for item in fsm.state_transitions }} .add_transition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- if item.transition.condition }} + .set_transition_condition("{{ item.transition.name }}", lambda ctx: {{ convert_condition item.transition item.transition.condition }}) + {{- end }} + {{- if item.transition.event }} + .set_transition_event("{{ item.transition.name }}", lambda ctx: {{ convert_event item.transition item.transition.event }}) + {{- end }} {{- end }} ) {{- end }} \ No newline at end of file diff --git a/src/Stater.Domain/Models/Condition.cs b/src/Stater.Domain/Models/Condition.cs index 1ddf5e4..9e4a9d8 100644 --- a/src/Stater.Domain/Models/Condition.cs +++ b/src/Stater.Domain/Models/Condition.cs @@ -22,6 +22,17 @@ public enum ConditionTypeEnum Ge, // >= } + public string GetDefaultConditionSign() => ConditionType switch + { + ConditionTypeEnum.Lt => "<", + ConditionTypeEnum.Le => "<=", + ConditionTypeEnum.Eq => "==", + ConditionTypeEnum.Ne => "!=", + ConditionTypeEnum.Gt => ">", + ConditionTypeEnum.Ge => ">=", + _ => throw new ArgumentOutOfRangeException() + }; + public VariableCondition() : this(Guid.Empty, ConditionTypeEnum.Lt, null) { } diff --git a/src/Stater.Domain/Models/Event.cs b/src/Stater.Domain/Models/Event.cs index 935ea91..c4320e9 100644 --- a/src/Stater.Domain/Models/Event.cs +++ b/src/Stater.Domain/Models/Event.cs @@ -20,6 +20,15 @@ public enum MathTypeEnum Div, // / } + public string GetDefaultMathTypeSign() => MathType switch + { + MathTypeEnum.Sum => "+", + MathTypeEnum.Sub => "-", + MathTypeEnum.Mul => "*", + MathTypeEnum.Div => "/", + _ => throw new ArgumentOutOfRangeException() + }; + public VariableMath() : this(Guid.Empty, MathTypeEnum.Sum, null) { } diff --git a/src/Stater.Domain/Models/StateMachine.cs b/src/Stater.Domain/Models/StateMachine.cs index 22be4c9..b616875 100644 --- a/src/Stater.Domain/Models/StateMachine.cs +++ b/src/Stater.Domain/Models/StateMachine.cs @@ -23,6 +23,9 @@ public State? StartState get { return States.Find(x => x.Type == StateType.Start); } } + public Variable? GetVariableByGuid(Guid guid) => Variables.Find(el => el.Guid == guid); + public State? GetStateByGuid(Guid guid) => States.Find(el => el.Guid == guid); + public List StateTransitions { get From 2cf41366282c250bd2d7cd180cfb15da1f0a98a8 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 14:27:15 +0300 Subject: [PATCH 35/69] Add json serialize --- Stater.sln | 6 + Stater.sln.DotSettings.user | 15 +- .../Templates/python.scriban | 2 +- .../Json/StateMachineJsonAdapterTests.cs | 202 ++++++++++++++++++ .../Stater.Domain.Tests.csproj | 29 +++ src/Stater.Domain/Json/JsonSchema.cs | 14 ++ .../Json/StateMachineJsonAdapter.cs | 56 +++++ src/Stater.Domain/Models/StateMachine.cs | 1 + 8 files changed, 319 insertions(+), 6 deletions(-) create mode 100644 src/Stater.Domain.Tests/Json/StateMachineJsonAdapterTests.cs create mode 100644 src/Stater.Domain.Tests/Stater.Domain.Tests.csproj create mode 100644 src/Stater.Domain/Json/JsonSchema.cs create mode 100644 src/Stater.Domain/Json/StateMachineJsonAdapter.cs diff --git a/Stater.sln b/Stater.sln index abfa59c..829b841 100644 --- a/Stater.sln +++ b/Stater.sln @@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.SLXParser", "src\Sta EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.CodeGeneration.App", "src\Stater.CodeGeneration.App\Stater.CodeGeneration.App.csproj", "{EA6A952C-2854-4031-94E0-724CCC388807}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stater.Domain.Tests", "src\Stater.Domain.Tests\Stater.Domain.Tests.csproj", "{D1E2AF9B-55A2-4198-8797-633ABA37AA81}" +EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = Stater.vsmdi @@ -46,6 +48,10 @@ Global {EA6A952C-2854-4031-94E0-724CCC388807}.Debug|Any CPU.Build.0 = Debug|Any CPU {EA6A952C-2854-4031-94E0-724CCC388807}.Release|Any CPU.ActiveCfg = Release|Any CPU {EA6A952C-2854-4031-94E0-724CCC388807}.Release|Any CPU.Build.0 = Release|Any CPU + {D1E2AF9B-55A2-4198-8797-633ABA37AA81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1E2AF9B-55A2-4198-8797-633ABA37AA81}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1E2AF9B-55A2-4198-8797-633ABA37AA81}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1E2AF9B-55A2-4198-8797-633ABA37AA81}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Stater.sln.DotSettings.user b/Stater.sln.DotSettings.user index ae1fb4e..71ec0dc 100644 --- a/Stater.sln.DotSettings.user +++ b/Stater.sln.DotSettings.user @@ -6,11 +6,16 @@ False SOLUTION <SessionState ContinuousTestingMode="0" IsActive="True" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <TestAncestor> - <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> - <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Python.PythonAdapterDoorTests</TestId> - <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.ScenarioFinderTests.ClazzGenerate</TestId> - </TestAncestor> + <Or> + <TestAncestor> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Python.PythonAdapterDoorTests</TestId> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.ScenarioFinderTests.ClazzGenerate</TestId> + <TestId>xUnit::D1E2AF9B-55A2-4198-8797-633ABA37AA81::net8.0::Stater.Domain.Tests.Json.StateMachineJsonAdapterTests.TestToJsonSchema</TestId> + <TestId>xUnit::D1E2AF9B-55A2-4198-8797-633ABA37AA81::net8.0::Stater.Domain.Tests.Json.StateMachineJsonAdapterTests.TestFromJsonSchema</TestId> + </TestAncestor> + <ProjectFile>D1E2AF9B-55A2-4198-8797-633ABA37AA81/d:Json/f:StateMachineJsonAdapterTests.cs</ProjectFile> + </Or> </SessionState> True True diff --git a/src/Stater.CodeGeneration/Templates/python.scriban b/src/Stater.CodeGeneration/Templates/python.scriban index 19c7049..fe002bc 100644 --- a/src/Stater.CodeGeneration/Templates/python.scriban +++ b/src/Stater.CodeGeneration/Templates/python.scriban @@ -63,7 +63,7 @@ class {{ fsm.name }}StateMachine(StaterStateMachine[{{ state_generic }}, {{ cont {{- end }} {{- else if settings.mode == "Builder" -}} -{{- if settings.generate_interface -}} +{{- if settings.generate_interface }} class Types{{ fsm.name }}StateMachine(StaterStateMachine[{{ state_generic }}, {{ context_generic }}]): {{- for item in fsm.transitions }} def {{ item.name }}(self): diff --git a/src/Stater.Domain.Tests/Json/StateMachineJsonAdapterTests.cs b/src/Stater.Domain.Tests/Json/StateMachineJsonAdapterTests.cs new file mode 100644 index 0000000..eb057e3 --- /dev/null +++ b/src/Stater.Domain.Tests/Json/StateMachineJsonAdapterTests.cs @@ -0,0 +1,202 @@ +using Stater.Domain.Json; +using Stater.Domain.Models; +using Xunit; + +namespace Stater.Domain.Tests.Json; + +public class StateMachineJsonAdapterTests +{ + private static StateMachine DoorTestStateMachine() + { + var open = new State( + Guid.NewGuid(), + "OPEN", + "Open door", + StateType.Start, + 0, + 0, + new List(), + new List() + ); + + var close = new State( + Guid.NewGuid(), + "CLOSE", + "Close door", + StateType.Common, + 0, + 0, + new List(), + new List() + ); + + var ajar = new State( + Guid.NewGuid(), + "AJAR", + "Ajar door", + StateType.Common, + 0, + 0, + new List(), + new List() + ); + + var states = new List + { + open, ajar, close + }; + + + var preOpen = new Transition( + Guid.NewGuid(), + "preOpen", + close.Guid, + ajar.Guid, + null, + null + ); + + var preClose = new Transition( + Guid.NewGuid(), + "preClose", + open.Guid, + ajar.Guid, + null, + null + ); + + var openEvent = new Transition( + Guid.NewGuid(), + "open", + ajar.Guid, + open.Guid, + null, + null + ); + + var closeEvent = new Transition( + Guid.NewGuid(), + "close", + ajar.Guid, + close.Guid, + null, + null + ); + + var ajarPlus = new Transition( + Guid.NewGuid(), + "ajarPlus", + ajar.Guid, + ajar.Guid, + null, + null + ); + + var ajarMinus = new Transition( + Guid.NewGuid(), + "ajarMinus", + ajar.Guid, + ajar.Guid, + null, + null + ); + + + var transitions = new List + { + preOpen, + preClose, + openEvent, + closeEvent, + ajarPlus, + ajarMinus + }; + + return new StateMachine( + Guid.NewGuid(), + "Door", + states, + transitions, + new List() + ); + } + + private const string Json = + """ + { + "states": [ + "OPEN", + "AJAR", + "CLOSE" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """; + + [Fact] + public void TestToJsonSchema() + { + var sm = DoorTestStateMachine(); + var result = StateMachineJsonAdapter.ToJsonSchema(sm); + + Assert.Equal(Json, result); + } + + [Fact] + public void TestFromJsonSchema() + { + var actualSm = DoorTestStateMachine(); + var sm = StateMachineJsonAdapter.FromJsonSchema(Json); + Assert.Equal(actualSm.States.Count, sm.States.Count); + + for (var i = 0; i < actualSm.States.Count; i++) + { + Assert.Equal(actualSm.States[i].Name, sm.States[i].Name); + Assert.Equal(actualSm.States[i].Type, sm.States[i].Type); + } + + + var actualStateTransition = actualSm.StateTransitions; + var stateTransition = sm.StateTransitions; + Assert.Equal(actualStateTransition.Count, stateTransition.Count); + + for (var i = 0; i < actualStateTransition.Count; i++) + { + Assert.Equal(actualStateTransition[i].Transition.Name, stateTransition[i].Transition.Name); + Assert.Equal(actualStateTransition[i].StartState.Name, stateTransition[i].StartState.Name); + Assert.Equal(actualStateTransition[i].EndState.Name, stateTransition[i].EndState.Name); + } + } +} \ No newline at end of file diff --git a/src/Stater.Domain.Tests/Stater.Domain.Tests.csproj b/src/Stater.Domain.Tests/Stater.Domain.Tests.csproj new file mode 100644 index 0000000..d19fb26 --- /dev/null +++ b/src/Stater.Domain.Tests/Stater.Domain.Tests.csproj @@ -0,0 +1,29 @@ + + + + net8.0 + enable + enable + + false + true + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/src/Stater.Domain/Json/JsonSchema.cs b/src/Stater.Domain/Json/JsonSchema.cs new file mode 100644 index 0000000..be763dd --- /dev/null +++ b/src/Stater.Domain/Json/JsonSchema.cs @@ -0,0 +1,14 @@ +namespace Stater.Domain.Json; + +public record JsonTransition( + string Name, + string Start, + string End +); + +public record JsonSchema +( + List States, + string StartState, + List Transitions +); \ No newline at end of file diff --git a/src/Stater.Domain/Json/StateMachineJsonAdapter.cs b/src/Stater.Domain/Json/StateMachineJsonAdapter.cs new file mode 100644 index 0000000..7c31a7c --- /dev/null +++ b/src/Stater.Domain/Json/StateMachineJsonAdapter.cs @@ -0,0 +1,56 @@ +using System.Text.Json; +using Stater.Domain.Models; + +namespace Stater.Domain.Json; + +public class StateMachineJsonAdapter +{ + private static readonly JsonSerializerOptions Options = new() + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + WriteIndented = true + }; + + public static string ToJsonSchema(StateMachine stateMachine) + { + var jsonSchema = new JsonSchema( + States: stateMachine.States.Select(el => el.Name).ToList(), + StartState: stateMachine.StartState!.Name, + Transitions: stateMachine.StateTransitions.Select( + el => new JsonTransition(Name: el.Transition.Name, Start: el.StartState.Name, End: el.EndState.Name) + ).ToList() + ); + return JsonSerializer.Serialize(jsonSchema, Options); + } + + public static StateMachine FromJsonSchema(string json) + { + var jsonSchema = JsonSerializer.Deserialize(json, Options); + + if (jsonSchema == null) + { + throw new ArgumentException(null, nameof(json)); + } + + var sm = new StateMachine + { + States = jsonSchema.States.Select(el => new State + { + Name = el, + Type = el == jsonSchema.StartState ? StateType.Start : StateType.Common + }).ToList() + }; + sm = sm with + { + Transitions = jsonSchema.Transitions.Select(el => new Transition + { + Name = el.Name, + Start = sm.GetStateByName(el.Start)!.Guid, + End = sm.GetStateByName(el.End)!.Guid, + }) + .ToList() + }; + + return sm; + } +} \ No newline at end of file diff --git a/src/Stater.Domain/Models/StateMachine.cs b/src/Stater.Domain/Models/StateMachine.cs index b616875..1b74574 100644 --- a/src/Stater.Domain/Models/StateMachine.cs +++ b/src/Stater.Domain/Models/StateMachine.cs @@ -25,6 +25,7 @@ public State? StartState public Variable? GetVariableByGuid(Guid guid) => Variables.Find(el => el.Guid == guid); public State? GetStateByGuid(Guid guid) => States.Find(el => el.Guid == guid); + public State? GetStateByName(string name) => States.Find(el => el.Name == name); public List StateTransitions { From 8718f4a4e3239d4cf71c96e21f081f781f5620d2 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 15:01:29 +0300 Subject: [PATCH 36/69] SF-16: add python3 tests --- .../LanguageAdapter/Base/TemplateLoader.cs | 28 ++++++++++++++++++- src/Stater.CodeGeneration/ScenarioFinder.cs | 6 ++-- .../Templates/python-test.scriban | 19 +++++++++++-- .../Json/StateMachineJsonAdapterTests.cs | 6 ++-- .../Json/StateMachineJsonAdapter.cs | 4 +-- 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs index 37c67cd..36cd75d 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs @@ -1,7 +1,9 @@ using System.Reflection; +using System.Runtime.CompilerServices; using Scriban; using Scriban.Runtime; using Stater.CodeGeneration.Entity; +using Stater.Domain.Json; using Stater.Domain.Models; namespace Stater.CodeGeneration.LanguageAdapter.Base; @@ -27,7 +29,7 @@ public static string RenderTemplate( Func convertVariableType, Func convertVariableValue, Func convertCondition, - Func convertEvent, + Func convertEvent, List> scenarios ) { @@ -45,6 +47,9 @@ List> scenarios scriptObject["scenarios"] = scenarios; scriptObject.Import("get_variable_by_uuid", stateMachine.GetVariableByGuid); scriptObject.Import("get_state_by_uuid", stateMachine.GetStateByGuid); + scriptObject.Import("state_machine_json_schema", StateMachineJsonAdapter.ToJsonSchema); + + InitTestStateMachines(scriptObject, stateMachine); var context = new TemplateContext(); context.PushGlobal(scriptObject); @@ -53,4 +58,25 @@ List> scenarios var template = Template.Parse(templateContent); return template.Render(context); } + + private static void InitTestStateMachines(ScriptObject scriptObject, StateMachine sm) + { + var sm1 = sm with { States = sm.States.Concat(new[] { new State { Name = "a__test_state_1__" } }).ToList() }; + var sm2 = sm1 with { States = sm1.States.Concat(new[] { new State { Name = "a__test_state_2__" } }).ToList() }; + var sm3 = sm2 with + { + Transitions = sm2.Transitions.Concat(new[] + { + new Transition + { + Name = "a__test_transition__", + Start = sm2.GetStateByName("a__test_state_1__")!.Guid, + End = sm2.GetStateByName("a__test_state_2__")!.Guid, + } + }).ToList() + }; + scriptObject["fsm_test_state_1"] = sm1; + scriptObject["fsm_test_state_2"] = sm2; + scriptObject["fsm_test_state_3"] = sm3; + } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/ScenarioFinder.cs b/src/Stater.CodeGeneration/ScenarioFinder.cs index b804827..8639637 100644 --- a/src/Stater.CodeGeneration/ScenarioFinder.cs +++ b/src/Stater.CodeGeneration/ScenarioFinder.cs @@ -7,7 +7,7 @@ internal record MultipleGuid( Guid Guid2 ); -public class ScenarioFinder +public static class ScenarioFinder { public static List> FindScenarios(StateMachine stateMachine) { @@ -17,7 +17,7 @@ public static List> FindScenarios(StateMachine stateMachine) .Where(el => el.Count > 0) .DistinctBy(el => el .Select(t => t.Guid.GetHashCode()) - .Aggregate(0, (acc, h) => HashCode.Combine(acc, h)) + .Aggregate(0, HashCode.Combine) ) .OrderByDescending(el => el.Count) .Take(3) @@ -38,7 +38,7 @@ private static Dictionary> BuildGraph(List transiti var graph = new Dictionary>(); foreach (var transition in - transitions.Where(transition => transition.Start.HasValue && transition.End.HasValue)) + transitions.Where(transition => transition is { Start: not null, End: not null })) { if (!graph.ContainsKey(transition.Start!.Value)) graph[transition.Start.Value] = new List(); diff --git a/src/Stater.CodeGeneration/Templates/python-test.scriban b/src/Stater.CodeGeneration/Templates/python-test.scriban index c4e763f..cdc8408 100644 --- a/src/Stater.CodeGeneration/Templates/python-test.scriban +++ b/src/Stater.CodeGeneration/Templates/python-test.scriban @@ -1,3 +1,5 @@ +import json{{ "\n" }}{{ "\n" }} + {{- if settings.mode == "Builder" }}from .{{ fsm.name }} import builder_{{ fsm.name }}_state_machine{{ "\n" }}{{- end }} {{- if settings.mode == "Clazz" }}from .{{ fsm.name }} import {{ fsm.name }}StateMachine{{ "\n" }}{{- end }} {{- if settings.generate_states }}from .{{ fsm.name }} import States{{ "\n" }}{{- end }} @@ -32,5 +34,18 @@ def test_scenario_{{index}}(): def test_json_schema(): sm = {{ build_generic }}() - assert sm.to_json_schema() - \ No newline at end of file + assert json.loads('''{{ state_machine_json_schema fsm }}''') == json.loads(sm.to_json_schema()) + +{{ if settings.mode == "Builder" && !settings.generate_states }} +def test_system_append_state_transition(): + sm_builder = builder_{{ fsm.name }}_state_machine + + sm_builder = sm_builder.add_state('a__test_state_1__') + assert json.loads('''{{ state_machine_json_schema fsm_test_state_1 }}''') == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_state('a__test_state_2__') + assert json.loads('''{{ state_machine_json_schema fsm_test_state_2 }}''') == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_transition('a__test_transition__', 'a__test_state_1__', 'a__test_state_2__') + assert json.loads('''{{ state_machine_json_schema fsm_test_state_3 }}''') == json.loads(sm_builder.build().to_json_schema()) +{{- end }} \ No newline at end of file diff --git a/src/Stater.Domain.Tests/Json/StateMachineJsonAdapterTests.cs b/src/Stater.Domain.Tests/Json/StateMachineJsonAdapterTests.cs index eb057e3..514d61f 100644 --- a/src/Stater.Domain.Tests/Json/StateMachineJsonAdapterTests.cs +++ b/src/Stater.Domain.Tests/Json/StateMachineJsonAdapterTests.cs @@ -43,7 +43,7 @@ private static StateMachine DoorTestStateMachine() var states = new List { - open, ajar, close + ajar, close, open }; @@ -125,9 +125,9 @@ private static StateMachine DoorTestStateMachine() """ { "states": [ - "OPEN", "AJAR", - "CLOSE" + "CLOSE", + "OPEN" ], "startState": "OPEN", "transitions": [ diff --git a/src/Stater.Domain/Json/StateMachineJsonAdapter.cs b/src/Stater.Domain/Json/StateMachineJsonAdapter.cs index 7c31a7c..0e6771d 100644 --- a/src/Stater.Domain/Json/StateMachineJsonAdapter.cs +++ b/src/Stater.Domain/Json/StateMachineJsonAdapter.cs @@ -3,7 +3,7 @@ namespace Stater.Domain.Json; -public class StateMachineJsonAdapter +public static class StateMachineJsonAdapter { private static readonly JsonSerializerOptions Options = new() { @@ -14,7 +14,7 @@ public class StateMachineJsonAdapter public static string ToJsonSchema(StateMachine stateMachine) { var jsonSchema = new JsonSchema( - States: stateMachine.States.Select(el => el.Name).ToList(), + States: stateMachine.States.Select(el => el.Name).Distinct().Order().ToList(), StartState: stateMachine.StartState!.Name, Transitions: stateMachine.StateTransitions.Select( el => new JsonTransition(Name: el.Transition.Name, Start: el.StartState.Name, End: el.EndState.Name) From 4a417ee383e286b087626770eb9ad0acbe1439c4 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 15:08:54 +0300 Subject: [PATCH 37/69] Add ci --- .github/code_generation_tests.txt | 43 ------------ .github/workflows/code_generation_tests.yml | 69 +++++++++++++++++++ src/Stater.CodeGeneration.App/Program.cs | 5 +- .../LanguageAdapter/Base/TemplateLoader.cs | 10 +-- .../Templates/python-test.scriban | 6 +- 5 files changed, 80 insertions(+), 53 deletions(-) delete mode 100644 .github/code_generation_tests.txt create mode 100644 .github/workflows/code_generation_tests.yml diff --git a/.github/code_generation_tests.txt b/.github/code_generation_tests.txt deleted file mode 100644 index c354cf6..0000000 --- a/.github/code_generation_tests.txt +++ /dev/null @@ -1,43 +0,0 @@ -#name: Code Generation Tests -# -#on: -# push: -# pull_request: -# -#jobs: -# test-python: -# runs-on: ubuntu-latest -# strategy: -# matrix: -# python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] -# steps: -# - name: Set up Python -# uses: actions/setup-python@v2 -# with: -# python-version: ${{ matrix.python-version }} -# -# - name: Install Poetry -# run: | -# python -m pip install --upgrade pip -# pip install poetry -# -# - name: Install dependencies -# run: | -# cd projects/python -# poetry install --no-root -# -# - name: Install pytest and pytest-cov -# run: | -# cd projects/python -# poetry add --dev pytest pytest-cov -# -# - name: Run tests with pytest -# run: | -# cd projects/python -# poetry run pytest --cov --junitxml=junit.xml -o junit_family=legacy -# -## - name: Upload coverage reports to Codecov -## uses: codecov/test-results-action@v1 -## with: -## files: projects/python/junit.xml -## token: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml new file mode 100644 index 0000000..90526bd --- /dev/null +++ b/.github/workflows/code_generation_tests.yml @@ -0,0 +1,69 @@ +name: Code Generation Tests + +on: + push: + pull_request: + +jobs: + build-python-artifacts: + runs-on: ubuntu-latest + steps: + - name: Checkout current repository + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '8.0.x' + + - name: Build and Run C# program + run: | + dotnet run --project src/Stater.CodeGeneration.App artifacts/python/ 0 python3 + + - name: Save generated files + uses: actions/upload-artifact@v4 + with: + name: python-generated-files + path: artifacts/python/* + + test-python: + needs: [build-python-artifacts] + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + steps: + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Poetry + run: | + python -m pip install --upgrade pip + pip install poetry + + - name: Checkout specific folder from another repository + uses: actions/checkout@v4 + with: + repository: https://github.com/PhoenixNazarov/stater-fsm-code + path: projects/python + + - name: Install dependencies + run: | + poetry install --no-root + + - name: Install pytest and pytest-cov + run: | + cd projects/python + poetry add --dev pytest pytest-cov + + - name: Download generated files + uses: actions/download-artifact@v4 + with: + name: python-generated-files + path: test/ + + - name: Run tests with pytest + run: | + poetry run pytest --cov --junitxml=junit.xml -o junit_family=legacy diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs index 741e570..d002528 100644 --- a/src/Stater.CodeGeneration.App/Program.cs +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -6,13 +6,14 @@ using Stater.CodeGeneration.Entity; -if (args.Length < 4) +if (args.Length < 3) { - Console.WriteLine("Please write: [output-path] [seed] [language] [type: Matrix]"); + Console.WriteLine("Please write: [output-path] [seed] [language]"); } var outputPath = args[0]; var seed = int.Parse(args[1]); +var language = args[2]; var randomStateMachineGenerator = new RandomStateMachineGenerator(seed); diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs index 36cd75d..0d8d472 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/TemplateLoader.cs @@ -61,17 +61,17 @@ List> scenarios private static void InitTestStateMachines(ScriptObject scriptObject, StateMachine sm) { - var sm1 = sm with { States = sm.States.Concat(new[] { new State { Name = "a__test_state_1__" } }).ToList() }; - var sm2 = sm1 with { States = sm1.States.Concat(new[] { new State { Name = "a__test_state_2__" } }).ToList() }; + var sm1 = sm with { States = sm.States.Concat(new[] { new State { Name = "__test_state_1__" } }).ToList() }; + var sm2 = sm1 with { States = sm1.States.Concat(new[] { new State { Name = "__test_state_2__" } }).ToList() }; var sm3 = sm2 with { Transitions = sm2.Transitions.Concat(new[] { new Transition { - Name = "a__test_transition__", - Start = sm2.GetStateByName("a__test_state_1__")!.Guid, - End = sm2.GetStateByName("a__test_state_2__")!.Guid, + Name = "__test_transition__", + Start = sm2.GetStateByName("__test_state_1__")!.Guid, + End = sm2.GetStateByName("__test_state_2__")!.Guid, } }).ToList() }; diff --git a/src/Stater.CodeGeneration/Templates/python-test.scriban b/src/Stater.CodeGeneration/Templates/python-test.scriban index cdc8408..ed1a25f 100644 --- a/src/Stater.CodeGeneration/Templates/python-test.scriban +++ b/src/Stater.CodeGeneration/Templates/python-test.scriban @@ -40,12 +40,12 @@ def test_json_schema(): def test_system_append_state_transition(): sm_builder = builder_{{ fsm.name }}_state_machine - sm_builder = sm_builder.add_state('a__test_state_1__') + sm_builder = sm_builder.add_state('__test_state_1__') assert json.loads('''{{ state_machine_json_schema fsm_test_state_1 }}''') == json.loads(sm_builder.build().to_json_schema()) - sm_builder = sm_builder.add_state('a__test_state_2__') + sm_builder = sm_builder.add_state('__test_state_2__') assert json.loads('''{{ state_machine_json_schema fsm_test_state_2 }}''') == json.loads(sm_builder.build().to_json_schema()) - sm_builder = sm_builder.add_transition('a__test_transition__', 'a__test_state_1__', 'a__test_state_2__') + sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') assert json.loads('''{{ state_machine_json_schema fsm_test_state_3 }}''') == json.loads(sm_builder.build().to_json_schema()) {{- end }} \ No newline at end of file From 2f817aa13e959bb9e78282889dabf574509357c3 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 15:12:52 +0300 Subject: [PATCH 38/69] add CI --- src/Stater.CodeGeneration.App/Program.cs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs index d002528..93a7fac 100644 --- a/src/Stater.CodeGeneration.App/Program.cs +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -15,6 +15,12 @@ var seed = int.Parse(args[1]); var language = args[2]; +if (!Directory.Exists(outputPath)) +{ + Directory.CreateDirectory(outputPath); + Console.WriteLine($"Folder created: {outputPath}"); +} + var randomStateMachineGenerator = new RandomStateMachineGenerator(seed); var states = new List { false, true }; @@ -30,11 +36,18 @@ { var randomStateMachine = randomStateMachineGenerator.GenerateStateMachine(5, 10, 10, 10, 10); - var path = outputPath + randomStateMachine.Name + ".py"; - var testPath = outputPath + "test_" + randomStateMachine.Name + ".py"; + var path = outputPath; + var testPath = outputPath; + var languageS = Language.Python3; + if (language == "python3") + { + path += randomStateMachine.Name + ".py"; + testPath += "test_" + randomStateMachine.Name + ".py"; + languageS = Language.Python3; + } var settings = new GenerationSettings( - Language.Python3 + languageS , generateMode , GenerateStates: generateStates , GenerateContext: generateContext @@ -44,8 +57,8 @@ using var sw = new StreamWriter(path); var result = codeGenerator.Generate(randomStateMachine, settings); sw.WriteLine(result); - - + + using var swTest = new StreamWriter(testPath); var results = ScenarioFinder.FindScenarios(randomStateMachine); var resultTest = codeGenerator.GenerateTests(randomStateMachine, settings, results); From ce9f597449c4298d7aabb197b22f1cd1a83874c2 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 15:14:14 +0300 Subject: [PATCH 39/69] Add CI --- .github/workflows/code_generation_tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 90526bd..4f913b9 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -5,7 +5,7 @@ on: pull_request: jobs: - build-python-artifacts: + build-artifacts: runs-on: ubuntu-latest steps: - name: Checkout current repository @@ -46,7 +46,7 @@ jobs: - name: Checkout specific folder from another repository uses: actions/checkout@v4 with: - repository: https://github.com/PhoenixNazarov/stater-fsm-code + repository: PhoenixNazarov/stater-fsm-code path: projects/python - name: Install dependencies From 5e4d87db2e5df2db42ddd937d130166f02bc544e Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 15:14:42 +0300 Subject: [PATCH 40/69] Add CI --- .github/workflows/code_generation_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 4f913b9..3eb059a 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -27,7 +27,7 @@ jobs: path: artifacts/python/* test-python: - needs: [build-python-artifacts] + needs: [build-artifacts] runs-on: ubuntu-latest strategy: matrix: From c0038039cd4ac39839e17ff4146bc473384d458e Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 15:19:48 +0300 Subject: [PATCH 41/69] add CI --- .github/workflows/code_generation_tests.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 3eb059a..f3b6eac 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -47,10 +47,10 @@ jobs: uses: actions/checkout@v4 with: repository: PhoenixNazarov/stater-fsm-code - path: projects/python - name: Install dependencies run: | + cd projects/python poetry install --no-root - name: Install pytest and pytest-cov @@ -62,8 +62,9 @@ jobs: uses: actions/download-artifact@v4 with: name: python-generated-files - path: test/ + path: projects/python/test/ - name: Run tests with pytest run: | + cd projects/python poetry run pytest --cov --junitxml=junit.xml -o junit_family=legacy From ab704ae22d654077f95c7464b1a6d2daeb017be0 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 17:14:49 +0300 Subject: [PATCH 42/69] SF-26: add cotlin ci --- .github/workflows/code_generation_tests.yml | 52 ++++++++- src/Stater.CodeGeneration.App/Program.cs | 18 +++- .../JavaScript/JavaScriptAdapter.cs | 4 +- .../Stater.CodeGeneration.csproj | 3 + .../Templates/javascript-test.scriban | 54 ++++++++++ .../Templates/javascript.scriban | 15 ++- .../Templates/kotlin-test.scriban | 46 ++++++++ .../Templates/python-test.scriban | 8 +- .../Templates/typescript-test.scriban | 101 ++++++++++++++++++ 9 files changed, 278 insertions(+), 23 deletions(-) create mode 100644 src/Stater.CodeGeneration/Templates/javascript-test.scriban create mode 100644 src/Stater.CodeGeneration/Templates/kotlin-test.scriban create mode 100644 src/Stater.CodeGeneration/Templates/typescript-test.scriban diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index f3b6eac..339e6f1 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -16,16 +16,26 @@ jobs: with: dotnet-version: '8.0.x' - - name: Build and Run C# program + - name: Run generate python3 run: | dotnet run --project src/Stater.CodeGeneration.App artifacts/python/ 0 python3 - - - name: Save generated files + + - name: Run generate javascript + run: | + dotnet run --project src/Stater.CodeGeneration.App artifacts/js/ 0 python3 + + - name: Save python3 generated files uses: actions/upload-artifact@v4 with: name: python-generated-files path: artifacts/python/* + - name: Save js generated files + uses: actions/upload-artifact@v4 + with: + name: js-generated-files + path: artifacts/js/* + test-python: needs: [build-artifacts] runs-on: ubuntu-latest @@ -68,3 +78,39 @@ jobs: run: | cd projects/python poetry run pytest --cov --junitxml=junit.xml -o junit_family=legacy + + test-javascript: + needs: [ build-artifacts ] + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [ '16', '18', '20' ] + + steps: + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + cache-dependency-path: projects/ts/package-lock.json + + - name: Checkout specific folder from another repository + uses: actions/checkout@v4 + with: + repository: PhoenixNazarov/stater-fsm-code + + - name: Install dependencies + run: | + cd projects/ts + npm ci + + - name: Download generated files + uses: actions/download-artifact@v4 + with: + name: js-generated-files + path: projects/js/src/ + + - name: Run tests with Jest + run: | + cd projects/ts + npm test -- --coverage --json --outputFile=test-results.json diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs index 93a7fac..4f191b2 100644 --- a/src/Stater.CodeGeneration.App/Program.cs +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -4,6 +4,7 @@ using Stater.CodeGeneration; using Stater.CodeGeneration.App; using Stater.CodeGeneration.Entity; +using Stater.Domain.Models; if (args.Length < 3) @@ -39,11 +40,18 @@ var path = outputPath; var testPath = outputPath; var languageS = Language.Python3; - if (language == "python3") + switch (language) { - path += randomStateMachine.Name + ".py"; - testPath += "test_" + randomStateMachine.Name + ".py"; - languageS = Language.Python3; + case "python3": + path += randomStateMachine.Name + ".py"; + testPath += "test_" + randomStateMachine.Name + ".py"; + languageS = Language.Python3; + break; + case "javascript": + path += randomStateMachine.Name + ".js"; + testPath += randomStateMachine.Name + ".test.js"; + languageS = Language.JavaScript; + break; } var settings = new GenerationSettings( @@ -53,7 +61,7 @@ , GenerateContext: generateContext , GenerateInterface: generateInterface ); - + using var sw = new StreamWriter(path); var result = codeGenerator.Generate(randomStateMachine, settings); sw.WriteLine(result); diff --git a/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs index 9e38ecd..cf09892 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs @@ -6,7 +6,7 @@ namespace Stater.CodeGeneration.LanguageAdapter.JavaScript; public class JavaScriptAdapter : BaseLanguageAdapter { protected override string TemplateName => "javascript"; - protected override string TestTemplateName => "javascript"; + protected override string TestTemplateName => "javascript-test"; protected override string GetVariableValueTypeName(VariableValue value) { @@ -20,7 +20,7 @@ protected override string GetVariableValue(VariableValue value) VariableValue.IntVariable variable => variable.ToString(), VariableValue.BoolVariable variable => variable.Value ? "false" : "true", VariableValue.StringVariable variable => '"' + variable.Value + '"', - VariableValue.FloatVariable variable => variable + ".0", + VariableValue.FloatVariable variable => variable.ToString(), _ => "unknown" }; } diff --git a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj index 662ef11..809aac9 100644 --- a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj +++ b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj @@ -10,10 +10,13 @@ + + + diff --git a/src/Stater.CodeGeneration/Templates/javascript-test.scriban b/src/Stater.CodeGeneration/Templates/javascript-test.scriban new file mode 100644 index 0000000..041cfee --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/javascript-test.scriban @@ -0,0 +1,54 @@ +{{- if settings.mode == "Builder" }}import {builder{{ fsm.name }}StateMachine} from "./{{ fsm.name }}.js";{{ "\n" }}{{- end }} +{{- if settings.mode == "Clazz" }}import { {{- fsm.name }}StateMachine} from "./{{ fsm.name }}.js";{{ "\n" }}{{- end }} +{{- if settings.generate_states }}import {States} from "./{{fsm.name}}.js";{{ "\n" }}{{- end }} + +{{ func state(name) }} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{ end }} + +{{- if settings.mode == "Clazz"; build_generic = "new " + fsm.name + "StateMachine"; else; build_generic = "builder" + fsm.name + "StateMachine.build"; end -}} + +test('testInit', () => { + {{ build_generic }}() +}) + +{{ for index in 0..(scenarios.size - 1) }} + +test('testScenario{{ index }}', () => { + const sm = {{ build_generic }}() + sm.disableEvents() + +{{ for transition in scenarios[index] }} + {{- if settings.generate_interface }} + sm.{{ transition.name }}() + {{- else }} + sm.transition('{{ transition.name }}') + {{- end }} + expect(sm.getState()).toBe({{ state get_state_by_uuid(transition.end).name }}) +{{ end }} +}){{- end }} + + +test('testJsonSchema', () => { + const sm = {{ build_generic }}() + expect(JSON.parse(`{{ state_machine_json_schema fsm }}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + +{{ if settings.mode == "Builder" && !settings.generate_states }} +test('testSystemAppendStateTransition', () => { + let smBuilder = builder{{ fsm.name }}StateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{{ state_machine_json_schema fsm_test_state_1 }}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{{ state_machine_json_schema fsm_test_state_2 }}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{{ state_machine_json_schema fsm_test_state_3 }}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) +{{- end }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/javascript.scriban b/src/Stater.CodeGeneration/Templates/javascript.scriban index 1016f82..0c30ecc 100644 --- a/src/Stater.CodeGeneration/Templates/javascript.scriban +++ b/src/Stater.CodeGeneration/Templates/javascript.scriban @@ -1,10 +1,8 @@ -{{- if settings.generate_context }}import {Context} from "./StaterStateMachine";{{ "\n" }}{{- else }}import {EmptyContext} from "./StaterStateMachine";{{ "\n" }}{{- end }} -{{- if settings.generate_interface }}import {StateMachineFactory} from "./StaterStateMachine";{{ "\n" }}{{- end }} -{{- if settings.generate_interface || settings.mode == "Clazz" }}import {StaterStateMachine} from "./StaterStateMachine";{{ "\n" }}{{- end }} -{{- if settings.mode == "Builder" }}import {StaterStateMachineBuilder} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.generate_interface || settings.mode == "Clazz" }}import {StaterStateMachine} from "./index.js";{{ "\n" }}{{- end }} +{{- if settings.mode == "Builder" }}import {StaterStateMachineBuilder} from "./index.js";{{ "\n" }}{{- end }} {{- if settings.mode == "Clazz" }}{{ "\n" }}{{- end }} {{ if settings.generate_states -}} -const States = Object.freeze({ +export const States = Object.freeze({ {{- for item in fsm.states }} {{ item.name }}: "{{ item.name }}"{{- if !for.last }}{{ "," }}{{- end }} {{- end }} @@ -30,10 +28,9 @@ const build{{ fsm.name }}FSMContext = () => { {{ end -}} {{- if !settings.generate_states; state_generic = "string"; else; state_generic = "States"; end }} -{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} -{{- if !settings.generate_context; context_generic_builder = "new EmptyContext()"; else; context_generic_builder = "build"+fsm.name+"FSMContext()"; end -}} +{{- if !settings.generate_context; context_generic_builder = "{}"; else; context_generic_builder = "build"+fsm.name+"FSMContext()"; end -}} {{- if settings.mode == "Clazz" -}} -class {{ fsm.name }}StateMachine extends StaterStateMachine { +export class {{ fsm.name }}StateMachine extends StaterStateMachine { constructor() { super( [ @@ -79,7 +76,7 @@ class Types{{ fsm.name }}StateMachine extends StaterStateMachine { const typed{{ fsm.name }}Factory = (...args) => new Types{{ fsm.name }}StateMachine(...args); {{ end -}} -const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder() +export const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder() {{- if fsm.start_state != null }} .setStartState({{ state fsm.start_state.name }}) {{- end }} diff --git a/src/Stater.CodeGeneration/Templates/kotlin-test.scriban b/src/Stater.CodeGeneration/Templates/kotlin-test.scriban new file mode 100644 index 0000000..c5e6c78 --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/kotlin-test.scriban @@ -0,0 +1,46 @@ +{{- if settings.mode == "Clazz"; build_generic = fsm.name + "StateMachine"; else; build_generic = "builder_" + fsm.name + "_state_machine.build"; end -}} +class Test{{ fsm.name }}StateMachine { + @Test + fun testInit() { + {{ build_generic }}() + } + {{ for index in 0..(scenarios.size - 1) }} + + @Test + fun testScenario{{index}}(){ + val sm = {{ build_generic }}() + sm.disableEvents() + + {{ for transition in scenarios[index] }} + {{- if settings.generate_interface }} + sm.{{ transition.name }}() + {{- else }} + sm.transition("{{ transition.name }}") + {{- end }} + assertEquals(sm.getState(), {{ state get_state_by_uuid(transition.end).name }}) + {{ end }} + } + {{- end }} + + @Test + fun testJsonSchema() { + val sm = {{ build_generic }}() + assertEquals(json.loads("""{{ state_machine_json_schema fsm }}"""), json.loads(sm.toJsonSchema())) + } + + {{ if settings.mode == "Builder" && !settings.generate_states }} + @Test + fun testSystemAppendStateTransition(){ + var smBuilder = builder{{ fsm.name }}StateMachine + + smBuilder = smBuilder.addState("__test_state_1__") + assertEquals(objectMapper.readTree("""{{ state_machine_json_schema fsm_test_state_1 }}"""), objectMapper.readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState("__test_state_2__") + assertEquals(objectMapper.readTree("""{{ state_machine_json_schema fsm_test_state_2 }}"""), objectMapper.readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") + assertEquals(objectMapper.readTree("""{{ state_machine_json_schema fsm_test_state_3 }}"""), objectMapper.readTree(smBuilder.build().toJsonSchema())) + } + {{- end }} +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/python-test.scriban b/src/Stater.CodeGeneration/Templates/python-test.scriban index ed1a25f..47b8307 100644 --- a/src/Stater.CodeGeneration/Templates/python-test.scriban +++ b/src/Stater.CodeGeneration/Templates/python-test.scriban @@ -34,18 +34,18 @@ def test_scenario_{{index}}(): def test_json_schema(): sm = {{ build_generic }}() - assert json.loads('''{{ state_machine_json_schema fsm }}''') == json.loads(sm.to_json_schema()) + assert json.loads("""{{ state_machine_json_schema fsm }}""") == json.loads(sm.to_json_schema()) {{ if settings.mode == "Builder" && !settings.generate_states }} def test_system_append_state_transition(): sm_builder = builder_{{ fsm.name }}_state_machine sm_builder = sm_builder.add_state('__test_state_1__') - assert json.loads('''{{ state_machine_json_schema fsm_test_state_1 }}''') == json.loads(sm_builder.build().to_json_schema()) + assert json.loads("""{{ state_machine_json_schema fsm_test_state_1 }}""") == json.loads(sm_builder.build().to_json_schema()) sm_builder = sm_builder.add_state('__test_state_2__') - assert json.loads('''{{ state_machine_json_schema fsm_test_state_2 }}''') == json.loads(sm_builder.build().to_json_schema()) + assert json.loads("""{{ state_machine_json_schema fsm_test_state_2 }}""") == json.loads(sm_builder.build().to_json_schema()) sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') - assert json.loads('''{{ state_machine_json_schema fsm_test_state_3 }}''') == json.loads(sm_builder.build().to_json_schema()) + assert json.loads("""{{ state_machine_json_schema fsm_test_state_3 }}""") == json.loads(sm_builder.build().to_json_schema()) {{- end }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/typescript-test.scriban b/src/Stater.CodeGeneration/Templates/typescript-test.scriban new file mode 100644 index 0000000..bd30d0a --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/typescript-test.scriban @@ -0,0 +1,101 @@ +{{- if settings.generate_context }}import {Context} from "./StaterStateMachine";{{ "\n" }}{{- else }}import {EmptyContext} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.generate_interface }}import {StateMachineFactory} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.generate_interface || settings.mode == "Clazz" }}import {StaterStateMachine} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.mode == "Builder" }}import {StaterStateMachineBuilder} from "./StaterStateMachine";{{ "\n" }}{{- end }} +{{- if settings.mode == "Clazz" }}{{ "\n" }}{{- end }} +{{ if settings.generate_states -}} +enum States { + {{- for item in fsm.states }} + {{ item.name }} = "{{ item.name }}"{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} +} + +{{ end }} +{{- func state(name) -}} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end -}} +{{- if settings.generate_context -}} +interface {{ fsm.name }}FSMContext extends Context { +{{- for item in fsm.variables }} + {{ item.name }}: {{ convert_variable_value item.start_value }} +{{- end}} +} + +const build{{ fsm.name }}FSMContext: () => {{ fsm.name }}FSMContext = () => { + return { +{{- for item in fsm.variables }} + {{ item.name }}: {{ convert_variable_value item.start_value }}{{- if !for.last }}{{ "," }}{{- end }} +{{- end}} + } +} + + +{{ end -}} +{{- if !settings.generate_states; state_generic = "string"; else; state_generic = "States"; end }} +{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} +{{- if !settings.generate_context; context_generic_builder = "new EmptyContext()"; else; context_generic_builder = "build"+fsm.name+"FSMContext()"; end -}} +{{- if settings.mode == "Clazz" -}} +class {{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { + constructor() { + super( + [ + {{- for item in fsm.state_transitions }} + { + name: "{{ item.transition.name }}", + start: {{ state item.start_state.name }}, + end: {{ state item.end_state.name }} + }{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ], + {{ context_generic_builder }}, + {{- if fsm.start_state != null }} + {{ state fsm.start_state.name }}, + {{- end }} + ) + } +{{- if settings.generate_interface }} +{{ end -}} +{{- if settings.generate_interface }} +{{- for item in fsm.transitions }} + {{ item.name }}() { + this.transition("{{ item.name }}") + } +{{- if !for.last }} +{{ end -}} +{{- end }} +{{- end }} +} + +{{- else if settings.mode == "Builder" -}} +{{- if settings.generate_interface -}} +class Types{{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { +{{- for item in fsm.transitions }} + {{ item.name }}() { + this.transition("{{ item.name }}") + } +{{- if !for.last }} +{{ end -}} +{{- end }} +} + +const typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = (...args): StaterStateMachine<{{ state_generic }}, {{ context_generic }}> => { + return new Types{{ fsm.name }}StateMachine(...args); +}; + +{{ end -}} +const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() + {{- if fsm.start_state != null }} + .setStartState({{ state fsm.start_state.name }}) + {{- end }} + .setContext({{ context_generic_builder }}) + {{- if settings.generate_interface }} + .setFactory(typed{{ fsm.name }}Factory) + {{- end }} + {{- for item in fsm.state_transitions }} + .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- end }} +{{- end }} \ No newline at end of file From 975746fe750e15e7bc8fa22b3128ff44b9208d60 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 17:15:49 +0300 Subject: [PATCH 43/69] SF-26: add cotlin ci --- .github/workflows/code_generation_tests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 339e6f1..a26aced 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -92,7 +92,6 @@ jobs: with: node-version: ${{ matrix.node-version }} cache: 'npm' - cache-dependency-path: projects/ts/package-lock.json - name: Checkout specific folder from another repository uses: actions/checkout@v4 From 65df25aa3c462e7eb06d0aae11b3ca0cdad7ad47 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 17:27:47 +0300 Subject: [PATCH 44/69] SF-26: add JS ci --- .github/workflows/code_generation_tests.yml | 27 +++++++++++---------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index a26aced..132d4c2 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -19,11 +19,11 @@ jobs: - name: Run generate python3 run: | dotnet run --project src/Stater.CodeGeneration.App artifacts/python/ 0 python3 - + - name: Run generate javascript run: | dotnet run --project src/Stater.CodeGeneration.App artifacts/js/ 0 python3 - + - name: Save python3 generated files uses: actions/upload-artifact@v4 with: @@ -37,11 +37,11 @@ jobs: path: artifacts/js/* test-python: - needs: [build-artifacts] + needs: [ build-artifacts ] runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13' ] steps: - name: Set up Python uses: actions/setup-python@v2 @@ -52,12 +52,12 @@ jobs: run: | python -m pip install --upgrade pip pip install poetry - + - name: Checkout specific folder from another repository uses: actions/checkout@v4 with: repository: PhoenixNazarov/stater-fsm-code - + - name: Install dependencies run: | cd projects/python @@ -67,13 +67,13 @@ jobs: run: | cd projects/python poetry add --dev pytest pytest-cov - + - name: Download generated files uses: actions/download-artifact@v4 with: name: python-generated-files path: projects/python/test/ - + - name: Run tests with pytest run: | cd projects/python @@ -87,16 +87,17 @@ jobs: node-version: [ '16', '18', '20' ] steps: + - name: Checkout specific folder from another repository + uses: actions/checkout@v4 + with: + repository: PhoenixNazarov/stater-fsm-code + - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'npm' - - - name: Checkout specific folder from another repository - uses: actions/checkout@v4 - with: - repository: PhoenixNazarov/stater-fsm-code + cache-dependency-path: projects/ts/package-lock.json - name: Install dependencies run: | From 1e192d9b70e718018604b20fec94e28ed2d31629 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 17:29:21 +0300 Subject: [PATCH 45/69] SF-26: fix JS ci --- .github/workflows/code_generation_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 132d4c2..9128fd3 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -22,7 +22,7 @@ jobs: - name: Run generate javascript run: | - dotnet run --project src/Stater.CodeGeneration.App artifacts/js/ 0 python3 + dotnet run --project src/Stater.CodeGeneration.App artifacts/js/ 0 javascript - name: Save python3 generated files uses: actions/upload-artifact@v4 From 2b460f04062f88d65fab1d0e04f3b8c3509040dd Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 17:31:54 +0300 Subject: [PATCH 46/69] SF-26: fix JS ci --- .github/workflows/code_generation_tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 9128fd3..c9d568f 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -97,11 +97,11 @@ jobs: with: node-version: ${{ matrix.node-version }} cache: 'npm' - cache-dependency-path: projects/ts/package-lock.json + cache-dependency-path: projects/js/package-lock.json - name: Install dependencies run: | - cd projects/ts + cd projects/js npm ci - name: Download generated files @@ -112,5 +112,5 @@ jobs: - name: Run tests with Jest run: | - cd projects/ts + cd projects/js npm test -- --coverage --json --outputFile=test-results.json From 1e6638ea7b6504e29aaa7c622568cb154d8c6200 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 17:54:35 +0300 Subject: [PATCH 47/69] SF-26: add ts tests and ci --- .github/workflows/code_generation_tests.yml | 48 ++++++- src/Stater.CodeGeneration.App/Program.cs | 6 +- .../TypeScript/TypeScriptAdapter.cs | 4 +- .../Templates/typescript-test.scriban | 128 ++++++------------ .../Templates/typescript.scriban | 8 +- 5 files changed, 99 insertions(+), 95 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index c9d568f..0071910 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -23,7 +23,11 @@ jobs: - name: Run generate javascript run: | dotnet run --project src/Stater.CodeGeneration.App artifacts/js/ 0 javascript - + + - name: Run generate typescript + run: | + dotnet run --project src/Stater.CodeGeneration.App artifacts/ts/ 0 typescript + - name: Save python3 generated files uses: actions/upload-artifact@v4 with: @@ -36,6 +40,12 @@ jobs: name: js-generated-files path: artifacts/js/* + - name: Save ts generated files + uses: actions/upload-artifact@v4 + with: + name: ts-generated-files + path: artifacts/ts/* + test-python: needs: [ build-artifacts ] runs-on: ubuntu-latest @@ -114,3 +124,39 @@ jobs: run: | cd projects/js npm test -- --coverage --json --outputFile=test-results.json + + test-typescript: + needs: [ build-artifacts ] + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [ '16', '18', '20' ] + + steps: + - name: Checkout specific folder from another repository + uses: actions/checkout@v4 + with: + repository: PhoenixNazarov/stater-fsm-code + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + cache-dependency-path: projects/js/package-lock.json + + - name: Install dependencies + run: | + cd projects/ts + npm ci + + - name: Download generated files + uses: actions/download-artifact@v4 + with: + name: ts-generated-files + path: projects/ts/src/ + + - name: Run tests with Jest + run: | + cd projects/ts + npm test -- --coverage --json --outputFile=test-results.json diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs index 4f191b2..33ed9e2 100644 --- a/src/Stater.CodeGeneration.App/Program.cs +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -4,7 +4,6 @@ using Stater.CodeGeneration; using Stater.CodeGeneration.App; using Stater.CodeGeneration.Entity; -using Stater.Domain.Models; if (args.Length < 3) @@ -52,6 +51,11 @@ testPath += randomStateMachine.Name + ".test.js"; languageS = Language.JavaScript; break; + case "typescript": + path += randomStateMachine.Name + ".ts"; + testPath += randomStateMachine.Name + ".test.ts"; + languageS = Language.TypeScript; + break; } var settings = new GenerationSettings( diff --git a/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs index 3862da6..e0d1637 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs @@ -6,7 +6,7 @@ namespace Stater.CodeGeneration.LanguageAdapter.TypeScript; public class TypeScriptAdapter : BaseLanguageAdapter { protected override string TemplateName => "typescript"; - protected override string TestTemplateName => "javascript"; + protected override string TestTemplateName => "typescript-test"; protected override string GetVariableValueTypeName(VariableValue value) { @@ -27,7 +27,7 @@ protected override string GetVariableValue(VariableValue value) VariableValue.IntVariable variable => variable.ToString(), VariableValue.BoolVariable variable => variable.Value ? "false" : "true", VariableValue.StringVariable variable => '"' + variable.Value + '"', - VariableValue.FloatVariable variable => variable + ".0", + VariableValue.FloatVariable variable => variable.ToString(), _ => "unknown" }; } diff --git a/src/Stater.CodeGeneration/Templates/typescript-test.scriban b/src/Stater.CodeGeneration/Templates/typescript-test.scriban index bd30d0a..bd273ba 100644 --- a/src/Stater.CodeGeneration/Templates/typescript-test.scriban +++ b/src/Stater.CodeGeneration/Templates/typescript-test.scriban @@ -1,101 +1,55 @@ -{{- if settings.generate_context }}import {Context} from "./StaterStateMachine";{{ "\n" }}{{- else }}import {EmptyContext} from "./StaterStateMachine";{{ "\n" }}{{- end }} -{{- if settings.generate_interface }}import {StateMachineFactory} from "./StaterStateMachine";{{ "\n" }}{{- end }} -{{- if settings.generate_interface || settings.mode == "Clazz" }}import {StaterStateMachine} from "./StaterStateMachine";{{ "\n" }}{{- end }} -{{- if settings.mode == "Builder" }}import {StaterStateMachineBuilder} from "./StaterStateMachine";{{ "\n" }}{{- end }} -{{- if settings.mode == "Clazz" }}{{ "\n" }}{{- end }} -{{ if settings.generate_states -}} -enum States { - {{- for item in fsm.states }} - {{ item.name }} = "{{ item.name }}"{{- if !for.last }}{{ "," }}{{- end }} - {{- end }} -} +{{- if settings.mode == "Builder" && settings.generate_interface }}import {builder{{ fsm.name }}StateMachine, Types{{ fsm.name }}StateMachine} from "./{{ fsm.name }}";{{ "\n" }}{{- end }} +{{- if settings.mode == "Builder" && !settings.generate_interface }}import {builder{{ fsm.name }}StateMachine} from "./{{ fsm.name }}";{{ "\n" }}{{- end }} +{{- if settings.mode == "Clazz" }}import { {{- fsm.name }}StateMachine} from "./{{ fsm.name }}";{{ "\n" }}{{- end }} +{{- if settings.generate_states }}import {States} from "./{{fsm.name}}";{{ "\n" }}{{- end }} -{{ end }} -{{- func state(name) -}} +{{ func state(name) }} {{- if settings.generate_states -}} States.{{ name }} {{- else -}} "{{ name }}" {{- end -}} -{{- end -}} -{{- if settings.generate_context -}} -interface {{ fsm.name }}FSMContext extends Context { -{{- for item in fsm.variables }} - {{ item.name }}: {{ convert_variable_value item.start_value }} -{{- end}} -} - -const build{{ fsm.name }}FSMContext: () => {{ fsm.name }}FSMContext = () => { - return { -{{- for item in fsm.variables }} - {{ item.name }}: {{ convert_variable_value item.start_value }}{{- if !for.last }}{{ "," }}{{- end }} -{{- end}} - } -} +{{ end }} +{{- if settings.mode == "Clazz"; build_generic = "new " + fsm.name + "StateMachine()"; else if settings.generate_interface; build_generic = "builder" + fsm.name + "StateMachine.build() as Types" + fsm.name + "StateMachine"; else; build_generic = "builder" + fsm.name + "StateMachine.build()"; end -}} -{{ end -}} -{{- if !settings.generate_states; state_generic = "string"; else; state_generic = "States"; end }} -{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} -{{- if !settings.generate_context; context_generic_builder = "new EmptyContext()"; else; context_generic_builder = "build"+fsm.name+"FSMContext()"; end -}} -{{- if settings.mode == "Clazz" -}} -class {{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { - constructor() { - super( - [ - {{- for item in fsm.state_transitions }} - { - name: "{{ item.transition.name }}", - start: {{ state item.start_state.name }}, - end: {{ state item.end_state.name }} - }{{- if !for.last }}{{ "," }}{{- end }} - {{- end }} - ], - {{ context_generic_builder }}, - {{- if fsm.start_state != null }} - {{ state fsm.start_state.name }}, - {{- end }} - ) - } -{{- if settings.generate_interface }} -{{ end -}} -{{- if settings.generate_interface }} -{{- for item in fsm.transitions }} - {{ item.name }}() { - this.transition("{{ item.name }}") - } -{{- if !for.last }} -{{ end -}} -{{- end }} -{{- end }} -} +test('testInit', () => { + {{ build_generic }} +}) -{{- else if settings.mode == "Builder" -}} -{{- if settings.generate_interface -}} -class Types{{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { -{{- for item in fsm.transitions }} - {{ item.name }}() { - this.transition("{{ item.name }}") - } -{{- if !for.last }} -{{ end -}} -{{- end }} -} +{{ for index in 0..(scenarios.size - 1) }} -const typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = (...args): StaterStateMachine<{{ state_generic }}, {{ context_generic }}> => { - return new Types{{ fsm.name }}StateMachine(...args); -}; +test('testScenario{{ index }}', () => { + const sm = {{ build_generic }} + sm.disableEvents() -{{ end -}} -const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() - {{- if fsm.start_state != null }} - .setStartState({{ state fsm.start_state.name }}) - {{- end }} - .setContext({{ context_generic_builder }}) +{{ for transition in scenarios[index] }} {{- if settings.generate_interface }} - .setFactory(typed{{ fsm.name }}Factory) - {{- end }} - {{- for item in fsm.state_transitions }} - .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + sm.{{ transition.name }}() + {{- else }} + sm.transition('{{ transition.name }}') {{- end }} + expect(sm.getState()).toBe({{ state get_state_by_uuid(transition.end).name }}) +{{ end }} +}){{- end }} + + +test('testJsonSchema', () => { + const sm = {{ build_generic }} + expect(JSON.parse(`{{ state_machine_json_schema fsm }}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + +{{ if settings.mode == "Builder" && !settings.generate_states }} +test('testSystemAppendStateTransition', () => { + let smBuilder = builder{{ fsm.name }}StateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{{ state_machine_json_schema fsm_test_state_1 }}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{{ state_machine_json_schema fsm_test_state_2 }}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{{ state_machine_json_schema fsm_test_state_3 }}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) {{- end }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/typescript.scriban b/src/Stater.CodeGeneration/Templates/typescript.scriban index bd30d0a..f50b7a6 100644 --- a/src/Stater.CodeGeneration/Templates/typescript.scriban +++ b/src/Stater.CodeGeneration/Templates/typescript.scriban @@ -4,7 +4,7 @@ {{- if settings.mode == "Builder" }}import {StaterStateMachineBuilder} from "./StaterStateMachine";{{ "\n" }}{{- end }} {{- if settings.mode == "Clazz" }}{{ "\n" }}{{- end }} {{ if settings.generate_states -}} -enum States { +export enum States { {{- for item in fsm.states }} {{ item.name }} = "{{ item.name }}"{{- if !for.last }}{{ "," }}{{- end }} {{- end }} @@ -39,7 +39,7 @@ const build{{ fsm.name }}FSMContext: () => {{ fsm.name }}FSMContext = () => { {{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} {{- if !settings.generate_context; context_generic_builder = "new EmptyContext()"; else; context_generic_builder = "build"+fsm.name+"FSMContext()"; end -}} {{- if settings.mode == "Clazz" -}} -class {{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { +export class {{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { constructor() { super( [ @@ -72,7 +72,7 @@ class {{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{- else if settings.mode == "Builder" -}} {{- if settings.generate_interface -}} -class Types{{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { +export class Types{{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { {{- for item in fsm.transitions }} {{ item.name }}() { this.transition("{{ item.name }}") @@ -87,7 +87,7 @@ const typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ co }; {{ end -}} -const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() +export const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() {{- if fsm.start_state != null }} .setStartState({{ state fsm.start_state.name }}) {{- end }} From fa6e03af1c99ae8a350414c45496052c43a9b313 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 19:01:12 +0300 Subject: [PATCH 48/69] SF-26: add kotlin CI --- .github/workflows/code_generation_tests.yml | 60 +++++++++++++++++++ src/Stater.CodeGeneration.App/Program.cs | 18 ++++++ .../LanguageAdapter/Kotlin/KotlinAdapter.cs | 2 +- .../Templates/kotlin-test.scriban | 42 +++++++++---- .../Templates/kotlin.scriban | 18 +++--- 5 files changed, 118 insertions(+), 22 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 0071910..4321bd2 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -27,6 +27,10 @@ jobs: - name: Run generate typescript run: | dotnet run --project src/Stater.CodeGeneration.App artifacts/ts/ 0 typescript + + - name: Run generate kotlin + run: | + dotnet run --project src/Stater.CodeGeneration.App artifacts/kotlin/ 0 kotlin - name: Save python3 generated files uses: actions/upload-artifact@v4 @@ -46,6 +50,12 @@ jobs: name: ts-generated-files path: artifacts/ts/* + - name: Save kotlin generated files + uses: actions/upload-artifact@v4 + with: + name: kotlin-generated-files + path: artifacts/kotlin/* + test-python: needs: [ build-artifacts ] runs-on: ubuntu-latest @@ -160,3 +170,53 @@ jobs: run: | cd projects/ts npm test -- --coverage --json --outputFile=test-results.json + + + test-kotlin: + runs-on: ubuntu-latest + strategy: + matrix: + java-version: [ '17', '21' ] + + steps: + - name: Checkout specific folder from another repository + uses: actions/checkout@v4 + with: + repository: PhoenixNazarov/stater-fsm-code + + - name: Download generated files + uses: actions/download-artifact@v4 + with: + name: kotlin-generated-files + path: projects/kotlin/src/ + + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: ${{ matrix.java-version }} + cache: 'gradle' + + - name: Build project + run: | + cd projects/kotlin + ./gradlew build + + - name: Run tests with coverage + run: | + cd projects/kotlin + ./gradlew test jacocoTestReport --console=plain + + - name: Show test results in console + run: | + cat projects/kotlin/build/test-results/test/TEST-*.xml || true + + - name: Show coverage summary in console + run: | + cd projects/kotlin + ./gradlew jacocoTestCoverageVerification --console=plain || true + + - name: Create JAR + run: | + cd projects/kotlin + ./gradlew jar \ No newline at end of file diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs index 33ed9e2..88c0ee5 100644 --- a/src/Stater.CodeGeneration.App/Program.cs +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -56,6 +56,24 @@ testPath += randomStateMachine.Name + ".test.ts"; languageS = Language.TypeScript; break; + case "kotlin": + path += "main/kotlin/fsm/" + randomStateMachine.Name.ToLower() + "/"; + testPath += "test/kotlin/fsm/" + randomStateMachine.Name.ToLower() + "/"; + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + Console.WriteLine($"Folder created: {path}"); + } + if (!Directory.Exists(testPath)) + { + Directory.CreateDirectory(testPath); + Console.WriteLine($"Folder created: {testPath}"); + } + path += randomStateMachine.Name + ".kt"; + testPath += "Test" + randomStateMachine.Name + ".kt"; + + languageS = Language.Kotlin; + break; } var settings = new GenerationSettings( diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs index 9fb3a10..aa2da16 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs @@ -6,7 +6,7 @@ namespace Stater.CodeGeneration.LanguageAdapter.Kotlin; public class KotlinAdapter : BaseLanguageAdapter { protected override string TemplateName => "kotlin"; - protected override string TestTemplateName => "javascript"; + protected override string TestTemplateName => "kotlin-test"; protected override string GetVariableValueTypeName(VariableValue value) { diff --git a/src/Stater.CodeGeneration/Templates/kotlin-test.scriban b/src/Stater.CodeGeneration/Templates/kotlin-test.scriban index c5e6c78..e0bab08 100644 --- a/src/Stater.CodeGeneration/Templates/kotlin-test.scriban +++ b/src/Stater.CodeGeneration/Templates/kotlin-test.scriban @@ -1,31 +1,47 @@ -{{- if settings.mode == "Clazz"; build_generic = fsm.name + "StateMachine"; else; build_generic = "builder_" + fsm.name + "_state_machine.build"; end -}} -class Test{{ fsm.name }}StateMachine { +package fsm.{{ fsm.name | string.downcase }}; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + + +{{- func state(name) -}} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end }} + +{{if settings.mode == "Clazz"; build_generic = fsm.name + "StateMachine()"; else if settings.generate_interface; build_generic = "builder" + fsm.name + "StateMachine.build() as Types" + fsm.name + "StateMachine"; else; build_generic = "builder" + fsm.name + "StateMachine.build()"; end -}} +class Test{{ fsm.name }} { @Test fun testInit() { - {{ build_generic }}() + {{ build_generic }} } - {{ for index in 0..(scenarios.size - 1) }} +{{ for index in 0..(scenarios.size - 1) }} @Test - fun testScenario{{index}}(){ - val sm = {{ build_generic }}() + fun testScenario{{index}}() { + val sm = {{ build_generic }} sm.disableEvents() - {{ for transition in scenarios[index] }} +{{ for transition in scenarios[index] }} {{- if settings.generate_interface }} sm.{{ transition.name }}() {{- else }} sm.transition("{{ transition.name }}") {{- end }} assertEquals(sm.getState(), {{ state get_state_by_uuid(transition.end).name }}) - {{ end }} +{{ end }} } {{- end }} @Test fun testJsonSchema() { - val sm = {{ build_generic }}() - assertEquals(json.loads("""{{ state_machine_json_schema fsm }}"""), json.loads(sm.toJsonSchema())) + val sm = {{ build_generic }} + assertEquals(ObjectMapper().readTree("""{{ state_machine_json_schema fsm }}"""), ObjectMapper().readTree(sm.toJsonSchema())) } {{ if settings.mode == "Builder" && !settings.generate_states }} @@ -34,13 +50,13 @@ class Test{{ fsm.name }}StateMachine { var smBuilder = builder{{ fsm.name }}StateMachine smBuilder = smBuilder.addState("__test_state_1__") - assertEquals(objectMapper.readTree("""{{ state_machine_json_schema fsm_test_state_1 }}"""), objectMapper.readTree(smBuilder.build().toJsonSchema())) + assertEquals(ObjectMapper().readTree("""{{ state_machine_json_schema fsm_test_state_1 }}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) smBuilder = smBuilder.addState("__test_state_2__") - assertEquals(objectMapper.readTree("""{{ state_machine_json_schema fsm_test_state_2 }}"""), objectMapper.readTree(smBuilder.build().toJsonSchema())) + assertEquals(ObjectMapper().readTree("""{{ state_machine_json_schema fsm_test_state_2 }}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") - assertEquals(objectMapper.readTree("""{{ state_machine_json_schema fsm_test_state_3 }}"""), objectMapper.readTree(smBuilder.build().toJsonSchema())) + assertEquals(ObjectMapper().readTree("""{{ state_machine_json_schema fsm_test_state_3 }}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) } {{- end }} } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/kotlin.scriban b/src/Stater.CodeGeneration/Templates/kotlin.scriban index 3110b89..cf01aa5 100644 --- a/src/Stater.CodeGeneration/Templates/kotlin.scriban +++ b/src/Stater.CodeGeneration/Templates/kotlin.scriban @@ -1,4 +1,8 @@ -{{- if settings.generate_states -}} +package fsm.{{ fsm.name | string.downcase }} + +import com.stater.statemachine.kotlin.* + +{{ if settings.generate_states -}} enum class States { {{- for item in fsm.states }} {{ item.name }}{{- if !for.last }}{{ "," }}{{- end }} @@ -70,14 +74,12 @@ class Types{{ fsm.name }}StateMachine( stateCallbacks = stateCallbacks, stateAllCallbacks = stateAllCallbacks, contextJsonAdapter = contextJsonAdapter -) { - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") +){{- if settings.generate_interface }} { + {{- for item in fsm.transitions }} + fun {{ item.name }}() = transition("{{ item.name }}") + {{- end }} } +{{- end }} private val typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = { transitionsA, From bcf3383b9f7b089b291a90e73076b3e6379fce5a Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 30 Mar 2025 19:01:34 +0300 Subject: [PATCH 49/69] SF-26: add kotlin CI --- .github/workflows/code_generation_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 4321bd2..dd9c963 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -171,8 +171,8 @@ jobs: cd projects/ts npm test -- --coverage --json --outputFile=test-results.json - test-kotlin: + needs: [ build-artifacts ] runs-on: ubuntu-latest strategy: matrix: From 7714b2386b836806d6fda6552baf39dfe31507b8 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 31 Mar 2025 09:22:42 +0300 Subject: [PATCH 50/69] SF-22: add convert condition and events to templates --- .../Base/BaseLanguageAdapter.cs | 28 ++++++++++++++++--- .../JavaScript/JavaScriptAdapter.cs | 23 +++++++++++++-- .../LanguageAdapter/Kotlin/KotlinAdapter.cs | 26 +++++++++++++++-- .../LanguageAdapter/Python/PythonAdapter.cs | 2 +- .../TypeScript/TypeScriptAdapter.cs | 24 ++++++++++++++-- .../Templates/javascript.scriban | 12 +++++++- .../Templates/kotlin.scriban | 12 +++++++- .../Templates/typescript.scriban | 14 ++++++++-- 8 files changed, 125 insertions(+), 16 deletions(-) diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs index af6bd14..130eedd 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs @@ -10,10 +10,10 @@ public abstract class BaseLanguageAdapter protected abstract string GetVariableValueTypeName(VariableValue value); protected abstract string GetVariableValue(VariableValue value); - + protected abstract string GetCondition(Transition transition, Condition condition, StateMachine stateMachine); protected abstract string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine); - + public string Generate(StateMachine stateMachine, GenerationSettings settings) { return TemplateLoader.RenderTemplate( @@ -27,8 +27,9 @@ public string Generate(StateMachine stateMachine, GenerationSettings settings) new List>() ); } - - public string GenerateTests(StateMachine stateMachine, GenerationSettings settings, List> scenarios) + + public string GenerateTests(StateMachine stateMachine, GenerationSettings settings, + List> scenarios) { return TemplateLoader.RenderTemplate( TestTemplateName, @@ -41,4 +42,23 @@ public string GenerateTests(StateMachine stateMachine, GenerationSettings settin scenarios ); } + + protected bool CheckDefaultMathEvent( + VariableValue variableValue1, + VariableValue variableValue2, + Event.VariableMath.MathTypeEnum mathTypeEnum + ) + { + return (variableValue1, variableValue2, mathTypeEnum) switch + { + (VariableValue.IntVariable, VariableValue.IntVariable, _) => true, + (VariableValue.IntVariable, VariableValue.FloatVariable, _) => true, + (VariableValue.FloatVariable, VariableValue.IntVariable, _) => true, + (VariableValue.FloatVariable, VariableValue.FloatVariable, _) => true, + + (VariableValue.StringVariable, VariableValue.StringVariable, Event.VariableMath.MathTypeEnum.Sum) => true, + + _ => false + }; + } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs index cf09892..a87f539 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/JavaScript/JavaScriptAdapter.cs @@ -27,11 +27,30 @@ protected override string GetVariableValue(VariableValue value) protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) { - throw new NotImplementedException(); + switch (condition) + { + case Condition.VariableCondition e: + var variable = stateMachine.GetVariableByGuid(e.VariableGuid); + return + $"ctx.{variable!.Name} {e.GetDefaultConditionSign().Replace("==", "===")} {GetVariableValue(variable.StartValue)}"; + } + + return ""; } protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) { - throw new NotImplementedException(); + switch (eEvent) + { + case Event.VariableMath e: + var variable1 = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"ctx.{variable1!.Name} = ctx.{variable1.Name} {e.GetDefaultMathTypeSign()} {GetVariableValue(e.Value)}"; + + case Event.VariableSet e: + var variable2 = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"ctx.{variable2!.Name} = {GetVariableValue(e.Value)}"; + } + + return ""; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs index aa2da16..9baf708 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Kotlin/KotlinAdapter.cs @@ -7,7 +7,7 @@ public class KotlinAdapter : BaseLanguageAdapter { protected override string TemplateName => "kotlin"; protected override string TestTemplateName => "kotlin-test"; - + protected override string GetVariableValueTypeName(VariableValue value) { return value switch @@ -34,11 +34,31 @@ protected override string GetVariableValue(VariableValue value) protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) { - throw new NotImplementedException(); + switch (condition) + { + case Condition.VariableCondition e: + var variable = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"it.{variable!.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)}"; + } + + return ""; } protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) { - throw new NotImplementedException(); + switch (eEvent) + { + case Event.VariableMath e: + var variable1 = stateMachine.GetVariableByGuid(e.VariableGuid); + return !CheckDefaultMathEvent(variable1!.StartValue, e.Value, e.MathType) + ? "" + : $"it.{variable1.Name} = it.{variable1.Name} {e.GetDefaultMathTypeSign()} {GetVariableValue(e.Value)}"; + + case Event.VariableSet e: + var variable2 = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"it.{variable2!.Name} = {GetVariableValue(e.Value)}"; + } + + return ""; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs index be2e627..2ada3a2 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Python/PythonAdapter.cs @@ -38,7 +38,7 @@ protected override string GetCondition(Transition transition, Condition conditio { case Condition.VariableCondition e: var variable = stateMachine.GetVariableByGuid(e.VariableGuid); - return $"ctx.{variable.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)}"; + return $"ctx.{variable!.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)}"; } return ""; diff --git a/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs index e0d1637..7f1f26c 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/TypeScript/TypeScriptAdapter.cs @@ -34,11 +34,31 @@ protected override string GetVariableValue(VariableValue value) protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) { - throw new NotImplementedException(); + switch (condition) + { + case Condition.VariableCondition e: + var variable = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"ctx.{variable!.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)}"; + } + + return ""; } protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) { - throw new NotImplementedException(); + switch (eEvent) + { + case Event.VariableMath e: + var variable1 = stateMachine.GetVariableByGuid(e.VariableGuid); + return !CheckDefaultMathEvent(variable1!.StartValue, e.Value, e.MathType) + ? "" + : $"ctx.{variable1.Name} = ctx.{variable1.Name} {e.GetDefaultMathTypeSign()} {GetVariableValue(e.Value)}"; + + case Event.VariableSet e: + var variable2 = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"ctx.{variable2!.Name} = {GetVariableValue(e.Value)}"; + } + + return ""; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/javascript.scriban b/src/Stater.CodeGeneration/Templates/javascript.scriban index 0c30ecc..cf026b5 100644 --- a/src/Stater.CodeGeneration/Templates/javascript.scriban +++ b/src/Stater.CodeGeneration/Templates/javascript.scriban @@ -38,7 +38,11 @@ export class {{ fsm.name }}StateMachine extends StaterStateMachine { { name: "{{ item.transition.name }}", start: {{ state item.start_state.name }}, - end: {{ state item.end_state.name }} + end: {{ state item.end_state.name }} {{- if item.transition.condition }}, + condition: (ctx) => {{ convert_condition item.transition item.transition.condition }} + {{- end }}{{- if item.transition.event }}, + event: (ctx) => { {{ convert_event item.transition item.transition.event }} } + {{- end }} }{{- if !for.last }}{{ "," }}{{- end }} {{- end }} ], @@ -86,5 +90,11 @@ export const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder() {{- end }} {{- for item in fsm.state_transitions }} .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- if item.transition.condition }} + .setTransitionCondition("{{ item.transition.name }}", (ctx) => {{ convert_condition item.transition item.transition.condition }}) + {{- end }} + {{- if item.transition.event }} + .setTransitionEvent("{{ item.transition.name }}", (ctx) => { {{ convert_event item.transition item.transition.event }} }) + {{- end }} {{- end }} {{- end }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/kotlin.scriban b/src/Stater.CodeGeneration/Templates/kotlin.scriban index cf01aa5..5c2b70f 100644 --- a/src/Stater.CodeGeneration/Templates/kotlin.scriban +++ b/src/Stater.CodeGeneration/Templates/kotlin.scriban @@ -34,7 +34,11 @@ class {{ fsm.name }}StateMachine : StaterStateMachine<{{ state_generic }}, {{ co Transition( name = "{{ item.transition.name }}", start = {{ state item.start_state.name }}, - end = {{ state item.end_state.name }} + end = {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, + condition = { {{ convert_condition item.transition item.transition.condition }} } + {{- end }}{{- if item.transition.event && settings.generate_context }}, + event = { {{ convert_event item.transition item.transition.event }} } + {{- end }} ){{- if !for.last }}{{ "," }}{{- end }} {{- end }} ), @@ -120,5 +124,11 @@ val builder{{ fsm.name }}StateMachine = StaterStateMachineBuilder<{{ state_gener {{- end }} {{- for item in fsm.state_transitions }} .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- if item.transition.condition && settings.generate_context }} + .setTransitionCondition("{{ item.transition.name }}") { {{ convert_condition item.transition item.transition.condition }} } + {{- end }} + {{- if item.transition.event && settings.generate_context }} + .setTransitionEvent("{{ item.transition.name }}") { {{ convert_event item.transition item.transition.event }} } + {{- end }} {{- end }} {{- end }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/typescript.scriban b/src/Stater.CodeGeneration/Templates/typescript.scriban index f50b7a6..1f37795 100644 --- a/src/Stater.CodeGeneration/Templates/typescript.scriban +++ b/src/Stater.CodeGeneration/Templates/typescript.scriban @@ -21,7 +21,7 @@ States.{{ name }} {{- if settings.generate_context -}} interface {{ fsm.name }}FSMContext extends Context { {{- for item in fsm.variables }} - {{ item.name }}: {{ convert_variable_value item.start_value }} + {{ item.name }}: {{ convert_variable_type item.start_value }} {{- end}} } @@ -47,7 +47,11 @@ export class {{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_gene { name: "{{ item.transition.name }}", start: {{ state item.start_state.name }}, - end: {{ state item.end_state.name }} + end: {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, + condition: (ctx) => {{ convert_condition item.transition item.transition.condition }} + {{- end }}{{- if item.transition.event && settings.generate_context }}, + event: (ctx) => { {{ convert_event item.transition item.transition.event }} } + {{- end }} }{{- if !for.last }}{{ "," }}{{- end }} {{- end }} ], @@ -97,5 +101,11 @@ export const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder<{ {{- end }} {{- for item in fsm.state_transitions }} .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- if item.transition.condition && settings.generate_context }} + .setTransitionCondition("{{ item.transition.name }}", (ctx) => {{ convert_condition item.transition item.transition.condition }}) + {{- end }} + {{- if item.transition.event && settings.generate_context }} + .setTransitionEvent("{{ item.transition.name }}", (ctx) => { {{ convert_event item.transition item.transition.event }} }) + {{- end }} {{- end }} {{- end }} \ No newline at end of file From f2147096b82f2b38ede80eaa218053130277f66b Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Apr 2025 22:50:22 +0300 Subject: [PATCH 51/69] Add java templates --- .github/workflows/code_generation_tests.yml | 47 +++++- src/Stater.CodeGeneration.App/Program.cs | 18 +++ src/Stater.CodeGeneration/CodeGenerator.cs | 16 +-- .../Base/BaseLanguageAdapter.cs | 27 ++++ .../LanguageAdapter/CSharp/CSharpAdapter.cs | 64 +++++++++ .../LanguageAdapter/Java/JavaAdapter.cs | 66 +++++++++ .../LanguageAdapter/Java/JavaGenerator.cs | 8 -- .../Stater.CodeGeneration.csproj | 4 + .../Templates/csharp-test.scriban | 134 ++++++++++++++++++ .../Templates/csharp.scriban | 134 ++++++++++++++++++ .../Templates/java-test.scriban | 67 +++++++++ .../Templates/java.scriban | 128 +++++++++++++++++ 12 files changed, 696 insertions(+), 17 deletions(-) create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/CSharp/CSharpAdapter.cs create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/Java/JavaAdapter.cs delete mode 100644 src/Stater.CodeGeneration/LanguageAdapter/Java/JavaGenerator.cs create mode 100644 src/Stater.CodeGeneration/Templates/csharp-test.scriban create mode 100644 src/Stater.CodeGeneration/Templates/csharp.scriban create mode 100644 src/Stater.CodeGeneration/Templates/java-test.scriban create mode 100644 src/Stater.CodeGeneration/Templates/java.scriban diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index dd9c963..389eca5 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -31,6 +31,10 @@ jobs: - name: Run generate kotlin run: | dotnet run --project src/Stater.CodeGeneration.App artifacts/kotlin/ 0 kotlin + + - name: Run generate java + run: | + dotnet run --project src/Stater.CodeGeneration.App artifacts/java/ 0 java - name: Save python3 generated files uses: actions/upload-artifact@v4 @@ -55,6 +59,12 @@ jobs: with: name: kotlin-generated-files path: artifacts/kotlin/* + + - name: Save java generated files + uses: actions/upload-artifact@v4 + with: + name: java-generated-files + path: artifacts/java/* test-python: needs: [ build-artifacts ] @@ -219,4 +229,39 @@ jobs: - name: Create JAR run: | cd projects/kotlin - ./gradlew jar \ No newline at end of file + ./gradlew jar + + test-java: + runs-on: ubuntu-latest + strategy: + matrix: + java-version: [ 17, 21 ] + + steps: + - name: Checkout specific folder from another repository + uses: actions/checkout@v4 + with: + repository: PhoenixNazarov/stater-fsm-code + + - name: Download generated files + uses: actions/download-artifact@v4 + with: + name: java-generated-files + path: projects/java/src/ + + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: ${{ matrix.java-version }} + cache: 'maven' + + - name: Run tests with coverage + run: | + cd projects/java + mvn clean verify -P java${{ matrix.java-version }} + + - name: Create JAR + run: | + cd projects/java + mvn clean package -P java${{ matrix.java-version }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs index 88c0ee5..aad4ffe 100644 --- a/src/Stater.CodeGeneration.App/Program.cs +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -74,6 +74,24 @@ languageS = Language.Kotlin; break; + case "java": + path += "main/java/fsm/" + randomStateMachine.Name.ToLower() + "/"; + testPath += "test/java/fsm/" + randomStateMachine.Name.ToLower() + "/"; + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + Console.WriteLine($"Folder created: {path}"); + } + if (!Directory.Exists(testPath)) + { + Directory.CreateDirectory(testPath); + Console.WriteLine($"Folder created: {testPath}"); + } + path += randomStateMachine.Name + ".java"; + testPath += "Test" + randomStateMachine.Name + ".java"; + + languageS = Language.Java; + break; } var settings = new GenerationSettings( diff --git a/src/Stater.CodeGeneration/CodeGenerator.cs b/src/Stater.CodeGeneration/CodeGenerator.cs index 7ea4937..c07598a 100644 --- a/src/Stater.CodeGeneration/CodeGenerator.cs +++ b/src/Stater.CodeGeneration/CodeGenerator.cs @@ -1,4 +1,6 @@ using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.CSharp; +using Stater.CodeGeneration.LanguageAdapter.Java; using Stater.CodeGeneration.LanguageAdapter.JavaScript; using Stater.CodeGeneration.LanguageAdapter.Kotlin; using Stater.CodeGeneration.LanguageAdapter.Python; @@ -13,6 +15,8 @@ public class CodeGenerator private readonly PythonAdapter pythonAdapter = new(); private readonly JavaScriptAdapter javaScriptAdapter = new(); private readonly TypeScriptAdapter typeScriptAdapter = new(); + private readonly JavaAdapter javaAdapter = new(); + private readonly CSharpAdapter cSharpAdapter = new(); public string Generate(StateMachine stateMachine, GenerationSettings generationSettings) { @@ -24,10 +28,8 @@ public string Generate(StateMachine stateMachine, GenerationSettings generationS switch (generationSettings.Language) { case Language.Kotlin: return kotlinAdapter.Generate(stateMachine, generationSettings); - case Language.Java: - break; - case Language.CSharp: - break; + case Language.Java: return javaAdapter.Generate(stateMachine, generationSettings); + case Language.CSharp: return cSharpAdapter.Generate(stateMachine, generationSettings); case Language.Python3: return pythonAdapter.Generate(stateMachine, generationSettings); case Language.JavaScript:return javaScriptAdapter.Generate(stateMachine, generationSettings); case Language.TypeScript:return typeScriptAdapter.Generate(stateMachine, generationSettings); @@ -52,10 +54,8 @@ public string GenerateTests(StateMachine stateMachine, GenerationSettings genera switch (generationSettings.Language) { case Language.Kotlin: return kotlinAdapter.GenerateTests(stateMachine, generationSettings, scenarios); - case Language.Java: - break; - case Language.CSharp: - break; + case Language.Java: return javaAdapter.GenerateTests(stateMachine, generationSettings, scenarios); + case Language.CSharp: return cSharpAdapter.GenerateTests(stateMachine, generationSettings, scenarios); case Language.Python3: return pythonAdapter.GenerateTests(stateMachine, generationSettings, scenarios); case Language.JavaScript:return javaScriptAdapter.GenerateTests(stateMachine, generationSettings, scenarios); case Language.TypeScript:return typeScriptAdapter.GenerateTests(stateMachine, generationSettings, scenarios); diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs index 130eedd..8d54ee0 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/Base/BaseLanguageAdapter.cs @@ -43,6 +43,33 @@ public string GenerateTests(StateMachine stateMachine, GenerationSettings settin ); } + protected bool CheckDefaultMathCondition( + VariableValue variableValue1, + VariableValue variableValue2, + Condition.VariableCondition.ConditionTypeEnum conditionType + ) + { + return (variableValue1, variableValue2, conditionType) switch + { + (VariableValue.IntVariable, VariableValue.IntVariable, _) => true, + (VariableValue.IntVariable, VariableValue.FloatVariable, _) => true, + (VariableValue.FloatVariable, VariableValue.IntVariable, _) => true, + (VariableValue.FloatVariable, VariableValue.FloatVariable, _) => true, + + (VariableValue.StringVariable, VariableValue.StringVariable, Condition.VariableCondition.ConditionTypeEnum + .Eq) => true, + (VariableValue.StringVariable, VariableValue.StringVariable, Condition.VariableCondition.ConditionTypeEnum + .Ne) => true, + + (VariableValue.BoolVariable, VariableValue.BoolVariable, Condition.VariableCondition.ConditionTypeEnum.Eq) + => true, + (VariableValue.BoolVariable, VariableValue.BoolVariable, Condition.VariableCondition.ConditionTypeEnum.Ne) + => true, + + _ => false + }; + } + protected bool CheckDefaultMathEvent( VariableValue variableValue1, VariableValue variableValue2, diff --git a/src/Stater.CodeGeneration/LanguageAdapter/CSharp/CSharpAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/CSharp/CSharpAdapter.cs new file mode 100644 index 0000000..7eb8b17 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/CSharp/CSharpAdapter.cs @@ -0,0 +1,64 @@ +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.LanguageAdapter.CSharp; + +public class CSharpAdapter: BaseLanguageAdapter +{ + protected override string TemplateName => "csharp"; + protected override string TestTemplateName => "csharp-test"; + + protected override string GetVariableValueTypeName(VariableValue value) + { + return value switch + { + VariableValue.IntVariable => "Int", + VariableValue.BoolVariable => "Boolean", + VariableValue.StringVariable => "String", + VariableValue.FloatVariable => "Float", + _ => "unknown" + }; + } + + protected override string GetVariableValue(VariableValue value) + { + return value switch + { + VariableValue.IntVariable variable => variable.ToString(), + VariableValue.BoolVariable variable => variable.Value ? "false" : "true", + VariableValue.StringVariable variable => '"' + variable.Value + '"', + VariableValue.FloatVariable variable => variable.ToString() + 'f', + _ => "unknown" + }; + } + + protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) + { + switch (condition) + { + case Condition.VariableCondition e: + var variable = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"it.{variable!.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)}"; + } + + return ""; + } + + protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) + { + switch (eEvent) + { + case Event.VariableMath e: + var variable1 = stateMachine.GetVariableByGuid(e.VariableGuid); + return !CheckDefaultMathEvent(variable1!.StartValue, e.Value, e.MathType) + ? "" + : $"it.{variable1.Name} = it.{variable1.Name} {e.GetDefaultMathTypeSign()} {GetVariableValue(e.Value)}"; + + case Event.VariableSet e: + var variable2 = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"it.{variable2!.Name} = {GetVariableValue(e.Value)}"; + } + + return ""; + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Java/JavaAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/Java/JavaAdapter.cs new file mode 100644 index 0000000..5278e62 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/Java/JavaAdapter.cs @@ -0,0 +1,66 @@ +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.LanguageAdapter.Java; + +public class JavaAdapter : BaseLanguageAdapter +{ + protected override string TemplateName => "java"; + protected override string TestTemplateName => "java-test"; + + protected override string GetVariableValueTypeName(VariableValue value) + { + return value switch + { + VariableValue.IntVariable => "int", + VariableValue.BoolVariable => "boolean", + VariableValue.StringVariable => "String", + VariableValue.FloatVariable => "float", + _ => "unknown" + }; + } + + protected override string GetVariableValue(VariableValue value) + { + return value switch + { + VariableValue.IntVariable variable => variable.ToString(), + VariableValue.BoolVariable variable => variable.Value ? "false" : "true", + VariableValue.StringVariable variable => '"' + variable.Value + '"', + VariableValue.FloatVariable variable => variable.ToString() + 'f', + _ => "unknown" + }; + } + + protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) + { + switch (condition) + { + case Condition.VariableCondition e: + var variable = stateMachine.GetVariableByGuid(e.VariableGuid); + return !CheckDefaultMathCondition(variable!.StartValue, e.Value, e.ConditionType) + ? "true" + : $"ctx.{variable.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)}"; + } + + return "true"; + } + + protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) + { + switch (eEvent) + { + case Event.VariableMath e: + var variable1 = stateMachine.GetVariableByGuid(e.VariableGuid); + return !CheckDefaultMathEvent(variable1!.StartValue, e.Value, e.MathType) + ? "{}" + : $"ctx.{variable1.Name} = ctx.{variable1.Name} {e.GetDefaultMathTypeSign()} {GetVariableValue(e.Value)}"; + + case Event.VariableSet e: + var variable2 = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"ctx.{variable2!.Name} = {GetVariableValue(e.Value)}"; + } + + return "{}"; + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/Java/JavaGenerator.cs b/src/Stater.CodeGeneration/LanguageAdapter/Java/JavaGenerator.cs deleted file mode 100644 index 54f5368..0000000 --- a/src/Stater.CodeGeneration/LanguageAdapter/Java/JavaGenerator.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Stater.CodeGeneration.LanguageAdapter.Java; - -// public class JavaGenerator : ILanguageCodeGenerator -// { -// public void Generate(StateMachine stateMachine) -// { -// } -// } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj index 809aac9..7438262 100644 --- a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj +++ b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj @@ -9,6 +9,10 @@ + + + + diff --git a/src/Stater.CodeGeneration/Templates/csharp-test.scriban b/src/Stater.CodeGeneration/Templates/csharp-test.scriban new file mode 100644 index 0000000..5c2b70f --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/csharp-test.scriban @@ -0,0 +1,134 @@ +package fsm.{{ fsm.name | string.downcase }} + +import com.stater.statemachine.kotlin.* + +{{ if settings.generate_states -}} +enum class States { + {{- for item in fsm.states }} + {{ item.name }}{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} +} + +{{ end }} +{{- func state(name) -}} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end -}} +{{- if settings.generate_context -}} +data class {{ fsm.name }}FSMContext( +{{- for item in fsm.variables }} + var {{ item.name }}: {{ convert_variable_type item.start_value }} = {{ convert_variable_value item.start_value }}{{- if !for.last }}{{ "," }}{{- end }} +{{- end}} +) : Context + +{{ end -}} +{{- if !settings.generate_states; state_generic = "String"; else; state_generic = "States"; end }} +{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} +{{- if settings.mode == "Clazz" -}} +class {{ fsm.name }}StateMachine : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + transitions = listOf( + {{- for item in fsm.state_transitions }} + Transition( + name = "{{ item.transition.name }}", + start = {{ state item.start_state.name }}, + end = {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, + condition = { {{ convert_condition item.transition item.transition.condition }} } + {{- end }}{{- if item.transition.event && settings.generate_context }}, + event = { {{ convert_event item.transition item.transition.event }} } + {{- end }} + ){{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ), + {{- if fsm.start_state != null }} + startState = {{ state fsm.start_state.name }}, + {{- end }} + context = {{ context_generic }}() +){{- if settings.generate_interface }} { + {{- for item in fsm.transitions }} + fun {{ item.name }}() = transition("{{ item.name }}") + {{- end }} +} +{{- end }} +{{- else if settings.mode == "Builder" -}} +{{- if settings.generate_interface -}} +class Types{{ fsm.name }}StateMachine( + transitions: List>, + startState: {{ state_generic }}, + states: Set<{{ state_generic }}>, + context: {{ context_generic }}, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map<{{ state_generic }}, List>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter<{{ context_generic }}>? = null, +) : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +){{- if settings.generate_interface }} { + {{- for item in fsm.transitions }} + fun {{ item.name }}() = transition("{{ item.name }}") + {{- end }} +} +{{- end }} + +private val typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + Types{{ fsm.name }}StateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +{{ end -}} +val builder{{ fsm.name }}StateMachine = StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() + {{- if fsm.start_state != null }} + .setStartState({{ state fsm.start_state.name }}) + {{- end }} + .setContext({{ context_generic }}()) + {{- if settings.generate_interface }} + .setFactory(typed{{ fsm.name }}Factory) + {{- end }} + {{- for item in fsm.state_transitions }} + .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- if item.transition.condition && settings.generate_context }} + .setTransitionCondition("{{ item.transition.name }}") { {{ convert_condition item.transition item.transition.condition }} } + {{- end }} + {{- if item.transition.event && settings.generate_context }} + .setTransitionEvent("{{ item.transition.name }}") { {{ convert_event item.transition item.transition.event }} } + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/csharp.scriban b/src/Stater.CodeGeneration/Templates/csharp.scriban new file mode 100644 index 0000000..5c2b70f --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/csharp.scriban @@ -0,0 +1,134 @@ +package fsm.{{ fsm.name | string.downcase }} + +import com.stater.statemachine.kotlin.* + +{{ if settings.generate_states -}} +enum class States { + {{- for item in fsm.states }} + {{ item.name }}{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} +} + +{{ end }} +{{- func state(name) -}} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end -}} +{{- if settings.generate_context -}} +data class {{ fsm.name }}FSMContext( +{{- for item in fsm.variables }} + var {{ item.name }}: {{ convert_variable_type item.start_value }} = {{ convert_variable_value item.start_value }}{{- if !for.last }}{{ "," }}{{- end }} +{{- end}} +) : Context + +{{ end -}} +{{- if !settings.generate_states; state_generic = "String"; else; state_generic = "States"; end }} +{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} +{{- if settings.mode == "Clazz" -}} +class {{ fsm.name }}StateMachine : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + transitions = listOf( + {{- for item in fsm.state_transitions }} + Transition( + name = "{{ item.transition.name }}", + start = {{ state item.start_state.name }}, + end = {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, + condition = { {{ convert_condition item.transition item.transition.condition }} } + {{- end }}{{- if item.transition.event && settings.generate_context }}, + event = { {{ convert_event item.transition item.transition.event }} } + {{- end }} + ){{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ), + {{- if fsm.start_state != null }} + startState = {{ state fsm.start_state.name }}, + {{- end }} + context = {{ context_generic }}() +){{- if settings.generate_interface }} { + {{- for item in fsm.transitions }} + fun {{ item.name }}() = transition("{{ item.name }}") + {{- end }} +} +{{- end }} +{{- else if settings.mode == "Builder" -}} +{{- if settings.generate_interface -}} +class Types{{ fsm.name }}StateMachine( + transitions: List>, + startState: {{ state_generic }}, + states: Set<{{ state_generic }}>, + context: {{ context_generic }}, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map<{{ state_generic }}, List>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter<{{ context_generic }}>? = null, +) : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +){{- if settings.generate_interface }} { + {{- for item in fsm.transitions }} + fun {{ item.name }}() = transition("{{ item.name }}") + {{- end }} +} +{{- end }} + +private val typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + Types{{ fsm.name }}StateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +{{ end -}} +val builder{{ fsm.name }}StateMachine = StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() + {{- if fsm.start_state != null }} + .setStartState({{ state fsm.start_state.name }}) + {{- end }} + .setContext({{ context_generic }}()) + {{- if settings.generate_interface }} + .setFactory(typed{{ fsm.name }}Factory) + {{- end }} + {{- for item in fsm.state_transitions }} + .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- if item.transition.condition && settings.generate_context }} + .setTransitionCondition("{{ item.transition.name }}") { {{ convert_condition item.transition item.transition.condition }} } + {{- end }} + {{- if item.transition.event && settings.generate_context }} + .setTransitionEvent("{{ item.transition.name }}") { {{ convert_event item.transition item.transition.event }} } + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/java-test.scriban b/src/Stater.CodeGeneration/Templates/java-test.scriban new file mode 100644 index 0000000..d8cca27 --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/java-test.scriban @@ -0,0 +1,67 @@ +package fsm.{{ fsm.name | string.downcase }}; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + + +{{- func state(name) -}} +{{- if settings.generate_states -}} +{{ fsm.name }}.States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end }} + +{{if settings.mode == "Clazz"; build_generic = "new " + fsm.name + "." + fsm.name + "StateMachine()"; else if settings.generate_interface; build_generic = "(" + fsm.name + ".Types" + fsm.name + "StateMachine)" + fsm.name + ".builder" + fsm.name + "StateMachine.build()"; else; build_generic = fsm.name + ".builder" + fsm.name + "StateMachine.build()"; end -}} +class Test{{ fsm.name }} { + @Test + void testInit() { + var fsm = {{ build_generic }}; + } + +{{ for index in 0..(scenarios.size - 1) }} + @Test + void testScenario{{index}}() { + var sm = {{ build_generic }}; + sm.disableEvents(); + +{{ for transition in scenarios[index] }} + {{- if settings.generate_interface }} + sm.{{ transition.name }}(); + {{- else }} + sm.transition("{{ transition.name }}"); + {{- end }} + assertEquals(sm.getState(), {{ state get_state_by_uuid(transition.end).name }}); +{{ end }} + } + {{- end }} + + @Test + void testJsonSchema() throws Exception { + var sm = {{ build_generic }}; + assertEquals(new ObjectMapper().readTree(""" + {{ state_machine_json_schema fsm }} + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + {{ if settings.mode == "Builder" && !settings.generate_states }} + @Test + void testSystemAppendStateTransition() throws Exception { + var smBuilder = {{ fsm.name }}.builder{{ fsm.name }}StateMachine; + + smBuilder = smBuilder.addState("__test_state_1__"); + assertEquals(new ObjectMapper().readTree(""" + {{ state_machine_json_schema fsm_test_state_1 }}"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addState("__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + {{ state_machine_json_schema fsm_test_state_2 }}"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + {{ state_machine_json_schema fsm_test_state_3 }}"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + } + {{- end }} +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/java.scriban b/src/Stater.CodeGeneration/Templates/java.scriban new file mode 100644 index 0000000..7018f1c --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/java.scriban @@ -0,0 +1,128 @@ +package fsm.{{ fsm.name | string.downcase }}; + +import com.stater.statemachine.java.*; +import java.util.*; + +class {{ fsm.name }} { +{{ if settings.generate_states ~}} + static enum States { + {{- for item in fsm.states }} + {{ item.name }}{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + } + +{{ end }} +{{- func state(name) -}} +{{- if settings.generate_states -}} +States.{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end -}} +{{- if settings.generate_context ~}} + static class {{ fsm.name }}FSMContext implements Context{ +{{- for item in fsm.variables }} + {{ convert_variable_type item.start_value }} {{ item.name }} = {{ convert_variable_value item.start_value }}; +{{- end}} + } + +{{ end -}} +{{- if !settings.generate_states; state_generic = "String"; else; state_generic = "States"; end }} +{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} +{{- if settings.mode == "Clazz" ~}} + static class {{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}>{ + public {{ fsm.name }}StateMachine() { + super( + List.of( + {{- for item in fsm.state_transitions }} + new Transition<>( + "{{ item.transition.name }}", + {{ state item.start_state.name }}, + {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, + ctx -> {{ convert_condition item.transition item.transition.condition }} {{- else }}, + ctx -> true + {{- end }}{{- if item.transition.event && settings.generate_context }}, + ctx -> {{ convert_event item.transition item.transition.event }} {{- else }}, + ctx -> {} + {{- end }} + ){{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + ), + new {{ context_generic }}(), + {{- if fsm.start_state != null }} + {{ state fsm.start_state.name }} + {{- else }}null{{ end }} + ); + } +{{- if settings.generate_interface }} + {{- for item in fsm.transitions }} + + void {{ item.name }}() { + transition("{{ item.name }}"); + } + {{- end }} +{{- end }} + } +{{- else if settings.mode == "Builder" -}} +{{- if settings.generate_interface ~}} + static class Types{{ fsm.name }}StateMachine extends StaterStateMachine<{{ state_generic }}, {{ context_generic }}> { + public Types{{ fsm.name }}StateMachine( + List> transitions, + {{ context_generic }} context, + {{ state_generic }} startState, + Set<{{ state_generic }}> states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map<{{ state_generic }}, List>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter<{{ context_generic }}> contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } +{{- if settings.generate_interface }} + {{- for item in fsm.transitions }} + + void {{ item.name }}() { + transition("{{ item.name }}"); + } + {{- end }} + } +{{- end }} + + static private final StateMachineFactory<{{ state_generic }}, {{ context_generic }}> typed{{ fsm.name }}Factory = Types{{ fsm.name }}StateMachine::new; + + +{{ end ~}} + static public final StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}> builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() + {{- if fsm.start_state != null }} + .setStartState({{ state fsm.start_state.name }}) + {{- end }} + .setContext(new {{ context_generic }}()) + {{- if settings.generate_interface }} + .setFactory(typed{{ fsm.name }}Factory) + {{- end }} + {{- for item in fsm.state_transitions }} + .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + {{- if item.transition.condition && settings.generate_context }} + .setTransitionCondition("{{ item.transition.name }}", ctx -> {{ convert_condition item.transition item.transition.condition }}) + {{- end }} + {{- if item.transition.event && settings.generate_context }} + .setTransitionEvent("{{ item.transition.name }}", ctx -> {{ convert_event item.transition item.transition.event }}) + {{- end }} + {{- end }}; +{{- end }} +} \ No newline at end of file From 087d79f5820ee4ac377923546d0aa46c63a25510 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 4 Apr 2025 22:51:00 +0300 Subject: [PATCH 52/69] Bugfix --- .github/workflows/code_generation_tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 389eca5..843813e 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -232,6 +232,7 @@ jobs: ./gradlew jar test-java: + needs: [ build-artifacts ] runs-on: ubuntu-latest strategy: matrix: From 2e462f8a6db0c9ad49d167c39d6b7ec8aaaa5b14 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 5 Apr 2025 10:57:11 +0300 Subject: [PATCH 53/69] SF-2: add c# --- .github/workflows/code_generation_tests.yml | 50 ++++- src/Stater.CodeGeneration.App/Program.cs | 18 ++ .../LanguageAdapter/CSharp/CSharpAdapter.cs | 22 ++- .../Templates/csharp-test.scriban | 181 ++++++------------ .../Templates/csharp.scriban | 177 +++++++++-------- 5 files changed, 234 insertions(+), 214 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 843813e..837e9cb 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -35,6 +35,10 @@ jobs: - name: Run generate java run: | dotnet run --project src/Stater.CodeGeneration.App artifacts/java/ 0 java + + - name: Run generate csharp + run: | + dotnet run --project src/Stater.CodeGeneration.App artifacts/csharp/ 0 csharp - name: Save python3 generated files uses: actions/upload-artifact@v4 @@ -65,6 +69,12 @@ jobs: with: name: java-generated-files path: artifacts/java/* + + - name: Save csharp generated files + uses: actions/upload-artifact@v4 + with: + name: csharp-generated-files + path: artifacts/csharp/* test-python: needs: [ build-artifacts ] @@ -265,4 +275,42 @@ jobs: - name: Create JAR run: | cd projects/java - mvn clean package -P java${{ matrix.java-version }} \ No newline at end of file + mvn clean package -P java${{ matrix.java-version }} + + test-csharp: + needs: [ build-artifacts ] + runs-on: ubuntu-latest + strategy: + matrix: + dotnet-version: [8.0] + steps: + - name: Checkout specific folder from another repository + uses: actions/checkout@v4 + with: + repository: PhoenixNazarov/stater-fsm-code + + - name: Set up .NET SDK + uses: actions/setup-dotnet@v3 + with: + dotnet-version: ${{ matrix.dotnet-version }} + + - name: Download generated files + uses: actions/download-artifact@v4 + with: + name: csharp-generated-files + path: projects/c#/Stater.StateMachine.Lib/ + + - name: Restore dependencies + run: | + cd 'projects/с#/Stater.StateMachine.Lib' + dotnet restore + + - name: Build the project + run: | + cd 'projects/с#/Stater.StateMachine.Lib' + dotnet build --configuration Release + + - name: Run tests with coverage + run: | + cd 'projects/с#/Stater.StateMachine.Lib' + dotnet test --configuration Release --collect:"XPlat Code Coverage" \ No newline at end of file diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs index aad4ffe..0ed53f2 100644 --- a/src/Stater.CodeGeneration.App/Program.cs +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -92,6 +92,24 @@ languageS = Language.Java; break; + case "csharp": + path += "/Stater.StateMachine.Lib/fsm/" + randomStateMachine.Name.ToLower() + "/"; + testPath += "/Stater.StateMachine.Lib.Tests/fsm/" + randomStateMachine.Name.ToLower() + "/"; + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + Console.WriteLine($"Folder created: {path}"); + } + if (!Directory.Exists(testPath)) + { + Directory.CreateDirectory(testPath); + Console.WriteLine($"Folder created: {testPath}"); + } + path += randomStateMachine.Name + ".cs"; + testPath += "Test" + randomStateMachine.Name + ".cs"; + + languageS = Language.CSharp; + break; } var settings = new GenerationSettings( diff --git a/src/Stater.CodeGeneration/LanguageAdapter/CSharp/CSharpAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/CSharp/CSharpAdapter.cs index 7eb8b17..39f3667 100644 --- a/src/Stater.CodeGeneration/LanguageAdapter/CSharp/CSharpAdapter.cs +++ b/src/Stater.CodeGeneration/LanguageAdapter/CSharp/CSharpAdapter.cs @@ -12,10 +12,10 @@ protected override string GetVariableValueTypeName(VariableValue value) { return value switch { - VariableValue.IntVariable => "Int", - VariableValue.BoolVariable => "Boolean", - VariableValue.StringVariable => "String", - VariableValue.FloatVariable => "Float", + VariableValue.IntVariable => "int", + VariableValue.BoolVariable => "bool", + VariableValue.StringVariable => "string", + VariableValue.FloatVariable => "float", _ => "unknown" }; } @@ -38,10 +38,12 @@ protected override string GetCondition(Transition transition, Condition conditio { case Condition.VariableCondition e: var variable = stateMachine.GetVariableByGuid(e.VariableGuid); - return $"it.{variable!.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)}"; + return !CheckDefaultMathCondition(variable!.StartValue, e.Value, e.ConditionType) + ? "true" + : $"ctx.{variable.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)}"; } - return ""; + return "true"; } protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) @@ -51,14 +53,14 @@ protected override string GetEvent(Transition transition, Event eEvent, StateMac case Event.VariableMath e: var variable1 = stateMachine.GetVariableByGuid(e.VariableGuid); return !CheckDefaultMathEvent(variable1!.StartValue, e.Value, e.MathType) - ? "" - : $"it.{variable1.Name} = it.{variable1.Name} {e.GetDefaultMathTypeSign()} {GetVariableValue(e.Value)}"; + ? "{}" + : $"ctx.{variable1.Name} = ctx.{variable1.Name} {e.GetDefaultMathTypeSign()} {GetVariableValue(e.Value)}"; case Event.VariableSet e: var variable2 = stateMachine.GetVariableByGuid(e.VariableGuid); - return $"it.{variable2!.Name} = {GetVariableValue(e.Value)}"; + return $"ctx.{variable2!.Name} = {GetVariableValue(e.Value)}"; } - return ""; + return "{}"; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/csharp-test.scriban b/src/Stater.CodeGeneration/Templates/csharp-test.scriban index 5c2b70f..4e36c31 100644 --- a/src/Stater.CodeGeneration/Templates/csharp-test.scriban +++ b/src/Stater.CodeGeneration/Templates/csharp-test.scriban @@ -1,134 +1,73 @@ -package fsm.{{ fsm.name | string.downcase }} +namespace fsm.{{ fsm.name | string.downcase }}; -import com.stater.statemachine.kotlin.* +using Newtonsoft.Json.Linq; -{{ if settings.generate_states -}} -enum class States { - {{- for item in fsm.states }} - {{ item.name }}{{- if !for.last }}{{ "," }}{{- end }} - {{- end }} -} -{{ end }} {{- func state(name) -}} {{- if settings.generate_states -}} States.{{ name }} {{- else -}} "{{ name }}" {{- end -}} -{{- end -}} -{{- if settings.generate_context -}} -data class {{ fsm.name }}FSMContext( -{{- for item in fsm.variables }} - var {{ item.name }}: {{ convert_variable_type item.start_value }} = {{ convert_variable_value item.start_value }}{{- if !for.last }}{{ "," }}{{- end }} -{{- end}} -) : Context - -{{ end -}} -{{- if !settings.generate_states; state_generic = "String"; else; state_generic = "States"; end }} -{{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} -{{- if settings.mode == "Clazz" -}} -class {{ fsm.name }}StateMachine : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( - transitions = listOf( - {{- for item in fsm.state_transitions }} - Transition( - name = "{{ item.transition.name }}", - start = {{ state item.start_state.name }}, - end = {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, - condition = { {{ convert_condition item.transition item.transition.condition }} } - {{- end }}{{- if item.transition.event && settings.generate_context }}, - event = { {{ convert_event item.transition item.transition.event }} } - {{- end }} - ){{- if !for.last }}{{ "," }}{{- end }} - {{- end }} - ), - {{- if fsm.start_state != null }} - startState = {{ state fsm.start_state.name }}, - {{- end }} - context = {{ context_generic }}() -){{- if settings.generate_interface }} { - {{- for item in fsm.transitions }} - fun {{ item.name }}() = transition("{{ item.name }}") - {{- end }} -} {{- end }} -{{- else if settings.mode == "Builder" -}} -{{- if settings.generate_interface -}} -class Types{{ fsm.name }}StateMachine( - transitions: List>, - startState: {{ state_generic }}, - states: Set<{{ state_generic }}>, - context: {{ context_generic }}, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map<{{ state_generic }}, List>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter<{{ context_generic }}>? = null, -) : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -){{- if settings.generate_interface }} { - {{- for item in fsm.transitions }} - fun {{ item.name }}() = transition("{{ item.name }}") - {{- end }} -} -{{- end }} - -private val typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - Types{{ fsm.name }}StateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} -{{ end -}} -val builder{{ fsm.name }}StateMachine = StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() - {{- if fsm.start_state != null }} - .setStartState({{ state fsm.start_state.name }}) - {{- end }} - .setContext({{ context_generic }}()) - {{- if settings.generate_interface }} - .setFactory(typed{{ fsm.name }}Factory) - {{- end }} - {{- for item in fsm.state_transitions }} - .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) - {{- if item.transition.condition && settings.generate_context }} - .setTransitionCondition("{{ item.transition.name }}") { {{ convert_condition item.transition item.transition.condition }} } - {{- end }} - {{- if item.transition.event && settings.generate_context }} - .setTransitionEvent("{{ item.transition.name }}") { {{ convert_event item.transition item.transition.event }} } +{{if settings.mode == "Clazz"; build_generic = "new " + fsm.name + "StateMachine()"; else if settings.generate_interface; build_generic = fsm.name + ".Builder" + fsm.name + "StateMachine.Build() as " + fsm.name + ".Types" + fsm.name + "StateMachine"; else; build_generic = fsm.name + ".Builder" + fsm.name + "StateMachine.Build()"; end -}} +[Collection("{{ fsm.name }} Auto Generated Tests")] +public class Test{{ fsm.name }} { + [Fact] + private void TestInit() + { + _ = {{ build_generic }}; + } + +{{ for index in 0..(scenarios.size - 1) }} + [Fact] + private void TestScenario{{index}}() + { + var sm = {{ build_generic }}; + sm.DisableEvents(); + +{{ for transition in scenarios[index] }} + {{- if settings.generate_interface }} + sm.{{ transition.name }}(); + {{- else }} + sm.Transition("{{ transition.name }}"); + {{- end }} + Assert.Equal({{ state get_state_by_uuid(transition.end).name }}, sm.GetState()); +{{ end }} + } {{- end }} + + [Fact] + private void TestJsonSchema() + { + var sm = {{ build_generic }}; + Assert.Equal(JObject.Parse(""" + {{ state_machine_json_schema fsm }} + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + +{{ if settings.mode == "Builder" && !settings.generate_states }} + [Fact] + private void TestSystemAppendStateTransition() + { + var smBuilder = {{ fsm.name }}.Builder{{ fsm.name }}StateMachine.Copy(); + + smBuilder = smBuilder.AddState("__test_state_1__"); + Assert.Equal(JObject.Parse(""" + {{ state_machine_json_schema fsm_test_state_1 }} + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddState("__test_state_2__"); + Assert.Equal(JObject.Parse(""" + {{ state_machine_json_schema fsm_test_state_2 }} + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + Assert.Equal(JObject.Parse(""" + {{ state_machine_json_schema fsm_test_state_3 }} + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + } {{- end }} -{{- end }} \ No newline at end of file +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/csharp.scriban b/src/Stater.CodeGeneration/Templates/csharp.scriban index 5c2b70f..7335df7 100644 --- a/src/Stater.CodeGeneration/Templates/csharp.scriban +++ b/src/Stater.CodeGeneration/Templates/csharp.scriban @@ -1,9 +1,9 @@ -package fsm.{{ fsm.name | string.downcase }} +namespace fsm.{{ fsm.name | string.downcase }}; -import com.stater.statemachine.kotlin.* +using Stater.StateMachine.Lib; -{{ if settings.generate_states -}} -enum class States { +{{ if settings.generate_states ~}} +public enum States { {{- for item in fsm.states }} {{ item.name }}{{- if !for.last }}{{ "," }}{{- end }} {{- end }} @@ -17,75 +17,88 @@ States.{{ name }} "{{ name }}" {{- end -}} {{- end -}} -{{- if settings.generate_context -}} -data class {{ fsm.name }}FSMContext( +{{- if settings.generate_context ~}} +public class {{ fsm.name }}FSMContext : IContext{ {{- for item in fsm.variables }} - var {{ item.name }}: {{ convert_variable_type item.start_value }} = {{ convert_variable_value item.start_value }}{{- if !for.last }}{{ "," }}{{- end }} + public {{ convert_variable_type item.start_value }} {{ item.name }} = {{ convert_variable_value item.start_value }}; {{- end}} -) : Context +} {{ end -}} {{- if !settings.generate_states; state_generic = "String"; else; state_generic = "States"; end }} {{- if !settings.generate_context; context_generic = "EmptyContext"; else; context_generic = fsm.name+"FSMContext"; end -}} -{{- if settings.mode == "Clazz" -}} -class {{ fsm.name }}StateMachine : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( - transitions = listOf( +{{- if settings.mode == "Clazz" ~}} +public class {{ fsm.name }}StateMachine() : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + new List> + { {{- for item in fsm.state_transitions }} - Transition( - name = "{{ item.transition.name }}", - start = {{ state item.start_state.name }}, - end = {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, - condition = { {{ convert_condition item.transition item.transition.condition }} } + new( + "{{ item.transition.name }}", + {{ state item.start_state.name }}, + {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, + ctx => {{ convert_condition item.transition item.transition.condition }} {{- else }}, + ctx => true {{- end }}{{- if item.transition.event && settings.generate_context }}, - event = { {{ convert_event item.transition item.transition.event }} } + ctx => {{ convert_event item.transition item.transition.event }} {{- else }}, + ctx => { } {{- end }} ){{- if !for.last }}{{ "," }}{{- end }} {{- end }} - ), + }, + new {{ context_generic }}(), {{- if fsm.start_state != null }} - startState = {{ state fsm.start_state.name }}, - {{- end }} - context = {{ context_generic }}() -){{- if settings.generate_interface }} { - {{- for item in fsm.transitions }} - fun {{ item.name }}() = transition("{{ item.name }}") - {{- end }} -} -{{- end }} -{{- else if settings.mode == "Builder" -}} -{{- if settings.generate_interface -}} -class Types{{ fsm.name }}StateMachine( - transitions: List>, - startState: {{ state_generic }}, - states: Set<{{ state_generic }}>, - context: {{ context_generic }}, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map<{{ state_generic }}, List>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter<{{ context_generic }}>? = null, -) : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -){{- if settings.generate_interface }} { + {{ state fsm.start_state.name }} + {{- else }}null{{ end }} +) +{ +{{- if settings.generate_interface }} {{- for item in fsm.transitions }} - fun {{ item.name }}() = transition("{{ item.name }}") + public void {{ item.name }}() + { + Transition("{{ item.name }}"); + }{{- if !for.last }}{{ "\n" }}{{- end }} {{- end }} +{{- end }} } +{{- else if settings.mode == "Builder" -}} +public class {{fsm.name}} { +{{~ if settings.generate_interface ~}} + public class Types{{ fsm.name }}StateMachine( + List> transitions, + {{ context_generic }} context, + {{ state_generic }} startState, + HashSet<{{ state_generic }}> states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary<{{ state_generic }}, List>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter<{{ context_generic }}> contextJsonAdapter + ) : StaterStateMachine<{{ state_generic }}, {{ context_generic }}>( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + {{- if settings.generate_interface }} + {{- for item in fsm.transitions }} + public void {{ item.name }}() + { + Transition("{{ item.name }}"); + }{{- if !for.last }}{{ "\n" }}{{- end }} + {{- end }} + } {{- end }} - -private val typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, {{ context_generic }}> = { + private static StateMachineFactory<{{ state_generic }}, {{ context_generic }}> Typed{{ fsm.name }}Factory = ( transitionsA, contextA, startStateA, @@ -96,39 +109,39 @@ private val typed{{ fsm.name }}Factory: StateMachineFactory<{{ state_generic }}, transitionAllCallbacksA, stateCallbacksA, stateAllCallbacksA, - contextJsonAdapterA, - -> - Types{{ fsm.name }}StateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} + contextJsonAdapterA + ) => new Types{{ fsm.name }}StateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); -{{ end -}} -val builder{{ fsm.name }}StateMachine = StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() + +{{ end ~}} + public static StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}> Builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder<{{ state_generic }}, {{ context_generic }}>() {{- if fsm.start_state != null }} - .setStartState({{ state fsm.start_state.name }}) + .SetStartState({{ state fsm.start_state.name }}) {{- end }} - .setContext({{ context_generic }}()) + .SetContext(new {{ context_generic }}()) {{- if settings.generate_interface }} - .setFactory(typed{{ fsm.name }}Factory) + .SetFactory(Typed{{ fsm.name }}Factory) {{- end }} {{- for item in fsm.state_transitions }} - .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) + .AddTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) {{- if item.transition.condition && settings.generate_context }} - .setTransitionCondition("{{ item.transition.name }}") { {{ convert_condition item.transition item.transition.condition }} } + .SetTransitionCondition("{{ item.transition.name }}", ctx => {{ convert_condition item.transition item.transition.condition }}) {{- end }} {{- if item.transition.event && settings.generate_context }} - .setTransitionEvent("{{ item.transition.name }}") { {{ convert_event item.transition item.transition.event }} } - {{- end }} + .SetTransitionEvent("{{ item.transition.name }}", ctx => {{ convert_event item.transition item.transition.event }}) {{- end }} + {{- end }}; +} {{- end }} \ No newline at end of file From dda9cf7f01386f376c4cca0752fcbb84d032b4e5 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 5 Apr 2025 10:59:29 +0300 Subject: [PATCH 54/69] Update scharp --- .github/workflows/code_generation_tests.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 837e9cb..c25fe23 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -298,19 +298,19 @@ jobs: uses: actions/download-artifact@v4 with: name: csharp-generated-files - path: projects/c#/Stater.StateMachine.Lib/ + path: projects/csharp/Stater.StateMachine.Lib/ - name: Restore dependencies run: | - cd 'projects/с#/Stater.StateMachine.Lib' + cd projects/csharp/Stater.StateMachine.Lib dotnet restore - name: Build the project run: | - cd 'projects/с#/Stater.StateMachine.Lib' + cd projects/csharp/Stater.StateMachine.Lib dotnet build --configuration Release - name: Run tests with coverage run: | - cd 'projects/с#/Stater.StateMachine.Lib' + cd projects/csharp/Stater.StateMachine.Lib dotnet test --configuration Release --collect:"XPlat Code Coverage" \ No newline at end of file From c875818c3ab0062dc909bb4cd8d20ac945f89a48 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 7 Apr 2025 09:04:48 +0300 Subject: [PATCH 55/69] SF-12: add c++ generation --- .github/workflows/code_generation_tests.yml | 116 ++++++++++++- src/Stater.CodeGeneration.App/Program.cs | 18 ++ src/Stater.CodeGeneration/CodeGenerator.cs | 58 +++---- .../CPlusPlus/CPlusPlusAdapter.cs | 66 +++++++ .../Stater.CodeGeneration.csproj | 2 + .../Templates/cplusplus-test.scriban | 60 +++++++ .../Templates/cplusplus.scriban | 161 ++++++++++++++++++ 7 files changed, 442 insertions(+), 39 deletions(-) create mode 100644 src/Stater.CodeGeneration/LanguageAdapter/CPlusPlus/CPlusPlusAdapter.cs create mode 100644 src/Stater.CodeGeneration/Templates/cplusplus-test.scriban create mode 100644 src/Stater.CodeGeneration/Templates/cplusplus.scriban diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index c25fe23..7f8751d 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -39,6 +39,10 @@ jobs: - name: Run generate csharp run: | dotnet run --project src/Stater.CodeGeneration.App artifacts/csharp/ 0 csharp + + - name: Run generate c++ + run: | + dotnet run --project src/Stater.CodeGeneration.App artifacts/cplusplus/ 0 cplusplus - name: Save python3 generated files uses: actions/upload-artifact@v4 @@ -75,6 +79,12 @@ jobs: with: name: csharp-generated-files path: artifacts/csharp/* + + - name: Save c++ generated files + uses: actions/upload-artifact@v4 + with: + name: csharp-generated-files + path: artifacts/cplusplus/* test-python: needs: [ build-artifacts ] @@ -125,7 +135,6 @@ jobs: strategy: matrix: node-version: [ '16', '18', '20' ] - steps: - name: Checkout specific folder from another repository uses: actions/checkout@v4 @@ -161,7 +170,6 @@ jobs: strategy: matrix: node-version: [ '16', '18', '20' ] - steps: - name: Checkout specific folder from another repository uses: actions/checkout@v4 @@ -197,7 +205,6 @@ jobs: strategy: matrix: java-version: [ '17', '21' ] - steps: - name: Checkout specific folder from another repository uses: actions/checkout@v4 @@ -247,7 +254,6 @@ jobs: strategy: matrix: java-version: [ 17, 21 ] - steps: - name: Checkout specific folder from another repository uses: actions/checkout@v4 @@ -313,4 +319,104 @@ jobs: - name: Run tests with coverage run: | cd projects/csharp/Stater.StateMachine.Lib - dotnet test --configuration Release --collect:"XPlat Code Coverage" \ No newline at end of file + dotnet test --configuration Release --collect:"XPlat Code Coverage" + + test-cplusplus: + needs: [ build-artifacts ] + runs-on: ubuntu-latest + strategy: + matrix: + compiler: + - { cc: gcc-11, cxx: g++-11 } + - { cc: gcc-12, cxx: g++-12 } + - { cc: gcc-13, cxx: g++-13 } + - { cc: clang-16, cxx: clang++-16 } + - { cc: clang-17, cxx: clang++-17 } + fail-fast: false + + steps: + - name: Checkout specific folder from another repository + uses: actions/checkout@v4 + with: + repository: PhoenixNazarov/stater-fsm-code + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y lcov cmake + sudo apt-get install -y ${{ matrix.compiler.cc }} ${{ matrix.compiler.cxx }} + if [ "${{ matrix.compiler.cc }}" = "clang-16" ]; then + sudo apt-get install -y llvm-16 + elif [ "${{ matrix.compiler.cc }}" = "clang-17" ]; then + sudo apt-get install -y llvm-17 + fi + pip install gcovr + + - name: Download generated files + uses: actions/download-artifact@v4 + with: + name: csharp-generated-files + path: projects/cPlusPlus/ + + - name: Configure CMake + env: + CC: ${{ matrix.compiler.cc }} + CXX: ${{ matrix.compiler.cxx }} + run: | + cd projects/cPlusPlus + sh auto_config_cmake.sh fsm + cmake -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="--coverage" + + - name: Build + env: + CC: ${{ matrix.compiler.cc }} + CXX: ${{ matrix.compiler.cxx }} + run: | + cd projects/cPlusPlus + if [[ "${{ matrix.compiler.cc }}" == clang-* ]]; then + export CFLAGS="-fprofile-instr-generate -fcoverage-mapping" + export CXXFLAGS="-fprofile-instr-generate -fcoverage-mapping" + else + export CFLAGS="--coverage" + export CXXFLAGS="--coverage" + fi + + cmake -B build -S . \ + -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_C_COMPILER=${{ matrix.compiler.cc }} \ + -DCMAKE_CXX_COMPILER=${{ matrix.compiler.cxx }} \ + -DCMAKE_C_FLAGS="${CFLAGS}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS}" + + cmake --build build + + - name: Run tests + run: | + cd projects/cPlusPlus/build + if [[ "${{ matrix.compiler.cc }}" == clang-* ]]; then + export LLVM_PROFILE_FILE="coverage-%p.profraw" + else + export LLVM_PROFILE_FILE="" + fi + ctest --output-on-failure + + - name: Generate and show detailed coverage + run: | + cd projects/cPlusPlus/build + if [ "${{ matrix.compiler.cc }}" = "clang-16" ]; then + llvm-profdata-16 merge -sparse coverage-*.profraw -o coverage.profdata + llvm-cov-16 report ./fsm_tests -instr-profile=coverage.profdata --ignore-filename-regex=".*(gtest|nlohmann|CMakeFiles).*" + elif [ "${{ matrix.compiler.cc }}" = "clang-17" ]; then + llvm-profdata-17 merge -sparse coverage-*.profraw -o coverage.profdata + llvm-cov-17 report ./fsm_tests -instr-profile=coverage.profdata --ignore-filename-regex=".*(gtest|nlohmann|CMakeFiles).*" + else + if [ "${{ matrix.compiler.cc }}" = "gcc-11" ]; then + GCOV_EXEC=gcov-11 + elif [ "${{ matrix.compiler.cc }}" = "gcc-12" ]; then + GCOV_EXEC=gcov-12 + elif [ "${{ matrix.compiler.cc }}" = "gcc-13" ]; then + GCOV_EXEC=gcov-13 + fi + gcovr -r .. --exclude '.*gtest.*' --exclude '.*nlohmann.*' --gcov-executable $GCOV_EXEC --txt + fi + \ No newline at end of file diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs index 0ed53f2..e2a15f6 100644 --- a/src/Stater.CodeGeneration.App/Program.cs +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -110,6 +110,24 @@ languageS = Language.CSharp; break; + case "cplusplus": + path += "fsm/" + randomStateMachine.Name.ToLower() + "/"; + testPath += "tests/"; + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + Console.WriteLine($"Folder created: {path}"); + } + if (!Directory.Exists(testPath)) + { + Directory.CreateDirectory(testPath); + Console.WriteLine($"Folder created: {testPath}"); + } + path += randomStateMachine.Name + ".h"; + testPath += "test_" + randomStateMachine.Name + ".cpp"; + + languageS = Language.CPlusPlus; + break; } var settings = new GenerationSettings( diff --git a/src/Stater.CodeGeneration/CodeGenerator.cs b/src/Stater.CodeGeneration/CodeGenerator.cs index c07598a..b64bd01 100644 --- a/src/Stater.CodeGeneration/CodeGenerator.cs +++ b/src/Stater.CodeGeneration/CodeGenerator.cs @@ -1,4 +1,5 @@ using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.CPlusPlus; using Stater.CodeGeneration.LanguageAdapter.CSharp; using Stater.CodeGeneration.LanguageAdapter.Java; using Stater.CodeGeneration.LanguageAdapter.JavaScript; @@ -17,6 +18,7 @@ public class CodeGenerator private readonly TypeScriptAdapter typeScriptAdapter = new(); private readonly JavaAdapter javaAdapter = new(); private readonly CSharpAdapter cSharpAdapter = new(); + private readonly CPlusPlusAdapter cPlusPlusAdapter = new(); public string Generate(StateMachine stateMachine, GenerationSettings generationSettings) { @@ -24,24 +26,18 @@ public string Generate(StateMachine stateMachine, GenerationSettings generationS { throw new InvalidDataException(); } - - switch (generationSettings.Language) - { - case Language.Kotlin: return kotlinAdapter.Generate(stateMachine, generationSettings); - case Language.Java: return javaAdapter.Generate(stateMachine, generationSettings); - case Language.CSharp: return cSharpAdapter.Generate(stateMachine, generationSettings); - case Language.Python3: return pythonAdapter.Generate(stateMachine, generationSettings); - case Language.JavaScript:return javaScriptAdapter.Generate(stateMachine, generationSettings); - case Language.TypeScript:return typeScriptAdapter.Generate(stateMachine, generationSettings); - case Language.C: - break; - case Language.CPlusPlus: - break; - default: - throw new ArgumentOutOfRangeException(nameof(generationSettings)); - } - return ""; + return generationSettings.Language switch + { + Language.Kotlin => kotlinAdapter.Generate(stateMachine, generationSettings), + Language.Java => javaAdapter.Generate(stateMachine, generationSettings), + Language.CSharp => cSharpAdapter.Generate(stateMachine, generationSettings), + Language.Python3 => pythonAdapter.Generate(stateMachine, generationSettings), + Language.JavaScript => javaScriptAdapter.Generate(stateMachine, generationSettings), + Language.TypeScript => typeScriptAdapter.Generate(stateMachine, generationSettings), + Language.CPlusPlus => cPlusPlusAdapter.Generate(stateMachine, generationSettings), + _ => throw new ArgumentOutOfRangeException(nameof(generationSettings)) + }; } public string GenerateTests(StateMachine stateMachine, GenerationSettings generationSettings, List> scenarios) @@ -50,23 +46,17 @@ public string GenerateTests(StateMachine stateMachine, GenerationSettings genera { throw new InvalidDataException(); } - - switch (generationSettings.Language) - { - case Language.Kotlin: return kotlinAdapter.GenerateTests(stateMachine, generationSettings, scenarios); - case Language.Java: return javaAdapter.GenerateTests(stateMachine, generationSettings, scenarios); - case Language.CSharp: return cSharpAdapter.GenerateTests(stateMachine, generationSettings, scenarios); - case Language.Python3: return pythonAdapter.GenerateTests(stateMachine, generationSettings, scenarios); - case Language.JavaScript:return javaScriptAdapter.GenerateTests(stateMachine, generationSettings, scenarios); - case Language.TypeScript:return typeScriptAdapter.GenerateTests(stateMachine, generationSettings, scenarios); - case Language.C: - break; - case Language.CPlusPlus: - break; - default: - throw new ArgumentOutOfRangeException(nameof(generationSettings)); - } - return ""; + return generationSettings.Language switch + { + Language.Kotlin => kotlinAdapter.GenerateTests(stateMachine, generationSettings, scenarios), + Language.Java => javaAdapter.GenerateTests(stateMachine, generationSettings, scenarios), + Language.CSharp => cSharpAdapter.GenerateTests(stateMachine, generationSettings, scenarios), + Language.Python3 => pythonAdapter.GenerateTests(stateMachine, generationSettings, scenarios), + Language.JavaScript => javaScriptAdapter.GenerateTests(stateMachine, generationSettings, scenarios), + Language.TypeScript => typeScriptAdapter.GenerateTests(stateMachine, generationSettings, scenarios), + Language.CPlusPlus => cPlusPlusAdapter.GenerateTests(stateMachine, generationSettings, scenarios), + _ => throw new ArgumentOutOfRangeException(nameof(generationSettings)) + }; } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/LanguageAdapter/CPlusPlus/CPlusPlusAdapter.cs b/src/Stater.CodeGeneration/LanguageAdapter/CPlusPlus/CPlusPlusAdapter.cs new file mode 100644 index 0000000..1c83b75 --- /dev/null +++ b/src/Stater.CodeGeneration/LanguageAdapter/CPlusPlus/CPlusPlusAdapter.cs @@ -0,0 +1,66 @@ +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration.LanguageAdapter.CPlusPlus; + +public class CPlusPlusAdapter: BaseLanguageAdapter +{ + protected override string TemplateName => "cplusplus"; + protected override string TestTemplateName => "cplusplus-test"; + + protected override string GetVariableValueTypeName(VariableValue value) + { + return value switch + { + VariableValue.IntVariable => "int", + VariableValue.BoolVariable => "bool", + VariableValue.StringVariable => "std::string", + VariableValue.FloatVariable => "float", + _ => "unknown" + }; + } + + protected override string GetVariableValue(VariableValue value) + { + return value switch + { + VariableValue.IntVariable variable => variable.ToString(), + VariableValue.BoolVariable variable => variable.Value ? "false" : "true", + VariableValue.StringVariable variable => '"' + variable.Value + '"', + VariableValue.FloatVariable variable => variable.ToString() + 'f', + _ => "unknown" + }; + } + + protected override string GetCondition(Transition transition, Condition condition, StateMachine stateMachine) + { + switch (condition) + { + case Condition.VariableCondition e: + var variable = stateMachine.GetVariableByGuid(e.VariableGuid); + return !CheckDefaultMathCondition(variable!.StartValue, e.Value, e.ConditionType) + ? "return true;" + : $"return ctx->{variable.Name} {e.GetDefaultConditionSign()} {GetVariableValue(variable.StartValue)};"; + } + + return "true"; + } + + protected override string GetEvent(Transition transition, Event eEvent, StateMachine stateMachine) + { + switch (eEvent) + { + case Event.VariableMath e: + var variable1 = stateMachine.GetVariableByGuid(e.VariableGuid); + return !CheckDefaultMathEvent(variable1!.StartValue, e.Value, e.MathType) + ? "{};" + : $"ctx->{variable1.Name} = ctx->{variable1.Name} {e.GetDefaultMathTypeSign()} {GetVariableValue(e.Value)};"; + + case Event.VariableSet e: + var variable2 = stateMachine.GetVariableByGuid(e.VariableGuid); + return $"ctx->{variable2!.Name} = {GetVariableValue(e.Value)};"; + } + + return "{}"; + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj index 7438262..93c9e55 100644 --- a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj +++ b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj @@ -9,6 +9,8 @@ + + diff --git a/src/Stater.CodeGeneration/Templates/cplusplus-test.scriban b/src/Stater.CodeGeneration/Templates/cplusplus-test.scriban new file mode 100644 index 0000000..9704c5d --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/cplusplus-test.scriban @@ -0,0 +1,60 @@ +#include <{{fsm.name}}.h> + +#include + +{{ func state(name) }} +{{- if settings.generate_states -}} +e_{{ fsm.name }}_states::{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{ end }} + +{{if settings.mode == "Clazz"; build_generic = "new " + fsm.name + "_state_machine()"; else if settings.generate_interface; build_generic = "dynamic_cast(" + "st.get())"; else; build_generic = "builder_" + fsm.name + "_state_machine.build()"; end -}} +TEST({{ fsm.name }}_state_machine_test, test_init) { + {{- if settings.mode != "Clazz" && settings.generate_interface }} + const auto st = builder_{{ fsm.name }}_state_machine.build(); + {{- end }} + {{ build_generic }}; +} +{{ for index in 0..(scenarios.size - 1) }} + +TEST({{ fsm.name }}_state_machine_test, test_scenario_{{index}}) { + {{- if settings.mode != "Clazz" && settings.generate_interface }} + const auto st = builder_{{ fsm.name }}_state_machine.build(); + {{- end }} + const auto sm = {{ build_generic }}; + sm->disable_events(); + +{{ for transition in scenarios[index] }} + {{- if settings.generate_interface }} + sm->{{ transition.name }}(); + {{- else }} + sm->transition("{{ transition.name }}"); + {{- end }} + ASSERT_EQ(sm->get_state(), {{ state get_state_by_uuid(transition.end).name }}); +{{ end -}} +} +{{- end }} + +TEST({{ fsm.name }}_state_machine_test, test_json_schema) { + {{- if settings.mode != "Clazz" && settings.generate_interface }} + const auto st = builder_{{ fsm.name }}_state_machine.build(); + {{- end }} + auto sm = {{ build_generic }}; + ASSERT_EQ(nlohmann::json::parse(R"({{ state_machine_json_schema fsm }})"), nlohmann::json::parse(sm->to_json_schema())); +} +{{ if settings.mode == "Builder" && !settings.generate_states }} +TEST({{ fsm.name }}_state_machine_test, test_system_append_state_transition) { + auto sm_builder = builder_{{ fsm.name }}_state_machine; + + sm_builder = sm_builder.add_state("__test_state_1__"); + ASSERT_EQ(nlohmann::json::parse(R"({{ state_machine_json_schema fsm_test_state_1 }})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_state("__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({{ state_machine_json_schema fsm_test_state_2 }})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({{ state_machine_json_schema fsm_test_state_3 }})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); +} +{{- end }} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/cplusplus.scriban b/src/Stater.CodeGeneration/Templates/cplusplus.scriban new file mode 100644 index 0000000..02d890e --- /dev/null +++ b/src/Stater.CodeGeneration/Templates/cplusplus.scriban @@ -0,0 +1,161 @@ +#pragma once + +#include + +{{ if settings.generate_states ~}} +enum class e_{{ fsm.name }}_states { + {{- for item in fsm.states }} + {{ item.name }}{{- if !for.last }}{{ "," }}{{- end }} + {{- end }} +}; + +inline void to_json(nlohmann::json &j, const e_{{ fsm.name }}_states &e) { + switch (e) { + {{- for item in fsm.states }} + case e_{{ fsm.name }}_states::{{ item.name }}: j = "{{ item.name }}"; + break; + {{- end }} + } +} + +inline void from_json(const nlohmann::json &j, e_{{ fsm.name }}_states &e) { + std::string state_str = j.get(); +{{~ for item in fsm.states }} + {{ if for.first }}if{{ else }}else if{{- end }} (state_str == "{{ item.name }}") e = e_{{ fsm.name }}_states::{{ item.name }}; + {{- end }} +} + +{{ end }} +{{- func state(name) -}} +{{- if settings.generate_states -}} +e_{{ fsm.name }}_states::{{ name }} +{{- else -}} +"{{ name }}" +{{- end -}} +{{- end -}} +{{- if settings.generate_context ~}} +class {{ fsm.name }}_context final : context { +public: +{{- for item in fsm.variables }} + {{ convert_variable_type item.start_value }} {{ item.name }} = {{ convert_variable_value item.start_value }}; +{{- end }} +}; + +{{ end -}} +{{- if !settings.generate_states; state_generic = "std::string"; else; state_generic = "e_" + fsm.name + "_states"; end }} +{{- if !settings.generate_context; context_generic = "empty_context"; else; context_generic = fsm.name + "_context"; end -}} +{{- if settings.mode == "Clazz" ~}} +class {{ fsm.name }}_state_machine : public stater_state_machine<{{ state_generic }}, {{ context_generic }}> { +public: + {{ fsm.name }}_state_machine() : stater_state_machine ( + { + {{- for item in fsm.state_transitions }} + transition_t<::{{ state_generic }}, {{ context_generic }}>( + "{{ item.transition.name }}", + {{ state item.start_state.name }}, + {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, + []({{ context_generic }} *ctx) { {{ convert_condition item.transition item.transition.condition }} }{{- else }}, + []({{ context_generic }} *ctx) { return true; } + {{- end }}{{- if item.transition.event && settings.generate_context }}, + []({{ context_generic }} *ctx) { {{ convert_event item.transition item.transition.event }} }{{- else }}, + []({{ context_generic }} *ctx) { } + {{- end }} + ){{- if !for.last }}{{ "," }}{{- end }} + {{- end }} + }, + new {{ context_generic }}(), + {{- if fsm.start_state != null }} + {{ state fsm.start_state.name }} + {{- else }}nullptr{{ end }} + ) { + } +{{ if settings.generate_interface }} + {{- for item in fsm.transitions }} + void {{ item.name }}() { + transition("{{ item.name }}"); + }{{- if !for.last }}{{ "\n" }}{{- end }} + {{- end }} +{{- end }} +}; +{{- else if settings.mode == "Builder" -}} +{{~ if settings.generate_interface ~}} +class types_{{ fsm.name }}_state_machine : public stater_state_machine<{{ state_generic }}, {{ context_generic }}> { +public: + types_{{ fsm.name }}_state_machine( + const std::vector> &transitions, + {{ context_generic }} *context, + const {{ state_generic }} &start_state, + const std::unordered_set<{{ state_generic }}> &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map<{{ state_generic }}, std::vector>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter<{{ context_generic }}> > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } +{{ if settings.generate_interface }} + {{- for item in fsm.transitions }} + void {{ item.name }}() { + transition("{{ item.name }}"); + }{{- if !for.last }}{{ "\n" }}{{- end }} + {{- end }} +{{- end }} +}; + +inline state_machine_factory<{{ state_generic }}, {{ context_generic }}> typed_{{ fsm.name }}_factory = []( + const std::vector > &transitions, + {{ context_generic }} *context, + {{ state_generic }} start_state, + const std::unordered_set<{{ state_generic }}> &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::{{ state_generic }}, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +{{ end ~}} +inline stater_state_machine_builder<{{ state_generic }}, {{ context_generic }}> builder_{{ fsm.name }}_state_machine = stater_state_machine_builder<{{ state_generic }}, {{ context_generic }}>() +{{- if fsm.start_state != null }} + .set_start_state({{ state fsm.start_state.name }}) +{{- end }} + .set_context(new {{ context_generic }}()) +{{- if settings.generate_interface }} + .set_factory(typed_{{ fsm.name }}_factory) +{{- end }} +{{- for item in fsm.state_transitions }} + .add_transition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) +{{- if item.transition.condition && settings.generate_context }} + .set_transition_condition("{{ item.transition.name }}", []({{ context_generic }} *ctx) { {{ convert_condition item.transition item.transition.condition }} }) +{{- end }} +{{- if item.transition.event && settings.generate_context }} + .set_transition_event("{{ item.transition.name }}", []({{ context_generic }} *ctx) { {{ convert_event item.transition item.transition.event }} }) +{{- end }} +{{- end }}; +{{- end }} \ No newline at end of file From ef9eba4ab77ce591a78ad78689ff5841de27c014 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 7 Apr 2025 09:06:46 +0300 Subject: [PATCH 56/69] SF-12: add c++ generation --- .github/workflows/code_generation_tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 7f8751d..60c81df 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -83,7 +83,7 @@ jobs: - name: Save c++ generated files uses: actions/upload-artifact@v4 with: - name: csharp-generated-files + name: cplusplus-generated-files path: artifacts/cplusplus/* test-python: @@ -355,7 +355,7 @@ jobs: - name: Download generated files uses: actions/download-artifact@v4 with: - name: csharp-generated-files + name: cplusplus-generated-files path: projects/cPlusPlus/ - name: Configure CMake From a317a00417cfb38af01147554a7359d78b62e130 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 7 Apr 2025 09:11:01 +0300 Subject: [PATCH 57/69] SF-12: add c++ generation --- Stater.sln.DotSettings.user | 1 + src/Stater.CodeGeneration.App/Program.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Stater.sln.DotSettings.user b/Stater.sln.DotSettings.user index 71ec0dc..30ab91a 100644 --- a/Stater.sln.DotSettings.user +++ b/Stater.sln.DotSettings.user @@ -15,6 +15,7 @@ <TestId>xUnit::D1E2AF9B-55A2-4198-8797-633ABA37AA81::net8.0::Stater.Domain.Tests.Json.StateMachineJsonAdapterTests.TestFromJsonSchema</TestId> </TestAncestor> <ProjectFile>D1E2AF9B-55A2-4198-8797-633ABA37AA81/d:Json/f:StateMachineJsonAdapterTests.cs</ProjectFile> + <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> </Or> </SessionState> True diff --git a/src/Stater.CodeGeneration.App/Program.cs b/src/Stater.CodeGeneration.App/Program.cs index e2a15f6..9396157 100644 --- a/src/Stater.CodeGeneration.App/Program.cs +++ b/src/Stater.CodeGeneration.App/Program.cs @@ -111,7 +111,7 @@ languageS = Language.CSharp; break; case "cplusplus": - path += "fsm/" + randomStateMachine.Name.ToLower() + "/"; + path += "fsm/" + randomStateMachine.Name + "/"; testPath += "tests/"; if (!Directory.Exists(path)) { From f70a19ab6563a5ad9d268dae8b51704fc495ef04 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 7 Apr 2025 09:18:01 +0300 Subject: [PATCH 58/69] SF-12: add c++ generation --- .github/workflows/code_generation_tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/code_generation_tests.yml b/.github/workflows/code_generation_tests.yml index 60c81df..2f6b9cd 100644 --- a/.github/workflows/code_generation_tests.yml +++ b/.github/workflows/code_generation_tests.yml @@ -405,10 +405,10 @@ jobs: cd projects/cPlusPlus/build if [ "${{ matrix.compiler.cc }}" = "clang-16" ]; then llvm-profdata-16 merge -sparse coverage-*.profraw -o coverage.profdata - llvm-cov-16 report ./fsm_tests -instr-profile=coverage.profdata --ignore-filename-regex=".*(gtest|nlohmann|CMakeFiles).*" + llvm-cov-16 report ./generated_test -instr-profile=coverage.profdata --ignore-filename-regex=".*(gtest|nlohmann|CMakeFiles).*" elif [ "${{ matrix.compiler.cc }}" = "clang-17" ]; then llvm-profdata-17 merge -sparse coverage-*.profraw -o coverage.profdata - llvm-cov-17 report ./fsm_tests -instr-profile=coverage.profdata --ignore-filename-regex=".*(gtest|nlohmann|CMakeFiles).*" + llvm-cov-17 report ./generated_test -instr-profile=coverage.profdata --ignore-filename-regex=".*(gtest|nlohmann|CMakeFiles).*" else if [ "${{ matrix.compiler.cc }}" = "gcc-11" ]; then GCOV_EXEC=gcov-11 From c40fc412a761463f4709a5ac19722d60feec8e20 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 7 Apr 2025 22:01:03 +0300 Subject: [PATCH 59/69] SF-12: add generated tests --- .gitignore | 1 + .../BaseTestAdapterGenerateDoorTests.cs | 235 +++++ .../BaseTestAdapterGenerateTestsDoorTests.cs | 251 +++++ ...rTests.BuilderContextGenerate.verified.txt | 29 + ...derContextGenerateWithContext.verified.txt | 108 ++ ...pterDoorTests.BuilderGenerate.verified.txt | 13 + ....BuilderGenerateWithInterface.verified.txt | 92 ++ ...s.BuilderStateContextGenerate.verified.txt | 54 + ...ateContextGenerateWithContext.verified.txt | 133 +++ ...oorTests.BuilderStateGenerate.verified.txt | 38 + ...derStateGenerateWithInterface.verified.txt | 117 +++ ...oorTests.ClazzContextGenerate.verified.txt | 65 ++ ...azzContextGenerateWithContext.verified.txt | 88 ++ ...dapterDoorTests.ClazzGenerate.verified.txt | 57 + ...ts.ClazzGenerateWithInterface.verified.txt | 80 ++ ...sts.ClazzStateContextGenerate.verified.txt | 90 ++ ...ateContextGenerateWithContext.verified.txt | 113 ++ ...rDoorTests.ClazzStateGenerate.verified.txt | 82 ++ ...azzStateGenerateWithInterface.verified.txt | 105 ++ ...rTests.BuilderContextGenerate.verified.txt | 29 + ...derContextGenerateWithContext.verified.txt | 108 ++ ...rateDoorTests.BuilderGenerate.verified.txt | 13 + ....BuilderGenerateWithInterface.verified.txt | 92 ++ ...s.BuilderStateContextGenerate.verified.txt | 54 + ...ateContextGenerateWithContext.verified.txt | 133 +++ ...oorTests.BuilderStateGenerate.verified.txt | 38 + ...derStateGenerateWithInterface.verified.txt | 117 +++ ...oorTests.ClazzContextGenerate.verified.txt | 65 ++ ...azzContextGenerateWithContext.verified.txt | 88 ++ ...nerateDoorTests.ClazzGenerate.verified.txt | 57 + ...ts.ClazzGenerateWithInterface.verified.txt | 80 ++ ...sts.ClazzStateContextGenerate.verified.txt | 90 ++ ...ateContextGenerateWithContext.verified.txt | 113 ++ ...eDoorTests.ClazzStateGenerate.verified.txt | 82 ++ ...azzStateGenerateWithInterface.verified.txt | 105 ++ ...s.BuilderTestsContextGenerate.verified.txt | 254 +++++ ...stsContextGenerateWithContext.verified.txt | 259 +++++ ...oorTests.BuilderTestsGenerate.verified.txt | 254 +++++ ...derTestsGenerateWithInterface.verified.txt | 259 +++++ ...lderTestsStateContextGenerate.verified.txt | 114 ++ ...ateContextGenerateWithContext.verified.txt | 119 +++ ...sts.BuilderTestsStateGenerate.verified.txt | 114 ++ ...stsStateGenerateWithInterface.verified.txt | 119 +++ ...sts.ClazzTestsContextGenerate.verified.txt | 114 ++ ...stsContextGenerateWithContext.verified.txt | 114 ++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 114 ++ ...azzTestsGenerateWithInterface.verified.txt | 114 ++ ...lazzTestsStateContextGenerate.verified.txt | 114 ++ ...ateContextGenerateWithContext.verified.txt | 114 ++ ...Tests.ClazzTestsStateGenerate.verified.txt | 114 ++ ...stsStateGenerateWithInterface.verified.txt | 114 ++ .../CPlusPlusAdapterGenerateDoorTests.cs | 20 + ...rTests.BuilderContextGenerate.verified.txt | 30 + ...derContextGenerateWithContext.verified.txt | 114 ++ ...pterDoorTests.BuilderGenerate.verified.txt | 15 + ....BuilderGenerateWithInterface.verified.txt | 99 ++ ...s.BuilderStateContextGenerate.verified.txt | 36 + ...ateContextGenerateWithContext.verified.txt | 120 +++ ...oorTests.BuilderStateGenerate.verified.txt | 21 + ...derStateGenerateWithInterface.verified.txt | 105 ++ ...oorTests.ClazzContextGenerate.verified.txt | 62 ++ ...azzContextGenerateWithContext.verified.txt | 91 ++ ...dapterDoorTests.ClazzGenerate.verified.txt | 55 + ...ts.ClazzGenerateWithInterface.verified.txt | 84 ++ ...sts.ClazzStateContextGenerate.verified.txt | 68 ++ ...ateContextGenerateWithContext.verified.txt | 97 ++ ...rDoorTests.ClazzStateGenerate.verified.txt | 61 ++ ...azzStateGenerateWithInterface.verified.txt | 90 ++ ...rTests.BuilderContextGenerate.verified.txt | 30 + ...derContextGenerateWithContext.verified.txt | 114 ++ ...rateDoorTests.BuilderGenerate.verified.txt | 15 + ....BuilderGenerateWithInterface.verified.txt | 99 ++ ...s.BuilderStateContextGenerate.verified.txt | 36 + ...ateContextGenerateWithContext.verified.txt | 120 +++ ...oorTests.BuilderStateGenerate.verified.txt | 21 + ...derStateGenerateWithInterface.verified.txt | 105 ++ ...oorTests.ClazzContextGenerate.verified.txt | 62 ++ ...azzContextGenerateWithContext.verified.txt | 91 ++ ...nerateDoorTests.ClazzGenerate.verified.txt | 55 + ...ts.ClazzGenerateWithInterface.verified.txt | 84 ++ ...sts.ClazzStateContextGenerate.verified.txt | 68 ++ ...ateContextGenerateWithContext.verified.txt | 97 ++ ...eDoorTests.ClazzStateGenerate.verified.txt | 61 ++ ...azzStateGenerateWithInterface.verified.txt | 90 ++ ...s.BuilderTestsContextGenerate.verified.txt | 278 +++++ ...stsContextGenerateWithContext.verified.txt | 278 +++++ ...oorTests.BuilderTestsGenerate.verified.txt | 278 +++++ ...derTestsGenerateWithInterface.verified.txt | 278 +++++ ...lderTestsStateContextGenerate.verified.txt | 131 +++ ...ateContextGenerateWithContext.verified.txt | 131 +++ ...sts.BuilderTestsStateGenerate.verified.txt | 131 +++ ...stsStateGenerateWithInterface.verified.txt | 131 +++ ...sts.ClazzTestsContextGenerate.verified.txt | 131 +++ ...stsContextGenerateWithContext.verified.txt | 131 +++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 131 +++ ...azzTestsGenerateWithInterface.verified.txt | 131 +++ ...lazzTestsStateContextGenerate.verified.txt | 131 +++ ...ateContextGenerateWithContext.verified.txt | 131 +++ ...Tests.ClazzTestsStateGenerate.verified.txt | 131 +++ ...stsStateGenerateWithInterface.verified.txt | 131 +++ .../LanguageAdapter/CSharpAdapterDoorTests.cs | 19 + ...rTests.BuilderContextGenerate.verified.txt | 31 + ...derContextGenerateWithContext.verified.txt | 89 ++ ...pterDoorTests.BuilderGenerate.verified.txt | 16 + ....BuilderGenerateWithInterface.verified.txt | 74 ++ ...s.BuilderStateContextGenerate.verified.txt | 37 + ...ateContextGenerateWithContext.verified.txt | 95 ++ ...oorTests.BuilderStateGenerate.verified.txt | 22 + ...derStateGenerateWithInterface.verified.txt | 80 ++ ...oorTests.ClazzContextGenerate.verified.txt | 66 ++ ...azzContextGenerateWithContext.verified.txt | 90 ++ ...dapterDoorTests.ClazzGenerate.verified.txt | 59 ++ ...ts.ClazzGenerateWithInterface.verified.txt | 83 ++ ...sts.ClazzStateContextGenerate.verified.txt | 72 ++ ...ateContextGenerateWithContext.verified.txt | 96 ++ ...rDoorTests.ClazzStateGenerate.verified.txt | 65 ++ ...azzStateGenerateWithInterface.verified.txt | 89 ++ ...rTests.BuilderContextGenerate.verified.txt | 31 + ...derContextGenerateWithContext.verified.txt | 89 ++ ...rateDoorTests.BuilderGenerate.verified.txt | 16 + ....BuilderGenerateWithInterface.verified.txt | 74 ++ ...s.BuilderStateContextGenerate.verified.txt | 37 + ...ateContextGenerateWithContext.verified.txt | 95 ++ ...oorTests.BuilderStateGenerate.verified.txt | 22 + ...derStateGenerateWithInterface.verified.txt | 80 ++ ...oorTests.ClazzContextGenerate.verified.txt | 66 ++ ...azzContextGenerateWithContext.verified.txt | 90 ++ ...nerateDoorTests.ClazzGenerate.verified.txt | 59 ++ ...ts.ClazzGenerateWithInterface.verified.txt | 83 ++ ...sts.ClazzStateContextGenerate.verified.txt | 72 ++ ...ateContextGenerateWithContext.verified.txt | 96 ++ ...eDoorTests.ClazzStateGenerate.verified.txt | 65 ++ ...azzStateGenerateWithInterface.verified.txt | 89 ++ ...s.BuilderTestsContextGenerate.verified.txt | 270 +++++ ...stsContextGenerateWithContext.verified.txt | 270 +++++ ...oorTests.BuilderTestsGenerate.verified.txt | 270 +++++ ...derTestsGenerateWithInterface.verified.txt | 270 +++++ ...lderTestsStateContextGenerate.verified.txt | 127 +++ ...ateContextGenerateWithContext.verified.txt | 127 +++ ...sts.BuilderTestsStateGenerate.verified.txt | 127 +++ ...stsStateGenerateWithInterface.verified.txt | 127 +++ ...sts.ClazzTestsContextGenerate.verified.txt | 127 +++ ...stsContextGenerateWithContext.verified.txt | 127 +++ ...eDoorTests.ClazzTestsGenerate.verified.txt | 127 +++ ...azzTestsGenerateWithInterface.verified.txt | 127 +++ ...lazzTestsStateContextGenerate.verified.txt | 127 +++ ...ateContextGenerateWithContext.verified.txt | 127 +++ ...Tests.ClazzTestsStateGenerate.verified.txt | 127 +++ ...stsStateGenerateWithInterface.verified.txt | 127 +++ .../JavaAdapterGenerateDoorTests.cs | 18 + ...rTests.BuilderContextGenerate.verified.txt | 29 + ...derContextGenerateWithContext.verified.txt | 59 ++ ...pterDoorTests.BuilderGenerate.verified.txt | 19 + ....BuilderGenerateWithInterface.verified.txt | 49 + ...s.BuilderStateContextGenerate.verified.txt | 35 + ...ateContextGenerateWithContext.verified.txt | 65 ++ ...oorTests.BuilderStateGenerate.verified.txt | 25 + ...derStateGenerateWithInterface.verified.txt | 55 + ...oorTests.ClazzContextGenerate.verified.txt | 61 ++ ...azzContextGenerateWithContext.verified.txt | 85 ++ ...dapterDoorTests.ClazzGenerate.verified.txt | 51 + ...ts.ClazzGenerateWithInterface.verified.txt | 75 ++ ...sts.ClazzStateContextGenerate.verified.txt | 67 ++ ...ateContextGenerateWithContext.verified.txt | 91 ++ ...rDoorTests.ClazzStateGenerate.verified.txt | 57 + ...azzStateGenerateWithInterface.verified.txt | 81 ++ ...rTests.BuilderContextGenerate.verified.txt | 29 + ...derContextGenerateWithContext.verified.txt | 59 ++ ...rateDoorTests.BuilderGenerate.verified.txt | 19 + ....BuilderGenerateWithInterface.verified.txt | 49 + ...s.BuilderStateContextGenerate.verified.txt | 35 + ...ateContextGenerateWithContext.verified.txt | 65 ++ ...oorTests.BuilderStateGenerate.verified.txt | 25 + ...derStateGenerateWithInterface.verified.txt | 55 + ...oorTests.ClazzContextGenerate.verified.txt | 61 ++ ...azzContextGenerateWithContext.verified.txt | 85 ++ ...nerateDoorTests.ClazzGenerate.verified.txt | 51 + ...ts.ClazzGenerateWithInterface.verified.txt | 75 ++ ...sts.ClazzStateContextGenerate.verified.txt | 67 ++ ...ateContextGenerateWithContext.verified.txt | 91 ++ ...eDoorTests.ClazzStateGenerate.verified.txt | 57 + ...azzStateGenerateWithInterface.verified.txt | 81 ++ ...s.BuilderTestsContextGenerate.verified.txt | 257 +++++ ...stsContextGenerateWithContext.verified.txt | 257 +++++ ...oorTests.BuilderTestsGenerate.verified.txt | 257 +++++ ...derTestsGenerateWithInterface.verified.txt | 257 +++++ ...lderTestsStateContextGenerate.verified.txt | 118 +++ ...ateContextGenerateWithContext.verified.txt | 118 +++ ...sts.BuilderTestsStateGenerate.verified.txt | 118 +++ ...stsStateGenerateWithInterface.verified.txt | 118 +++ ...sts.ClazzTestsContextGenerate.verified.txt | 117 +++ ...stsContextGenerateWithContext.verified.txt | 117 +++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 117 +++ ...azzTestsGenerateWithInterface.verified.txt | 117 +++ ...lazzTestsStateContextGenerate.verified.txt | 118 +++ ...ateContextGenerateWithContext.verified.txt | 118 +++ ...Tests.ClazzTestsStateGenerate.verified.txt | 118 +++ ...stsStateGenerateWithInterface.verified.txt | 118 +++ .../JavaScriptAdapterGenerateDoorTests.cs | 19 + ...rTests.BuilderContextGenerate.verified.txt | 28 + ...derContextGenerateWithContext.verified.txt | 90 ++ ...pterDoorTests.BuilderGenerate.verified.txt | 13 + ....BuilderGenerateWithInterface.verified.txt | 75 ++ ...s.BuilderStateContextGenerate.verified.txt | 34 + ...ateContextGenerateWithContext.verified.txt | 96 ++ ...oorTests.BuilderStateGenerate.verified.txt | 19 + ...derStateGenerateWithInterface.verified.txt | 81 ++ ...oorTests.ClazzContextGenerate.verified.txt | 55 + ...azzContextGenerateWithContext.verified.txt | 62 ++ ...dapterDoorTests.ClazzGenerate.verified.txt | 40 + ...ts.ClazzGenerateWithInterface.verified.txt | 47 + ...sts.ClazzStateContextGenerate.verified.txt | 61 ++ ...ateContextGenerateWithContext.verified.txt | 68 ++ ...rDoorTests.ClazzStateGenerate.verified.txt | 46 + ...azzStateGenerateWithInterface.verified.txt | 53 + .../Kotlin/KotlinAdapterDoorTests.cs | 975 ----------------- ...rTests.BuilderContextGenerate.verified.txt | 28 + ...derContextGenerateWithContext.verified.txt | 90 ++ ...rateDoorTests.BuilderGenerate.verified.txt | 13 + ....BuilderGenerateWithInterface.verified.txt | 75 ++ ...s.BuilderStateContextGenerate.verified.txt | 34 + ...ateContextGenerateWithContext.verified.txt | 96 ++ ...oorTests.BuilderStateGenerate.verified.txt | 19 + ...derStateGenerateWithInterface.verified.txt | 81 ++ ...oorTests.ClazzContextGenerate.verified.txt | 55 + ...azzContextGenerateWithContext.verified.txt | 62 ++ ...nerateDoorTests.ClazzGenerate.verified.txt | 40 + ...ts.ClazzGenerateWithInterface.verified.txt | 47 + ...sts.ClazzStateContextGenerate.verified.txt | 61 ++ ...ateContextGenerateWithContext.verified.txt | 68 ++ ...eDoorTests.ClazzStateGenerate.verified.txt | 46 + ...azzStateGenerateWithInterface.verified.txt | 53 + ...s.BuilderTestsContextGenerate.verified.txt | 265 +++++ ...stsContextGenerateWithContext.verified.txt | 265 +++++ ...oorTests.BuilderTestsGenerate.verified.txt | 265 +++++ ...derTestsGenerateWithInterface.verified.txt | 265 +++++ ...lderTestsStateContextGenerate.verified.txt | 125 +++ ...ateContextGenerateWithContext.verified.txt | 125 +++ ...sts.BuilderTestsStateGenerate.verified.txt | 125 +++ ...stsStateGenerateWithInterface.verified.txt | 125 +++ ...sts.ClazzTestsContextGenerate.verified.txt | 125 +++ ...stsContextGenerateWithContext.verified.txt | 125 +++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 125 +++ ...azzTestsGenerateWithInterface.verified.txt | 125 +++ ...lazzTestsStateContextGenerate.verified.txt | 125 +++ ...ateContextGenerateWithContext.verified.txt | 125 +++ ...Tests.ClazzTestsStateGenerate.verified.txt | 125 +++ ...stsStateGenerateWithInterface.verified.txt | 125 +++ .../KotlinAdapterGenerateDoorTests.cs | 17 + .../LanguageAdapter/ModuleInitializer.cs | 12 + .../Python/PythonAdapterDoorTests.cs | 994 ------------------ ...rTests.BuilderContextGenerate.verified.txt | 30 + ...derContextGenerateWithContext.verified.txt | 57 + ...pterDoorTests.BuilderGenerate.verified.txt | 23 + ....BuilderGenerateWithInterface.verified.txt | 50 + ...s.BuilderStateContextGenerate.verified.txt | 37 + ...ateContextGenerateWithContext.verified.txt | 64 ++ ...oorTests.BuilderStateGenerate.verified.txt | 30 + ...derStateGenerateWithInterface.verified.txt | 57 + ...oorTests.ClazzContextGenerate.verified.txt | 58 + ...azzContextGenerateWithContext.verified.txt | 76 ++ ...dapterDoorTests.ClazzGenerate.verified.txt | 51 + ...ts.ClazzGenerateWithInterface.verified.txt | 69 ++ ...sts.ClazzStateContextGenerate.verified.txt | 65 ++ ...ateContextGenerateWithContext.verified.txt | 83 ++ ...rDoorTests.ClazzStateGenerate.verified.txt | 58 + ...azzStateGenerateWithInterface.verified.txt | 76 ++ ...rTests.BuilderContextGenerate.verified.txt | 30 + ...derContextGenerateWithContext.verified.txt | 57 + ...rateDoorTests.BuilderGenerate.verified.txt | 23 + ....BuilderGenerateWithInterface.verified.txt | 50 + ...s.BuilderStateContextGenerate.verified.txt | 37 + ...ateContextGenerateWithContext.verified.txt | 64 ++ ...oorTests.BuilderStateGenerate.verified.txt | 30 + ...derStateGenerateWithInterface.verified.txt | 57 + ...oorTests.ClazzContextGenerate.verified.txt | 58 + ...azzContextGenerateWithContext.verified.txt | 76 ++ ...nerateDoorTests.ClazzGenerate.verified.txt | 51 + ...ts.ClazzGenerateWithInterface.verified.txt | 69 ++ ...sts.ClazzStateContextGenerate.verified.txt | 65 ++ ...ateContextGenerateWithContext.verified.txt | 83 ++ ...eDoorTests.ClazzStateGenerate.verified.txt | 58 + ...azzStateGenerateWithInterface.verified.txt | 76 ++ ...s.BuilderTestsContextGenerate.verified.txt | 251 +++++ ...stsContextGenerateWithContext.verified.txt | 251 +++++ ...oorTests.BuilderTestsGenerate.verified.txt | 251 +++++ ...derTestsGenerateWithInterface.verified.txt | 251 +++++ ...lderTestsStateContextGenerate.verified.txt | 113 ++ ...ateContextGenerateWithContext.verified.txt | 113 ++ ...sts.BuilderTestsStateGenerate.verified.txt | 113 ++ ...stsStateGenerateWithInterface.verified.txt | 113 ++ ...sts.ClazzTestsContextGenerate.verified.txt | 112 ++ ...stsContextGenerateWithContext.verified.txt | 112 ++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 112 ++ ...azzTestsGenerateWithInterface.verified.txt | 112 ++ ...lazzTestsStateContextGenerate.verified.txt | 113 ++ ...ateContextGenerateWithContext.verified.txt | 113 ++ ...Tests.ClazzTestsStateGenerate.verified.txt | 113 ++ ...stsStateGenerateWithInterface.verified.txt | 113 ++ .../PythonAdapterGenerateDoorTests.cs | 17 + ...rTests.BuilderContextGenerate.verified.txt | 37 + ...derContextGenerateWithContext.verified.txt | 70 ++ ...pterDoorTests.BuilderGenerate.verified.txt | 12 + ....BuilderGenerateWithInterface.verified.txt | 45 + ...s.BuilderStateContextGenerate.verified.txt | 43 + ...ateContextGenerateWithContext.verified.txt | 76 ++ ...oorTests.BuilderStateGenerate.verified.txt | 18 + ...derStateGenerateWithInterface.verified.txt | 51 + ...oorTests.ClazzContextGenerate.verified.txt | 69 ++ ...azzContextGenerateWithContext.verified.txt | 94 ++ ...dapterDoorTests.ClazzGenerate.verified.txt | 44 + ...ts.ClazzGenerateWithInterface.verified.txt | 69 ++ ...sts.ClazzStateContextGenerate.verified.txt | 75 ++ ...ateContextGenerateWithContext.verified.txt | 100 ++ ...rDoorTests.ClazzStateGenerate.verified.txt | 50 + ...azzStateGenerateWithInterface.verified.txt | 75 ++ ...rTests.BuilderContextGenerate.verified.txt | 37 + ...derContextGenerateWithContext.verified.txt | 70 ++ ...rateDoorTests.BuilderGenerate.verified.txt | 12 + ....BuilderGenerateWithInterface.verified.txt | 45 + ...s.BuilderStateContextGenerate.verified.txt | 43 + ...ateContextGenerateWithContext.verified.txt | 76 ++ ...oorTests.BuilderStateGenerate.verified.txt | 18 + ...derStateGenerateWithInterface.verified.txt | 51 + ...oorTests.ClazzContextGenerate.verified.txt | 69 ++ ...azzContextGenerateWithContext.verified.txt | 94 ++ ...nerateDoorTests.ClazzGenerate.verified.txt | 44 + ...ts.ClazzGenerateWithInterface.verified.txt | 69 ++ ...sts.ClazzStateContextGenerate.verified.txt | 75 ++ ...ateContextGenerateWithContext.verified.txt | 100 ++ ...eDoorTests.ClazzStateGenerate.verified.txt | 50 + ...azzStateGenerateWithInterface.verified.txt | 75 ++ ...s.BuilderTestsContextGenerate.verified.txt | 257 +++++ ...stsContextGenerateWithContext.verified.txt | 257 +++++ ...oorTests.BuilderTestsGenerate.verified.txt | 257 +++++ ...derTestsGenerateWithInterface.verified.txt | 257 +++++ ...lderTestsStateContextGenerate.verified.txt | 118 +++ ...ateContextGenerateWithContext.verified.txt | 118 +++ ...sts.BuilderTestsStateGenerate.verified.txt | 118 +++ ...stsStateGenerateWithInterface.verified.txt | 118 +++ ...sts.ClazzTestsContextGenerate.verified.txt | 117 +++ ...stsContextGenerateWithContext.verified.txt | 117 +++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 117 +++ ...azzTestsGenerateWithInterface.verified.txt | 117 +++ ...lazzTestsStateContextGenerate.verified.txt | 118 +++ ...ateContextGenerateWithContext.verified.txt | 118 +++ ...Tests.ClazzTestsStateGenerate.verified.txt | 118 +++ ...stsStateGenerateWithInterface.verified.txt | 118 +++ .../TypeScriptAdapterGenerateDoorTests.cs | 17 + src/Stater.CodeGeneration.Tests/Program.cs | 82 ++ .../ScenarioFinderTests.cs | 24 +- .../Stater.CodeGeneration.Tests.csproj | 9 +- src/Stater.CodeGeneration/ScenarioFinder.cs | 2 +- src/Stater/FodyWeavers.xsd | 26 + 354 files changed, 32368 insertions(+), 1978 deletions(-) create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateTestsDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlusAdapterGenerateDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharpAdapterDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaAdapterGenerateDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScriptAdapterGenerateDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/KotlinAdapterGenerateDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python/PythonAdapterDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/PythonAdapterGenerateDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScriptAdapterGenerateDoorTests.cs create mode 100644 src/Stater.CodeGeneration.Tests/Program.cs create mode 100644 src/Stater/FodyWeavers.xsd diff --git a/.gitignore b/.gitignore index 3b9be07..74c4596 100644 --- a/.gitignore +++ b/.gitignore @@ -146,3 +146,4 @@ $RECYCLE.BIN/ _NCrunch* .vs= +**.received.** diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateDoorTests.cs new file mode 100644 index 0000000..b18008b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateDoorTests.cs @@ -0,0 +1,235 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public abstract class BaseTestAdapterGenerateDoorTests +{ + protected abstract BaseLanguageAdapter Adapter { get; } + protected abstract Language Language { get; } + + + + [Fact] + public Task ClazzGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language + ); + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + GenerateInterface: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzStateGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + GenerateStates: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzStateGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + GenerateStates: true, + GenerateInterface: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + GenerateContext: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + GenerateContext: true, + GenerateInterface: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzStateContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + GenerateStates: true, + GenerateContext: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzStateContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + GenerateStates: true, + GenerateContext: true, + GenerateInterface: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + Mode.Builder + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateInterface: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderStateGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateStates: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderStateGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateStates: true, + GenerateInterface: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateContext: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateContext: true, + GenerateInterface: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderStateContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateStates: true, + GenerateContext: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderStateContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateStates: true, + GenerateContext: true, + GenerateInterface: true + ); + + var result = Adapter.Generate(stateMachine, settings); + return Verify(result).UseDirectory(Language.ToString()); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateTestsDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateTestsDoorTests.cs new file mode 100644 index 0000000..598241e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateTestsDoorTests.cs @@ -0,0 +1,251 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public abstract class BaseTestAdapterGenerateTestsDoorTests +{ + protected abstract BaseLanguageAdapter Adapter { get; } + protected abstract Language Language { get; } + + + + [Fact] + public Task ClazzTestsGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language + ); + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzTestsGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + GenerateInterface: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzTestsStateGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + GenerateStates: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzTestsStateGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + GenerateStates: true, + GenerateInterface: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzTestsContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + GenerateContext: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzTestsContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + GenerateContext: true, + GenerateInterface: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzTestsStateContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + GenerateStates: true, + GenerateContext: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task ClazzTestsStateContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + GenerateStates: true, + GenerateContext: true, + GenerateInterface: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderTestsGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + Mode.Builder + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderTestsGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateInterface: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderTestsStateGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateStates: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderTestsStateGenerateWithInterface() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateStates: true, + GenerateInterface: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderTestsContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateContext: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderTestsContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateContext: true, + GenerateInterface: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderTestsStateContextGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateStates: true, + GenerateContext: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } + + [Fact] + public Task BuilderTestsStateContextGenerateWithContext() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var scenarios = ScenarioFinder.FindScenarios(stateMachine); + var settings = new GenerationSettings( + Language, + Mode.Builder, + GenerateStates: true, + GenerateContext: true, + GenerateInterface: true + ); + + var result = Adapter.GenerateTests(stateMachine, settings, scenarios); + return Verify(result).UseDirectory(Language.ToString()); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..ff105a5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,29 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new Door_context()) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..2a3fab2 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,108 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + Door_context *context, + const std::string &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + Door_context *context, + std::string start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::std::string, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new Door_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e040396 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,13 @@ +#pragma once + +#include + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new empty_context()) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..a83f586 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,92 @@ +#pragma once + +#include + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + empty_context *context, + const std::string &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + empty_context *context, + std::string start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::std::string, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new empty_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..1c67b15 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,54 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new Door_context()) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..76428e9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,133 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + Door_context *context, + const e_Door_states &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + Door_context *context, + e_Door_states start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new Door_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..c12c426 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,38 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new empty_context()) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..d6398dd --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,117 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + empty_context *context, + const e_Door_states &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + empty_context *context, + e_Door_states start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new empty_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..fed2f33 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,65 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, Door_context>( + "preOpen", + "CLOSE", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::std::string, Door_context>( + "preClose", + "OPEN", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::std::string, Door_context>( + "open", + "AJAR", + "OPEN", + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::std::string, Door_context>( + "close", + "AJAR", + "CLOSE", + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::std::string, Door_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::std::string, Door_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + "OPEN" + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..f1aa929 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,88 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, Door_context>( + "preOpen", + "CLOSE", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::std::string, Door_context>( + "preClose", + "OPEN", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::std::string, Door_context>( + "open", + "AJAR", + "OPEN", + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::std::string, Door_context>( + "close", + "AJAR", + "CLOSE", + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::std::string, Door_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::std::string, Door_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + "OPEN" + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..324f61b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,57 @@ +#pragma once + +#include + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, empty_context>( + "preOpen", + "CLOSE", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "preClose", + "OPEN", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "open", + "AJAR", + "OPEN", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "close", + "AJAR", + "CLOSE", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + "OPEN" + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..2df84f0 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,80 @@ +#pragma once + +#include + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, empty_context>( + "preOpen", + "CLOSE", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "preClose", + "OPEN", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "open", + "AJAR", + "OPEN", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "close", + "AJAR", + "CLOSE", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + "OPEN" + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..93712ec --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,90 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, Door_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::e_Door_states, Door_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::e_Door_states, Door_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::e_Door_states, Door_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + e_Door_states::OPEN + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..065cb21 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,113 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, Door_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::e_Door_states, Door_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::e_Door_states, Door_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::e_Door_states, Door_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + e_Door_states::OPEN + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..b2a15f6 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,82 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, empty_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + e_Door_states::OPEN + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..322b8d0 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,105 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, empty_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + e_Door_states::OPEN + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..ff105a5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,29 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new Door_context()) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..2a3fab2 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,108 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + Door_context *context, + const std::string &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + Door_context *context, + std::string start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::std::string, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new Door_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e040396 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,13 @@ +#pragma once + +#include + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new empty_context()) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..a83f586 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,92 @@ +#pragma once + +#include + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + empty_context *context, + const std::string &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + empty_context *context, + std::string start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::std::string, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new empty_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..1c67b15 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,54 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new Door_context()) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..76428e9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,133 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + Door_context *context, + const e_Door_states &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + Door_context *context, + e_Door_states start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new Door_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..c12c426 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,38 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new empty_context()) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..d6398dd --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,117 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + empty_context *context, + const e_Door_states &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + empty_context *context, + e_Door_states start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new empty_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..fed2f33 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,65 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, Door_context>( + "preOpen", + "CLOSE", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::std::string, Door_context>( + "preClose", + "OPEN", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::std::string, Door_context>( + "open", + "AJAR", + "OPEN", + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::std::string, Door_context>( + "close", + "AJAR", + "CLOSE", + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::std::string, Door_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::std::string, Door_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + "OPEN" + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..f1aa929 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,88 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, Door_context>( + "preOpen", + "CLOSE", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::std::string, Door_context>( + "preClose", + "OPEN", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::std::string, Door_context>( + "open", + "AJAR", + "OPEN", + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::std::string, Door_context>( + "close", + "AJAR", + "CLOSE", + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::std::string, Door_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::std::string, Door_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + "OPEN" + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..324f61b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,57 @@ +#pragma once + +#include + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, empty_context>( + "preOpen", + "CLOSE", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "preClose", + "OPEN", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "open", + "AJAR", + "OPEN", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "close", + "AJAR", + "CLOSE", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + "OPEN" + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..2df84f0 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,80 @@ +#pragma once + +#include + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, empty_context>( + "preOpen", + "CLOSE", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "preClose", + "OPEN", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "open", + "AJAR", + "OPEN", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "close", + "AJAR", + "CLOSE", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + "OPEN" + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..93712ec --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,90 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, Door_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::e_Door_states, Door_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::e_Door_states, Door_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::e_Door_states, Door_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + e_Door_states::OPEN + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..065cb21 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,113 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, Door_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::e_Door_states, Door_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::e_Door_states, Door_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::e_Door_states, Door_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + e_Door_states::OPEN + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..b2a15f6 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,82 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, empty_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + e_Door_states::OPEN + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..322b8d0 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,105 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, empty_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + e_Door_states::OPEN + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..707e61f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,254 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + builder_Door_state_machine.build(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = builder_Door_state_machine.build(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} + +TEST(Door_state_machine_test, test_system_append_state_transition) { + auto sm_builder = builder_Door_state_machine; + + sm_builder = sm_builder.add_state("__test_state_1__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_state("__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..f7a80a3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,259 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + const auto st = builder_Door_state_machine.build(); + dynamic_cast(st.get()); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + const auto st = builder_Door_state_machine.build(); + auto sm = dynamic_cast(st.get()); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} + +TEST(Door_state_machine_test, test_system_append_state_transition) { + auto sm_builder = builder_Door_state_machine; + + sm_builder = sm_builder.add_state("__test_state_1__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_state("__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..707e61f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,254 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + builder_Door_state_machine.build(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = builder_Door_state_machine.build(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} + +TEST(Door_state_machine_test, test_system_append_state_transition) { + auto sm_builder = builder_Door_state_machine; + + sm_builder = sm_builder.add_state("__test_state_1__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_state("__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..f7a80a3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,259 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + const auto st = builder_Door_state_machine.build(); + dynamic_cast(st.get()); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + const auto st = builder_Door_state_machine.build(); + auto sm = dynamic_cast(st.get()); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} + +TEST(Door_state_machine_test, test_system_append_state_transition) { + auto sm_builder = builder_Door_state_machine; + + sm_builder = sm_builder.add_state("__test_state_1__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_state("__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..a238513 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + builder_Door_state_machine.build(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = builder_Door_state_machine.build(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..73c17ac --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,119 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + const auto st = builder_Door_state_machine.build(); + dynamic_cast(st.get()); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + const auto st = builder_Door_state_machine.build(); + auto sm = dynamic_cast(st.get()); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..a238513 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + builder_Door_state_machine.build(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = builder_Door_state_machine.build(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..73c17ac --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,119 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + const auto st = builder_Door_state_machine.build(); + dynamic_cast(st.get()); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + const auto st = builder_Door_state_machine.build(); + auto sm = dynamic_cast(st.get()); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..b2df42c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..47d878a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..b2df42c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..47d878a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..8bf2ac3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..6da3797 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..8bf2ac3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..6da3797 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlusAdapterGenerateDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlusAdapterGenerateDoorTests.cs new file mode 100644 index 0000000..9c80bfb --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlusAdapterGenerateDoorTests.cs @@ -0,0 +1,20 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.CodeGeneration.LanguageAdapter.CPlusPlus; +using Stater.CodeGeneration.LanguageAdapter.CSharp; +using Stater.CodeGeneration.LanguageAdapter.Java; +using Stater.CodeGeneration.LanguageAdapter.Kotlin; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class CPlusPlusAdapterGenerateDoorTests : BaseTestAdapterGenerateDoorTests +{ + protected override BaseLanguageAdapter Adapter => new CPlusPlusAdapter(); + protected override Language Language => Language.CPlusPlus; +} + +public class CPlusPlusAdapterGenerateTestsDoorTests : BaseTestAdapterGenerateTestsDoorTests +{ + protected override BaseLanguageAdapter Adapter => new CPlusPlusAdapter(); + protected override Language Language => Language.CPlusPlus; +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..f3772d1 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,30 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new DoorFSMContext()) + .AddTransition("preOpen", "CLOSE", "AJAR") + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", "OPEN", "AJAR") + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", "AJAR", "OPEN") + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", "AJAR", "CLOSE") + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", "AJAR", "AJAR") + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", "AJAR", "AJAR") + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e5fc93c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,114 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + String startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new DoorFSMContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", "CLOSE", "AJAR") + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", "OPEN", "AJAR") + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", "AJAR", "OPEN") + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", "AJAR", "CLOSE") + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", "AJAR", "AJAR") + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", "AJAR", "AJAR") + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..f654445 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,15 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new EmptyContext()) + .AddTransition("preOpen", "CLOSE", "AJAR") + .AddTransition("preClose", "OPEN", "AJAR") + .AddTransition("open", "AJAR", "OPEN") + .AddTransition("close", "AJAR", "CLOSE") + .AddTransition("ajarPlus", "AJAR", "AJAR") + .AddTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..9452f85 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,99 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + EmptyContext context, + String startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new EmptyContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", "CLOSE", "AJAR") + .AddTransition("preClose", "OPEN", "AJAR") + .AddTransition("open", "AJAR", "OPEN") + .AddTransition("close", "AJAR", "CLOSE") + .AddTransition("ajarPlus", "AJAR", "AJAR") + .AddTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..ff7b863 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,36 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new DoorFSMContext()) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", States.OPEN, States.AJAR) + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", States.AJAR, States.OPEN) + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", States.AJAR, States.CLOSE) + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e3e9312 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,120 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + States startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new DoorFSMContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", States.OPEN, States.AJAR) + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", States.AJAR, States.OPEN) + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", States.AJAR, States.CLOSE) + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..2ce669b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,21 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new EmptyContext()) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .AddTransition("preClose", States.OPEN, States.AJAR) + .AddTransition("open", States.AJAR, States.OPEN) + .AddTransition("close", States.AJAR, States.CLOSE) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .AddTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..cba52d6 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,105 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + EmptyContext context, + States startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new EmptyContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .AddTransition("preClose", States.OPEN, States.AJAR) + .AddTransition("open", States.AJAR, States.OPEN) + .AddTransition("close", States.AJAR, States.CLOSE) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .AddTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..7b16d80 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,62 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + "AJAR", + "OPEN", + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + "OPEN" +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..6470034 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,91 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + "AJAR", + "OPEN", + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + "OPEN" +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..c39540a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,55 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "open", + "AJAR", + "OPEN", + ctx => true, + ctx => { } + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + "OPEN" +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..a01817a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,84 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "open", + "AJAR", + "OPEN", + ctx => true, + ctx => { } + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + "OPEN" +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..633a73a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,68 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + States.OPEN +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..77a7aee --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,97 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + States.OPEN +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..6300b25 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,61 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => true, + ctx => { } + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + States.OPEN +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..b45c5f5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,90 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => true, + ctx => { } + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + States.OPEN +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..f3772d1 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,30 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new DoorFSMContext()) + .AddTransition("preOpen", "CLOSE", "AJAR") + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", "OPEN", "AJAR") + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", "AJAR", "OPEN") + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", "AJAR", "CLOSE") + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", "AJAR", "AJAR") + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", "AJAR", "AJAR") + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e5fc93c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,114 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + String startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new DoorFSMContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", "CLOSE", "AJAR") + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", "OPEN", "AJAR") + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", "AJAR", "OPEN") + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", "AJAR", "CLOSE") + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", "AJAR", "AJAR") + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", "AJAR", "AJAR") + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..f654445 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,15 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new EmptyContext()) + .AddTransition("preOpen", "CLOSE", "AJAR") + .AddTransition("preClose", "OPEN", "AJAR") + .AddTransition("open", "AJAR", "OPEN") + .AddTransition("close", "AJAR", "CLOSE") + .AddTransition("ajarPlus", "AJAR", "AJAR") + .AddTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..9452f85 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,99 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + EmptyContext context, + String startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new EmptyContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", "CLOSE", "AJAR") + .AddTransition("preClose", "OPEN", "AJAR") + .AddTransition("open", "AJAR", "OPEN") + .AddTransition("close", "AJAR", "CLOSE") + .AddTransition("ajarPlus", "AJAR", "AJAR") + .AddTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..ff7b863 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,36 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new DoorFSMContext()) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", States.OPEN, States.AJAR) + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", States.AJAR, States.OPEN) + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", States.AJAR, States.CLOSE) + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e3e9312 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,120 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + States startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new DoorFSMContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", States.OPEN, States.AJAR) + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", States.AJAR, States.OPEN) + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", States.AJAR, States.CLOSE) + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..2ce669b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,21 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new EmptyContext()) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .AddTransition("preClose", States.OPEN, States.AJAR) + .AddTransition("open", States.AJAR, States.OPEN) + .AddTransition("close", States.AJAR, States.CLOSE) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .AddTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..cba52d6 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,105 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + EmptyContext context, + States startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new EmptyContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .AddTransition("preClose", States.OPEN, States.AJAR) + .AddTransition("open", States.AJAR, States.OPEN) + .AddTransition("close", States.AJAR, States.CLOSE) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .AddTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..7b16d80 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,62 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + "AJAR", + "OPEN", + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + "OPEN" +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..6470034 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,91 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + "AJAR", + "OPEN", + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + "OPEN" +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..c39540a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,55 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "open", + "AJAR", + "OPEN", + ctx => true, + ctx => { } + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + "OPEN" +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..a01817a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,84 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "open", + "AJAR", + "OPEN", + ctx => true, + ctx => { } + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + "OPEN" +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..633a73a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,68 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + States.OPEN +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..77a7aee --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,97 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + States.OPEN +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..6300b25 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,61 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => true, + ctx => { } + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + States.OPEN +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..b45c5f5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,90 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => true, + ctx => { } + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + States.OPEN +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..cb025ef --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,278 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build(); + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + + [Fact] + private void TestSystemAppendStateTransition() + { + var smBuilder = Door.BuilderDoorStateMachine.Copy(); + + smBuilder = smBuilder.AddState("__test_state_1__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddState("__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..58aee24 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,278 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + + [Fact] + private void TestSystemAppendStateTransition() + { + var smBuilder = Door.BuilderDoorStateMachine.Copy(); + + smBuilder = smBuilder.AddState("__test_state_1__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddState("__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..cb025ef --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,278 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build(); + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + + [Fact] + private void TestSystemAppendStateTransition() + { + var smBuilder = Door.BuilderDoorStateMachine.Copy(); + + smBuilder = smBuilder.AddState("__test_state_1__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddState("__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..58aee24 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,278 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + + [Fact] + private void TestSystemAppendStateTransition() + { + var smBuilder = Door.BuilderDoorStateMachine.Copy(); + + smBuilder = smBuilder.AddState("__test_state_1__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddState("__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..d645422 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build(); + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..01c26b2 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..d645422 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build(); + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..01c26b2 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..7bbe63c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..0a1d5db --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..7bbe63c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..0a1d5db --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..901953b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..650cd06 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..901953b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..650cd06 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharpAdapterDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharpAdapterDoorTests.cs new file mode 100644 index 0000000..2d3b9dd --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharpAdapterDoorTests.cs @@ -0,0 +1,19 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.CodeGeneration.LanguageAdapter.CSharp; +using Stater.CodeGeneration.LanguageAdapter.Java; +using Stater.CodeGeneration.LanguageAdapter.Kotlin; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class CShaprAdapterGenerateDoorTests : BaseTestAdapterGenerateDoorTests +{ + protected override BaseLanguageAdapter Adapter => new CSharpAdapter(); + protected override Language Language => Language.CSharp; +} + +public class CShaprAdapterGenerateTestsDoorTests : BaseTestAdapterGenerateTestsDoorTests +{ + protected override BaseLanguageAdapter Adapter => new CSharpAdapter(); + protected override Language Language => Language.CSharp; +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..751ce1e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,31 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new DoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..068457f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,89 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + String startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..0c26998 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,16 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..1cada91 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,74 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + EmptyContext context, + String startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..88b6798 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,37 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new DoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..60e1cd3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,95 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + States startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..2fefcc7 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,22 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..27c37c1 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,80 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + EmptyContext context, + States startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..a529085 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,66 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + "OPEN" + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..5df87cb --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,90 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + "OPEN" + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..96f622f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,59 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + "OPEN" + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..44330ea --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,83 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + "OPEN" + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..410d51e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,72 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + States.OPEN + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..f9c0377 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,96 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + States.OPEN + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..04bb91b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,65 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + States.OPEN + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..1733222 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,89 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + States.OPEN + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..751ce1e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,31 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new DoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..068457f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,89 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + String startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..0c26998 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,16 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..1cada91 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,74 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + EmptyContext context, + String startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..88b6798 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,37 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new DoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..60e1cd3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,95 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + States startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..2fefcc7 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,22 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..27c37c1 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,80 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + EmptyContext context, + States startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..a529085 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,66 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + "OPEN" + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..5df87cb --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,90 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + "OPEN" + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..96f622f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,59 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + "OPEN" + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..44330ea --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,83 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + "OPEN" + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..410d51e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,72 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + States.OPEN + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..f9c0377 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,96 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + States.OPEN + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..04bb91b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,65 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + States.OPEN + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..1733222 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,89 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + States.OPEN + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..68b3604 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,270 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + + @Test + void testSystemAppendStateTransition() throws Exception { + var smBuilder = Door.builderDoorStateMachine; + + smBuilder = smBuilder.addState("__test_state_1__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addState("__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..cfed5ef --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,270 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + + @Test + void testSystemAppendStateTransition() throws Exception { + var smBuilder = Door.builderDoorStateMachine; + + smBuilder = smBuilder.addState("__test_state_1__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addState("__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..68b3604 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,270 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + + @Test + void testSystemAppendStateTransition() throws Exception { + var smBuilder = Door.builderDoorStateMachine; + + smBuilder = smBuilder.addState("__test_state_1__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addState("__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..cfed5ef --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,270 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + + @Test + void testSystemAppendStateTransition() throws Exception { + var smBuilder = Door.builderDoorStateMachine; + + smBuilder = smBuilder.addState("__test_state_1__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addState("__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e83ade8 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..da9ad4a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e83ade8 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..da9ad4a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..8665347 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..6c11e6b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..8665347 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..6c11e6b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..1cfdbeb --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..a665230 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..1cfdbeb --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..a665230 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaAdapterGenerateDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaAdapterGenerateDoorTests.cs new file mode 100644 index 0000000..855dc0c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaAdapterGenerateDoorTests.cs @@ -0,0 +1,18 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.CodeGeneration.LanguageAdapter.Java; +using Stater.CodeGeneration.LanguageAdapter.Kotlin; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class JavaAdapterGenerateDoorTests : BaseTestAdapterGenerateDoorTests +{ + protected override BaseLanguageAdapter Adapter => new JavaAdapter(); + protected override Language Language => Language.Java; +} + +public class JavaTestsAdapterGenerateDoorTests : BaseTestAdapterGenerateTestsDoorTests +{ + protected override BaseLanguageAdapter Adapter => new JavaAdapter(); + protected override Language Language => Language.Java; +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..9860945 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,29 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..a7527d9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,59 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e887eb6 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,19 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext({}) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..2b3d743 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,49 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext({}) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..9d83a9d --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,35 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..f0a01d3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,65 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..60f5479 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,25 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext({}) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..5b93af7 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,55 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext({}) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..33712dc --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,61 @@ +import {StaterStateMachine} from "./index.js"; + + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..bb1eb45 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,85 @@ +import {StaterStateMachine} from "./index.js"; + + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..df53f9c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,51 @@ +import {StaterStateMachine} from "./index.js"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..5ae8f81 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,75 @@ +import {StaterStateMachine} from "./index.js"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..e5795c9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,67 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..3d1307e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,91 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..b4f3786 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,57 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..00336e3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,81 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..9860945 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,29 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..a7527d9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,59 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e887eb6 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,19 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext({}) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..2b3d743 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,49 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext({}) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..9d83a9d --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,35 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..f0a01d3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,65 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..60f5479 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,25 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext({}) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..5b93af7 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,55 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext({}) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..33712dc --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,61 @@ +import {StaterStateMachine} from "./index.js"; + + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..bb1eb45 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,85 @@ +import {StaterStateMachine} from "./index.js"; + + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..df53f9c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,51 @@ +import {StaterStateMachine} from "./index.js"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..5ae8f81 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,75 @@ +import {StaterStateMachine} from "./index.js"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..e5795c9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,67 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..3d1307e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,91 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..b4f3786 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,57 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..00336e3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,81 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..2712c5c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..547ac99 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..2712c5c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..547ac99 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..b82440c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..8079817 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..b82440c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..8079817 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..c9364b1 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..7c9897e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..c9364b1 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..7c9897e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..d1e1405 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..94ac6dd --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..d1e1405 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..94ac6dd --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScriptAdapterGenerateDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScriptAdapterGenerateDoorTests.cs new file mode 100644 index 0000000..f56b5be --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScriptAdapterGenerateDoorTests.cs @@ -0,0 +1,19 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.CodeGeneration.LanguageAdapter.Java; +using Stater.CodeGeneration.LanguageAdapter.JavaScript; +using Stater.CodeGeneration.LanguageAdapter.Kotlin; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class JavaScriptAdapterGenerateDoorTests : BaseTestAdapterGenerateDoorTests +{ + protected override BaseLanguageAdapter Adapter => new JavaScriptAdapter(); + protected override Language Language => Language.JavaScript; +} + +public class JavaScriptAdapterGenerateTestsDoorTests : BaseTestAdapterGenerateTestsDoorTests +{ + protected override BaseLanguageAdapter Adapter => new JavaScriptAdapter(); + protected override Language Language => Language.JavaScript; +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..5e1aa9b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,28 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(DoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..af22212 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,90 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class TypesDoorStateMachine( + transitions: List>, + startState: String, + states: Set, + context: DoorFSMContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..68b580e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,13 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..af4a437 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,75 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +class TypesDoorStateMachine( + transitions: List>, + startState: String, + states: Set, + context: EmptyContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..503c334 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,34 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(DoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..ba58150 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,96 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class TypesDoorStateMachine( + transitions: List>, + startState: States, + states: Set, + context: DoorFSMContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..e7e94ae --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,19 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..85b593e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,81 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +class TypesDoorStateMachine( + transitions: List>, + startState: States, + states: Set, + context: EmptyContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..9ffd260 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,55 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR", + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR", + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN", + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE", + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = "OPEN", + context = DoorFSMContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..3577c6e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,62 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR", + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR", + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN", + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE", + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = "OPEN", + context = DoorFSMContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..82db949 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,40 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..0bbc2b5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,47 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = EmptyContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..cab20c3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,61 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR, + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR, + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN, + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE, + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = States.OPEN, + context = DoorFSMContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..bf90ee9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,68 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR, + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR, + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN, + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE, + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = States.OPEN, + context = DoorFSMContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..031c53f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,46 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..7840728 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,53 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs deleted file mode 100644 index 171f458..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.cs +++ /dev/null @@ -1,975 +0,0 @@ -using Stater.CodeGeneration.Entity; -using Stater.CodeGeneration.LanguageAdapter.Kotlin; -using Stater.Domain.Models; -using Xunit; - -namespace Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin; - -public class KotlinAdapterDoorTests -{ - private readonly KotlinAdapter adapter = new(); - - [Fact] - public void ClazzGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = EmptyContext() - ) - """, result); - } - - [Fact] - public void ClazzGenerateWithInterface() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = EmptyContext() - ) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - } - """, result); - } - - [Fact] - public void ClazzStateGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - GenerateStates: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - enum class States { - OPEN, - AJAR, - CLOSE - } - - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = EmptyContext() - ) - """, result); - } - - [Fact] - public void ClazzStateGenerateWithInterface() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - GenerateStates: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - enum class States { - OPEN, - AJAR, - CLOSE - } - - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = EmptyContext() - ) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - } - """, result); - } - - [Fact] - public void ClazzContextGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - GenerateContext: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - data class DoorFSMContext( - var degreeOfOpening: Int = 100, - ) : Context - - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = DoorFSMContext() - ) - """, result); - } - - [Fact] - public void ClazzContextGenerateWithContext() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - GenerateContext: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - data class DoorFSMContext( - var degreeOfOpening: Int = 100, - ) : Context - - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = DoorFSMContext() - ) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - } - """, result); - } - - [Fact] - public void ClazzStateContextGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - GenerateStates: true, - GenerateContext: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - enum class States { - OPEN, - AJAR, - CLOSE - } - - data class DoorFSMContext( - var degreeOfOpening: Int = 100, - ) : Context - - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = DoorFSMContext() - ) - """, result); - } - - [Fact] - public void ClazzStateContextGenerateWithContext() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - GenerateStates: true, - GenerateContext: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - enum class States { - OPEN, - AJAR, - CLOSE - } - - data class DoorFSMContext( - var degreeOfOpening: Int = 100, - ) : Context - - class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = DoorFSMContext() - ) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - } - """, result); - } - - [Fact] - public void BuilderGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - Mode.Builder - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(EmptyContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") - """, result); - } - - [Fact] - public void BuilderGenerateWithInterface() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - Mode.Builder, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - class TypesDoorStateMachine( - transitions: List>, - startState: String, - states: Set, - context: EmptyContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, - ) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter - ) { - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - } - - private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) - } - - val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") - """, result); - } - - [Fact] - public void BuilderStateGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - Mode.Builder, - GenerateStates: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - enum class States { - OPEN, - AJAR, - CLOSE - } - - val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(EmptyContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - """, result); - } - - [Fact] - public void BuilderStateGenerateWithInterface() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - Mode.Builder, - GenerateStates: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - enum class States { - OPEN, - AJAR, - CLOSE - } - - class TypesDoorStateMachine( - transitions: List>, - startState: States, - states: Set, - context: EmptyContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, - ) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter - ) { - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - } - - private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) - } - - val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - """, result); - } - - [Fact] - public void BuilderContextGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - Mode.Builder, - GenerateContext: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - data class DoorFSMContext( - var degreeOfOpening: Int = 100, - ) : Context - - val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(DoorFSMContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") - """, result); - } - - [Fact] - public void BuilderContextGenerateWithContext() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - Mode.Builder, - GenerateContext: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - data class DoorFSMContext( - var degreeOfOpening: Int = 100, - ) : Context - - class TypesDoorStateMachine( - transitions: List>, - startState: String, - states: Set, - context: DoorFSMContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, - ) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter - ) { - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - } - - private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) - } - - val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") - """, result); - } - - [Fact] - public void BuilderStateContextGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - Mode.Builder, - GenerateStates: true, - GenerateContext: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - enum class States { - OPEN, - AJAR, - CLOSE - } - - data class DoorFSMContext( - var degreeOfOpening: Int = 100, - ) : Context - - val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(DoorFSMContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - """, result); - } - - [Fact] - public void BuilderStateContextGenerateWithContext() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Kotlin, - Mode.Builder, - GenerateStates: true, - GenerateContext: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - enum class States { - OPEN, - AJAR, - CLOSE - } - - data class DoorFSMContext( - var degreeOfOpening: Int = 100, - ) : Context - - class TypesDoorStateMachine( - transitions: List>, - startState: States, - states: Set, - context: DoorFSMContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, - ) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter - ) { - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - } - - private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) - } - - val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - """, result); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..5e1aa9b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,28 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(DoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..af22212 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,90 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class TypesDoorStateMachine( + transitions: List>, + startState: String, + states: Set, + context: DoorFSMContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..68b580e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,13 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..af4a437 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,75 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +class TypesDoorStateMachine( + transitions: List>, + startState: String, + states: Set, + context: EmptyContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..503c334 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,34 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(DoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..ba58150 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,96 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class TypesDoorStateMachine( + transitions: List>, + startState: States, + states: Set, + context: DoorFSMContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..e7e94ae --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,19 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..85b593e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,81 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +class TypesDoorStateMachine( + transitions: List>, + startState: States, + states: Set, + context: EmptyContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..9ffd260 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,55 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR", + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR", + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN", + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE", + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = "OPEN", + context = DoorFSMContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..3577c6e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,62 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR", + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR", + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN", + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE", + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = "OPEN", + context = DoorFSMContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..82db949 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,40 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..0bbc2b5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,47 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = EmptyContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..cab20c3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,61 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR, + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR, + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN, + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE, + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = States.OPEN, + context = DoorFSMContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..bf90ee9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,68 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR, + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR, + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN, + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE, + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = States.OPEN, + context = DoorFSMContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..031c53f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,46 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..7840728 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,53 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..357f64e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,265 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + + @Test + fun testSystemAppendStateTransition(){ + var smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState("__test_state_1__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState("__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..5285b4f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,265 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() as TypesDoorStateMachine + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + + @Test + fun testSystemAppendStateTransition(){ + var smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState("__test_state_1__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState("__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..357f64e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,265 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + + @Test + fun testSystemAppendStateTransition(){ + var smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState("__test_state_1__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState("__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..5285b4f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,265 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() as TypesDoorStateMachine + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + + @Test + fun testSystemAppendStateTransition(){ + var smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState("__test_state_1__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState("__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..a15095f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..3a5c5b2 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() as TypesDoorStateMachine + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..a15095f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..3a5c5b2 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() as TypesDoorStateMachine + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..b779122 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..2c2922a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..b779122 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..2c2922a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e7234ed --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..2c6252e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e7234ed --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..2c6252e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/KotlinAdapterGenerateDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/KotlinAdapterGenerateDoorTests.cs new file mode 100644 index 0000000..9abda35 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/KotlinAdapterGenerateDoorTests.cs @@ -0,0 +1,17 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.CodeGeneration.LanguageAdapter.Kotlin; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class KotlinAdapterGenerateDoorTests : BaseTestAdapterGenerateDoorTests +{ + protected override BaseLanguageAdapter Adapter => new KotlinAdapter(); + protected override Language Language => Language.Kotlin; +} + +public class KotlinAdapterGenerateTestsDoorTests : BaseTestAdapterGenerateTestsDoorTests +{ + protected override BaseLanguageAdapter Adapter => new KotlinAdapter(); + protected override Language Language => Language.Kotlin; +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs new file mode 100644 index 0000000..b2624c2 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs @@ -0,0 +1,12 @@ +using System.Runtime.CompilerServices; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class ModuleInitializer +{ + [ModuleInitializer] + public static void Init() + { + VerifierSettings.AutoVerify(); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python/PythonAdapterDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python/PythonAdapterDoorTests.cs deleted file mode 100644 index 7c57e7c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python/PythonAdapterDoorTests.cs +++ /dev/null @@ -1,994 +0,0 @@ -using Stater.CodeGeneration.Entity; -using Stater.CodeGeneration.LanguageAdapter.Python; -using Xunit; - -namespace Stater.CodeGeneration.Tests.LanguageAdapter.Python; - -public class PythonAdapterDoorTests -{ - private readonly PythonAdapter adapter = new(); - - [Fact] - public void ClazzGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3 - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - from stater_state_machine import EmptyContext - from stater_state_machine import StaterStateMachine - from stater_state_machine import Transition - - - class DoorStateMachine(StaterStateMachine[str, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR" - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR" - ), - Transition( - name="open", - start="AJAR", - end="OPEN" - ), - Transition( - name="close", - start="AJAR", - end="CLOSE" - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR" - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR" - ) - ], - context=EmptyContext(), - start_state="OPEN", - ) - """, result); - } - - [Fact] - public void ClazzGenerateWithInterface() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - from stater_state_machine import EmptyContext - from stater_state_machine import StaterStateMachine - from stater_state_machine import Transition - - - class DoorStateMachine(StaterStateMachine[str, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR" - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR" - ), - Transition( - name="open", - start="AJAR", - end="OPEN" - ), - Transition( - name="close", - start="AJAR", - end="CLOSE" - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR" - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR" - ) - ], - context=EmptyContext(), - start_state="OPEN", - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - """, result); - } - - [Fact] - public void ClazzStateGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - GenerateStates: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - from enum import Enum - from stater_state_machine import EmptyContext - from stater_state_machine import StaterStateMachine - from stater_state_machine import Transition - - - class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - class DoorStateMachine(StaterStateMachine[States, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR - ) - ], - context=EmptyContext(), - start_state=States.OPEN, - ) - """, result); - } - - [Fact] - public void ClazzStateGenerateWithInterface() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - GenerateStates: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - from enum import Enum - from stater_state_machine import EmptyContext - from stater_state_machine import StaterStateMachine - from stater_state_machine import Transition - - - class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - class DoorStateMachine(StaterStateMachine[States, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR - ) - ], - context=EmptyContext(), - start_state=States.OPEN, - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - """, result); - } - - [Fact] - public void ClazzContextGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - GenerateContext: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - from pydantic import BaseModel - from stater_state_machine import Context - from stater_state_machine import StaterStateMachine - from stater_state_machine import Transition - - - class DoorFSMContext(BaseModel, Context): - degree_of_opening: int = 100 - - - class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR" - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR" - ), - Transition( - name="open", - start="AJAR", - end="OPEN" - ), - Transition( - name="close", - start="AJAR", - end="CLOSE" - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR" - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR" - ) - ], - context=DoorFSMContext(), - start_state="OPEN", - ) - """, result); - } - - [Fact] - public void ClazzContextGenerateWithContext() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - GenerateContext: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - from pydantic import BaseModel - from stater_state_machine import Context - from stater_state_machine import StaterStateMachine - from stater_state_machine import Transition - - - class DoorFSMContext(BaseModel, Context): - degree_of_opening: int = 100 - - - class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR" - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR" - ), - Transition( - name="open", - start="AJAR", - end="OPEN" - ), - Transition( - name="close", - start="AJAR", - end="CLOSE" - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR" - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR" - ) - ], - context=DoorFSMContext(), - start_state="OPEN", - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - """, result); - } - - [Fact] - public void ClazzStateContextGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - GenerateStates: true, - GenerateContext: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - from enum import Enum - from pydantic import BaseModel - from stater_state_machine import Context - from stater_state_machine import StaterStateMachine - from stater_state_machine import Transition - - - class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - class DoorFSMContext(BaseModel, Context): - degree_of_opening: int = 100 - - - class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR - ) - ], - context=DoorFSMContext(), - start_state=States.OPEN, - ) - """, result); - } - - [Fact] - public void ClazzStateContextGenerateWithContext() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - GenerateStates: true, - GenerateContext: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - from enum import Enum - from pydantic import BaseModel - from stater_state_machine import Context - from stater_state_machine import StaterStateMachine - from stater_state_machine import Transition - - - class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - class DoorFSMContext(BaseModel, Context): - degree_of_opening: int = 100 - - - class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR - ) - ], - context=DoorFSMContext(), - start_state=States.OPEN, - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - """, result); - } - - [Fact] - public void BuilderGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - Mode.Builder - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - from stater_state_machine import EmptyContext - from stater_state_machine import StaterStateMachineBuilder - - - builder_Door_state_machine = ( - StaterStateMachineBuilder[str, EmptyContext]() - .set_start_state("OPEN") - .set_context(EmptyContext()) - .add_transition("preOpen", "CLOSE", "AJAR") - .add_transition("preClose", "OPEN", "AJAR") - .add_transition("open", "AJAR", "OPEN") - .add_transition("close", "AJAR", "CLOSE") - .add_transition("ajarPlus", "AJAR", "AJAR") - .add_transition("ajarMinus", "AJAR", "AJAR") - ) - """, result); - } - - [Fact] - public void BuilderGenerateWithInterface() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - Mode.Builder, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - from stater_state_machine import EmptyContext - from stater_state_machine import StaterStateMachine - from stater_state_machine import StaterStateMachineBuilder - - - class TypesDoorStateMachine(StaterStateMachine[str, EmptyContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - - def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(StaterStateMachine(*args, **kwargs)) - - - builder_Door_state_machine = ( - StaterStateMachineBuilder[str, EmptyContext]() - .set_start_state("OPEN") - .set_context(EmptyContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .add_transition("preClose", "OPEN", "AJAR") - .add_transition("open", "AJAR", "OPEN") - .add_transition("close", "AJAR", "CLOSE") - .add_transition("ajarPlus", "AJAR", "AJAR") - .add_transition("ajarMinus", "AJAR", "AJAR") - ) - """, result); - } - - [Fact] - public void BuilderStateGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - Mode.Builder, - GenerateStates: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - from enum import Enum - from stater_state_machine import EmptyContext - from stater_state_machine import StaterStateMachineBuilder - - - class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - builder_Door_state_machine = ( - StaterStateMachineBuilder[States, EmptyContext]() - .set_start_state(States.OPEN) - .set_context(EmptyContext()) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .add_transition("preClose", States.OPEN, States.AJAR) - .add_transition("open", States.AJAR, States.OPEN) - .add_transition("close", States.AJAR, States.CLOSE) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - ) - """, result); - } - - [Fact] - public void BuilderStateGenerateWithInterface() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - Mode.Builder, - GenerateStates: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal( - """ - from enum import Enum - from stater_state_machine import EmptyContext - from stater_state_machine import StaterStateMachine - from stater_state_machine import StaterStateMachineBuilder - - - class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - class TypesDoorStateMachine(StaterStateMachine[States, EmptyContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - - def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(StaterStateMachine(*args, **kwargs)) - - - builder_Door_state_machine = ( - StaterStateMachineBuilder[States, EmptyContext]() - .set_start_state(States.OPEN) - .set_context(EmptyContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .add_transition("preClose", States.OPEN, States.AJAR) - .add_transition("open", States.AJAR, States.OPEN) - .add_transition("close", States.AJAR, States.CLOSE) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - ) - """, result); - } - - [Fact] - public void BuilderContextGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - Mode.Builder, - GenerateContext: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - from pydantic import BaseModel - from stater_state_machine import Context - from stater_state_machine import StaterStateMachineBuilder - - - class DoorFSMContext(BaseModel, Context): - degree_of_opening: int = 100 - - - builder_Door_state_machine = ( - StaterStateMachineBuilder[str, DoorFSMContext]() - .set_start_state("OPEN") - .set_context(DoorFSMContext()) - .add_transition("preOpen", "CLOSE", "AJAR") - .add_transition("preClose", "OPEN", "AJAR") - .add_transition("open", "AJAR", "OPEN") - .add_transition("close", "AJAR", "CLOSE") - .add_transition("ajarPlus", "AJAR", "AJAR") - .add_transition("ajarMinus", "AJAR", "AJAR") - ) - """, result); - } - - [Fact] - public void BuilderContextGenerateWithContext() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - Mode.Builder, - GenerateContext: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - from pydantic import BaseModel - from stater_state_machine import Context - from stater_state_machine import StaterStateMachine - from stater_state_machine import StaterStateMachineBuilder - - - class DoorFSMContext(BaseModel, Context): - degree_of_opening: int = 100 - - - class TypesDoorStateMachine(StaterStateMachine[str, DoorFSMContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - - def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(StaterStateMachine(*args, **kwargs)) - - - builder_Door_state_machine = ( - StaterStateMachineBuilder[str, DoorFSMContext]() - .set_start_state("OPEN") - .set_context(DoorFSMContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .add_transition("preClose", "OPEN", "AJAR") - .add_transition("open", "AJAR", "OPEN") - .add_transition("close", "AJAR", "CLOSE") - .add_transition("ajarPlus", "AJAR", "AJAR") - .add_transition("ajarMinus", "AJAR", "AJAR") - ) - """, result); - } - - [Fact] - public void BuilderStateContextGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - Mode.Builder, - GenerateStates: true, - GenerateContext: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - from enum import Enum - from pydantic import BaseModel - from stater_state_machine import Context - from stater_state_machine import StaterStateMachineBuilder - - - class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - class DoorFSMContext(BaseModel, Context): - degree_of_opening: int = 100 - - - builder_Door_state_machine = ( - StaterStateMachineBuilder[States, DoorFSMContext]() - .set_start_state(States.OPEN) - .set_context(DoorFSMContext()) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .add_transition("preClose", States.OPEN, States.AJAR) - .add_transition("open", States.AJAR, States.OPEN) - .add_transition("close", States.AJAR, States.CLOSE) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - ) - """, result); - } - - [Fact] - public void BuilderStateContextGenerateWithContext() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var settings = new GenerationSettings( - Language.Python3, - Mode.Builder, - GenerateStates: true, - GenerateContext: true, - GenerateInterface: true - ); - - var result = adapter.Generate(stateMachine, settings); - Assert.Equal(""" - from enum import Enum - from pydantic import BaseModel - from stater_state_machine import Context - from stater_state_machine import StaterStateMachine - from stater_state_machine import StaterStateMachineBuilder - - - class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - class DoorFSMContext(BaseModel, Context): - degree_of_opening: int = 100 - - - class TypesDoorStateMachine(StaterStateMachine[States, DoorFSMContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - - def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(StaterStateMachine(*args, **kwargs)) - - - builder_Door_state_machine = ( - StaterStateMachineBuilder[States, DoorFSMContext]() - .set_start_state(States.OPEN) - .set_context(DoorFSMContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .add_transition("preClose", States.OPEN, States.AJAR) - .add_transition("open", States.AJAR, States.OPEN) - .add_transition("close", States.AJAR, States.CLOSE) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - ) - """, result); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..029c210 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,30 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachineBuilder + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, DoorFSMContext]() + .set_start_state("OPEN") + .set_context(DoorFSMContext()) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..6e2adb8 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,57 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + + +class TypesDoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, DoorFSMContext]() + .set_start_state("OPEN") + .set_context(DoorFSMContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e08c6e5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,23 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachineBuilder + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, EmptyContext]() + .set_start_state("OPEN") + .set_context(EmptyContext()) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..68e9f42 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,50 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + + +class TypesDoorStateMachine(StaterStateMachine[str, EmptyContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, EmptyContext]() + .set_start_state("OPEN") + .set_context(EmptyContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..863ea0a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,37 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, DoorFSMContext]() + .set_start_state(States.OPEN) + .set_context(DoorFSMContext()) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..76db2a5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,64 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + + +class TypesDoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, DoorFSMContext]() + .set_start_state(States.OPEN) + .set_context(DoorFSMContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..58ddd62 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,30 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, EmptyContext]() + .set_start_state(States.OPEN) + .set_context(EmptyContext()) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..aad3826 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,57 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + +class TypesDoorStateMachine(StaterStateMachine[States, EmptyContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, EmptyContext]() + .set_start_state(States.OPEN) + .set_context(EmptyContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..db7dec8 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,58 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state="OPEN", + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..f95e90e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,76 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state="OPEN", + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..2d83491 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,51 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorStateMachine(StaterStateMachine[str, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state="OPEN", + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..11251eb --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,69 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorStateMachine(StaterStateMachine[str, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state="OPEN", + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..8c0dba5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,65 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state=States.OPEN, + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..5edb446 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,83 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state=States.OPEN, + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..92f3569 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,58 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorStateMachine(StaterStateMachine[States, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state=States.OPEN, + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..be60674 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,76 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorStateMachine(StaterStateMachine[States, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state=States.OPEN, + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..029c210 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,30 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachineBuilder + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, DoorFSMContext]() + .set_start_state("OPEN") + .set_context(DoorFSMContext()) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..6e2adb8 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,57 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + + +class TypesDoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, DoorFSMContext]() + .set_start_state("OPEN") + .set_context(DoorFSMContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e08c6e5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,23 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachineBuilder + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, EmptyContext]() + .set_start_state("OPEN") + .set_context(EmptyContext()) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..68e9f42 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,50 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + + +class TypesDoorStateMachine(StaterStateMachine[str, EmptyContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, EmptyContext]() + .set_start_state("OPEN") + .set_context(EmptyContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..863ea0a --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,37 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, DoorFSMContext]() + .set_start_state(States.OPEN) + .set_context(DoorFSMContext()) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..76db2a5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,64 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + + +class TypesDoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, DoorFSMContext]() + .set_start_state(States.OPEN) + .set_context(DoorFSMContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..58ddd62 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,30 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, EmptyContext]() + .set_start_state(States.OPEN) + .set_context(EmptyContext()) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..aad3826 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,57 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + +class TypesDoorStateMachine(StaterStateMachine[States, EmptyContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, EmptyContext]() + .set_start_state(States.OPEN) + .set_context(EmptyContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..db7dec8 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,58 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state="OPEN", + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..f95e90e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,76 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state="OPEN", + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..2d83491 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,51 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorStateMachine(StaterStateMachine[str, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state="OPEN", + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..11251eb --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,69 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorStateMachine(StaterStateMachine[str, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state="OPEN", + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..8c0dba5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,65 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state=States.OPEN, + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..5edb446 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,83 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state=States.OPEN, + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..92f3569 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,58 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorStateMachine(StaterStateMachine[States, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state=States.OPEN, + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..be60674 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,76 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorStateMachine(StaterStateMachine[States, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state=States.OPEN, + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..df80b47 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,251 @@ +import json + +from .Door import builder_Door_state_machine + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + + +def test_system_append_state_transition(): + sm_builder = builder_Door_state_machine + + sm_builder = sm_builder.add_state('__test_state_1__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_state('__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..8c02cb3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,251 @@ +import json + +from .Door import builder_Door_state_machine + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + + +def test_system_append_state_transition(): + sm_builder = builder_Door_state_machine + + sm_builder = sm_builder.add_state('__test_state_1__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_state('__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..df80b47 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,251 @@ +import json + +from .Door import builder_Door_state_machine + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + + +def test_system_append_state_transition(): + sm_builder = builder_Door_state_machine + + sm_builder = sm_builder.add_state('__test_state_1__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_state('__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..8c02cb3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,251 @@ +import json + +from .Door import builder_Door_state_machine + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + + +def test_system_append_state_transition(): + sm_builder = builder_Door_state_machine + + sm_builder = sm_builder.add_state('__test_state_1__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_state('__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..1ea3f75 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import builder_Door_state_machine +from .Door import States + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..5f4e37b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import builder_Door_state_machine +from .Door import States + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..1ea3f75 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import builder_Door_state_machine +from .Door import States + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..5f4e37b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import builder_Door_state_machine +from .Door import States + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..9f04d6d --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,112 @@ +import json + +from .Door import DoorStateMachine + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..9b8217f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,112 @@ +import json + +from .Door import DoorStateMachine + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..9f04d6d --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,112 @@ +import json + +from .Door import DoorStateMachine + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..9b8217f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,112 @@ +import json + +from .Door import DoorStateMachine + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..d8ae62f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import DoorStateMachine +from .Door import States + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..bec93d3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import DoorStateMachine +from .Door import States + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..d8ae62f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import DoorStateMachine +from .Door import States + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..bec93d3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import DoorStateMachine +from .Door import States + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/PythonAdapterGenerateDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/PythonAdapterGenerateDoorTests.cs new file mode 100644 index 0000000..5e26ba9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/PythonAdapterGenerateDoorTests.cs @@ -0,0 +1,17 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.CodeGeneration.LanguageAdapter.Python; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class PythonAdapterGenerateDoorTests : BaseTestAdapterGenerateDoorTests +{ + protected override BaseLanguageAdapter Adapter => new PythonAdapter(); + protected override Language Language => Language.Python3; +} + +public class PythonAdapterGenerateTestsDoorTests : BaseTestAdapterGenerateTestsDoorTests +{ + protected override BaseLanguageAdapter Adapter => new PythonAdapter(); + protected override Language Language => Language.Python3; +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..c3a3fd3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,37 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..1cee7c3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,70 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..28b7a2d --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,12 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..efd53ad --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,45 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..759409e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,43 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..adfa16c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,76 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..5683fd3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,18 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..133b5fa --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,51 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..bc5a550 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,69 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..2f9d2c1 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,94 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..9624b89 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,44 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR" + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR" + }, + { + name: "open", + start: "AJAR", + end: "OPEN" + }, + { + name: "close", + start: "AJAR", + end: "CLOSE" + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR" + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR" + } + ], + new EmptyContext(), + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..348d999 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,69 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR" + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR" + }, + { + name: "open", + start: "AJAR", + end: "OPEN" + }, + { + name: "close", + start: "AJAR", + end: "CLOSE" + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR" + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR" + } + ], + new EmptyContext(), + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..a530460 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,75 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e0f9cc8 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,100 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..4cdf26b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,50 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR + } + ], + new EmptyContext(), + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..2d48518 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,75 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR + } + ], + new EmptyContext(), + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..c3a3fd3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,37 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..1cee7c3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,70 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..28b7a2d --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,12 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..efd53ad --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,45 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..759409e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,43 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..adfa16c --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,76 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..5683fd3 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,18 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..133b5fa --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,51 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..bc5a550 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,69 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..2f9d2c1 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,94 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..9624b89 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,44 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR" + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR" + }, + { + name: "open", + start: "AJAR", + end: "OPEN" + }, + { + name: "close", + start: "AJAR", + end: "CLOSE" + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR" + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR" + } + ], + new EmptyContext(), + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..348d999 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,69 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR" + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR" + }, + { + name: "open", + start: "AJAR", + end: "OPEN" + }, + { + name: "close", + start: "AJAR", + end: "CLOSE" + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR" + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR" + } + ], + new EmptyContext(), + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..a530460 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,75 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e0f9cc8 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,100 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..4cdf26b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,50 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR + } + ], + new EmptyContext(), + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..2d48518 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,75 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR + } + ], + new EmptyContext(), + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..b695a79 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..ff0da21 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() as TypesDoorStateMachine +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..b695a79 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..ff0da21 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() as TypesDoorStateMachine +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..03e7f2e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..7d789b9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() as TypesDoorStateMachine +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..03e7f2e --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..7d789b9 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() as TypesDoorStateMachine +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..349c13f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..46957b2 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..349c13f --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..46957b2 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..9c4d633 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..7806a77 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..9c4d633 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..7806a77 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScriptAdapterGenerateDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScriptAdapterGenerateDoorTests.cs new file mode 100644 index 0000000..cbdd011 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScriptAdapterGenerateDoorTests.cs @@ -0,0 +1,17 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.LanguageAdapter.Base; +using Stater.CodeGeneration.LanguageAdapter.TypeScript; + +namespace Stater.CodeGeneration.Tests.LanguageAdapter; + +public class TypeScriptAdapterGenerateDoorTests : BaseTestAdapterGenerateDoorTests +{ + protected override BaseLanguageAdapter Adapter => new TypeScriptAdapter(); + protected override Language Language => Language.TypeScript; +} + +public class TypeScriptAdapterGenerateTestsDoorTests : BaseTestAdapterGenerateTestsDoorTests +{ + protected override BaseLanguageAdapter Adapter => new TypeScriptAdapter(); + protected override Language Language => Language.TypeScript; +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/Program.cs b/src/Stater.CodeGeneration.Tests/Program.cs new file mode 100644 index 0000000..c70149b --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/Program.cs @@ -0,0 +1,82 @@ +using Stater.CodeGeneration.Entity; +using Stater.CodeGeneration.Tests.LanguageAdapter; + +namespace Stater.CodeGeneration.Tests; + +public class Program +{ + public static void main() + { + // matrixGenerate(); + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + var results = ScenarioFinder.FindScenarios(stateMachine); + Console.WriteLine(results[2].Count); + Console.WriteLine(results[2][0]); + Console.WriteLine(results[2][1]); + Console.WriteLine(results[2][2]); + Console.WriteLine(results[2][3]); + } + + static void simpleOutput() + { + var codeGenerator = new CodeGenerator(); + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + + var settings = new GenerationSettings( + Language.Kotlin + , Mode.Builder + , GenerateStates: true + , GenerateContext: true + , GenerateInterface:true + ); + + var basePath = "/Users/vnazarov/IdeaProjects/stater-fsm-code/projects/kotlin/src/main/kotlin"; + using var sw = new StreamWriter(basePath + "/" + ".kt"); + var result = codeGenerator.Generate(stateMachine, settings); + Console.WriteLine(result); + } + + static void matrixGenerate() + { + var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); + + var states = new List{false, true}; + var codeGenerator = new CodeGenerator(); + + foreach (var generateStates in states) + { + foreach (var generateContext in states) + { + foreach (var generateInterface in states) + { + var basePath = "/Users/vnazarov/IdeaProjects/stater-fsm-code/projects/python/stater_state_machine/door_class"; + if (generateStates) + { + basePath += "_states"; + } + if (generateContext) + { + basePath += "_context"; + } + if (generateInterface) + { + basePath += "_interface"; + } + + var settings = new GenerationSettings( + Language.Python3 + , Mode.Builder + , GenerateStates: generateStates + , GenerateContext: generateContext + , GenerateInterface:generateInterface + ); + + basePath += ".py"; + using var sw = new StreamWriter(basePath); + var result = codeGenerator.Generate(stateMachine, settings); + sw.WriteLine(result); + } + } + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/ScenarioFinderTests.cs b/src/Stater.CodeGeneration.Tests/ScenarioFinderTests.cs index 75dc42a..109e2b6 100644 --- a/src/Stater.CodeGeneration.Tests/ScenarioFinderTests.cs +++ b/src/Stater.CodeGeneration.Tests/ScenarioFinderTests.cs @@ -1,17 +1,33 @@ using Stater.CodeGeneration.Tests.LanguageAdapter; -using Xunit; -using Xunit.Abstractions; namespace Stater.CodeGeneration.Tests; public class ScenarioFinderTests { [Fact] - public void ClazzGenerate() + public void TestScenarioFinder() { var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var results = ScenarioFinder.FindScenarios(stateMachine); + Assert.Equal(3, results.Count); + Assert.Equal(5, results[0].Count); + Assert.Equal("preClose", results[0][0].Name); + Assert.Equal("close", results[0][1].Name); + Assert.Equal("preOpen", results[0][2].Name); + Assert.Equal("ajarPlus", results[0][3].Name); + Assert.Equal("open", results[0][4].Name); - Console.WriteLine(results.ToString()); + Assert.Equal(5, results[1].Count); + Assert.Equal("preClose", results[1][0].Name); + Assert.Equal("ajarPlus", results[1][1].Name); + Assert.Equal("close", results[1][2].Name); + Assert.Equal("preOpen", results[1][3].Name); + Assert.Equal("open", results[1][4].Name); + + Assert.Equal(4, results[2].Count); + Assert.Equal("preClose", results[2][0].Name); + Assert.Equal("close", results[2][1].Name); + Assert.Equal("preOpen", results[2][2].Name); + Assert.Equal("open", results[2][3].Name); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj b/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj index d6a2c00..183e9c5 100644 --- a/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj +++ b/src/Stater.CodeGeneration.Tests/Stater.CodeGeneration.Tests.csproj @@ -7,13 +7,14 @@ - - - + + + + - + diff --git a/src/Stater.CodeGeneration/ScenarioFinder.cs b/src/Stater.CodeGeneration/ScenarioFinder.cs index 8639637..074a430 100644 --- a/src/Stater.CodeGeneration/ScenarioFinder.cs +++ b/src/Stater.CodeGeneration/ScenarioFinder.cs @@ -24,7 +24,7 @@ public static List> FindScenarios(StateMachine stateMachine) .ToList(); } - private static List> FindAllPaths(List transitions, Guid start) + private static IEnumerable> FindAllPaths(List transitions, Guid start) { var graph = BuildGraph(transitions); var paths = new List>(); diff --git a/src/Stater/FodyWeavers.xsd b/src/Stater/FodyWeavers.xsd new file mode 100644 index 0000000..f3ac476 --- /dev/null +++ b/src/Stater/FodyWeavers.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file From d752ce40693dd37d18ae5b23c17462344c719b16 Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 8 Apr 2025 09:00:46 +0300 Subject: [PATCH 60/69] SF-20: add project tests workflow --- .github/workflows/project_tests.yml | 25 ++++++ .../LanguageAdapter/ModuleInitializer.cs | 2 +- src/Stater.CodeGeneration.Tests/Program.cs | 82 ------------------- src/Stater/Plugin/SLXPlugin.cs | 5 -- 4 files changed, 26 insertions(+), 88 deletions(-) create mode 100644 .github/workflows/project_tests.yml delete mode 100644 src/Stater.CodeGeneration.Tests/Program.cs diff --git a/.github/workflows/project_tests.yml b/.github/workflows/project_tests.yml new file mode 100644 index 0000000..bdd7a0c --- /dev/null +++ b/.github/workflows/project_tests.yml @@ -0,0 +1,25 @@ +name: c# Tests and Coverage + +jobs: + build-and-test: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up .NET SDK + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 8.0 + + - name: Restore dependencies + run: | + dotnet restore + + - name: Build the project + run: | + dotnet build --configuration Release + + - name: Run tests with coverage + run: | + dotnet test --configuration Release --collect:"XPlat Code Coverage" diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs index b2624c2..2b46b10 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs @@ -7,6 +7,6 @@ public class ModuleInitializer [ModuleInitializer] public static void Init() { - VerifierSettings.AutoVerify(); + // VerifierSettings.AutoVerify(); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/Program.cs b/src/Stater.CodeGeneration.Tests/Program.cs deleted file mode 100644 index c70149b..0000000 --- a/src/Stater.CodeGeneration.Tests/Program.cs +++ /dev/null @@ -1,82 +0,0 @@ -using Stater.CodeGeneration.Entity; -using Stater.CodeGeneration.Tests.LanguageAdapter; - -namespace Stater.CodeGeneration.Tests; - -public class Program -{ - public static void main() - { - // matrixGenerate(); - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - var results = ScenarioFinder.FindScenarios(stateMachine); - Console.WriteLine(results[2].Count); - Console.WriteLine(results[2][0]); - Console.WriteLine(results[2][1]); - Console.WriteLine(results[2][2]); - Console.WriteLine(results[2][3]); - } - - static void simpleOutput() - { - var codeGenerator = new CodeGenerator(); - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - - var settings = new GenerationSettings( - Language.Kotlin - , Mode.Builder - , GenerateStates: true - , GenerateContext: true - , GenerateInterface:true - ); - - var basePath = "/Users/vnazarov/IdeaProjects/stater-fsm-code/projects/kotlin/src/main/kotlin"; - using var sw = new StreamWriter(basePath + "/" + ".kt"); - var result = codeGenerator.Generate(stateMachine, settings); - Console.WriteLine(result); - } - - static void matrixGenerate() - { - var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); - - var states = new List{false, true}; - var codeGenerator = new CodeGenerator(); - - foreach (var generateStates in states) - { - foreach (var generateContext in states) - { - foreach (var generateInterface in states) - { - var basePath = "/Users/vnazarov/IdeaProjects/stater-fsm-code/projects/python/stater_state_machine/door_class"; - if (generateStates) - { - basePath += "_states"; - } - if (generateContext) - { - basePath += "_context"; - } - if (generateInterface) - { - basePath += "_interface"; - } - - var settings = new GenerationSettings( - Language.Python3 - , Mode.Builder - , GenerateStates: generateStates - , GenerateContext: generateContext - , GenerateInterface:generateInterface - ); - - basePath += ".py"; - using var sw = new StreamWriter(basePath); - var result = codeGenerator.Generate(stateMachine, settings); - sw.WriteLine(result); - } - } - } - } -} \ No newline at end of file diff --git a/src/Stater/Plugin/SLXPlugin.cs b/src/Stater/Plugin/SLXPlugin.cs index 2a7b441..ebaf74d 100644 --- a/src/Stater/Plugin/SLXPlugin.cs +++ b/src/Stater/Plugin/SLXPlugin.cs @@ -6,11 +6,6 @@ public class SLXPlugin: ButtonFilePlugin { public override PluginOutput Start(PluginInput pluginInput, string file) { - // if (dialogResult != DialogResult.OK) - // { - // result = PluginOutput.From("DialogResult is not OK"); - // return result; - // } var parser = new Parser(file); var stateflow = parser.Parse(); var pluginStateflow = new Translator().Convert(stateflow); From 1c4820f545540ac2acec8627553b593144919391 Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 10 Apr 2025 20:33:03 +0300 Subject: [PATCH 61/69] Add interface for generate and import --- src/Stater.CodeGeneration/Entity/Language.cs | 2 +- src/Stater.CodeGeneration/FileGenerator.cs | 140 ++++++++++++++++++ src/Stater.CodeGeneration/JsonLoader.cs | 52 +++++++ .../Stater.CodeGeneration.csproj | 1 + .../Json/StateMachineJsonAdapter.cs | 7 +- src/Stater/Models/Editors/IEditorManager.cs | 4 +- .../Models/Editors/impl/EditorManager.cs | 5 + src/Stater/Plugin/JsonCodeImportPlugin.cs | 23 +++ src/Stater/ViewModels/MainWindowViewModel.cs | 6 +- .../Plugins/CodeGenerationViewModel.cs | 64 ++++++++ src/Stater/Views/Editors/MainEditor.axaml | 6 + src/Stater/Views/MainWindow.axaml | 1 + src/Stater/Views/Plugins/CodeGeneration.axaml | 32 ++++ .../Views/Plugins/CodeGeneration.axaml.cs | 41 +++++ 14 files changed, 380 insertions(+), 4 deletions(-) create mode 100644 src/Stater.CodeGeneration/FileGenerator.cs create mode 100644 src/Stater.CodeGeneration/JsonLoader.cs create mode 100644 src/Stater/Plugin/JsonCodeImportPlugin.cs create mode 100644 src/Stater/ViewModels/Plugins/CodeGenerationViewModel.cs create mode 100644 src/Stater/Views/Plugins/CodeGeneration.axaml create mode 100644 src/Stater/Views/Plugins/CodeGeneration.axaml.cs diff --git a/src/Stater.CodeGeneration/Entity/Language.cs b/src/Stater.CodeGeneration/Entity/Language.cs index 9d6a279..48cbbb3 100644 --- a/src/Stater.CodeGeneration/Entity/Language.cs +++ b/src/Stater.CodeGeneration/Entity/Language.cs @@ -8,6 +8,6 @@ public enum Language Python3, JavaScript, TypeScript, - C, + // C, CPlusPlus } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/FileGenerator.cs b/src/Stater.CodeGeneration/FileGenerator.cs new file mode 100644 index 0000000..5644ce6 --- /dev/null +++ b/src/Stater.CodeGeneration/FileGenerator.cs @@ -0,0 +1,140 @@ +using Stater.CodeGeneration.Entity; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration; + +public class FileGenerator +{ + private CodeGenerator codeGenerator = new(); + + + public void GenerateCode( + Language language, + StateMachine stateMachine, + string outputPath, + Mode generateMode, + bool generateStates, + bool generateContext, + bool generateInterface) + { + var path = outputPath; + var testPath = outputPath; + if (!outputPath.EndsWith('/')) + { + path += "/"; + testPath += "/"; + } + + switch (language) + { + case Language.Python3: + path += stateMachine.Name + ".py"; + testPath += "test_" + stateMachine.Name + ".py"; + break; + case Language.JavaScript: + path += stateMachine.Name + ".js"; + testPath += stateMachine.Name + ".test.js"; + break; + case Language.TypeScript: + path += stateMachine.Name + ".ts"; + testPath += stateMachine.Name + ".test.ts"; + break; + case Language.Kotlin: + path += "main/kotlin/fsm/" + stateMachine.Name.ToLower() + "/"; + testPath += "test/kotlin/fsm/" + stateMachine.Name.ToLower() + "/"; + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + Console.WriteLine($"Folder created: {path}"); + } + + if (!Directory.Exists(testPath)) + { + Directory.CreateDirectory(testPath); + Console.WriteLine($"Folder created: {testPath}"); + } + + path += stateMachine.Name + ".kt"; + testPath += "Test" + stateMachine.Name + ".kt"; + + break; + case Language.Java: + path += "main/java/fsm/" + stateMachine.Name.ToLower() + "/"; + testPath += "test/java/fsm/" + stateMachine.Name.ToLower() + "/"; + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + Console.WriteLine($"Folder created: {path}"); + } + + if (!Directory.Exists(testPath)) + { + Directory.CreateDirectory(testPath); + Console.WriteLine($"Folder created: {testPath}"); + } + + path += stateMachine.Name + ".java"; + testPath += "Test" + stateMachine.Name + ".java"; + + break; + case Language.CSharp: + path += "/Stater.StateMachine.Lib/fsm/" + stateMachine.Name.ToLower() + "/"; + testPath += "/Stater.StateMachine.Lib.Tests/fsm/" + stateMachine.Name.ToLower() + "/"; + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + Console.WriteLine($"Folder created: {path}"); + } + + if (!Directory.Exists(testPath)) + { + Directory.CreateDirectory(testPath); + Console.WriteLine($"Folder created: {testPath}"); + } + + path += stateMachine.Name + ".cs"; + testPath += "Test" + stateMachine.Name + ".cs"; + + break; + case Language.CPlusPlus: + path += "fsm/" + stateMachine.Name + "/"; + testPath += "tests/"; + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + Console.WriteLine($"Folder created: {path}"); + } + + if (!Directory.Exists(testPath)) + { + Directory.CreateDirectory(testPath); + Console.WriteLine($"Folder created: {testPath}"); + } + + path += stateMachine.Name + ".h"; + testPath += "test_" + stateMachine.Name + ".cpp"; + + break; + } + + var settings = new GenerationSettings( + language + , generateMode + , GenerateStates: generateStates + , GenerateContext: generateContext + , GenerateInterface: generateInterface + ); + + var newStateMachine = stateMachine with { Name = stateMachine.Name.Replace(" ", "_") }; + + using var sw = new StreamWriter(path); + var result = codeGenerator.Generate(newStateMachine, settings); + sw.WriteLine(result); + + + using var swTest = new StreamWriter(testPath); + var results = ScenarioFinder.FindScenarios(newStateMachine); + var resultTest = codeGenerator.GenerateTests(newStateMachine, settings, results); + swTest.WriteLine(resultTest); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/JsonLoader.cs b/src/Stater.CodeGeneration/JsonLoader.cs new file mode 100644 index 0000000..139ec5a --- /dev/null +++ b/src/Stater.CodeGeneration/JsonLoader.cs @@ -0,0 +1,52 @@ +using Newtonsoft.Json; +using Stater.Domain.Models; + +namespace Stater.CodeGeneration; + +public class JsonTransition(string name, string start, string end) +{ + public string Name { get; } = name; + public string Start { get; } = start; + public string End { get; } = end; +} + +public class JsonSchema +( + List states, + string startState, + List transitions +) +{ + public List States { get; } = states; + public string StartState { get; } = startState; + public List Transitions { get; } = transitions; +} + +public class JsonLoader +{ + public static StateMachine Load(string schema) + { + var schemaObject = JsonConvert.DeserializeObject(schema); + + var states = schemaObject.States.Select(x => + { + var state = new State() with { Name = x }; + if (x == schemaObject.StartState) + { + state = state with { Type = StateType.Start }; + } + + return state; + }).ToList(); + + var stateMachine = new StateMachine { States = states }; + + var transition = schemaObject.Transitions.Select(x => new Transition + { + Name = x.Name, Start = stateMachine.GetStateByName(x.Start)!.Guid, + End = stateMachine.GetStateByName(x.End)!.Guid + }).ToList(); + + return stateMachine with { Transitions = transition }; + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj index 93c9e55..a8126c3 100644 --- a/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj +++ b/src/Stater.CodeGeneration/Stater.CodeGeneration.csproj @@ -5,6 +5,7 @@ + diff --git a/src/Stater.Domain/Json/StateMachineJsonAdapter.cs b/src/Stater.Domain/Json/StateMachineJsonAdapter.cs index 0e6771d..3088ee5 100644 --- a/src/Stater.Domain/Json/StateMachineJsonAdapter.cs +++ b/src/Stater.Domain/Json/StateMachineJsonAdapter.cs @@ -13,9 +13,14 @@ public static class StateMachineJsonAdapter public static string ToJsonSchema(StateMachine stateMachine) { + var startState = stateMachine.StartState; + if (startState == null) + { + startState = stateMachine.States[0]; + } var jsonSchema = new JsonSchema( States: stateMachine.States.Select(el => el.Name).Distinct().Order().ToList(), - StartState: stateMachine.StartState!.Name, + StartState: startState.Name, Transitions: stateMachine.StateTransitions.Select( el => new JsonTransition(Name: el.Transition.Name, Start: el.StartState.Name, End: el.EndState.Name) ).ToList() diff --git a/src/Stater/Models/Editors/IEditorManager.cs b/src/Stater/Models/Editors/IEditorManager.cs index 7f0bb56..f60e7f7 100644 --- a/src/Stater/Models/Editors/IEditorManager.cs +++ b/src/Stater/Models/Editors/IEditorManager.cs @@ -9,7 +9,8 @@ public enum EditorTypeEnum StateMachine, State, Transition, - Variable + Variable, + CodeGeneration } public interface IEditorManager @@ -22,4 +23,5 @@ public interface IEditorManager void DoSelectState(State state); void DoSelectTransition(Transition transition); void DoSelectVariable(Variable variable); + void DoSelectCodeGeneration(); } \ No newline at end of file diff --git a/src/Stater/Models/Editors/impl/EditorManager.cs b/src/Stater/Models/Editors/impl/EditorManager.cs index c6114b7..21faa09 100644 --- a/src/Stater/Models/Editors/impl/EditorManager.cs +++ b/src/Stater/Models/Editors/impl/EditorManager.cs @@ -56,4 +56,9 @@ public void DoSelectVariable(Variable variable) _variableEditor.DoSelect(variable); _editorType.OnNext(EditorTypeEnum.Variable); } + + public void DoSelectCodeGeneration() + { + _editorType.OnNext(EditorTypeEnum.CodeGeneration); + } } \ No newline at end of file diff --git a/src/Stater/Plugin/JsonCodeImportPlugin.cs b/src/Stater/Plugin/JsonCodeImportPlugin.cs new file mode 100644 index 0000000..d2f3892 --- /dev/null +++ b/src/Stater/Plugin/JsonCodeImportPlugin.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using System.IO; +using Stater.CodeGeneration; + +namespace Stater.Plugin; + +public class JsonCodeImportPlugin : ButtonFilePlugin +{ + public override PluginOutput Start(PluginInput pluginInput, string path) + { + if (File.Exists(path)) + { + var content = File.ReadAllText(path); + var result = PluginOutput.From("OK"); + result.ChangedStateMachines.Add(JsonLoader.Load(content)); + return result; + } + + return PluginOutput.From("File not found"); + } + + public override string Name => "Import json code"; +} \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index c153cb9..2f8fdc8 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -45,6 +45,7 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor NewStateCommand = ReactiveCommand.Create(NewState); UndoCommand = ReactiveCommand.Create(Undo); RedoCommand = ReactiveCommand.Create(Redo); + OpenCodeGeneration = ReactiveCommand.Create(() => _editorManager.DoSelectCodeGeneration()); PluginButtinCommand = ReactiveCommand.Create(StartButtonFilePlugin); } @@ -56,7 +57,8 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor public List Plugins => new() { - new SLXPlugin() + new SLXPlugin(), + new JsonCodeImportPlugin() }; private StateMachine _stateMachine; @@ -87,6 +89,8 @@ public StateMachine? StateMachine public ICommand UndoCommand { get; } public ICommand RedoCommand { get; } + public ICommand OpenCodeGeneration { get; } + private void OpenProject(StreamReader sr) { diff --git a/src/Stater/ViewModels/Plugins/CodeGenerationViewModel.cs b/src/Stater/ViewModels/Plugins/CodeGenerationViewModel.cs new file mode 100644 index 0000000..c1a85f8 --- /dev/null +++ b/src/Stater/ViewModels/Plugins/CodeGenerationViewModel.cs @@ -0,0 +1,64 @@ +using System; +using System.Reactive; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Stater.CodeGeneration; +using Stater.CodeGeneration.Entity; +using Stater.Domain.Models; +using Stater.Models; + +namespace Stater.ViewModels.Plugins; + +public class CodeGenerationViewModel : ReactiveObject +{ + public CodeGenerationViewModel(IProjectManager projectManager) + { + projectManager + .StateMachine + .Subscribe(x => { StateMachine = x; }); + GenerateCommand = ReactiveCommand.Create(Generate); + } + + + [Reactive] public StateMachine? StateMachine { get; private set; } + + [Reactive] public int LanguageIndex { get; set; } + [Reactive] public int ModeIndex { get; set; } + [Reactive] public bool GenerateStates { get; set; } + [Reactive] public bool GenerateContext { get; set; } + [Reactive] public bool GenerateInterface { get; set; } + + private FileGenerator fileGenerator = new(); + + public ReactiveCommand GenerateCommand { get; } + + private void Generate(string outputPath) + { + if (StateMachine == null) return; + var language = LanguageIndex switch + { + 0 => Language.Java, + 1 => Language.Kotlin, + 2 => Language.JavaScript, + 3 => Language.TypeScript, + 4 => Language.Python3, + 5 => Language.CSharp, + _ => Language.CPlusPlus + }; + + var mode = ModeIndex switch + { + 0 => Mode.Clazz, + _ => Mode.Builder, + }; + fileGenerator.GenerateCode( + language, + StateMachine, + outputPath, + mode, + GenerateStates, + GenerateContext, + GenerateInterface + ); + } +} \ No newline at end of file diff --git a/src/Stater/Views/Editors/MainEditor.axaml b/src/Stater/Views/Editors/MainEditor.axaml index 0f22c18..d275986 100644 --- a/src/Stater/Views/Editors/MainEditor.axaml +++ b/src/Stater/Views/Editors/MainEditor.axaml @@ -4,6 +4,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:vm="using:Stater.ViewModels.Editors" xmlns:editors="using:Stater.Views.Editors" + xmlns:plugins="using:Stater.Views.Plugins" xmlns:converters="clr-namespace:Stater.Converters" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Stater.Views.Editors.MainEditor" @@ -29,5 +30,10 @@ IsVisible="{Binding EditorType, Converter={StaticResource EditorTypeToBoolConverter}, ConverterParameter='Variable'}"> + + + + \ No newline at end of file diff --git a/src/Stater/Views/MainWindow.axaml b/src/Stater/Views/MainWindow.axaml index ce9e380..82aaf67 100644 --- a/src/Stater/Views/MainWindow.axaml +++ b/src/Stater/Views/MainWindow.axaml @@ -48,6 +48,7 @@ + diff --git a/src/Stater/Views/Plugins/CodeGeneration.axaml b/src/Stater/Views/Plugins/CodeGeneration.axaml new file mode 100644 index 0000000..2c1efac --- /dev/null +++ b/src/Stater/Views/Plugins/CodeGeneration.axaml @@ -0,0 +1,32 @@ + + + + + Java + Kotlin + JavaScript + TypeScript + Python3 + C# + C++ + + + + + + Class + Builder + + Generate states + Generate context + Generate interface + + + \ No newline at end of file diff --git a/src/Stater/Views/Plugins/CodeGeneration.axaml.cs b/src/Stater/Views/Plugins/CodeGeneration.axaml.cs new file mode 100644 index 0000000..40bf565 --- /dev/null +++ b/src/Stater/Views/Plugins/CodeGeneration.axaml.cs @@ -0,0 +1,41 @@ +using System; +using Avalonia.Controls; +using Avalonia.Interactivity; +using Avalonia.Platform.Storage; +using Splat; +using Stater.Models; +using Stater.ViewModels.Plugins; +using Avalonia; +using Avalonia.VisualTree; + +namespace Stater.Views.Plugins; + +public partial class CodeGeneration : UserControl +{ + public CodeGeneration() + { + InitializeComponent(); + var projectManager = Locator.Current.GetService(); + DataContext = new CodeGenerationViewModel( + projectManager! + ); + } + + private async void Button_OnClick(object? sender, RoutedEventArgs e) + { + var topLevel = this.GetVisualRoot() as TopLevel; + var files = await topLevel.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + { + Title = "Open Folder", + AllowMultiple = false, + }); + + if (files.Count < 1) return; + + var context = (CodeGenerationViewModel)DataContext; + Console.WriteLine(files[0].Path.ToString()); + context?.GenerateCommand.Execute( + files[0].Path.ToString().Replace("file:/", "") + ).Subscribe(); + } +} \ No newline at end of file From 04f863b05d30dbbb30e748b4a80c544cab80dff6 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 14 Apr 2025 22:38:20 +0300 Subject: [PATCH 62/69] Remove not user --- Stater.sln.DotSettings.user | 19 +- ...rTests.BuilderContextGenerate.verified.txt | 29 -- ...derContextGenerateWithContext.verified.txt | 108 ------- ...pterDoorTests.BuilderGenerate.verified.txt | 13 - ....BuilderGenerateWithInterface.verified.txt | 92 ------ ...s.BuilderStateContextGenerate.verified.txt | 54 ---- ...ateContextGenerateWithContext.verified.txt | 133 --------- ...oorTests.BuilderStateGenerate.verified.txt | 38 --- ...derStateGenerateWithInterface.verified.txt | 117 -------- ...oorTests.ClazzContextGenerate.verified.txt | 65 ---- ...azzContextGenerateWithContext.verified.txt | 88 ------ ...dapterDoorTests.ClazzGenerate.verified.txt | 57 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 80 ----- ...sts.ClazzStateContextGenerate.verified.txt | 90 ------ ...ateContextGenerateWithContext.verified.txt | 113 ------- ...rDoorTests.ClazzStateGenerate.verified.txt | 82 ------ ...azzStateGenerateWithInterface.verified.txt | 105 ------- ...rTests.BuilderContextGenerate.verified.txt | 29 -- ...derContextGenerateWithContext.verified.txt | 108 ------- ...rateDoorTests.BuilderGenerate.verified.txt | 13 - ....BuilderGenerateWithInterface.verified.txt | 92 ------ ...s.BuilderStateContextGenerate.verified.txt | 54 ---- ...ateContextGenerateWithContext.verified.txt | 133 --------- ...oorTests.BuilderStateGenerate.verified.txt | 38 --- ...derStateGenerateWithInterface.verified.txt | 117 -------- ...oorTests.ClazzContextGenerate.verified.txt | 65 ---- ...azzContextGenerateWithContext.verified.txt | 88 ------ ...nerateDoorTests.ClazzGenerate.verified.txt | 57 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 80 ----- ...sts.ClazzStateContextGenerate.verified.txt | 90 ------ ...ateContextGenerateWithContext.verified.txt | 113 ------- ...eDoorTests.ClazzStateGenerate.verified.txt | 82 ------ ...azzStateGenerateWithInterface.verified.txt | 105 ------- ...s.BuilderTestsContextGenerate.verified.txt | 254 ---------------- ...stsContextGenerateWithContext.verified.txt | 259 ---------------- ...oorTests.BuilderTestsGenerate.verified.txt | 254 ---------------- ...derTestsGenerateWithInterface.verified.txt | 259 ---------------- ...lderTestsStateContextGenerate.verified.txt | 114 ------- ...ateContextGenerateWithContext.verified.txt | 119 -------- ...sts.BuilderTestsStateGenerate.verified.txt | 114 ------- ...stsStateGenerateWithInterface.verified.txt | 119 -------- ...sts.ClazzTestsContextGenerate.verified.txt | 114 ------- ...stsContextGenerateWithContext.verified.txt | 114 ------- ...sDoorTests.ClazzTestsGenerate.verified.txt | 114 ------- ...azzTestsGenerateWithInterface.verified.txt | 114 ------- ...lazzTestsStateContextGenerate.verified.txt | 114 ------- ...ateContextGenerateWithContext.verified.txt | 114 ------- ...Tests.ClazzTestsStateGenerate.verified.txt | 114 ------- ...stsStateGenerateWithInterface.verified.txt | 114 ------- ...rTests.BuilderContextGenerate.verified.txt | 30 -- ...derContextGenerateWithContext.verified.txt | 114 ------- ...pterDoorTests.BuilderGenerate.verified.txt | 15 - ....BuilderGenerateWithInterface.verified.txt | 99 ------- ...s.BuilderStateContextGenerate.verified.txt | 36 --- ...ateContextGenerateWithContext.verified.txt | 120 -------- ...oorTests.BuilderStateGenerate.verified.txt | 21 -- ...derStateGenerateWithInterface.verified.txt | 105 ------- ...oorTests.ClazzContextGenerate.verified.txt | 62 ---- ...azzContextGenerateWithContext.verified.txt | 91 ------ ...dapterDoorTests.ClazzGenerate.verified.txt | 55 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 84 ------ ...sts.ClazzStateContextGenerate.verified.txt | 68 ----- ...ateContextGenerateWithContext.verified.txt | 97 ------ ...rDoorTests.ClazzStateGenerate.verified.txt | 61 ---- ...azzStateGenerateWithInterface.verified.txt | 90 ------ ...rTests.BuilderContextGenerate.verified.txt | 30 -- ...derContextGenerateWithContext.verified.txt | 114 ------- ...rateDoorTests.BuilderGenerate.verified.txt | 15 - ....BuilderGenerateWithInterface.verified.txt | 99 ------- ...s.BuilderStateContextGenerate.verified.txt | 36 --- ...ateContextGenerateWithContext.verified.txt | 120 -------- ...oorTests.BuilderStateGenerate.verified.txt | 21 -- ...derStateGenerateWithInterface.verified.txt | 105 ------- ...oorTests.ClazzContextGenerate.verified.txt | 62 ---- ...azzContextGenerateWithContext.verified.txt | 91 ------ ...nerateDoorTests.ClazzGenerate.verified.txt | 55 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 84 ------ ...sts.ClazzStateContextGenerate.verified.txt | 68 ----- ...ateContextGenerateWithContext.verified.txt | 97 ------ ...eDoorTests.ClazzStateGenerate.verified.txt | 61 ---- ...azzStateGenerateWithInterface.verified.txt | 90 ------ ...s.BuilderTestsContextGenerate.verified.txt | 278 ------------------ ...stsContextGenerateWithContext.verified.txt | 278 ------------------ ...oorTests.BuilderTestsGenerate.verified.txt | 278 ------------------ ...derTestsGenerateWithInterface.verified.txt | 278 ------------------ ...lderTestsStateContextGenerate.verified.txt | 131 --------- ...ateContextGenerateWithContext.verified.txt | 131 --------- ...sts.BuilderTestsStateGenerate.verified.txt | 131 --------- ...stsStateGenerateWithInterface.verified.txt | 131 --------- ...sts.ClazzTestsContextGenerate.verified.txt | 131 --------- ...stsContextGenerateWithContext.verified.txt | 131 --------- ...sDoorTests.ClazzTestsGenerate.verified.txt | 131 --------- ...azzTestsGenerateWithInterface.verified.txt | 131 --------- ...lazzTestsStateContextGenerate.verified.txt | 131 --------- ...ateContextGenerateWithContext.verified.txt | 131 --------- ...Tests.ClazzTestsStateGenerate.verified.txt | 131 --------- ...stsStateGenerateWithInterface.verified.txt | 131 --------- ...rTests.BuilderContextGenerate.verified.txt | 31 -- ...derContextGenerateWithContext.verified.txt | 89 ------ ...pterDoorTests.BuilderGenerate.verified.txt | 16 - ....BuilderGenerateWithInterface.verified.txt | 74 ----- ...s.BuilderStateContextGenerate.verified.txt | 37 --- ...ateContextGenerateWithContext.verified.txt | 95 ------ ...oorTests.BuilderStateGenerate.verified.txt | 22 -- ...derStateGenerateWithInterface.verified.txt | 80 ----- ...oorTests.ClazzContextGenerate.verified.txt | 66 ----- ...azzContextGenerateWithContext.verified.txt | 90 ------ ...dapterDoorTests.ClazzGenerate.verified.txt | 59 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 83 ------ ...sts.ClazzStateContextGenerate.verified.txt | 72 ----- ...ateContextGenerateWithContext.verified.txt | 96 ------ ...rDoorTests.ClazzStateGenerate.verified.txt | 65 ---- ...azzStateGenerateWithInterface.verified.txt | 89 ------ ...rTests.BuilderContextGenerate.verified.txt | 31 -- ...derContextGenerateWithContext.verified.txt | 89 ------ ...rateDoorTests.BuilderGenerate.verified.txt | 16 - ....BuilderGenerateWithInterface.verified.txt | 74 ----- ...s.BuilderStateContextGenerate.verified.txt | 37 --- ...ateContextGenerateWithContext.verified.txt | 95 ------ ...oorTests.BuilderStateGenerate.verified.txt | 22 -- ...derStateGenerateWithInterface.verified.txt | 80 ----- ...oorTests.ClazzContextGenerate.verified.txt | 66 ----- ...azzContextGenerateWithContext.verified.txt | 90 ------ ...nerateDoorTests.ClazzGenerate.verified.txt | 59 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 83 ------ ...sts.ClazzStateContextGenerate.verified.txt | 72 ----- ...ateContextGenerateWithContext.verified.txt | 96 ------ ...eDoorTests.ClazzStateGenerate.verified.txt | 65 ---- ...azzStateGenerateWithInterface.verified.txt | 89 ------ ...s.BuilderTestsContextGenerate.verified.txt | 270 ----------------- ...stsContextGenerateWithContext.verified.txt | 270 ----------------- ...oorTests.BuilderTestsGenerate.verified.txt | 270 ----------------- ...derTestsGenerateWithInterface.verified.txt | 270 ----------------- ...lderTestsStateContextGenerate.verified.txt | 127 -------- ...ateContextGenerateWithContext.verified.txt | 127 -------- ...sts.BuilderTestsStateGenerate.verified.txt | 127 -------- ...stsStateGenerateWithInterface.verified.txt | 127 -------- ...sts.ClazzTestsContextGenerate.verified.txt | 127 -------- ...stsContextGenerateWithContext.verified.txt | 127 -------- ...eDoorTests.ClazzTestsGenerate.verified.txt | 127 -------- ...azzTestsGenerateWithInterface.verified.txt | 127 -------- ...lazzTestsStateContextGenerate.verified.txt | 127 -------- ...ateContextGenerateWithContext.verified.txt | 127 -------- ...Tests.ClazzTestsStateGenerate.verified.txt | 127 -------- ...stsStateGenerateWithInterface.verified.txt | 127 -------- ...rTests.BuilderContextGenerate.verified.txt | 29 -- ...derContextGenerateWithContext.verified.txt | 59 ---- ...pterDoorTests.BuilderGenerate.verified.txt | 19 -- ....BuilderGenerateWithInterface.verified.txt | 49 --- ...s.BuilderStateContextGenerate.verified.txt | 35 --- ...ateContextGenerateWithContext.verified.txt | 65 ---- ...oorTests.BuilderStateGenerate.verified.txt | 25 -- ...derStateGenerateWithInterface.verified.txt | 55 ---- ...oorTests.ClazzContextGenerate.verified.txt | 61 ---- ...azzContextGenerateWithContext.verified.txt | 85 ------ ...dapterDoorTests.ClazzGenerate.verified.txt | 51 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 75 ----- ...sts.ClazzStateContextGenerate.verified.txt | 67 ----- ...ateContextGenerateWithContext.verified.txt | 91 ------ ...rDoorTests.ClazzStateGenerate.verified.txt | 57 ---- ...azzStateGenerateWithInterface.verified.txt | 81 ----- ...rTests.BuilderContextGenerate.verified.txt | 29 -- ...derContextGenerateWithContext.verified.txt | 59 ---- ...rateDoorTests.BuilderGenerate.verified.txt | 19 -- ....BuilderGenerateWithInterface.verified.txt | 49 --- ...s.BuilderStateContextGenerate.verified.txt | 35 --- ...ateContextGenerateWithContext.verified.txt | 65 ---- ...oorTests.BuilderStateGenerate.verified.txt | 25 -- ...derStateGenerateWithInterface.verified.txt | 55 ---- ...oorTests.ClazzContextGenerate.verified.txt | 61 ---- ...azzContextGenerateWithContext.verified.txt | 85 ------ ...nerateDoorTests.ClazzGenerate.verified.txt | 51 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 75 ----- ...sts.ClazzStateContextGenerate.verified.txt | 67 ----- ...ateContextGenerateWithContext.verified.txt | 91 ------ ...eDoorTests.ClazzStateGenerate.verified.txt | 57 ---- ...azzStateGenerateWithInterface.verified.txt | 81 ----- ...s.BuilderTestsContextGenerate.verified.txt | 257 ---------------- ...stsContextGenerateWithContext.verified.txt | 257 ---------------- ...oorTests.BuilderTestsGenerate.verified.txt | 257 ---------------- ...derTestsGenerateWithInterface.verified.txt | 257 ---------------- ...lderTestsStateContextGenerate.verified.txt | 118 -------- ...ateContextGenerateWithContext.verified.txt | 118 -------- ...sts.BuilderTestsStateGenerate.verified.txt | 118 -------- ...stsStateGenerateWithInterface.verified.txt | 118 -------- ...sts.ClazzTestsContextGenerate.verified.txt | 117 -------- ...stsContextGenerateWithContext.verified.txt | 117 -------- ...sDoorTests.ClazzTestsGenerate.verified.txt | 117 -------- ...azzTestsGenerateWithInterface.verified.txt | 117 -------- ...lazzTestsStateContextGenerate.verified.txt | 118 -------- ...ateContextGenerateWithContext.verified.txt | 118 -------- ...Tests.ClazzTestsStateGenerate.verified.txt | 118 -------- ...stsStateGenerateWithInterface.verified.txt | 118 -------- ...rTests.BuilderContextGenerate.verified.txt | 28 -- ...derContextGenerateWithContext.verified.txt | 90 ------ ...pterDoorTests.BuilderGenerate.verified.txt | 13 - ....BuilderGenerateWithInterface.verified.txt | 75 ----- ...s.BuilderStateContextGenerate.verified.txt | 34 --- ...ateContextGenerateWithContext.verified.txt | 96 ------ ...oorTests.BuilderStateGenerate.verified.txt | 19 -- ...derStateGenerateWithInterface.verified.txt | 81 ----- ...oorTests.ClazzContextGenerate.verified.txt | 55 ---- ...azzContextGenerateWithContext.verified.txt | 62 ---- ...dapterDoorTests.ClazzGenerate.verified.txt | 40 --- ...ts.ClazzGenerateWithInterface.verified.txt | 47 --- ...sts.ClazzStateContextGenerate.verified.txt | 61 ---- ...ateContextGenerateWithContext.verified.txt | 68 ----- ...rDoorTests.ClazzStateGenerate.verified.txt | 46 --- ...azzStateGenerateWithInterface.verified.txt | 53 ---- ...rTests.BuilderContextGenerate.verified.txt | 28 -- ...derContextGenerateWithContext.verified.txt | 90 ------ ...rateDoorTests.BuilderGenerate.verified.txt | 13 - ....BuilderGenerateWithInterface.verified.txt | 75 ----- ...s.BuilderStateContextGenerate.verified.txt | 34 --- ...ateContextGenerateWithContext.verified.txt | 96 ------ ...oorTests.BuilderStateGenerate.verified.txt | 19 -- ...derStateGenerateWithInterface.verified.txt | 81 ----- ...oorTests.ClazzContextGenerate.verified.txt | 55 ---- ...azzContextGenerateWithContext.verified.txt | 62 ---- ...nerateDoorTests.ClazzGenerate.verified.txt | 40 --- ...ts.ClazzGenerateWithInterface.verified.txt | 47 --- ...sts.ClazzStateContextGenerate.verified.txt | 61 ---- ...ateContextGenerateWithContext.verified.txt | 68 ----- ...eDoorTests.ClazzStateGenerate.verified.txt | 46 --- ...azzStateGenerateWithInterface.verified.txt | 53 ---- ...s.BuilderTestsContextGenerate.verified.txt | 265 ----------------- ...stsContextGenerateWithContext.verified.txt | 265 ----------------- ...oorTests.BuilderTestsGenerate.verified.txt | 265 ----------------- ...derTestsGenerateWithInterface.verified.txt | 265 ----------------- ...lderTestsStateContextGenerate.verified.txt | 125 -------- ...ateContextGenerateWithContext.verified.txt | 125 -------- ...sts.BuilderTestsStateGenerate.verified.txt | 125 -------- ...stsStateGenerateWithInterface.verified.txt | 125 -------- ...sts.ClazzTestsContextGenerate.verified.txt | 125 -------- ...stsContextGenerateWithContext.verified.txt | 125 -------- ...sDoorTests.ClazzTestsGenerate.verified.txt | 125 -------- ...azzTestsGenerateWithInterface.verified.txt | 125 -------- ...lazzTestsStateContextGenerate.verified.txt | 125 -------- ...ateContextGenerateWithContext.verified.txt | 125 -------- ...Tests.ClazzTestsStateGenerate.verified.txt | 125 -------- ...stsStateGenerateWithInterface.verified.txt | 125 -------- ...rTests.BuilderContextGenerate.verified.txt | 30 -- ...derContextGenerateWithContext.verified.txt | 57 ---- ...pterDoorTests.BuilderGenerate.verified.txt | 23 -- ....BuilderGenerateWithInterface.verified.txt | 50 ---- ...s.BuilderStateContextGenerate.verified.txt | 37 --- ...ateContextGenerateWithContext.verified.txt | 64 ---- ...oorTests.BuilderStateGenerate.verified.txt | 30 -- ...derStateGenerateWithInterface.verified.txt | 57 ---- ...oorTests.ClazzContextGenerate.verified.txt | 58 ---- ...azzContextGenerateWithContext.verified.txt | 76 ----- ...dapterDoorTests.ClazzGenerate.verified.txt | 51 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 69 ----- ...sts.ClazzStateContextGenerate.verified.txt | 65 ---- ...ateContextGenerateWithContext.verified.txt | 83 ------ ...rDoorTests.ClazzStateGenerate.verified.txt | 58 ---- ...azzStateGenerateWithInterface.verified.txt | 76 ----- ...rTests.BuilderContextGenerate.verified.txt | 30 -- ...derContextGenerateWithContext.verified.txt | 57 ---- ...rateDoorTests.BuilderGenerate.verified.txt | 23 -- ....BuilderGenerateWithInterface.verified.txt | 50 ---- ...s.BuilderStateContextGenerate.verified.txt | 37 --- ...ateContextGenerateWithContext.verified.txt | 64 ---- ...oorTests.BuilderStateGenerate.verified.txt | 30 -- ...derStateGenerateWithInterface.verified.txt | 57 ---- ...oorTests.ClazzContextGenerate.verified.txt | 58 ---- ...azzContextGenerateWithContext.verified.txt | 76 ----- ...nerateDoorTests.ClazzGenerate.verified.txt | 51 ---- ...ts.ClazzGenerateWithInterface.verified.txt | 69 ----- ...sts.ClazzStateContextGenerate.verified.txt | 65 ---- ...ateContextGenerateWithContext.verified.txt | 83 ------ ...eDoorTests.ClazzStateGenerate.verified.txt | 58 ---- ...azzStateGenerateWithInterface.verified.txt | 76 ----- ...s.BuilderTestsContextGenerate.verified.txt | 251 ---------------- ...stsContextGenerateWithContext.verified.txt | 251 ---------------- ...oorTests.BuilderTestsGenerate.verified.txt | 251 ---------------- ...derTestsGenerateWithInterface.verified.txt | 251 ---------------- ...lderTestsStateContextGenerate.verified.txt | 113 ------- ...ateContextGenerateWithContext.verified.txt | 113 ------- ...sts.BuilderTestsStateGenerate.verified.txt | 113 ------- ...stsStateGenerateWithInterface.verified.txt | 113 ------- ...sts.ClazzTestsContextGenerate.verified.txt | 112 ------- ...stsContextGenerateWithContext.verified.txt | 112 ------- ...sDoorTests.ClazzTestsGenerate.verified.txt | 112 ------- ...azzTestsGenerateWithInterface.verified.txt | 112 ------- ...lazzTestsStateContextGenerate.verified.txt | 113 ------- ...ateContextGenerateWithContext.verified.txt | 113 ------- ...Tests.ClazzTestsStateGenerate.verified.txt | 113 ------- ...stsStateGenerateWithInterface.verified.txt | 113 ------- ...rTests.BuilderContextGenerate.verified.txt | 37 --- ...derContextGenerateWithContext.verified.txt | 70 ----- ...pterDoorTests.BuilderGenerate.verified.txt | 12 - ....BuilderGenerateWithInterface.verified.txt | 45 --- ...s.BuilderStateContextGenerate.verified.txt | 43 --- ...ateContextGenerateWithContext.verified.txt | 76 ----- ...oorTests.BuilderStateGenerate.verified.txt | 18 -- ...derStateGenerateWithInterface.verified.txt | 51 ---- ...oorTests.ClazzContextGenerate.verified.txt | 69 ----- ...azzContextGenerateWithContext.verified.txt | 94 ------ ...dapterDoorTests.ClazzGenerate.verified.txt | 44 --- ...ts.ClazzGenerateWithInterface.verified.txt | 69 ----- ...sts.ClazzStateContextGenerate.verified.txt | 75 ----- ...ateContextGenerateWithContext.verified.txt | 100 ------- ...rDoorTests.ClazzStateGenerate.verified.txt | 50 ---- ...azzStateGenerateWithInterface.verified.txt | 75 ----- ...rTests.BuilderContextGenerate.verified.txt | 37 --- ...derContextGenerateWithContext.verified.txt | 70 ----- ...rateDoorTests.BuilderGenerate.verified.txt | 12 - ....BuilderGenerateWithInterface.verified.txt | 45 --- ...s.BuilderStateContextGenerate.verified.txt | 43 --- ...ateContextGenerateWithContext.verified.txt | 76 ----- ...oorTests.BuilderStateGenerate.verified.txt | 18 -- ...derStateGenerateWithInterface.verified.txt | 51 ---- ...oorTests.ClazzContextGenerate.verified.txt | 69 ----- ...azzContextGenerateWithContext.verified.txt | 94 ------ ...nerateDoorTests.ClazzGenerate.verified.txt | 44 --- ...ts.ClazzGenerateWithInterface.verified.txt | 69 ----- ...sts.ClazzStateContextGenerate.verified.txt | 75 ----- ...ateContextGenerateWithContext.verified.txt | 100 ------- ...eDoorTests.ClazzStateGenerate.verified.txt | 50 ---- ...azzStateGenerateWithInterface.verified.txt | 75 ----- ...s.BuilderTestsContextGenerate.verified.txt | 257 ---------------- ...stsContextGenerateWithContext.verified.txt | 257 ---------------- ...oorTests.BuilderTestsGenerate.verified.txt | 257 ---------------- ...derTestsGenerateWithInterface.verified.txt | 257 ---------------- ...lderTestsStateContextGenerate.verified.txt | 118 -------- ...ateContextGenerateWithContext.verified.txt | 118 -------- ...sts.BuilderTestsStateGenerate.verified.txt | 118 -------- ...stsStateGenerateWithInterface.verified.txt | 118 -------- ...sts.ClazzTestsContextGenerate.verified.txt | 117 -------- ...stsContextGenerateWithContext.verified.txt | 117 -------- ...sDoorTests.ClazzTestsGenerate.verified.txt | 117 -------- ...azzTestsGenerateWithInterface.verified.txt | 117 -------- ...lazzTestsStateContextGenerate.verified.txt | 118 -------- ...ateContextGenerateWithContext.verified.txt | 118 -------- ...Tests.ClazzTestsStateGenerate.verified.txt | 118 -------- ...stsStateGenerateWithInterface.verified.txt | 118 -------- 337 files changed, 18 insertions(+), 31609 deletions(-) delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt delete mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt diff --git a/Stater.sln.DotSettings.user b/Stater.sln.DotSettings.user index 30ab91a..72a8a61 100644 --- a/Stater.sln.DotSettings.user +++ b/Stater.sln.DotSettings.user @@ -5,7 +5,7 @@ False SOLUTION - <SessionState ContinuousTestingMode="0" IsActive="True" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <SessionState ContinuousTestingMode="0" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <Or> <TestAncestor> <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> @@ -17,6 +17,23 @@ <ProjectFile>D1E2AF9B-55A2-4198-8797-633ABA37AA81/d:Json/f:StateMachineJsonAdapterTests.cs</ProjectFile> <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> </Or> +</SessionState> + <SessionState ContinuousTestingMode="0" IsActive="True" Name="Session" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <And> + <Namespace>Stater.CodeGeneration.Tests.LanguageAdapter</Namespace> + <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> + <Or> + <TestAncestor> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Python.PythonAdapterDoorTests</TestId> + <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.ScenarioFinderTests.ClazzGenerate</TestId> + <TestId>xUnit::D1E2AF9B-55A2-4198-8797-633ABA37AA81::net8.0::Stater.Domain.Tests.Json.StateMachineJsonAdapterTests.TestToJsonSchema</TestId> + <TestId>xUnit::D1E2AF9B-55A2-4198-8797-633ABA37AA81::net8.0::Stater.Domain.Tests.Json.StateMachineJsonAdapterTests.TestFromJsonSchema</TestId> + </TestAncestor> + <ProjectFile>D1E2AF9B-55A2-4198-8797-633ABA37AA81/d:Json/f:StateMachineJsonAdapterTests.cs</ProjectFile> + <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> + </Or> + </And> </SessionState> True True diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index ff105a5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state("OPEN") - .set_context(new Door_context()) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) - .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) - .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index 2a3fab2..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,108 +0,0 @@ -#pragma once - -#include - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class types_Door_state_machine : public stater_state_machine { -public: - types_Door_state_machine( - const std::vector> &transitions, - Door_context *context, - const std::string &start_state, - const std::unordered_set &states, - const std::unordered_map>> &transition_middlewares, - const std::vector> &transition_all_middlewares, - const std::unordered_map>> &transition_callbacks, - const std::vector> &transition_all_callbacks, - const std::unordered_map>> &state_callbacks, - const std::vector> &state_all_callbacks, - const std::shared_ptr<::context_json_adapter > &context_json_adapter - ) : stater_state_machine( - transitions, - context, - start_state, - states, - transition_middlewares, - transition_all_middlewares, - transition_callbacks, - transition_all_callbacks, - state_callbacks, - state_all_callbacks, - context_json_adapter - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; - -inline state_machine_factory typed_Door_factory = []( - const std::vector > &transitions, - Door_context *context, - std::string start_state, - const std::unordered_set &states, - const std::unordered_map > > & - transition_middleware, - const std::vector > & - transition_all_middlewares, - const std::unordered_map > > & - transition_callbacks, - const std::vector > &transition_all_callbacks, - const std::unordered_map<::std::string, std::vector > > &state_callbacks, - const std::vector > &state_all_callbacks, - const std::shared_ptr >& context_json_adapter_) -> - std::unique_ptr { - return std::make_unique( - transitions, context, start_state, states, - transition_middleware, transition_all_middlewares, - transition_callbacks, transition_all_callbacks, - state_callbacks, state_all_callbacks, context_json_adapter_); -}; - - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state("OPEN") - .set_context(new Door_context()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) - .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) - .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index e040396..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state("OPEN") - .set_context(new empty_context()) - .add_transition("preOpen", "CLOSE", "AJAR") - .add_transition("preClose", "OPEN", "AJAR") - .add_transition("open", "AJAR", "OPEN") - .add_transition("close", "AJAR", "CLOSE") - .add_transition("ajarPlus", "AJAR", "AJAR") - .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index a83f586..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,92 +0,0 @@ -#pragma once - -#include - -class types_Door_state_machine : public stater_state_machine { -public: - types_Door_state_machine( - const std::vector> &transitions, - empty_context *context, - const std::string &start_state, - const std::unordered_set &states, - const std::unordered_map>> &transition_middlewares, - const std::vector> &transition_all_middlewares, - const std::unordered_map>> &transition_callbacks, - const std::vector> &transition_all_callbacks, - const std::unordered_map>> &state_callbacks, - const std::vector> &state_all_callbacks, - const std::shared_ptr<::context_json_adapter > &context_json_adapter - ) : stater_state_machine( - transitions, - context, - start_state, - states, - transition_middlewares, - transition_all_middlewares, - transition_callbacks, - transition_all_callbacks, - state_callbacks, - state_all_callbacks, - context_json_adapter - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; - -inline state_machine_factory typed_Door_factory = []( - const std::vector > &transitions, - empty_context *context, - std::string start_state, - const std::unordered_set &states, - const std::unordered_map > > & - transition_middleware, - const std::vector > & - transition_all_middlewares, - const std::unordered_map > > & - transition_callbacks, - const std::vector > &transition_all_callbacks, - const std::unordered_map<::std::string, std::vector > > &state_callbacks, - const std::vector > &state_all_callbacks, - const std::shared_ptr >& context_json_adapter_) -> - std::unique_ptr { - return std::make_unique( - transitions, context, start_state, states, - transition_middleware, transition_all_middlewares, - transition_callbacks, transition_all_callbacks, - state_callbacks, state_all_callbacks, context_json_adapter_); -}; - - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state("OPEN") - .set_context(new empty_context()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .add_transition("preClose", "OPEN", "AJAR") - .add_transition("open", "AJAR", "OPEN") - .add_transition("close", "AJAR", "CLOSE") - .add_transition("ajarPlus", "AJAR", "AJAR") - .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 1c67b15..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,54 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state(e_Door_states::OPEN) - .set_context(new Door_context()) - .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) - .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) - .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) - .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) - .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) - .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) - .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) - .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) - .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) - .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) - .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) - .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) - .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) - .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 76428e9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,133 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class types_Door_state_machine : public stater_state_machine { -public: - types_Door_state_machine( - const std::vector> &transitions, - Door_context *context, - const e_Door_states &start_state, - const std::unordered_set &states, - const std::unordered_map>> &transition_middlewares, - const std::vector> &transition_all_middlewares, - const std::unordered_map>> &transition_callbacks, - const std::vector> &transition_all_callbacks, - const std::unordered_map>> &state_callbacks, - const std::vector> &state_all_callbacks, - const std::shared_ptr<::context_json_adapter > &context_json_adapter - ) : stater_state_machine( - transitions, - context, - start_state, - states, - transition_middlewares, - transition_all_middlewares, - transition_callbacks, - transition_all_callbacks, - state_callbacks, - state_all_callbacks, - context_json_adapter - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; - -inline state_machine_factory typed_Door_factory = []( - const std::vector > &transitions, - Door_context *context, - e_Door_states start_state, - const std::unordered_set &states, - const std::unordered_map > > & - transition_middleware, - const std::vector > & - transition_all_middlewares, - const std::unordered_map > > & - transition_callbacks, - const std::vector > &transition_all_callbacks, - const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, - const std::vector > &state_all_callbacks, - const std::shared_ptr >& context_json_adapter_) -> - std::unique_ptr { - return std::make_unique( - transitions, context, start_state, states, - transition_middleware, transition_all_middlewares, - transition_callbacks, transition_all_callbacks, - state_callbacks, state_all_callbacks, context_json_adapter_); -}; - - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state(e_Door_states::OPEN) - .set_context(new Door_context()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) - .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) - .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) - .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) - .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) - .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) - .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) - .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) - .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) - .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) - .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) - .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) - .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) - .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index c12c426..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state(e_Door_states::OPEN) - .set_context(new empty_context()) - .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) - .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) - .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) - .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) - .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) - .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index d6398dd..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class types_Door_state_machine : public stater_state_machine { -public: - types_Door_state_machine( - const std::vector> &transitions, - empty_context *context, - const e_Door_states &start_state, - const std::unordered_set &states, - const std::unordered_map>> &transition_middlewares, - const std::vector> &transition_all_middlewares, - const std::unordered_map>> &transition_callbacks, - const std::vector> &transition_all_callbacks, - const std::unordered_map>> &state_callbacks, - const std::vector> &state_all_callbacks, - const std::shared_ptr<::context_json_adapter > &context_json_adapter - ) : stater_state_machine( - transitions, - context, - start_state, - states, - transition_middlewares, - transition_all_middlewares, - transition_callbacks, - transition_all_callbacks, - state_callbacks, - state_all_callbacks, - context_json_adapter - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; - -inline state_machine_factory typed_Door_factory = []( - const std::vector > &transitions, - empty_context *context, - e_Door_states start_state, - const std::unordered_set &states, - const std::unordered_map > > & - transition_middleware, - const std::vector > & - transition_all_middlewares, - const std::unordered_map > > & - transition_callbacks, - const std::vector > &transition_all_callbacks, - const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, - const std::vector > &state_all_callbacks, - const std::shared_ptr >& context_json_adapter_) -> - std::unique_ptr { - return std::make_unique( - transitions, context, start_state, states, - transition_middleware, transition_all_middlewares, - transition_callbacks, transition_all_callbacks, - state_callbacks, state_all_callbacks, context_json_adapter_); -}; - - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state(e_Door_states::OPEN) - .set_context(new empty_context()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) - .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) - .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) - .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) - .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) - .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index fed2f33..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,65 +0,0 @@ -#pragma once - -#include - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::std::string, Door_context>( - "preOpen", - "CLOSE", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 1; } - ), - transition_t<::std::string, Door_context>( - "preClose", - "OPEN", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 99; } - ), - transition_t<::std::string, Door_context>( - "open", - "AJAR", - "OPEN", - [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 100; } - ), - transition_t<::std::string, Door_context>( - "close", - "AJAR", - "CLOSE", - [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 0; } - ), - transition_t<::std::string, Door_context>( - "ajarPlus", - "AJAR", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } - ), - transition_t<::std::string, Door_context>( - "ajarMinus", - "AJAR", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } - ) - }, - new Door_context(), - "OPEN" - ) { - } - -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index f1aa929..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,88 +0,0 @@ -#pragma once - -#include - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::std::string, Door_context>( - "preOpen", - "CLOSE", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 1; } - ), - transition_t<::std::string, Door_context>( - "preClose", - "OPEN", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 99; } - ), - transition_t<::std::string, Door_context>( - "open", - "AJAR", - "OPEN", - [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 100; } - ), - transition_t<::std::string, Door_context>( - "close", - "AJAR", - "CLOSE", - [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 0; } - ), - transition_t<::std::string, Door_context>( - "ajarPlus", - "AJAR", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } - ), - transition_t<::std::string, Door_context>( - "ajarMinus", - "AJAR", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } - ) - }, - new Door_context(), - "OPEN" - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 324f61b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once - -#include - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::std::string, empty_context>( - "preOpen", - "CLOSE", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "preClose", - "OPEN", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "open", - "AJAR", - "OPEN", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "close", - "AJAR", - "CLOSE", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "ajarPlus", - "AJAR", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "ajarMinus", - "AJAR", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ) - }, - new empty_context(), - "OPEN" - ) { - } - -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 2df84f0..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - -#include - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::std::string, empty_context>( - "preOpen", - "CLOSE", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "preClose", - "OPEN", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "open", - "AJAR", - "OPEN", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "close", - "AJAR", - "CLOSE", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "ajarPlus", - "AJAR", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "ajarMinus", - "AJAR", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ) - }, - new empty_context(), - "OPEN" - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index 93712ec..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,90 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::e_Door_states, Door_context>( - "preOpen", - e_Door_states::CLOSE, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 1; } - ), - transition_t<::e_Door_states, Door_context>( - "preClose", - e_Door_states::OPEN, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 99; } - ), - transition_t<::e_Door_states, Door_context>( - "open", - e_Door_states::AJAR, - e_Door_states::OPEN, - [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 100; } - ), - transition_t<::e_Door_states, Door_context>( - "close", - e_Door_states::AJAR, - e_Door_states::CLOSE, - [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 0; } - ), - transition_t<::e_Door_states, Door_context>( - "ajarPlus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } - ), - transition_t<::e_Door_states, Door_context>( - "ajarMinus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } - ) - }, - new Door_context(), - e_Door_states::OPEN - ) { - } - -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 065cb21..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::e_Door_states, Door_context>( - "preOpen", - e_Door_states::CLOSE, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 1; } - ), - transition_t<::e_Door_states, Door_context>( - "preClose", - e_Door_states::OPEN, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 99; } - ), - transition_t<::e_Door_states, Door_context>( - "open", - e_Door_states::AJAR, - e_Door_states::OPEN, - [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 100; } - ), - transition_t<::e_Door_states, Door_context>( - "close", - e_Door_states::AJAR, - e_Door_states::CLOSE, - [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 0; } - ), - transition_t<::e_Door_states, Door_context>( - "ajarPlus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } - ), - transition_t<::e_Door_states, Door_context>( - "ajarMinus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } - ) - }, - new Door_context(), - e_Door_states::OPEN - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index b2a15f6..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,82 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::e_Door_states, empty_context>( - "preOpen", - e_Door_states::CLOSE, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "preClose", - e_Door_states::OPEN, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "open", - e_Door_states::AJAR, - e_Door_states::OPEN, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "close", - e_Door_states::AJAR, - e_Door_states::CLOSE, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "ajarPlus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "ajarMinus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ) - }, - new empty_context(), - e_Door_states::OPEN - ) { - } - -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 322b8d0..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,105 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::e_Door_states, empty_context>( - "preOpen", - e_Door_states::CLOSE, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "preClose", - e_Door_states::OPEN, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "open", - e_Door_states::AJAR, - e_Door_states::OPEN, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "close", - e_Door_states::AJAR, - e_Door_states::CLOSE, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "ajarPlus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "ajarMinus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ) - }, - new empty_context(), - e_Door_states::OPEN - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index ff105a5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state("OPEN") - .set_context(new Door_context()) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) - .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) - .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index 2a3fab2..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,108 +0,0 @@ -#pragma once - -#include - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class types_Door_state_machine : public stater_state_machine { -public: - types_Door_state_machine( - const std::vector> &transitions, - Door_context *context, - const std::string &start_state, - const std::unordered_set &states, - const std::unordered_map>> &transition_middlewares, - const std::vector> &transition_all_middlewares, - const std::unordered_map>> &transition_callbacks, - const std::vector> &transition_all_callbacks, - const std::unordered_map>> &state_callbacks, - const std::vector> &state_all_callbacks, - const std::shared_ptr<::context_json_adapter > &context_json_adapter - ) : stater_state_machine( - transitions, - context, - start_state, - states, - transition_middlewares, - transition_all_middlewares, - transition_callbacks, - transition_all_callbacks, - state_callbacks, - state_all_callbacks, - context_json_adapter - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; - -inline state_machine_factory typed_Door_factory = []( - const std::vector > &transitions, - Door_context *context, - std::string start_state, - const std::unordered_set &states, - const std::unordered_map > > & - transition_middleware, - const std::vector > & - transition_all_middlewares, - const std::unordered_map > > & - transition_callbacks, - const std::vector > &transition_all_callbacks, - const std::unordered_map<::std::string, std::vector > > &state_callbacks, - const std::vector > &state_all_callbacks, - const std::shared_ptr >& context_json_adapter_) -> - std::unique_ptr { - return std::make_unique( - transitions, context, start_state, states, - transition_middleware, transition_all_middlewares, - transition_callbacks, transition_all_callbacks, - state_callbacks, state_all_callbacks, context_json_adapter_); -}; - - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state("OPEN") - .set_context(new Door_context()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) - .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) - .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index e040396..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state("OPEN") - .set_context(new empty_context()) - .add_transition("preOpen", "CLOSE", "AJAR") - .add_transition("preClose", "OPEN", "AJAR") - .add_transition("open", "AJAR", "OPEN") - .add_transition("close", "AJAR", "CLOSE") - .add_transition("ajarPlus", "AJAR", "AJAR") - .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index a83f586..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,92 +0,0 @@ -#pragma once - -#include - -class types_Door_state_machine : public stater_state_machine { -public: - types_Door_state_machine( - const std::vector> &transitions, - empty_context *context, - const std::string &start_state, - const std::unordered_set &states, - const std::unordered_map>> &transition_middlewares, - const std::vector> &transition_all_middlewares, - const std::unordered_map>> &transition_callbacks, - const std::vector> &transition_all_callbacks, - const std::unordered_map>> &state_callbacks, - const std::vector> &state_all_callbacks, - const std::shared_ptr<::context_json_adapter > &context_json_adapter - ) : stater_state_machine( - transitions, - context, - start_state, - states, - transition_middlewares, - transition_all_middlewares, - transition_callbacks, - transition_all_callbacks, - state_callbacks, - state_all_callbacks, - context_json_adapter - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; - -inline state_machine_factory typed_Door_factory = []( - const std::vector > &transitions, - empty_context *context, - std::string start_state, - const std::unordered_set &states, - const std::unordered_map > > & - transition_middleware, - const std::vector > & - transition_all_middlewares, - const std::unordered_map > > & - transition_callbacks, - const std::vector > &transition_all_callbacks, - const std::unordered_map<::std::string, std::vector > > &state_callbacks, - const std::vector > &state_all_callbacks, - const std::shared_ptr >& context_json_adapter_) -> - std::unique_ptr { - return std::make_unique( - transitions, context, start_state, states, - transition_middleware, transition_all_middlewares, - transition_callbacks, transition_all_callbacks, - state_callbacks, state_all_callbacks, context_json_adapter_); -}; - - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state("OPEN") - .set_context(new empty_context()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .add_transition("preClose", "OPEN", "AJAR") - .add_transition("open", "AJAR", "OPEN") - .add_transition("close", "AJAR", "CLOSE") - .add_transition("ajarPlus", "AJAR", "AJAR") - .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 1c67b15..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,54 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state(e_Door_states::OPEN) - .set_context(new Door_context()) - .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) - .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) - .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) - .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) - .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) - .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) - .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) - .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) - .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) - .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) - .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) - .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) - .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) - .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 76428e9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,133 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class types_Door_state_machine : public stater_state_machine { -public: - types_Door_state_machine( - const std::vector> &transitions, - Door_context *context, - const e_Door_states &start_state, - const std::unordered_set &states, - const std::unordered_map>> &transition_middlewares, - const std::vector> &transition_all_middlewares, - const std::unordered_map>> &transition_callbacks, - const std::vector> &transition_all_callbacks, - const std::unordered_map>> &state_callbacks, - const std::vector> &state_all_callbacks, - const std::shared_ptr<::context_json_adapter > &context_json_adapter - ) : stater_state_machine( - transitions, - context, - start_state, - states, - transition_middlewares, - transition_all_middlewares, - transition_callbacks, - transition_all_callbacks, - state_callbacks, - state_all_callbacks, - context_json_adapter - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; - -inline state_machine_factory typed_Door_factory = []( - const std::vector > &transitions, - Door_context *context, - e_Door_states start_state, - const std::unordered_set &states, - const std::unordered_map > > & - transition_middleware, - const std::vector > & - transition_all_middlewares, - const std::unordered_map > > & - transition_callbacks, - const std::vector > &transition_all_callbacks, - const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, - const std::vector > &state_all_callbacks, - const std::shared_ptr >& context_json_adapter_) -> - std::unique_ptr { - return std::make_unique( - transitions, context, start_state, states, - transition_middleware, transition_all_middlewares, - transition_callbacks, transition_all_callbacks, - state_callbacks, state_all_callbacks, context_json_adapter_); -}; - - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state(e_Door_states::OPEN) - .set_context(new Door_context()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) - .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) - .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) - .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) - .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) - .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) - .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) - .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) - .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) - .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) - .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) - .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) - .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) - .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index c12c426..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state(e_Door_states::OPEN) - .set_context(new empty_context()) - .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) - .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) - .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) - .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) - .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) - .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index d6398dd..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class types_Door_state_machine : public stater_state_machine { -public: - types_Door_state_machine( - const std::vector> &transitions, - empty_context *context, - const e_Door_states &start_state, - const std::unordered_set &states, - const std::unordered_map>> &transition_middlewares, - const std::vector> &transition_all_middlewares, - const std::unordered_map>> &transition_callbacks, - const std::vector> &transition_all_callbacks, - const std::unordered_map>> &state_callbacks, - const std::vector> &state_all_callbacks, - const std::shared_ptr<::context_json_adapter > &context_json_adapter - ) : stater_state_machine( - transitions, - context, - start_state, - states, - transition_middlewares, - transition_all_middlewares, - transition_callbacks, - transition_all_callbacks, - state_callbacks, - state_all_callbacks, - context_json_adapter - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; - -inline state_machine_factory typed_Door_factory = []( - const std::vector > &transitions, - empty_context *context, - e_Door_states start_state, - const std::unordered_set &states, - const std::unordered_map > > & - transition_middleware, - const std::vector > & - transition_all_middlewares, - const std::unordered_map > > & - transition_callbacks, - const std::vector > &transition_all_callbacks, - const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, - const std::vector > &state_all_callbacks, - const std::shared_ptr >& context_json_adapter_) -> - std::unique_ptr { - return std::make_unique( - transitions, context, start_state, states, - transition_middleware, transition_all_middlewares, - transition_callbacks, transition_all_callbacks, - state_callbacks, state_all_callbacks, context_json_adapter_); -}; - - -inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() - .set_start_state(e_Door_states::OPEN) - .set_context(new empty_context()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) - .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) - .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) - .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) - .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) - .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index fed2f33..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,65 +0,0 @@ -#pragma once - -#include - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::std::string, Door_context>( - "preOpen", - "CLOSE", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 1; } - ), - transition_t<::std::string, Door_context>( - "preClose", - "OPEN", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 99; } - ), - transition_t<::std::string, Door_context>( - "open", - "AJAR", - "OPEN", - [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 100; } - ), - transition_t<::std::string, Door_context>( - "close", - "AJAR", - "CLOSE", - [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 0; } - ), - transition_t<::std::string, Door_context>( - "ajarPlus", - "AJAR", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } - ), - transition_t<::std::string, Door_context>( - "ajarMinus", - "AJAR", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } - ) - }, - new Door_context(), - "OPEN" - ) { - } - -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index f1aa929..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,88 +0,0 @@ -#pragma once - -#include - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::std::string, Door_context>( - "preOpen", - "CLOSE", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 1; } - ), - transition_t<::std::string, Door_context>( - "preClose", - "OPEN", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 99; } - ), - transition_t<::std::string, Door_context>( - "open", - "AJAR", - "OPEN", - [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 100; } - ), - transition_t<::std::string, Door_context>( - "close", - "AJAR", - "CLOSE", - [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 0; } - ), - transition_t<::std::string, Door_context>( - "ajarPlus", - "AJAR", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } - ), - transition_t<::std::string, Door_context>( - "ajarMinus", - "AJAR", - "AJAR", - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } - ) - }, - new Door_context(), - "OPEN" - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 324f61b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once - -#include - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::std::string, empty_context>( - "preOpen", - "CLOSE", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "preClose", - "OPEN", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "open", - "AJAR", - "OPEN", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "close", - "AJAR", - "CLOSE", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "ajarPlus", - "AJAR", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "ajarMinus", - "AJAR", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ) - }, - new empty_context(), - "OPEN" - ) { - } - -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 2df84f0..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - -#include - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::std::string, empty_context>( - "preOpen", - "CLOSE", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "preClose", - "OPEN", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "open", - "AJAR", - "OPEN", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "close", - "AJAR", - "CLOSE", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "ajarPlus", - "AJAR", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::std::string, empty_context>( - "ajarMinus", - "AJAR", - "AJAR", - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ) - }, - new empty_context(), - "OPEN" - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index 93712ec..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,90 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::e_Door_states, Door_context>( - "preOpen", - e_Door_states::CLOSE, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 1; } - ), - transition_t<::e_Door_states, Door_context>( - "preClose", - e_Door_states::OPEN, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 99; } - ), - transition_t<::e_Door_states, Door_context>( - "open", - e_Door_states::AJAR, - e_Door_states::OPEN, - [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 100; } - ), - transition_t<::e_Door_states, Door_context>( - "close", - e_Door_states::AJAR, - e_Door_states::CLOSE, - [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 0; } - ), - transition_t<::e_Door_states, Door_context>( - "ajarPlus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } - ), - transition_t<::e_Door_states, Door_context>( - "ajarMinus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } - ) - }, - new Door_context(), - e_Door_states::OPEN - ) { - } - -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 065cb21..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_context final : context { -public: - int degreeOfOpening = 0; - bool closeVariable = true; - std::string doorName = "asd"; - float floatVariable = 0f; -}; - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::e_Door_states, Door_context>( - "preOpen", - e_Door_states::CLOSE, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 1; } - ), - transition_t<::e_Door_states, Door_context>( - "preClose", - e_Door_states::OPEN, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 99; } - ), - transition_t<::e_Door_states, Door_context>( - "open", - e_Door_states::AJAR, - e_Door_states::OPEN, - [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 100; } - ), - transition_t<::e_Door_states, Door_context>( - "close", - e_Door_states::AJAR, - e_Door_states::CLOSE, - [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, - [](Door_context *ctx) { ctx->degreeOfOpening = 0; } - ), - transition_t<::e_Door_states, Door_context>( - "ajarPlus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } - ), - transition_t<::e_Door_states, Door_context>( - "ajarMinus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](Door_context *ctx) { return true; }, - [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } - ) - }, - new Door_context(), - e_Door_states::OPEN - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index b2a15f6..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,82 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::e_Door_states, empty_context>( - "preOpen", - e_Door_states::CLOSE, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "preClose", - e_Door_states::OPEN, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "open", - e_Door_states::AJAR, - e_Door_states::OPEN, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "close", - e_Door_states::AJAR, - e_Door_states::CLOSE, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "ajarPlus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "ajarMinus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ) - }, - new empty_context(), - e_Door_states::OPEN - ) { - } - -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 322b8d0..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,105 +0,0 @@ -#pragma once - -#include - -enum class e_Door_states { - OPEN, - AJAR, - CLOSE -}; - -inline void to_json(nlohmann::json &j, const e_Door_states &e) { - switch (e) { - case e_Door_states::OPEN: j = "OPEN"; - break; - case e_Door_states::AJAR: j = "AJAR"; - break; - case e_Door_states::CLOSE: j = "CLOSE"; - break; - } -} - -inline void from_json(const nlohmann::json &j, e_Door_states &e) { - std::string state_str = j.get(); - - if (state_str == "OPEN") e = e_Door_states::OPEN; - else if (state_str == "AJAR") e = e_Door_states::AJAR; - else if (state_str == "CLOSE") e = e_Door_states::CLOSE; -} - -class Door_state_machine : public stater_state_machine { -public: - Door_state_machine() : stater_state_machine ( - { - transition_t<::e_Door_states, empty_context>( - "preOpen", - e_Door_states::CLOSE, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "preClose", - e_Door_states::OPEN, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "open", - e_Door_states::AJAR, - e_Door_states::OPEN, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "close", - e_Door_states::AJAR, - e_Door_states::CLOSE, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "ajarPlus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ), - transition_t<::e_Door_states, empty_context>( - "ajarMinus", - e_Door_states::AJAR, - e_Door_states::AJAR, - [](empty_context *ctx) { return true; }, - [](empty_context *ctx) { } - ) - }, - new empty_context(), - e_Door_states::OPEN - ) { - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } -}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt deleted file mode 100644 index 707e61f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ /dev/null @@ -1,254 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - builder_Door_state_machine.build(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = builder_Door_state_machine.build(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} - -TEST(Door_state_machine_test, test_system_append_state_transition) { - auto sm_builder = builder_Door_state_machine; - - sm_builder = sm_builder.add_state("__test_state_1__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); - - sm_builder = sm_builder.add_state("__test_state_2__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); - - sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index f7a80a3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,259 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - const auto st = builder_Door_state_machine.build(); - dynamic_cast(st.get()); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_json_schema) { - const auto st = builder_Door_state_machine.build(); - auto sm = dynamic_cast(st.get()); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} - -TEST(Door_state_machine_test, test_system_append_state_transition) { - auto sm_builder = builder_Door_state_machine; - - sm_builder = sm_builder.add_state("__test_state_1__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); - - sm_builder = sm_builder.add_state("__test_state_2__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); - - sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt deleted file mode 100644 index 707e61f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ /dev/null @@ -1,254 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - builder_Door_state_machine.build(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = builder_Door_state_machine.build(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} - -TEST(Door_state_machine_test, test_system_append_state_transition) { - auto sm_builder = builder_Door_state_machine; - - sm_builder = sm_builder.add_state("__test_state_1__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); - - sm_builder = sm_builder.add_state("__test_state_2__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); - - sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt deleted file mode 100644 index f7a80a3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,259 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - const auto st = builder_Door_state_machine.build(); - dynamic_cast(st.get()); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_json_schema) { - const auto st = builder_Door_state_machine.build(); - auto sm = dynamic_cast(st.get()); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} - -TEST(Door_state_machine_test, test_system_append_state_transition) { - auto sm_builder = builder_Door_state_machine; - - sm_builder = sm_builder.add_state("__test_state_1__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); - - sm_builder = sm_builder.add_state("__test_state_2__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); - - sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt deleted file mode 100644 index a238513..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - builder_Door_state_machine.build(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = builder_Door_state_machine.build(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 73c17ac..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,119 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - const auto st = builder_Door_state_machine.build(); - dynamic_cast(st.get()); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_json_schema) { - const auto st = builder_Door_state_machine.build(); - auto sm = dynamic_cast(st.get()); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt deleted file mode 100644 index a238513..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - builder_Door_state_machine.build(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = builder_Door_state_machine.build(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = builder_Door_state_machine.build(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 73c17ac..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,119 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - const auto st = builder_Door_state_machine.build(); - dynamic_cast(st.get()); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto st = builder_Door_state_machine.build(); - const auto sm = dynamic_cast(st.get()); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_json_schema) { - const auto st = builder_Door_state_machine.build(); - auto sm = dynamic_cast(st.get()); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt deleted file mode 100644 index b2df42c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - new Door_state_machine(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = new Door_state_machine(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 47d878a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - new Door_state_machine(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = new Door_state_machine(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt deleted file mode 100644 index b2df42c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - new Door_state_machine(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = new Door_state_machine(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 47d878a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - new Door_state_machine(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->close(); - ASSERT_EQ(sm->get_state(), "CLOSE"); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), "AJAR"); - - sm->open(); - ASSERT_EQ(sm->get_state(), "OPEN"); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = new Door_state_machine(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt deleted file mode 100644 index 8bf2ac3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - new Door_state_machine(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = new Door_state_machine(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 6da3797..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - new Door_state_machine(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = new Door_state_machine(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt deleted file mode 100644 index 8bf2ac3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - new Door_state_machine(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("ajarPlus"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->transition("preClose"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("close"); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->transition("preOpen"); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->transition("open"); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = new Door_state_machine(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 6da3797..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -#include - -#include - - - -TEST(Door_state_machine_test, test_init) { - new Door_state_machine(); -} - - -TEST(Door_state_machine_test, test_scenario_0) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_1) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->ajarPlus(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_scenario_2) { - const auto sm = new Door_state_machine(); - sm->disable_events(); - - - sm->preClose(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->close(); - ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); - - sm->preOpen(); - ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); - - sm->open(); - ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); -} - -TEST(Door_state_machine_test, test_json_schema) { - auto sm = new Door_state_machine(); - ASSERT_EQ(nlohmann::json::parse(R"({ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -})"), nlohmann::json::parse(sm->to_json_schema())); -} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index f3772d1..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,30 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class Door { - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState("OPEN") - .SetContext(new DoorFSMContext()) - .AddTransition("preOpen", "CLOSE", "AJAR") - .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) - .AddTransition("preClose", "OPEN", "AJAR") - .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) - .AddTransition("open", "AJAR", "OPEN") - .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) - .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) - .AddTransition("close", "AJAR", "CLOSE") - .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) - .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) - .AddTransition("ajarPlus", "AJAR", "AJAR") - .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .AddTransition("ajarMinus", "AJAR", "AJAR") - .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index e5fc93c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class Door { - public class TypesDoorStateMachine( - List> transitions, - DoorFSMContext context, - String startState, - HashSet states, - Dictionary>> transitionMiddlewares, - List> transitionAllMiddlewares, - Dictionary>> transitionCallbacks, - List> transitionAllCallbacks, - Dictionary>> stateCallbacks, - List> stateAllCallbacks, - IContextJsonAdapter contextJsonAdapter - ) : StaterStateMachine( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ) - { - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } - } - private static StateMachineFactory TypedDoorFactory = ( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ) => new TypesDoorStateMachine( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ); - - - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState("OPEN") - .SetContext(new DoorFSMContext()) - .SetFactory(TypedDoorFactory) - .AddTransition("preOpen", "CLOSE", "AJAR") - .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) - .AddTransition("preClose", "OPEN", "AJAR") - .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) - .AddTransition("open", "AJAR", "OPEN") - .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) - .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) - .AddTransition("close", "AJAR", "CLOSE") - .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) - .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) - .AddTransition("ajarPlus", "AJAR", "AJAR") - .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .AddTransition("ajarMinus", "AJAR", "AJAR") - .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index f654445..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,15 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class Door { - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState("OPEN") - .SetContext(new EmptyContext()) - .AddTransition("preOpen", "CLOSE", "AJAR") - .AddTransition("preClose", "OPEN", "AJAR") - .AddTransition("open", "AJAR", "OPEN") - .AddTransition("close", "AJAR", "CLOSE") - .AddTransition("ajarPlus", "AJAR", "AJAR") - .AddTransition("ajarMinus", "AJAR", "AJAR"); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index 9452f85..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,99 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class Door { - public class TypesDoorStateMachine( - List> transitions, - EmptyContext context, - String startState, - HashSet states, - Dictionary>> transitionMiddlewares, - List> transitionAllMiddlewares, - Dictionary>> transitionCallbacks, - List> transitionAllCallbacks, - Dictionary>> stateCallbacks, - List> stateAllCallbacks, - IContextJsonAdapter contextJsonAdapter - ) : StaterStateMachine( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ) - { - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } - } - private static StateMachineFactory TypedDoorFactory = ( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ) => new TypesDoorStateMachine( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ); - - - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState("OPEN") - .SetContext(new EmptyContext()) - .SetFactory(TypedDoorFactory) - .AddTransition("preOpen", "CLOSE", "AJAR") - .AddTransition("preClose", "OPEN", "AJAR") - .AddTransition("open", "AJAR", "OPEN") - .AddTransition("close", "AJAR", "CLOSE") - .AddTransition("ajarPlus", "AJAR", "AJAR") - .AddTransition("ajarMinus", "AJAR", "AJAR"); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index ff7b863..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,36 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class Door { - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState(States.OPEN) - .SetContext(new DoorFSMContext()) - .AddTransition("preOpen", States.CLOSE, States.AJAR) - .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) - .AddTransition("preClose", States.OPEN, States.AJAR) - .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) - .AddTransition("open", States.AJAR, States.OPEN) - .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) - .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) - .AddTransition("close", States.AJAR, States.CLOSE) - .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) - .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) - .AddTransition("ajarPlus", States.AJAR, States.AJAR) - .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .AddTransition("ajarMinus", States.AJAR, States.AJAR) - .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index e3e9312..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,120 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class Door { - public class TypesDoorStateMachine( - List> transitions, - DoorFSMContext context, - States startState, - HashSet states, - Dictionary>> transitionMiddlewares, - List> transitionAllMiddlewares, - Dictionary>> transitionCallbacks, - List> transitionAllCallbacks, - Dictionary>> stateCallbacks, - List> stateAllCallbacks, - IContextJsonAdapter contextJsonAdapter - ) : StaterStateMachine( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ) - { - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } - } - private static StateMachineFactory TypedDoorFactory = ( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ) => new TypesDoorStateMachine( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ); - - - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState(States.OPEN) - .SetContext(new DoorFSMContext()) - .SetFactory(TypedDoorFactory) - .AddTransition("preOpen", States.CLOSE, States.AJAR) - .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) - .AddTransition("preClose", States.OPEN, States.AJAR) - .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) - .AddTransition("open", States.AJAR, States.OPEN) - .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) - .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) - .AddTransition("close", States.AJAR, States.CLOSE) - .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) - .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) - .AddTransition("ajarPlus", States.AJAR, States.AJAR) - .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .AddTransition("ajarMinus", States.AJAR, States.AJAR) - .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 2ce669b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,21 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class Door { - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState(States.OPEN) - .SetContext(new EmptyContext()) - .AddTransition("preOpen", States.CLOSE, States.AJAR) - .AddTransition("preClose", States.OPEN, States.AJAR) - .AddTransition("open", States.AJAR, States.OPEN) - .AddTransition("close", States.AJAR, States.CLOSE) - .AddTransition("ajarPlus", States.AJAR, States.AJAR) - .AddTransition("ajarMinus", States.AJAR, States.AJAR); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index cba52d6..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,105 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class Door { - public class TypesDoorStateMachine( - List> transitions, - EmptyContext context, - States startState, - HashSet states, - Dictionary>> transitionMiddlewares, - List> transitionAllMiddlewares, - Dictionary>> transitionCallbacks, - List> transitionAllCallbacks, - Dictionary>> stateCallbacks, - List> stateAllCallbacks, - IContextJsonAdapter contextJsonAdapter - ) : StaterStateMachine( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ) - { - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } - } - private static StateMachineFactory TypedDoorFactory = ( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ) => new TypesDoorStateMachine( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ); - - - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState(States.OPEN) - .SetContext(new EmptyContext()) - .SetFactory(TypedDoorFactory) - .AddTransition("preOpen", States.CLOSE, States.AJAR) - .AddTransition("preClose", States.OPEN, States.AJAR) - .AddTransition("open", States.AJAR, States.OPEN) - .AddTransition("close", States.AJAR, States.CLOSE) - .AddTransition("ajarPlus", States.AJAR, States.AJAR) - .AddTransition("ajarMinus", States.AJAR, States.AJAR); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index 7b16d80..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,62 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - "CLOSE", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = 1 - ), - new( - "preClose", - "OPEN", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = 99 - ), - new( - "open", - "AJAR", - "OPEN", - ctx => ctx.degreeOfOpening >= 0, - ctx => ctx.degreeOfOpening = 100 - ), - new( - "close", - "AJAR", - "CLOSE", - ctx => ctx.degreeOfOpening <= 0, - ctx => ctx.degreeOfOpening = 0 - ), - new( - "ajarPlus", - "AJAR", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new( - "ajarMinus", - "AJAR", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - }, - new DoorFSMContext(), - "OPEN" -) -{ -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index 6470034..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,91 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - "CLOSE", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = 1 - ), - new( - "preClose", - "OPEN", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = 99 - ), - new( - "open", - "AJAR", - "OPEN", - ctx => ctx.degreeOfOpening >= 0, - ctx => ctx.degreeOfOpening = 100 - ), - new( - "close", - "AJAR", - "CLOSE", - ctx => ctx.degreeOfOpening <= 0, - ctx => ctx.degreeOfOpening = 0 - ), - new( - "ajarPlus", - "AJAR", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new( - "ajarMinus", - "AJAR", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - }, - new DoorFSMContext(), - "OPEN" -) -{ - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index c39540a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,55 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - "CLOSE", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "preClose", - "OPEN", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "open", - "AJAR", - "OPEN", - ctx => true, - ctx => { } - ), - new( - "close", - "AJAR", - "CLOSE", - ctx => true, - ctx => { } - ), - new( - "ajarPlus", - "AJAR", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "ajarMinus", - "AJAR", - "AJAR", - ctx => true, - ctx => { } - ) - }, - new EmptyContext(), - "OPEN" -) -{ -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index a01817a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,84 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - "CLOSE", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "preClose", - "OPEN", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "open", - "AJAR", - "OPEN", - ctx => true, - ctx => { } - ), - new( - "close", - "AJAR", - "CLOSE", - ctx => true, - ctx => { } - ), - new( - "ajarPlus", - "AJAR", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "ajarMinus", - "AJAR", - "AJAR", - ctx => true, - ctx => { } - ) - }, - new EmptyContext(), - "OPEN" -) -{ - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index 633a73a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,68 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - States.CLOSE, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = 1 - ), - new( - "preClose", - States.OPEN, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = 99 - ), - new( - "open", - States.AJAR, - States.OPEN, - ctx => ctx.degreeOfOpening >= 0, - ctx => ctx.degreeOfOpening = 100 - ), - new( - "close", - States.AJAR, - States.CLOSE, - ctx => ctx.degreeOfOpening <= 0, - ctx => ctx.degreeOfOpening = 0 - ), - new( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - }, - new DoorFSMContext(), - States.OPEN -) -{ -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 77a7aee..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,97 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - States.CLOSE, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = 1 - ), - new( - "preClose", - States.OPEN, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = 99 - ), - new( - "open", - States.AJAR, - States.OPEN, - ctx => ctx.degreeOfOpening >= 0, - ctx => ctx.degreeOfOpening = 100 - ), - new( - "close", - States.AJAR, - States.CLOSE, - ctx => ctx.degreeOfOpening <= 0, - ctx => ctx.degreeOfOpening = 0 - ), - new( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - }, - new DoorFSMContext(), - States.OPEN -) -{ - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 6300b25..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,61 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - States.CLOSE, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "preClose", - States.OPEN, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "open", - States.AJAR, - States.OPEN, - ctx => true, - ctx => { } - ), - new( - "close", - States.AJAR, - States.CLOSE, - ctx => true, - ctx => { } - ), - new( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => { } - ) - }, - new EmptyContext(), - States.OPEN -) -{ -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index b45c5f5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,90 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - States.CLOSE, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "preClose", - States.OPEN, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "open", - States.AJAR, - States.OPEN, - ctx => true, - ctx => { } - ), - new( - "close", - States.AJAR, - States.CLOSE, - ctx => true, - ctx => { } - ), - new( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => { } - ) - }, - new EmptyContext(), - States.OPEN -) -{ - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index f3772d1..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,30 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class Door { - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState("OPEN") - .SetContext(new DoorFSMContext()) - .AddTransition("preOpen", "CLOSE", "AJAR") - .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) - .AddTransition("preClose", "OPEN", "AJAR") - .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) - .AddTransition("open", "AJAR", "OPEN") - .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) - .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) - .AddTransition("close", "AJAR", "CLOSE") - .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) - .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) - .AddTransition("ajarPlus", "AJAR", "AJAR") - .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .AddTransition("ajarMinus", "AJAR", "AJAR") - .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index e5fc93c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,114 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class Door { - public class TypesDoorStateMachine( - List> transitions, - DoorFSMContext context, - String startState, - HashSet states, - Dictionary>> transitionMiddlewares, - List> transitionAllMiddlewares, - Dictionary>> transitionCallbacks, - List> transitionAllCallbacks, - Dictionary>> stateCallbacks, - List> stateAllCallbacks, - IContextJsonAdapter contextJsonAdapter - ) : StaterStateMachine( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ) - { - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } - } - private static StateMachineFactory TypedDoorFactory = ( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ) => new TypesDoorStateMachine( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ); - - - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState("OPEN") - .SetContext(new DoorFSMContext()) - .SetFactory(TypedDoorFactory) - .AddTransition("preOpen", "CLOSE", "AJAR") - .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) - .AddTransition("preClose", "OPEN", "AJAR") - .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) - .AddTransition("open", "AJAR", "OPEN") - .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) - .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) - .AddTransition("close", "AJAR", "CLOSE") - .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) - .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) - .AddTransition("ajarPlus", "AJAR", "AJAR") - .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .AddTransition("ajarMinus", "AJAR", "AJAR") - .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index f654445..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,15 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class Door { - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState("OPEN") - .SetContext(new EmptyContext()) - .AddTransition("preOpen", "CLOSE", "AJAR") - .AddTransition("preClose", "OPEN", "AJAR") - .AddTransition("open", "AJAR", "OPEN") - .AddTransition("close", "AJAR", "CLOSE") - .AddTransition("ajarPlus", "AJAR", "AJAR") - .AddTransition("ajarMinus", "AJAR", "AJAR"); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index 9452f85..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,99 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class Door { - public class TypesDoorStateMachine( - List> transitions, - EmptyContext context, - String startState, - HashSet states, - Dictionary>> transitionMiddlewares, - List> transitionAllMiddlewares, - Dictionary>> transitionCallbacks, - List> transitionAllCallbacks, - Dictionary>> stateCallbacks, - List> stateAllCallbacks, - IContextJsonAdapter contextJsonAdapter - ) : StaterStateMachine( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ) - { - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } - } - private static StateMachineFactory TypedDoorFactory = ( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ) => new TypesDoorStateMachine( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ); - - - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState("OPEN") - .SetContext(new EmptyContext()) - .SetFactory(TypedDoorFactory) - .AddTransition("preOpen", "CLOSE", "AJAR") - .AddTransition("preClose", "OPEN", "AJAR") - .AddTransition("open", "AJAR", "OPEN") - .AddTransition("close", "AJAR", "CLOSE") - .AddTransition("ajarPlus", "AJAR", "AJAR") - .AddTransition("ajarMinus", "AJAR", "AJAR"); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index ff7b863..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,36 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class Door { - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState(States.OPEN) - .SetContext(new DoorFSMContext()) - .AddTransition("preOpen", States.CLOSE, States.AJAR) - .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) - .AddTransition("preClose", States.OPEN, States.AJAR) - .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) - .AddTransition("open", States.AJAR, States.OPEN) - .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) - .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) - .AddTransition("close", States.AJAR, States.CLOSE) - .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) - .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) - .AddTransition("ajarPlus", States.AJAR, States.AJAR) - .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .AddTransition("ajarMinus", States.AJAR, States.AJAR) - .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index e3e9312..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,120 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class Door { - public class TypesDoorStateMachine( - List> transitions, - DoorFSMContext context, - States startState, - HashSet states, - Dictionary>> transitionMiddlewares, - List> transitionAllMiddlewares, - Dictionary>> transitionCallbacks, - List> transitionAllCallbacks, - Dictionary>> stateCallbacks, - List> stateAllCallbacks, - IContextJsonAdapter contextJsonAdapter - ) : StaterStateMachine( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ) - { - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } - } - private static StateMachineFactory TypedDoorFactory = ( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ) => new TypesDoorStateMachine( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ); - - - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState(States.OPEN) - .SetContext(new DoorFSMContext()) - .SetFactory(TypedDoorFactory) - .AddTransition("preOpen", States.CLOSE, States.AJAR) - .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) - .AddTransition("preClose", States.OPEN, States.AJAR) - .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) - .AddTransition("open", States.AJAR, States.OPEN) - .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) - .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) - .AddTransition("close", States.AJAR, States.CLOSE) - .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) - .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) - .AddTransition("ajarPlus", States.AJAR, States.AJAR) - .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .AddTransition("ajarMinus", States.AJAR, States.AJAR) - .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 2ce669b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,21 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class Door { - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState(States.OPEN) - .SetContext(new EmptyContext()) - .AddTransition("preOpen", States.CLOSE, States.AJAR) - .AddTransition("preClose", States.OPEN, States.AJAR) - .AddTransition("open", States.AJAR, States.OPEN) - .AddTransition("close", States.AJAR, States.CLOSE) - .AddTransition("ajarPlus", States.AJAR, States.AJAR) - .AddTransition("ajarMinus", States.AJAR, States.AJAR); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index cba52d6..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,105 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class Door { - public class TypesDoorStateMachine( - List> transitions, - EmptyContext context, - States startState, - HashSet states, - Dictionary>> transitionMiddlewares, - List> transitionAllMiddlewares, - Dictionary>> transitionCallbacks, - List> transitionAllCallbacks, - Dictionary>> stateCallbacks, - List> stateAllCallbacks, - IContextJsonAdapter contextJsonAdapter - ) : StaterStateMachine( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ) - { - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } - } - private static StateMachineFactory TypedDoorFactory = ( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ) => new TypesDoorStateMachine( - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA - ); - - - public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() - .SetStartState(States.OPEN) - .SetContext(new EmptyContext()) - .SetFactory(TypedDoorFactory) - .AddTransition("preOpen", States.CLOSE, States.AJAR) - .AddTransition("preClose", States.OPEN, States.AJAR) - .AddTransition("open", States.AJAR, States.OPEN) - .AddTransition("close", States.AJAR, States.CLOSE) - .AddTransition("ajarPlus", States.AJAR, States.AJAR) - .AddTransition("ajarMinus", States.AJAR, States.AJAR); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index 7b16d80..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,62 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - "CLOSE", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = 1 - ), - new( - "preClose", - "OPEN", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = 99 - ), - new( - "open", - "AJAR", - "OPEN", - ctx => ctx.degreeOfOpening >= 0, - ctx => ctx.degreeOfOpening = 100 - ), - new( - "close", - "AJAR", - "CLOSE", - ctx => ctx.degreeOfOpening <= 0, - ctx => ctx.degreeOfOpening = 0 - ), - new( - "ajarPlus", - "AJAR", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new( - "ajarMinus", - "AJAR", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - }, - new DoorFSMContext(), - "OPEN" -) -{ -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index 6470034..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,91 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - "CLOSE", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = 1 - ), - new( - "preClose", - "OPEN", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = 99 - ), - new( - "open", - "AJAR", - "OPEN", - ctx => ctx.degreeOfOpening >= 0, - ctx => ctx.degreeOfOpening = 100 - ), - new( - "close", - "AJAR", - "CLOSE", - ctx => ctx.degreeOfOpening <= 0, - ctx => ctx.degreeOfOpening = 0 - ), - new( - "ajarPlus", - "AJAR", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new( - "ajarMinus", - "AJAR", - "AJAR", - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - }, - new DoorFSMContext(), - "OPEN" -) -{ - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index c39540a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,55 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - "CLOSE", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "preClose", - "OPEN", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "open", - "AJAR", - "OPEN", - ctx => true, - ctx => { } - ), - new( - "close", - "AJAR", - "CLOSE", - ctx => true, - ctx => { } - ), - new( - "ajarPlus", - "AJAR", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "ajarMinus", - "AJAR", - "AJAR", - ctx => true, - ctx => { } - ) - }, - new EmptyContext(), - "OPEN" -) -{ -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index a01817a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,84 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - "CLOSE", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "preClose", - "OPEN", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "open", - "AJAR", - "OPEN", - ctx => true, - ctx => { } - ), - new( - "close", - "AJAR", - "CLOSE", - ctx => true, - ctx => { } - ), - new( - "ajarPlus", - "AJAR", - "AJAR", - ctx => true, - ctx => { } - ), - new( - "ajarMinus", - "AJAR", - "AJAR", - ctx => true, - ctx => { } - ) - }, - new EmptyContext(), - "OPEN" -) -{ - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index 633a73a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,68 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - States.CLOSE, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = 1 - ), - new( - "preClose", - States.OPEN, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = 99 - ), - new( - "open", - States.AJAR, - States.OPEN, - ctx => ctx.degreeOfOpening >= 0, - ctx => ctx.degreeOfOpening = 100 - ), - new( - "close", - States.AJAR, - States.CLOSE, - ctx => ctx.degreeOfOpening <= 0, - ctx => ctx.degreeOfOpening = 0 - ), - new( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - }, - new DoorFSMContext(), - States.OPEN -) -{ -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 77a7aee..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,97 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorFSMContext : IContext{ - public int degreeOfOpening = 0; - public bool closeVariable = true; - public string doorName = "asd"; - public float floatVariable = 0f; -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - States.CLOSE, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = 1 - ), - new( - "preClose", - States.OPEN, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = 99 - ), - new( - "open", - States.AJAR, - States.OPEN, - ctx => ctx.degreeOfOpening >= 0, - ctx => ctx.degreeOfOpening = 100 - ), - new( - "close", - States.AJAR, - States.CLOSE, - ctx => ctx.degreeOfOpening <= 0, - ctx => ctx.degreeOfOpening = 0 - ), - new( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - }, - new DoorFSMContext(), - States.OPEN -) -{ - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 6300b25..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,61 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - States.CLOSE, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "preClose", - States.OPEN, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "open", - States.AJAR, - States.OPEN, - ctx => true, - ctx => { } - ), - new( - "close", - States.AJAR, - States.CLOSE, - ctx => true, - ctx => { } - ), - new( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => { } - ) - }, - new EmptyContext(), - States.OPEN -) -{ -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index b45c5f5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,90 +0,0 @@ -namespace fsm.door; - -using Stater.StateMachine.Lib; - -public enum States { - OPEN, - AJAR, - CLOSE -} - -public class DoorStateMachine() : StaterStateMachine( - new List> - { - new( - "preOpen", - States.CLOSE, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "preClose", - States.OPEN, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "open", - States.AJAR, - States.OPEN, - ctx => true, - ctx => { } - ), - new( - "close", - States.AJAR, - States.CLOSE, - ctx => true, - ctx => { } - ), - new( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => { } - ), - new( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx => true, - ctx => { } - ) - }, - new EmptyContext(), - States.OPEN -) -{ - public void preOpen() - { - Transition("preOpen"); - } - - public void preClose() - { - Transition("preClose"); - } - - public void open() - { - Transition("open"); - } - - public void close() - { - Transition("close"); - } - - public void ajarPlus() - { - Transition("ajarPlus"); - } - - public void ajarMinus() - { - Transition("ajarMinus"); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt deleted file mode 100644 index cb025ef..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ /dev/null @@ -1,278 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = Door.BuilderDoorStateMachine.Build(); - } - - - [Fact] - private void TestScenario0() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = Door.BuilderDoorStateMachine.Build(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - - [Fact] - private void TestSystemAppendStateTransition() - { - var smBuilder = Door.BuilderDoorStateMachine.Copy(); - - smBuilder = smBuilder.AddState("__test_state_1__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - - smBuilder = smBuilder.AddState("__test_state_2__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - - smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 58aee24..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,278 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - } - - - [Fact] - private void TestScenario0() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.ajarPlus(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.ajarPlus(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - - [Fact] - private void TestSystemAppendStateTransition() - { - var smBuilder = Door.BuilderDoorStateMachine.Copy(); - - smBuilder = smBuilder.AddState("__test_state_1__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - - smBuilder = smBuilder.AddState("__test_state_2__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - - smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt deleted file mode 100644 index cb025ef..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ /dev/null @@ -1,278 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = Door.BuilderDoorStateMachine.Build(); - } - - - [Fact] - private void TestScenario0() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = Door.BuilderDoorStateMachine.Build(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - - [Fact] - private void TestSystemAppendStateTransition() - { - var smBuilder = Door.BuilderDoorStateMachine.Copy(); - - smBuilder = smBuilder.AddState("__test_state_1__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - - smBuilder = smBuilder.AddState("__test_state_2__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - - smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 58aee24..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,278 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - } - - - [Fact] - private void TestScenario0() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.ajarPlus(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.ajarPlus(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - - [Fact] - private void TestSystemAppendStateTransition() - { - var smBuilder = Door.BuilderDoorStateMachine.Copy(); - - smBuilder = smBuilder.AddState("__test_state_1__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - - smBuilder = smBuilder.AddState("__test_state_2__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - - smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] - } - """), JObject.Parse(smBuilder.Build().ToJsonSchema())); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt deleted file mode 100644 index d645422..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = Door.BuilderDoorStateMachine.Build(); - } - - - [Fact] - private void TestScenario0() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = Door.BuilderDoorStateMachine.Build(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 01c26b2..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - } - - - [Fact] - private void TestScenario0() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.ajarPlus(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.ajarPlus(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt deleted file mode 100644 index d645422..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = Door.BuilderDoorStateMachine.Build(); - } - - - [Fact] - private void TestScenario0() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = Door.BuilderDoorStateMachine.Build(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = Door.BuilderDoorStateMachine.Build(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 01c26b2..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - } - - - [Fact] - private void TestScenario0() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.ajarPlus(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.ajarPlus(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt deleted file mode 100644 index 7bbe63c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = new DoorStateMachine(); - } - - - [Fact] - private void TestScenario0() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = new DoorStateMachine(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 0a1d5db..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = new DoorStateMachine(); - } - - - [Fact] - private void TestScenario0() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.ajarPlus(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.ajarPlus(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = new DoorStateMachine(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt deleted file mode 100644 index 7bbe63c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = new DoorStateMachine(); - } - - - [Fact] - private void TestScenario0() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("close"); - Assert.Equal("CLOSE", sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal("AJAR", sm.GetState()); - - sm.Transition("open"); - Assert.Equal("OPEN", sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = new DoorStateMachine(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 0a1d5db..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = new DoorStateMachine(); - } - - - [Fact] - private void TestScenario0() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.ajarPlus(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.ajarPlus(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal("AJAR", sm.GetState()); - - sm.close(); - Assert.Equal("CLOSE", sm.GetState()); - - sm.preOpen(); - Assert.Equal("AJAR", sm.GetState()); - - sm.open(); - Assert.Equal("OPEN", sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = new DoorStateMachine(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt deleted file mode 100644 index 901953b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = new DoorStateMachine(); - } - - - [Fact] - private void TestScenario0() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = new DoorStateMachine(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 650cd06..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = new DoorStateMachine(); - } - - - [Fact] - private void TestScenario0() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.ajarPlus(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.ajarPlus(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = new DoorStateMachine(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt deleted file mode 100644 index 901953b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = new DoorStateMachine(); - } - - - [Fact] - private void TestScenario0() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("ajarPlus"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.Transition("preClose"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("close"); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.Transition("preOpen"); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.Transition("open"); - Assert.Equal(States.OPEN, sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = new DoorStateMachine(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 650cd06..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,131 +0,0 @@ -namespace fsm.door; - -using Newtonsoft.Json.Linq; - -[Collection("Door Auto Generated Tests")] -public class TestDoor { - [Fact] - private void TestInit() - { - _ = new DoorStateMachine(); - } - - - [Fact] - private void TestScenario0() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.ajarPlus(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario1() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.ajarPlus(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - [Fact] - private void TestScenario2() - { - var sm = new DoorStateMachine(); - sm.DisableEvents(); - - - sm.preClose(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.close(); - Assert.Equal(States.CLOSE, sm.GetState()); - - sm.preOpen(); - Assert.Equal(States.AJAR, sm.GetState()); - - sm.open(); - Assert.Equal(States.OPEN, sm.GetState()); - - } - - [Fact] - private void TestJsonSchema() - { - var sm = new DoorStateMachine(); - Assert.Equal(JObject.Parse(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), JObject.Parse(sm.ToJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index 751ce1e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,31 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new DoorFSMContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index 068457f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,89 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class TypesDoorStateMachine extends StaterStateMachine { - public TypesDoorStateMachine( - List> transitions, - DoorFSMContext context, - String startState, - Set states, - Map>> transitionMiddlewares, - List> transitionAllMiddlewares, - Map>> transitionCallbacks, - List> transitionAllCallbacks, - Map>> stateCallbacks, - List> stateAllCallbacks, - ContextJsonAdapter contextJsonAdapter - ) { - super( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } - - static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; - - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index 0c26998..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,16 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new EmptyContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR"); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index 1cada91..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,74 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class TypesDoorStateMachine extends StaterStateMachine { - public TypesDoorStateMachine( - List> transitions, - EmptyContext context, - String startState, - Set states, - Map>> transitionMiddlewares, - List> transitionAllMiddlewares, - Map>> transitionCallbacks, - List> transitionAllCallbacks, - Map>> stateCallbacks, - List> stateAllCallbacks, - ContextJsonAdapter contextJsonAdapter - ) { - super( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } - - static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; - - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR"); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 88b6798..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,37 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new DoorFSMContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 60e1cd3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,95 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class TypesDoorStateMachine extends StaterStateMachine { - public TypesDoorStateMachine( - List> transitions, - DoorFSMContext context, - States startState, - Set states, - Map>> transitionMiddlewares, - List> transitionAllMiddlewares, - Map>> transitionCallbacks, - List> transitionAllCallbacks, - Map>> stateCallbacks, - List> stateAllCallbacks, - ContextJsonAdapter contextJsonAdapter - ) { - super( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } - - static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; - - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 2fefcc7..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,22 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new EmptyContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index 27c37c1..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,80 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class TypesDoorStateMachine extends StaterStateMachine { - public TypesDoorStateMachine( - List> transitions, - EmptyContext context, - States startState, - Set states, - Map>> transitionMiddlewares, - List> transitionAllMiddlewares, - Map>> transitionCallbacks, - List> transitionAllCallbacks, - Map>> stateCallbacks, - List> stateAllCallbacks, - ContextJsonAdapter contextJsonAdapter - ) { - super( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } - - static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; - - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index a529085..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,66 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - "CLOSE", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = 1 - ), - new Transition<>( - "preClose", - "OPEN", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = 99 - ), - new Transition<>( - "open", - "AJAR", - "OPEN", - ctx -> ctx.degreeOfOpening >= 0, - ctx -> ctx.degreeOfOpening = 100 - ), - new Transition<>( - "close", - "AJAR", - "CLOSE", - ctx -> ctx.degreeOfOpening <= 0, - ctx -> ctx.degreeOfOpening = 0 - ), - new Transition<>( - "ajarPlus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new Transition<>( - "ajarMinus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - ), - new DoorFSMContext(), - "OPEN" - ); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index 5df87cb..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,90 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - "CLOSE", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = 1 - ), - new Transition<>( - "preClose", - "OPEN", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = 99 - ), - new Transition<>( - "open", - "AJAR", - "OPEN", - ctx -> ctx.degreeOfOpening >= 0, - ctx -> ctx.degreeOfOpening = 100 - ), - new Transition<>( - "close", - "AJAR", - "CLOSE", - ctx -> ctx.degreeOfOpening <= 0, - ctx -> ctx.degreeOfOpening = 0 - ), - new Transition<>( - "ajarPlus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new Transition<>( - "ajarMinus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - ), - new DoorFSMContext(), - "OPEN" - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 96f622f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,59 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - "CLOSE", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "preClose", - "OPEN", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "open", - "AJAR", - "OPEN", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "close", - "AJAR", - "CLOSE", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarPlus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarMinus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> {} - ) - ), - new EmptyContext(), - "OPEN" - ); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 44330ea..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,83 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - "CLOSE", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "preClose", - "OPEN", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "open", - "AJAR", - "OPEN", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "close", - "AJAR", - "CLOSE", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarPlus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarMinus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> {} - ) - ), - new EmptyContext(), - "OPEN" - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index 410d51e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,72 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - States.CLOSE, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = 1 - ), - new Transition<>( - "preClose", - States.OPEN, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = 99 - ), - new Transition<>( - "open", - States.AJAR, - States.OPEN, - ctx -> ctx.degreeOfOpening >= 0, - ctx -> ctx.degreeOfOpening = 100 - ), - new Transition<>( - "close", - States.AJAR, - States.CLOSE, - ctx -> ctx.degreeOfOpening <= 0, - ctx -> ctx.degreeOfOpening = 0 - ), - new Transition<>( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new Transition<>( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - ), - new DoorFSMContext(), - States.OPEN - ); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index f9c0377..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,96 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - States.CLOSE, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = 1 - ), - new Transition<>( - "preClose", - States.OPEN, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = 99 - ), - new Transition<>( - "open", - States.AJAR, - States.OPEN, - ctx -> ctx.degreeOfOpening >= 0, - ctx -> ctx.degreeOfOpening = 100 - ), - new Transition<>( - "close", - States.AJAR, - States.CLOSE, - ctx -> ctx.degreeOfOpening <= 0, - ctx -> ctx.degreeOfOpening = 0 - ), - new Transition<>( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new Transition<>( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - ), - new DoorFSMContext(), - States.OPEN - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 04bb91b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,65 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - States.CLOSE, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "preClose", - States.OPEN, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "open", - States.AJAR, - States.OPEN, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "close", - States.AJAR, - States.CLOSE, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> {} - ) - ), - new EmptyContext(), - States.OPEN - ); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 1733222..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,89 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - States.CLOSE, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "preClose", - States.OPEN, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "open", - States.AJAR, - States.OPEN, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "close", - States.AJAR, - States.CLOSE, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> {} - ) - ), - new EmptyContext(), - States.OPEN - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index 751ce1e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,31 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new DoorFSMContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index 068457f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,89 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class TypesDoorStateMachine extends StaterStateMachine { - public TypesDoorStateMachine( - List> transitions, - DoorFSMContext context, - String startState, - Set states, - Map>> transitionMiddlewares, - List> transitionAllMiddlewares, - Map>> transitionCallbacks, - List> transitionAllCallbacks, - Map>> stateCallbacks, - List> stateAllCallbacks, - ContextJsonAdapter contextJsonAdapter - ) { - super( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } - - static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; - - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index 0c26998..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,16 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new EmptyContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR"); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index 1cada91..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,74 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class TypesDoorStateMachine extends StaterStateMachine { - public TypesDoorStateMachine( - List> transitions, - EmptyContext context, - String startState, - Set states, - Map>> transitionMiddlewares, - List> transitionAllMiddlewares, - Map>> transitionCallbacks, - List> transitionAllCallbacks, - Map>> stateCallbacks, - List> stateAllCallbacks, - ContextJsonAdapter contextJsonAdapter - ) { - super( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } - - static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; - - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR"); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 88b6798..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,37 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new DoorFSMContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 60e1cd3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,95 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class TypesDoorStateMachine extends StaterStateMachine { - public TypesDoorStateMachine( - List> transitions, - DoorFSMContext context, - States startState, - Set states, - Map>> transitionMiddlewares, - List> transitionAllMiddlewares, - Map>> transitionCallbacks, - List> transitionAllCallbacks, - Map>> stateCallbacks, - List> stateAllCallbacks, - ContextJsonAdapter contextJsonAdapter - ) { - super( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } - - static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; - - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 2fefcc7..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,22 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new EmptyContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index 27c37c1..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,80 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class TypesDoorStateMachine extends StaterStateMachine { - public TypesDoorStateMachine( - List> transitions, - EmptyContext context, - States startState, - Set states, - Map>> transitionMiddlewares, - List> transitionAllMiddlewares, - Map>> transitionCallbacks, - List> transitionAllCallbacks, - Map>> stateCallbacks, - List> stateAllCallbacks, - ContextJsonAdapter contextJsonAdapter - ) { - super( - transitions, - context, - startState, - states, - transitionMiddlewares, - transitionAllMiddlewares, - transitionCallbacks, - transitionAllCallbacks, - stateCallbacks, - stateAllCallbacks, - contextJsonAdapter - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } - - static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; - - - static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR); -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index a529085..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,66 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - "CLOSE", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = 1 - ), - new Transition<>( - "preClose", - "OPEN", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = 99 - ), - new Transition<>( - "open", - "AJAR", - "OPEN", - ctx -> ctx.degreeOfOpening >= 0, - ctx -> ctx.degreeOfOpening = 100 - ), - new Transition<>( - "close", - "AJAR", - "CLOSE", - ctx -> ctx.degreeOfOpening <= 0, - ctx -> ctx.degreeOfOpening = 0 - ), - new Transition<>( - "ajarPlus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new Transition<>( - "ajarMinus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - ), - new DoorFSMContext(), - "OPEN" - ); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index 5df87cb..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,90 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - "CLOSE", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = 1 - ), - new Transition<>( - "preClose", - "OPEN", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = 99 - ), - new Transition<>( - "open", - "AJAR", - "OPEN", - ctx -> ctx.degreeOfOpening >= 0, - ctx -> ctx.degreeOfOpening = 100 - ), - new Transition<>( - "close", - "AJAR", - "CLOSE", - ctx -> ctx.degreeOfOpening <= 0, - ctx -> ctx.degreeOfOpening = 0 - ), - new Transition<>( - "ajarPlus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new Transition<>( - "ajarMinus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - ), - new DoorFSMContext(), - "OPEN" - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 96f622f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,59 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - "CLOSE", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "preClose", - "OPEN", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "open", - "AJAR", - "OPEN", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "close", - "AJAR", - "CLOSE", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarPlus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarMinus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> {} - ) - ), - new EmptyContext(), - "OPEN" - ); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 44330ea..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,83 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - "CLOSE", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "preClose", - "OPEN", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "open", - "AJAR", - "OPEN", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "close", - "AJAR", - "CLOSE", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarPlus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarMinus", - "AJAR", - "AJAR", - ctx -> true, - ctx -> {} - ) - ), - new EmptyContext(), - "OPEN" - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index 410d51e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,72 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - States.CLOSE, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = 1 - ), - new Transition<>( - "preClose", - States.OPEN, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = 99 - ), - new Transition<>( - "open", - States.AJAR, - States.OPEN, - ctx -> ctx.degreeOfOpening >= 0, - ctx -> ctx.degreeOfOpening = 100 - ), - new Transition<>( - "close", - States.AJAR, - States.CLOSE, - ctx -> ctx.degreeOfOpening <= 0, - ctx -> ctx.degreeOfOpening = 0 - ), - new Transition<>( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new Transition<>( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - ), - new DoorFSMContext(), - States.OPEN - ); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index f9c0377..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,96 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorFSMContext implements Context{ - int degreeOfOpening = 0; - boolean closeVariable = true; - String doorName = "asd"; - float floatVariable = 0f; - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - States.CLOSE, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = 1 - ), - new Transition<>( - "preClose", - States.OPEN, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = 99 - ), - new Transition<>( - "open", - States.AJAR, - States.OPEN, - ctx -> ctx.degreeOfOpening >= 0, - ctx -> ctx.degreeOfOpening = 100 - ), - new Transition<>( - "close", - States.AJAR, - States.CLOSE, - ctx -> ctx.degreeOfOpening <= 0, - ctx -> ctx.degreeOfOpening = 0 - ), - new Transition<>( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 - ), - new Transition<>( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 - ) - ), - new DoorFSMContext(), - States.OPEN - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 04bb91b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,65 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - States.CLOSE, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "preClose", - States.OPEN, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "open", - States.AJAR, - States.OPEN, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "close", - States.AJAR, - States.CLOSE, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> {} - ) - ), - new EmptyContext(), - States.OPEN - ); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 1733222..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,89 +0,0 @@ -package fsm.door; - -import com.stater.statemachine.java.*; -import java.util.*; - -class Door { - static enum States { - OPEN, - AJAR, - CLOSE - } - - static class DoorStateMachine extends StaterStateMachine{ - public DoorStateMachine() { - super( - List.of( - new Transition<>( - "preOpen", - States.CLOSE, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "preClose", - States.OPEN, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "open", - States.AJAR, - States.OPEN, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "close", - States.AJAR, - States.CLOSE, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarPlus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> {} - ), - new Transition<>( - "ajarMinus", - States.AJAR, - States.AJAR, - ctx -> true, - ctx -> {} - ) - ), - new EmptyContext(), - States.OPEN - ); - } - - void preOpen() { - transition("preOpen"); - } - - void preClose() { - transition("preClose"); - } - - void open() { - transition("open"); - } - - void close() { - transition("close"); - } - - void ajarPlus() { - transition("ajarPlus"); - } - - void ajarMinus() { - transition("ajarMinus"); - } - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt deleted file mode 100644 index 68b3604..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt +++ /dev/null @@ -1,270 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = Door.builderDoorStateMachine.build(); - } - - - @Test - void testScenario0() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario1() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario2() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = Door.builderDoorStateMachine.build(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - - @Test - void testSystemAppendStateTransition() throws Exception { - var smBuilder = Door.builderDoorStateMachine; - - smBuilder = smBuilder.addState("__test_state_1__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - - smBuilder = smBuilder.addState("__test_state_2__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - - smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index cfed5ef..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,270 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - } - - - @Test - void testScenario0() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.ajarPlus(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario1() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.ajarPlus(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario2() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - - @Test - void testSystemAppendStateTransition() throws Exception { - var smBuilder = Door.builderDoorStateMachine; - - smBuilder = smBuilder.addState("__test_state_1__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - - smBuilder = smBuilder.addState("__test_state_2__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - - smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt deleted file mode 100644 index 68b3604..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt +++ /dev/null @@ -1,270 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = Door.builderDoorStateMachine.build(); - } - - - @Test - void testScenario0() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario1() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario2() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = Door.builderDoorStateMachine.build(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - - @Test - void testSystemAppendStateTransition() throws Exception { - var smBuilder = Door.builderDoorStateMachine; - - smBuilder = smBuilder.addState("__test_state_1__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - - smBuilder = smBuilder.addState("__test_state_2__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - - smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt deleted file mode 100644 index cfed5ef..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,270 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - } - - - @Test - void testScenario0() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.ajarPlus(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario1() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.ajarPlus(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario2() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - - @Test - void testSystemAppendStateTransition() throws Exception { - var smBuilder = Door.builderDoorStateMachine; - - smBuilder = smBuilder.addState("__test_state_1__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - - smBuilder = smBuilder.addState("__test_state_2__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - - smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] - }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt deleted file mode 100644 index e83ade8..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = Door.builderDoorStateMachine.build(); - } - - - @Test - void testScenario0() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario1() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario2() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = Door.builderDoorStateMachine.build(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index da9ad4a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - } - - - @Test - void testScenario0() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.ajarPlus(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario1() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.ajarPlus(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario2() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt deleted file mode 100644 index e83ade8..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = Door.builderDoorStateMachine.build(); - } - - - @Test - void testScenario0() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario1() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario2() { - var sm = Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = Door.builderDoorStateMachine.build(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index da9ad4a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - } - - - @Test - void testScenario0() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.ajarPlus(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario1() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.ajarPlus(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario2() { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt deleted file mode 100644 index 8665347..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = new Door.DoorStateMachine(); - } - - - @Test - void testScenario0() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario1() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario2() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = new Door.DoorStateMachine(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 6c11e6b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = new Door.DoorStateMachine(); - } - - - @Test - void testScenario0() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.ajarPlus(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario1() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.ajarPlus(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario2() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = new Door.DoorStateMachine(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt deleted file mode 100644 index 8665347..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = new Door.DoorStateMachine(); - } - - - @Test - void testScenario0() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario1() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario2() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("close"); - assertEquals(sm.getState(), "CLOSE"); - - sm.transition("preOpen"); - assertEquals(sm.getState(), "AJAR"); - - sm.transition("open"); - assertEquals(sm.getState(), "OPEN"); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = new Door.DoorStateMachine(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 6c11e6b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = new Door.DoorStateMachine(); - } - - - @Test - void testScenario0() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.ajarPlus(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario1() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.ajarPlus(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - @Test - void testScenario2() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), "AJAR"); - - sm.close(); - assertEquals(sm.getState(), "CLOSE"); - - sm.preOpen(); - assertEquals(sm.getState(), "AJAR"); - - sm.open(); - assertEquals(sm.getState(), "OPEN"); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = new Door.DoorStateMachine(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt deleted file mode 100644 index 1cfdbeb..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = new Door.DoorStateMachine(); - } - - - @Test - void testScenario0() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario1() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario2() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = new Door.DoorStateMachine(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index a665230..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = new Door.DoorStateMachine(); - } - - - @Test - void testScenario0() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.ajarPlus(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario1() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.ajarPlus(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario2() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = new Door.DoorStateMachine(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt deleted file mode 100644 index 1cfdbeb..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = new Door.DoorStateMachine(); - } - - - @Test - void testScenario0() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario1() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("ajarPlus"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario2() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.transition("preClose"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("close"); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.transition("preOpen"); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.transition("open"); - assertEquals(sm.getState(), Door.States.OPEN); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = new Door.DoorStateMachine(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index a665230..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,127 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import com.fasterxml.jackson.databind.ObjectMapper; - -class TestDoor { - @Test - void testInit() { - var fsm = new Door.DoorStateMachine(); - } - - - @Test - void testScenario0() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.ajarPlus(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario1() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.ajarPlus(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - @Test - void testScenario2() { - var sm = new Door.DoorStateMachine(); - sm.disableEvents(); - - - sm.preClose(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.close(); - assertEquals(sm.getState(), Door.States.CLOSE); - - sm.preOpen(); - assertEquals(sm.getState(), Door.States.AJAR); - - sm.open(); - assertEquals(sm.getState(), Door.States.OPEN); - - } - - @Test - void testJsonSchema() throws Exception { - var sm = new Door.DoorStateMachine(); - assertEquals(new ObjectMapper().readTree(""" - { - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] - } - """ - ), new ObjectMapper().readTree(sm.toJsonSchema())); - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index 9860945..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,29 +0,0 @@ -import {StaterStateMachineBuilder} from "./index.js"; - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(buildDoorFSMContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index a7527d9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,59 +0,0 @@ -import {StaterStateMachine} from "./index.js"; -import {StaterStateMachineBuilder} from "./index.js"; - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(buildDoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index e887eb6..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,19 +0,0 @@ -import {StaterStateMachineBuilder} from "./index.js"; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext({}) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index 2b3d743..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,49 +0,0 @@ -import {StaterStateMachine} from "./index.js"; -import {StaterStateMachineBuilder} from "./index.js"; - -class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext({}) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 9d83a9d..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,35 +0,0 @@ -import {StaterStateMachineBuilder} from "./index.js"; - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(buildDoorFSMContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index f0a01d3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,65 +0,0 @@ -import {StaterStateMachine} from "./index.js"; -import {StaterStateMachineBuilder} from "./index.js"; - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(buildDoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 60f5479..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,25 +0,0 @@ -import {StaterStateMachineBuilder} from "./index.js"; - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext({}) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index 5b93af7..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,55 +0,0 @@ -import {StaterStateMachine} from "./index.js"; -import {StaterStateMachineBuilder} from "./index.js"; - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext({}) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index 33712dc..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,61 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - "OPEN", - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index bb1eb45..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,85 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - "OPEN", - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index df53f9c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,51 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - {}, - "OPEN", - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 5ae8f81..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,75 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - {}, - "OPEN", - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index e5795c9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,67 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - States.OPEN, - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 3d1307e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,91 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - States.OPEN, - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index b4f3786..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,57 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - {}, - States.OPEN, - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 00336e3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,81 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - {}, - States.OPEN, - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index 9860945..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,29 +0,0 @@ -import {StaterStateMachineBuilder} from "./index.js"; - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(buildDoorFSMContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index a7527d9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,59 +0,0 @@ -import {StaterStateMachine} from "./index.js"; -import {StaterStateMachineBuilder} from "./index.js"; - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(buildDoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index e887eb6..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,19 +0,0 @@ -import {StaterStateMachineBuilder} from "./index.js"; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext({}) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index 2b3d743..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,49 +0,0 @@ -import {StaterStateMachine} from "./index.js"; -import {StaterStateMachineBuilder} from "./index.js"; - -class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext({}) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 9d83a9d..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,35 +0,0 @@ -import {StaterStateMachineBuilder} from "./index.js"; - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(buildDoorFSMContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index f0a01d3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,65 +0,0 @@ -import {StaterStateMachine} from "./index.js"; -import {StaterStateMachineBuilder} from "./index.js"; - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(buildDoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 60f5479..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,25 +0,0 @@ -import {StaterStateMachineBuilder} from "./index.js"; - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext({}) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index 5b93af7..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,55 +0,0 @@ -import {StaterStateMachine} from "./index.js"; -import {StaterStateMachineBuilder} from "./index.js"; - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext({}) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index 33712dc..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,61 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - "OPEN", - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index bb1eb45..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,85 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - "OPEN", - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index df53f9c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,51 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - {}, - "OPEN", - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 5ae8f81..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,75 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - {}, - "OPEN", - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index e5795c9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,67 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - States.OPEN, - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 3d1307e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,91 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -const buildDoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - States.OPEN, - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index b4f3786..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,57 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - {}, - States.OPEN, - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 00336e3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,81 +0,0 @@ -import {StaterStateMachine} from "./index.js"; - - -export const States = Object.freeze({ - OPEN: "OPEN", - AJAR: "AJAR", - CLOSE: "CLOSE" -}); - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - {}, - States.OPEN, - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt deleted file mode 100644 index 2712c5c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ /dev/null @@ -1,257 +0,0 @@ -import {builderDoorStateMachine} from "./Door.js"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - - -test('testSystemAppendStateTransition', () => { - let smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState('__test_state_1__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState('__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) -}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 547ac99..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,257 +0,0 @@ -import {builderDoorStateMachine} from "./Door.js"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - - -test('testSystemAppendStateTransition', () => { - let smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState('__test_state_1__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState('__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) -}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt deleted file mode 100644 index 2712c5c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ /dev/null @@ -1,257 +0,0 @@ -import {builderDoorStateMachine} from "./Door.js"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - - -test('testSystemAppendStateTransition', () => { - let smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState('__test_state_1__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState('__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) -}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 547ac99..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,257 +0,0 @@ -import {builderDoorStateMachine} from "./Door.js"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - - -test('testSystemAppendStateTransition', () => { - let smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState('__test_state_1__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState('__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) -}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt deleted file mode 100644 index b82440c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {builderDoorStateMachine} from "./Door.js"; -import {States} from "./Door.js"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 8079817..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {builderDoorStateMachine} from "./Door.js"; -import {States} from "./Door.js"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt deleted file mode 100644 index b82440c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {builderDoorStateMachine} from "./Door.js"; -import {States} from "./Door.js"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 8079817..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {builderDoorStateMachine} from "./Door.js"; -import {States} from "./Door.js"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt deleted file mode 100644 index c9364b1..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -import {DoorStateMachine} from "./Door.js"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 7c9897e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -import {DoorStateMachine} from "./Door.js"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt deleted file mode 100644 index c9364b1..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -import {DoorStateMachine} from "./Door.js"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 7c9897e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -import {DoorStateMachine} from "./Door.js"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt deleted file mode 100644 index d1e1405..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {DoorStateMachine} from "./Door.js"; -import {States} from "./Door.js"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 94ac6dd..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {DoorStateMachine} from "./Door.js"; -import {States} from "./Door.js"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt deleted file mode 100644 index d1e1405..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {DoorStateMachine} from "./Door.js"; -import {States} from "./Door.js"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 94ac6dd..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {DoorStateMachine} from "./Door.js"; -import {States} from "./Door.js"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index 5e1aa9b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,28 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(DoorFSMContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open") { it.degreeOfOpening >= 0 } - .setTransitionEvent("open") { it.degreeOfOpening = 100 } - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close") { it.degreeOfOpening <= 0 } - .setTransitionEvent("close") { it.degreeOfOpening = 0 } - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index af22212..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,90 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class TypesDoorStateMachine( - transitions: List>, - startState: String, - states: Set, - context: DoorFSMContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, -) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} - -private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open") { it.degreeOfOpening >= 0 } - .setTransitionEvent("open") { it.degreeOfOpening = 100 } - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close") { it.degreeOfOpening <= 0 } - .setTransitionEvent("close") { it.degreeOfOpening = 0 } - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index 68b580e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,13 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(EmptyContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index af4a437..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,75 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -class TypesDoorStateMachine( - transitions: List>, - startState: String, - states: Set, - context: EmptyContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, -) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} - -private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 503c334..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,34 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(DoorFSMContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open") { it.degreeOfOpening >= 0 } - .setTransitionEvent("open") { it.degreeOfOpening = 100 } - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close") { it.degreeOfOpening <= 0 } - .setTransitionEvent("close") { it.degreeOfOpening = 0 } - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index ba58150..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,96 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class TypesDoorStateMachine( - transitions: List>, - startState: States, - states: Set, - context: DoorFSMContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, -) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} - -private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open") { it.degreeOfOpening >= 0 } - .setTransitionEvent("open") { it.degreeOfOpening = 100 } - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close") { it.degreeOfOpening <= 0 } - .setTransitionEvent("close") { it.degreeOfOpening = 0 } - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index e7e94ae..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,19 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(EmptyContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index 85b593e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,81 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -class TypesDoorStateMachine( - transitions: List>, - startState: States, - states: Set, - context: EmptyContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, -) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} - -private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index 9ffd260..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,55 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR", - event = { it.degreeOfOpening = 1 } - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR", - event = { it.degreeOfOpening = 99 } - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN", - condition = { it.degreeOfOpening >= 0 }, - event = { it.degreeOfOpening = 100 } - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE", - condition = { it.degreeOfOpening <= 0 }, - event = { it.degreeOfOpening = 0 } - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR", - event = { it.degreeOfOpening = it.degreeOfOpening + 1 } - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR", - event = { it.degreeOfOpening = it.degreeOfOpening - 1 } - ) - ), - startState = "OPEN", - context = DoorFSMContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index 3577c6e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,62 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR", - event = { it.degreeOfOpening = 1 } - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR", - event = { it.degreeOfOpening = 99 } - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN", - condition = { it.degreeOfOpening >= 0 }, - event = { it.degreeOfOpening = 100 } - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE", - condition = { it.degreeOfOpening <= 0 }, - event = { it.degreeOfOpening = 0 } - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR", - event = { it.degreeOfOpening = it.degreeOfOpening + 1 } - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR", - event = { it.degreeOfOpening = it.degreeOfOpening - 1 } - ) - ), - startState = "OPEN", - context = DoorFSMContext() -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 82db949..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,40 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 0bbc2b5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,47 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = EmptyContext() -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index cab20c3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,61 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR, - event = { it.degreeOfOpening = 1 } - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR, - event = { it.degreeOfOpening = 99 } - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN, - condition = { it.degreeOfOpening >= 0 }, - event = { it.degreeOfOpening = 100 } - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE, - condition = { it.degreeOfOpening <= 0 }, - event = { it.degreeOfOpening = 0 } - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR, - event = { it.degreeOfOpening = it.degreeOfOpening + 1 } - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR, - event = { it.degreeOfOpening = it.degreeOfOpening - 1 } - ) - ), - startState = States.OPEN, - context = DoorFSMContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index bf90ee9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,68 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR, - event = { it.degreeOfOpening = 1 } - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR, - event = { it.degreeOfOpening = 99 } - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN, - condition = { it.degreeOfOpening >= 0 }, - event = { it.degreeOfOpening = 100 } - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE, - condition = { it.degreeOfOpening <= 0 }, - event = { it.degreeOfOpening = 0 } - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR, - event = { it.degreeOfOpening = it.degreeOfOpening + 1 } - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR, - event = { it.degreeOfOpening = it.degreeOfOpening - 1 } - ) - ), - startState = States.OPEN, - context = DoorFSMContext() -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 031c53f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,46 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 7840728..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,53 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = EmptyContext() -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index 5e1aa9b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,28 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(DoorFSMContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open") { it.degreeOfOpening >= 0 } - .setTransitionEvent("open") { it.degreeOfOpening = 100 } - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close") { it.degreeOfOpening <= 0 } - .setTransitionEvent("close") { it.degreeOfOpening = 0 } - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index af22212..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,90 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class TypesDoorStateMachine( - transitions: List>, - startState: String, - states: Set, - context: DoorFSMContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, -) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} - -private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open") { it.degreeOfOpening >= 0 } - .setTransitionEvent("open") { it.degreeOfOpening = 100 } - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close") { it.degreeOfOpening <= 0 } - .setTransitionEvent("close") { it.degreeOfOpening = 0 } - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index 68b580e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,13 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(EmptyContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index af4a437..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,75 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -class TypesDoorStateMachine( - transitions: List>, - startState: String, - states: Set, - context: EmptyContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, -) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} - -private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 503c334..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,34 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(DoorFSMContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open") { it.degreeOfOpening >= 0 } - .setTransitionEvent("open") { it.degreeOfOpening = 100 } - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close") { it.degreeOfOpening <= 0 } - .setTransitionEvent("close") { it.degreeOfOpening = 0 } - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index ba58150..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,96 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class TypesDoorStateMachine( - transitions: List>, - startState: States, - states: Set, - context: DoorFSMContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, -) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} - -private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(DoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open") { it.degreeOfOpening >= 0 } - .setTransitionEvent("open") { it.degreeOfOpening = 100 } - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close") { it.degreeOfOpening <= 0 } - .setTransitionEvent("close") { it.degreeOfOpening = 0 } - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index e7e94ae..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,19 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(EmptyContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index 85b593e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,81 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -class TypesDoorStateMachine( - transitions: List>, - startState: States, - states: Set, - context: EmptyContext, - transitionMiddlewares: Map>> = mapOf(), - transitionAllMiddlewares: List> = listOf(), - transitionCallbacks: Map>> = mapOf(), - transitionAllCallbacks: List> = listOf(), - stateCallbacks: Map>> = mapOf(), - stateAllCallbacks: List> = listOf(), - contextJsonAdapter: ContextJsonAdapter? = null, -) : StaterStateMachine( - transitions = transitions, - startState = startState, - states = states, - context = context, - transitionMiddlewares = transitionMiddlewares, - transitionAllMiddlewares = transitionAllMiddlewares, - transitionCallbacks = transitionCallbacks, - transitionAllCallbacks = transitionAllCallbacks, - stateCallbacks = stateCallbacks, - stateAllCallbacks = stateAllCallbacks, - contextJsonAdapter = contextJsonAdapter -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} - -private val typedDoorFactory: StateMachineFactory = { - transitionsA, - contextA, - startStateA, - statesA, - transitionMiddlewaresA, - transitionAllMiddlewaresA, - transitionCallbacksA, - transitionAllCallbacksA, - stateCallbacksA, - stateAllCallbacksA, - contextJsonAdapterA, - -> - TypesDoorStateMachine( - transitions = transitionsA, - context = contextA, - startState = startStateA, - states = statesA, - transitionMiddlewares = transitionMiddlewaresA, - transitionAllMiddlewares = transitionAllMiddlewaresA, - transitionCallbacks = transitionCallbacksA, - transitionAllCallbacks = transitionAllCallbacksA, - stateCallbacks = stateCallbacksA, - stateAllCallbacks = stateAllCallbacksA, - contextJsonAdapter = contextJsonAdapterA - ) -} - -val builderDoorStateMachine = StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index 9ffd260..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,55 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR", - event = { it.degreeOfOpening = 1 } - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR", - event = { it.degreeOfOpening = 99 } - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN", - condition = { it.degreeOfOpening >= 0 }, - event = { it.degreeOfOpening = 100 } - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE", - condition = { it.degreeOfOpening <= 0 }, - event = { it.degreeOfOpening = 0 } - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR", - event = { it.degreeOfOpening = it.degreeOfOpening + 1 } - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR", - event = { it.degreeOfOpening = it.degreeOfOpening - 1 } - ) - ), - startState = "OPEN", - context = DoorFSMContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index 3577c6e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,62 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR", - event = { it.degreeOfOpening = 1 } - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR", - event = { it.degreeOfOpening = 99 } - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN", - condition = { it.degreeOfOpening >= 0 }, - event = { it.degreeOfOpening = 100 } - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE", - condition = { it.degreeOfOpening <= 0 }, - event = { it.degreeOfOpening = 0 } - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR", - event = { it.degreeOfOpening = it.degreeOfOpening + 1 } - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR", - event = { it.degreeOfOpening = it.degreeOfOpening - 1 } - ) - ), - startState = "OPEN", - context = DoorFSMContext() -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 82db949..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,40 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 0bbc2b5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,47 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = "CLOSE", - end = "AJAR" - ), - Transition( - name = "preClose", - start = "OPEN", - end = "AJAR" - ), - Transition( - name = "open", - start = "AJAR", - end = "OPEN" - ), - Transition( - name = "close", - start = "AJAR", - end = "CLOSE" - ), - Transition( - name = "ajarPlus", - start = "AJAR", - end = "AJAR" - ), - Transition( - name = "ajarMinus", - start = "AJAR", - end = "AJAR" - ) - ), - startState = "OPEN", - context = EmptyContext() -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index cab20c3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,61 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR, - event = { it.degreeOfOpening = 1 } - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR, - event = { it.degreeOfOpening = 99 } - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN, - condition = { it.degreeOfOpening >= 0 }, - event = { it.degreeOfOpening = 100 } - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE, - condition = { it.degreeOfOpening <= 0 }, - event = { it.degreeOfOpening = 0 } - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR, - event = { it.degreeOfOpening = it.degreeOfOpening + 1 } - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR, - event = { it.degreeOfOpening = it.degreeOfOpening - 1 } - ) - ), - startState = States.OPEN, - context = DoorFSMContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index bf90ee9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,68 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -data class DoorFSMContext( - var degreeOfOpening: Int = 0, - var closeVariable: Boolean = true, - var doorName: String = "asd", - var floatVariable: Float = 0f -) : Context - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR, - event = { it.degreeOfOpening = 1 } - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR, - event = { it.degreeOfOpening = 99 } - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN, - condition = { it.degreeOfOpening >= 0 }, - event = { it.degreeOfOpening = 100 } - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE, - condition = { it.degreeOfOpening <= 0 }, - event = { it.degreeOfOpening = 0 } - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR, - event = { it.degreeOfOpening = it.degreeOfOpening + 1 } - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR, - event = { it.degreeOfOpening = it.degreeOfOpening - 1 } - ) - ), - startState = States.OPEN, - context = DoorFSMContext() -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 031c53f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,46 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = EmptyContext() -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 7840728..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,53 +0,0 @@ -package fsm.door - -import com.stater.statemachine.kotlin.* - -enum class States { - OPEN, - AJAR, - CLOSE -} - -class DoorStateMachine : StaterStateMachine( - transitions = listOf( - Transition( - name = "preOpen", - start = States.CLOSE, - end = States.AJAR - ), - Transition( - name = "preClose", - start = States.OPEN, - end = States.AJAR - ), - Transition( - name = "open", - start = States.AJAR, - end = States.OPEN - ), - Transition( - name = "close", - start = States.AJAR, - end = States.CLOSE - ), - Transition( - name = "ajarPlus", - start = States.AJAR, - end = States.AJAR - ), - Transition( - name = "ajarMinus", - start = States.AJAR, - end = States.AJAR - ) - ), - startState = States.OPEN, - context = EmptyContext() -) { - fun preOpen() = transition("preOpen") - fun preClose() = transition("preClose") - fun open() = transition("open") - fun close() = transition("close") - fun ajarPlus() = transition("ajarPlus") - fun ajarMinus() = transition("ajarMinus") -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt deleted file mode 100644 index 357f64e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ /dev/null @@ -1,265 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - builderDoorStateMachine.build() - } - - - @Test - fun testScenario0() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("ajarPlus") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario1() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("ajarPlus") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario2() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - - @Test - fun testJsonSchema() { - val sm = builderDoorStateMachine.build() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - - @Test - fun testSystemAppendStateTransition(){ - var smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState("__test_state_1__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState("__test_state_2__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 5285b4f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,265 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - builderDoorStateMachine.build() as TypesDoorStateMachine - } - - - @Test - fun testScenario0() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.ajarPlus() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario1() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.ajarPlus() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario2() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - - @Test - fun testJsonSchema() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - - @Test - fun testSystemAppendStateTransition(){ - var smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState("__test_state_1__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState("__test_state_2__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt deleted file mode 100644 index 357f64e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ /dev/null @@ -1,265 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - builderDoorStateMachine.build() - } - - - @Test - fun testScenario0() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("ajarPlus") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario1() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("ajarPlus") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario2() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - - @Test - fun testJsonSchema() { - val sm = builderDoorStateMachine.build() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - - @Test - fun testSystemAppendStateTransition(){ - var smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState("__test_state_1__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState("__test_state_2__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 5285b4f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,265 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - builderDoorStateMachine.build() as TypesDoorStateMachine - } - - - @Test - fun testScenario0() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.ajarPlus() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario1() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.ajarPlus() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario2() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - - @Test - fun testJsonSchema() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - - @Test - fun testSystemAppendStateTransition(){ - var smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState("__test_state_1__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState("__test_state_2__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt deleted file mode 100644 index a15095f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - builderDoorStateMachine.build() - } - - - @Test - fun testScenario0() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("ajarPlus") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario1() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("ajarPlus") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario2() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - - @Test - fun testJsonSchema() { - val sm = builderDoorStateMachine.build() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 3a5c5b2..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - builderDoorStateMachine.build() as TypesDoorStateMachine - } - - - @Test - fun testScenario0() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.ajarPlus() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario1() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.ajarPlus() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario2() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - - @Test - fun testJsonSchema() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt deleted file mode 100644 index a15095f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - builderDoorStateMachine.build() - } - - - @Test - fun testScenario0() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("ajarPlus") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario1() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("ajarPlus") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario2() { - val sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - - @Test - fun testJsonSchema() { - val sm = builderDoorStateMachine.build() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 3a5c5b2..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - builderDoorStateMachine.build() as TypesDoorStateMachine - } - - - @Test - fun testScenario0() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.ajarPlus() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario1() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.ajarPlus() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario2() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - - @Test - fun testJsonSchema() { - val sm = builderDoorStateMachine.build() as TypesDoorStateMachine - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt deleted file mode 100644 index b779122..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - DoorStateMachine() - } - - - @Test - fun testScenario0() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("ajarPlus") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario1() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("ajarPlus") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario2() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - - @Test - fun testJsonSchema() { - val sm = DoorStateMachine() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 2c2922a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - DoorStateMachine() - } - - - @Test - fun testScenario0() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.ajarPlus() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario1() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.ajarPlus() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario2() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - - @Test - fun testJsonSchema() { - val sm = DoorStateMachine() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt deleted file mode 100644 index b779122..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - DoorStateMachine() - } - - - @Test - fun testScenario0() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("ajarPlus") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario1() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("ajarPlus") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario2() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), "AJAR") - - sm.transition("close") - assertEquals(sm.getState(), "CLOSE") - - sm.transition("preOpen") - assertEquals(sm.getState(), "AJAR") - - sm.transition("open") - assertEquals(sm.getState(), "OPEN") - - } - - @Test - fun testJsonSchema() { - val sm = DoorStateMachine() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 2c2922a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - DoorStateMachine() - } - - - @Test - fun testScenario0() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.ajarPlus() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario1() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.ajarPlus() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - @Test - fun testScenario2() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), "AJAR") - - sm.close() - assertEquals(sm.getState(), "CLOSE") - - sm.preOpen() - assertEquals(sm.getState(), "AJAR") - - sm.open() - assertEquals(sm.getState(), "OPEN") - - } - - @Test - fun testJsonSchema() { - val sm = DoorStateMachine() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt deleted file mode 100644 index e7234ed..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - DoorStateMachine() - } - - - @Test - fun testScenario0() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("ajarPlus") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario1() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("ajarPlus") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario2() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - - @Test - fun testJsonSchema() { - val sm = DoorStateMachine() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 2c6252e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - DoorStateMachine() - } - - - @Test - fun testScenario0() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.ajarPlus() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario1() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.ajarPlus() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario2() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - - @Test - fun testJsonSchema() { - val sm = DoorStateMachine() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt deleted file mode 100644 index e7234ed..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - DoorStateMachine() - } - - - @Test - fun testScenario0() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("ajarPlus") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario1() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("ajarPlus") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario2() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.transition("preClose") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("close") - assertEquals(sm.getState(), States.CLOSE) - - sm.transition("preOpen") - assertEquals(sm.getState(), States.AJAR) - - sm.transition("open") - assertEquals(sm.getState(), States.OPEN) - - } - - @Test - fun testJsonSchema() { - val sm = DoorStateMachine() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 2c6252e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,125 +0,0 @@ -package fsm.door; - -import org.junit.jupiter.api.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import com.fasterxml.jackson.databind.ObjectMapper - -class TestDoor { - @Test - fun testInit() { - DoorStateMachine() - } - - - @Test - fun testScenario0() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.ajarPlus() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario1() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.ajarPlus() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - @Test - fun testScenario2() { - val sm = DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - assertEquals(sm.getState(), States.AJAR) - - sm.close() - assertEquals(sm.getState(), States.CLOSE) - - sm.preOpen() - assertEquals(sm.getState(), States.AJAR) - - sm.open() - assertEquals(sm.getState(), States.OPEN) - - } - - @Test - fun testJsonSchema() { - val sm = DoorStateMachine() - assertEquals(ObjectMapper().readTree("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}"""), ObjectMapper().readTree(sm.toJsonSchema())) - } - - -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index 029c210..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,30 +0,0 @@ -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachineBuilder - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -builder_Door_state_machine = ( - StaterStateMachineBuilder[str, DoorFSMContext]() - .set_start_state("OPEN") - .set_context(DoorFSMContext()) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index 6e2adb8..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,57 +0,0 @@ -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import StaterStateMachineBuilder - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - - -class TypesDoorStateMachine(StaterStateMachine[str, DoorFSMContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - -def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(*args, **kwargs) - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[str, DoorFSMContext]() - .set_start_state("OPEN") - .set_context(DoorFSMContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index e08c6e5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,23 +0,0 @@ -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachineBuilder - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[str, EmptyContext]() - .set_start_state("OPEN") - .set_context(EmptyContext()) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index 68e9f42..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,50 +0,0 @@ -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import StaterStateMachineBuilder - - - -class TypesDoorStateMachine(StaterStateMachine[str, EmptyContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - -def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(*args, **kwargs) - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[str, EmptyContext]() - .set_start_state("OPEN") - .set_context(EmptyContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 863ea0a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,37 +0,0 @@ -from enum import Enum -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachineBuilder - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -builder_Door_state_machine = ( - StaterStateMachineBuilder[States, DoorFSMContext]() - .set_start_state(States.OPEN) - .set_context(DoorFSMContext()) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 76db2a5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,64 +0,0 @@ -from enum import Enum -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import StaterStateMachineBuilder - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - - -class TypesDoorStateMachine(StaterStateMachine[States, DoorFSMContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - -def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(*args, **kwargs) - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[States, DoorFSMContext]() - .set_start_state(States.OPEN) - .set_context(DoorFSMContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 58ddd62..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,30 +0,0 @@ -from enum import Enum -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachineBuilder - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[States, EmptyContext]() - .set_start_state(States.OPEN) - .set_context(EmptyContext()) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index aad3826..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,57 +0,0 @@ -from enum import Enum -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import StaterStateMachineBuilder - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - -class TypesDoorStateMachine(StaterStateMachine[States, EmptyContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - -def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(*args, **kwargs) - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[States, EmptyContext]() - .set_start_state(States.OPEN) - .set_context(EmptyContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index db7dec8..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,58 +0,0 @@ -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=DoorFSMContext(), - start_state="OPEN", - ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index f95e90e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,76 +0,0 @@ -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=DoorFSMContext(), - start_state="OPEN", - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 2d83491..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,51 +0,0 @@ -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class DoorStateMachine(StaterStateMachine[str, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=EmptyContext(), - start_state="OPEN", - ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 11251eb..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,69 +0,0 @@ -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class DoorStateMachine(StaterStateMachine[str, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=EmptyContext(), - start_state="OPEN", - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index 8c0dba5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,65 +0,0 @@ -from enum import Enum -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=DoorFSMContext(), - start_state=States.OPEN, - ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 5edb446..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,83 +0,0 @@ -from enum import Enum -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=DoorFSMContext(), - start_state=States.OPEN, - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 92f3569..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,58 +0,0 @@ -from enum import Enum -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorStateMachine(StaterStateMachine[States, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=EmptyContext(), - start_state=States.OPEN, - ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index be60674..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,76 +0,0 @@ -from enum import Enum -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorStateMachine(StaterStateMachine[States, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=EmptyContext(), - start_state=States.OPEN, - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index 029c210..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,30 +0,0 @@ -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachineBuilder - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -builder_Door_state_machine = ( - StaterStateMachineBuilder[str, DoorFSMContext]() - .set_start_state("OPEN") - .set_context(DoorFSMContext()) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index 6e2adb8..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,57 +0,0 @@ -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import StaterStateMachineBuilder - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - - -class TypesDoorStateMachine(StaterStateMachine[str, DoorFSMContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - -def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(*args, **kwargs) - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[str, DoorFSMContext]() - .set_start_state("OPEN") - .set_context(DoorFSMContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index e08c6e5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,23 +0,0 @@ -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachineBuilder - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[str, EmptyContext]() - .set_start_state("OPEN") - .set_context(EmptyContext()) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index 68e9f42..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,50 +0,0 @@ -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import StaterStateMachineBuilder - - - -class TypesDoorStateMachine(StaterStateMachine[str, EmptyContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - -def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(*args, **kwargs) - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[str, EmptyContext]() - .set_start_state("OPEN") - .set_context(EmptyContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 863ea0a..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,37 +0,0 @@ -from enum import Enum -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachineBuilder - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -builder_Door_state_machine = ( - StaterStateMachineBuilder[States, DoorFSMContext]() - .set_start_state(States.OPEN) - .set_context(DoorFSMContext()) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 76db2a5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,64 +0,0 @@ -from enum import Enum -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import StaterStateMachineBuilder - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - - -class TypesDoorStateMachine(StaterStateMachine[States, DoorFSMContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - -def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(*args, **kwargs) - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[States, DoorFSMContext]() - .set_start_state(States.OPEN) - .set_context(DoorFSMContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 58ddd62..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,30 +0,0 @@ -from enum import Enum -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachineBuilder - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[States, EmptyContext]() - .set_start_state(States.OPEN) - .set_context(EmptyContext()) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index aad3826..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,57 +0,0 @@ -from enum import Enum -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import StaterStateMachineBuilder - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - - -class TypesDoorStateMachine(StaterStateMachine[States, EmptyContext]): - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") - - -def typed_Door_factory(*args, **kwargs): - return TypesDoorStateMachine(*args, **kwargs) - - -builder_Door_state_machine = ( - StaterStateMachineBuilder[States, EmptyContext]() - .set_start_state(States.OPEN) - .set_context(EmptyContext()) - .set_factory(typed_Door_factory) - .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) - .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) - .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) - .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) - .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) - .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) -) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index db7dec8..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,58 +0,0 @@ -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=DoorFSMContext(), - start_state="OPEN", - ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index f95e90e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,76 +0,0 @@ -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=DoorFSMContext(), - start_state="OPEN", - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 2d83491..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,51 +0,0 @@ -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class DoorStateMachine(StaterStateMachine[str, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=EmptyContext(), - start_state="OPEN", - ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 11251eb..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,69 +0,0 @@ -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class DoorStateMachine(StaterStateMachine[str, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=EmptyContext(), - start_state="OPEN", - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index 8c0dba5..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,65 +0,0 @@ -from enum import Enum -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=DoorFSMContext(), - start_state=States.OPEN, - ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 5edb446..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,83 +0,0 @@ -from enum import Enum -from pydantic import BaseModel -from stater_state_machine import Context -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorFSMContext(BaseModel, Context): - degreeOfOpening: int = 0 - closeVariable: bool = True - doorName: str = "asd" - floatVariable: float = 0 - -class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=DoorFSMContext(), - start_state=States.OPEN, - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 92f3569..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,58 +0,0 @@ -from enum import Enum -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorStateMachine(StaterStateMachine[States, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=EmptyContext(), - start_state=States.OPEN, - ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index be60674..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,76 +0,0 @@ -from enum import Enum -from stater_state_machine import EmptyContext -from stater_state_machine import StaterStateMachine -from stater_state_machine import Transition - - -class States(Enum): - OPEN = "OPEN" - AJAR = "AJAR" - CLOSE = "CLOSE" - - -class DoorStateMachine(StaterStateMachine[States, EmptyContext]): - def __init__(self): - super().__init__( - transitions=[ - Transition( - name="preOpen", - start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) - ), - Transition( - name="preClose", - start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) - ), - Transition( - name="open", - start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) - ), - Transition( - name="close", - start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) - ), - Transition( - name="ajarPlus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) - ), - Transition( - name="ajarMinus", - start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) - ) - ], - context=EmptyContext(), - start_state=States.OPEN, - ) - - def preOpen(self): - self.transition("preOpen") - - def preClose(self): - self.transition("preClose") - - def open(self): - self.transition("open") - - def close(self): - self.transition("close") - - def ajarPlus(self): - self.transition("ajarPlus") - - def ajarMinus(self): - self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt deleted file mode 100644 index df80b47..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ /dev/null @@ -1,251 +0,0 @@ -import json - -from .Door import builder_Door_state_machine - - -def test_init(): - builder_Door_state_machine.build() - - -def test_scenario_0(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('ajarPlus') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_scenario_1(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('ajarPlus') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_scenario_2(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_json_schema(): - sm = builder_Door_state_machine.build() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - - -def test_system_append_state_transition(): - sm_builder = builder_Door_state_machine - - sm_builder = sm_builder.add_state('__test_state_1__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) - - sm_builder = sm_builder.add_state('__test_state_2__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) - - sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 8c02cb3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,251 +0,0 @@ -import json - -from .Door import builder_Door_state_machine - - -def test_init(): - builder_Door_state_machine.build() - - -def test_scenario_0(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.ajarPlus() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_scenario_1(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.ajarPlus() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_scenario_2(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_json_schema(): - sm = builder_Door_state_machine.build() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - - -def test_system_append_state_transition(): - sm_builder = builder_Door_state_machine - - sm_builder = sm_builder.add_state('__test_state_1__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) - - sm_builder = sm_builder.add_state('__test_state_2__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) - - sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt deleted file mode 100644 index df80b47..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ /dev/null @@ -1,251 +0,0 @@ -import json - -from .Door import builder_Door_state_machine - - -def test_init(): - builder_Door_state_machine.build() - - -def test_scenario_0(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('ajarPlus') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_scenario_1(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('ajarPlus') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_scenario_2(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_json_schema(): - sm = builder_Door_state_machine.build() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - - -def test_system_append_state_transition(): - sm_builder = builder_Door_state_machine - - sm_builder = sm_builder.add_state('__test_state_1__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) - - sm_builder = sm_builder.add_state('__test_state_2__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) - - sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 8c02cb3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,251 +0,0 @@ -import json - -from .Door import builder_Door_state_machine - - -def test_init(): - builder_Door_state_machine.build() - - -def test_scenario_0(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.ajarPlus() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_scenario_1(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.ajarPlus() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_scenario_2(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_json_schema(): - sm = builder_Door_state_machine.build() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - - -def test_system_append_state_transition(): - sm_builder = builder_Door_state_machine - - sm_builder = sm_builder.add_state('__test_state_1__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) - - sm_builder = sm_builder.add_state('__test_state_2__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) - - sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') - assert json.loads("""{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt deleted file mode 100644 index 1ea3f75..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -import json - -from .Door import builder_Door_state_machine -from .Door import States - - -def test_init(): - builder_Door_state_machine.build() - - -def test_scenario_0(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('ajarPlus') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_scenario_1(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('ajarPlus') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_scenario_2(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_json_schema(): - sm = builder_Door_state_machine.build() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 5f4e37b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -import json - -from .Door import builder_Door_state_machine -from .Door import States - - -def test_init(): - builder_Door_state_machine.build() - - -def test_scenario_0(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.ajarPlus() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_scenario_1(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.ajarPlus() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_scenario_2(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_json_schema(): - sm = builder_Door_state_machine.build() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt deleted file mode 100644 index 1ea3f75..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -import json - -from .Door import builder_Door_state_machine -from .Door import States - - -def test_init(): - builder_Door_state_machine.build() - - -def test_scenario_0(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('ajarPlus') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_scenario_1(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('ajarPlus') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_scenario_2(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_json_schema(): - sm = builder_Door_state_machine.build() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 5f4e37b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -import json - -from .Door import builder_Door_state_machine -from .Door import States - - -def test_init(): - builder_Door_state_machine.build() - - -def test_scenario_0(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.ajarPlus() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_scenario_1(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.ajarPlus() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_scenario_2(): - sm = builder_Door_state_machine.build() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_json_schema(): - sm = builder_Door_state_machine.build() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt deleted file mode 100644 index 9f04d6d..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ /dev/null @@ -1,112 +0,0 @@ -import json - -from .Door import DoorStateMachine - - -def test_init(): - DoorStateMachine() - - -def test_scenario_0(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('ajarPlus') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_scenario_1(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('ajarPlus') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_scenario_2(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_json_schema(): - sm = DoorStateMachine() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 9b8217f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,112 +0,0 @@ -import json - -from .Door import DoorStateMachine - - -def test_init(): - DoorStateMachine() - - -def test_scenario_0(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.ajarPlus() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_scenario_1(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.ajarPlus() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_scenario_2(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_json_schema(): - sm = DoorStateMachine() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt deleted file mode 100644 index 9f04d6d..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ /dev/null @@ -1,112 +0,0 @@ -import json - -from .Door import DoorStateMachine - - -def test_init(): - DoorStateMachine() - - -def test_scenario_0(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('ajarPlus') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_scenario_1(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('ajarPlus') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_scenario_2(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == "AJAR" - - sm.transition('close') - assert sm.get_state() == "CLOSE" - - sm.transition('preOpen') - assert sm.get_state() == "AJAR" - - sm.transition('open') - assert sm.get_state() == "OPEN" - - -def test_json_schema(): - sm = DoorStateMachine() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 9b8217f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,112 +0,0 @@ -import json - -from .Door import DoorStateMachine - - -def test_init(): - DoorStateMachine() - - -def test_scenario_0(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.ajarPlus() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_scenario_1(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.ajarPlus() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_scenario_2(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == "AJAR" - - sm.close() - assert sm.get_state() == "CLOSE" - - sm.preOpen() - assert sm.get_state() == "AJAR" - - sm.open() - assert sm.get_state() == "OPEN" - - -def test_json_schema(): - sm = DoorStateMachine() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt deleted file mode 100644 index d8ae62f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -import json - -from .Door import DoorStateMachine -from .Door import States - - -def test_init(): - DoorStateMachine() - - -def test_scenario_0(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('ajarPlus') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_scenario_1(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('ajarPlus') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_scenario_2(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_json_schema(): - sm = DoorStateMachine() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index bec93d3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -import json - -from .Door import DoorStateMachine -from .Door import States - - -def test_init(): - DoorStateMachine() - - -def test_scenario_0(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.ajarPlus() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_scenario_1(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.ajarPlus() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_scenario_2(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_json_schema(): - sm = DoorStateMachine() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt deleted file mode 100644 index d8ae62f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -import json - -from .Door import DoorStateMachine -from .Door import States - - -def test_init(): - DoorStateMachine() - - -def test_scenario_0(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('ajarPlus') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_scenario_1(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('ajarPlus') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_scenario_2(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.transition('preClose') - assert sm.get_state() == States.AJAR - - sm.transition('close') - assert sm.get_state() == States.CLOSE - - sm.transition('preOpen') - assert sm.get_state() == States.AJAR - - sm.transition('open') - assert sm.get_state() == States.OPEN - - -def test_json_schema(): - sm = DoorStateMachine() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index bec93d3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,113 +0,0 @@ -import json - -from .Door import DoorStateMachine -from .Door import States - - -def test_init(): - DoorStateMachine() - - -def test_scenario_0(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.ajarPlus() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_scenario_1(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.ajarPlus() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_scenario_2(): - sm = DoorStateMachine() - sm.disable_events() - - - sm.preClose() - assert sm.get_state() == States.AJAR - - sm.close() - assert sm.get_state() == States.CLOSE - - sm.preOpen() - assert sm.get_state() == States.AJAR - - sm.open() - assert sm.get_state() == States.OPEN - - -def test_json_schema(): - sm = DoorStateMachine() - assert json.loads("""{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}""") == json.loads(sm.to_json_schema()) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index c3a3fd3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,37 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(buildDoorFSMContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index 1cee7c3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,70 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { - return new TypesDoorStateMachine(...args); -}; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(buildDoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index 28b7a2d..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,12 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new EmptyContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index efd53ad..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,45 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { - return new TypesDoorStateMachine(...args); -}; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 759409e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,43 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(buildDoorFSMContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index adfa16c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,76 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { - return new TypesDoorStateMachine(...args); -}; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(buildDoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 5683fd3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,18 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new EmptyContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index 133b5fa..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,51 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -export class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { - return new TypesDoorStateMachine(...args); -}; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index bc5a550..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,69 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - "OPEN", - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index 2f9d2c1..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,94 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - "OPEN", - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 9624b89..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,44 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR" - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR" - }, - { - name: "open", - start: "AJAR", - end: "OPEN" - }, - { - name: "close", - start: "AJAR", - end: "CLOSE" - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR" - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR" - } - ], - new EmptyContext(), - "OPEN", - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 348d999..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,69 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR" - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR" - }, - { - name: "open", - start: "AJAR", - end: "OPEN" - }, - { - name: "close", - start: "AJAR", - end: "CLOSE" - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR" - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR" - } - ], - new EmptyContext(), - "OPEN", - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index a530460..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,75 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - States.OPEN, - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index e0f9cc8..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,100 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - States.OPEN, - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 4cdf26b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,50 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR - } - ], - new EmptyContext(), - States.OPEN, - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 2d48518..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,75 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR - } - ], - new EmptyContext(), - States.OPEN, - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt deleted file mode 100644 index c3a3fd3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ /dev/null @@ -1,37 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(buildDoorFSMContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt deleted file mode 100644 index 1cee7c3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,70 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { - return new TypesDoorStateMachine(...args); -}; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(buildDoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt deleted file mode 100644 index 28b7a2d..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ /dev/null @@ -1,12 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new EmptyContext()) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt deleted file mode 100644 index efd53ad..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ /dev/null @@ -1,45 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { - return new TypesDoorStateMachine(...args); -}; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState("OPEN") - .setContext(new EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", "CLOSE", "AJAR") - .addTransition("preClose", "OPEN", "AJAR") - .addTransition("open", "AJAR", "OPEN") - .addTransition("close", "AJAR", "CLOSE") - .addTransition("ajarPlus", "AJAR", "AJAR") - .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt deleted file mode 100644 index 759409e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ /dev/null @@ -1,43 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(buildDoorFSMContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt deleted file mode 100644 index adfa16c..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,76 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { - return new TypesDoorStateMachine(...args); -}; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(buildDoorFSMContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) - .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) - .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) - .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt deleted file mode 100644 index 5683fd3..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ /dev/null @@ -1,18 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new EmptyContext()) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt deleted file mode 100644 index 133b5fa..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,51 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; -import {StaterStateMachineBuilder} from "./StaterStateMachine"; - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -export class TypesDoorStateMachine extends StaterStateMachine { - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} - -const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { - return new TypesDoorStateMachine(...args); -}; - -export const builderDoorStateMachine = new StaterStateMachineBuilder() - .setStartState(States.OPEN) - .setContext(new EmptyContext()) - .setFactory(typedDoorFactory) - .addTransition("preOpen", States.CLOSE, States.AJAR) - .addTransition("preClose", States.OPEN, States.AJAR) - .addTransition("open", States.AJAR, States.OPEN) - .addTransition("close", States.AJAR, States.CLOSE) - .addTransition("ajarPlus", States.AJAR, States.AJAR) - .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt deleted file mode 100644 index bc5a550..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ /dev/null @@ -1,69 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - "OPEN", - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt deleted file mode 100644 index 2f9d2c1..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,94 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - "OPEN", - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt deleted file mode 100644 index 9624b89..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ /dev/null @@ -1,44 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR" - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR" - }, - { - name: "open", - start: "AJAR", - end: "OPEN" - }, - { - name: "close", - start: "AJAR", - end: "CLOSE" - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR" - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR" - } - ], - new EmptyContext(), - "OPEN", - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt deleted file mode 100644 index 348d999..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ /dev/null @@ -1,69 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: "CLOSE", - end: "AJAR" - }, - { - name: "preClose", - start: "OPEN", - end: "AJAR" - }, - { - name: "open", - start: "AJAR", - end: "OPEN" - }, - { - name: "close", - start: "AJAR", - end: "CLOSE" - }, - { - name: "ajarPlus", - start: "AJAR", - end: "AJAR" - }, - { - name: "ajarMinus", - start: "AJAR", - end: "AJAR" - } - ], - new EmptyContext(), - "OPEN", - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt deleted file mode 100644 index a530460..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ /dev/null @@ -1,75 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - States.OPEN, - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt deleted file mode 100644 index e0f9cc8..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,100 +0,0 @@ -import {Context} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -interface DoorFSMContext extends Context { - degreeOfOpening: number - closeVariable: boolean - doorName: string - floatVariable: number -} - -const buildDoorFSMContext: () => DoorFSMContext = () => { - return { - degreeOfOpening: 0, - closeVariable: true, - doorName: "asd", - floatVariable: 0 - } -} - - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } - } - ], - buildDoorFSMContext(), - States.OPEN, - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt deleted file mode 100644 index 4cdf26b..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ /dev/null @@ -1,50 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR - } - ], - new EmptyContext(), - States.OPEN, - ) - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt deleted file mode 100644 index 2d48518..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,75 +0,0 @@ -import {EmptyContext} from "./StaterStateMachine"; -import {StateMachineFactory} from "./StaterStateMachine"; -import {StaterStateMachine} from "./StaterStateMachine"; - - -export enum States { - OPEN = "OPEN", - AJAR = "AJAR", - CLOSE = "CLOSE" -} - -export class DoorStateMachine extends StaterStateMachine { - constructor() { - super( - [ - { - name: "preOpen", - start: States.CLOSE, - end: States.AJAR - }, - { - name: "preClose", - start: States.OPEN, - end: States.AJAR - }, - { - name: "open", - start: States.AJAR, - end: States.OPEN - }, - { - name: "close", - start: States.AJAR, - end: States.CLOSE - }, - { - name: "ajarPlus", - start: States.AJAR, - end: States.AJAR - }, - { - name: "ajarMinus", - start: States.AJAR, - end: States.AJAR - } - ], - new EmptyContext(), - States.OPEN, - ) - } - - preOpen() { - this.transition("preOpen") - } - - preClose() { - this.transition("preClose") - } - - open() { - this.transition("open") - } - - close() { - this.transition("close") - } - - ajarPlus() { - this.transition("ajarPlus") - } - - ajarMinus() { - this.transition("ajarMinus") - } -} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt deleted file mode 100644 index b695a79..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ /dev/null @@ -1,257 +0,0 @@ -import {builderDoorStateMachine} from "./Door"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - - -test('testSystemAppendStateTransition', () => { - let smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState('__test_state_1__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState('__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) -}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index ff0da21..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,257 +0,0 @@ -import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; - - -test('testInit', () => { - builderDoorStateMachine.build() as TypesDoorStateMachine -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - - -test('testSystemAppendStateTransition', () => { - let smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState('__test_state_1__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState('__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) -}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt deleted file mode 100644 index b695a79..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ /dev/null @@ -1,257 +0,0 @@ -import {builderDoorStateMachine} from "./Door"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - - -test('testSystemAppendStateTransition', () => { - let smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState('__test_state_1__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState('__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) -}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt deleted file mode 100644 index ff0da21..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,257 +0,0 @@ -import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; - - -test('testInit', () => { - builderDoorStateMachine.build() as TypesDoorStateMachine -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - - -test('testSystemAppendStateTransition', () => { - let smBuilder = builderDoorStateMachine - - smBuilder = smBuilder.addState('__test_state_1__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addState('__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) - - smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') - expect(JSON.parse(`{ - "states": [ - "__test_state_1__", - "__test_state_2__", - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "__test_transition__", - "start": "__test_state_1__", - "end": "__test_state_2__" - } - ] -}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) -}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt deleted file mode 100644 index 03e7f2e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {builderDoorStateMachine} from "./Door"; -import {States} from "./Door"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 7d789b9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; -import {States} from "./Door"; - - -test('testInit', () => { - builderDoorStateMachine.build() as TypesDoorStateMachine -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt deleted file mode 100644 index 03e7f2e..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {builderDoorStateMachine} from "./Door"; -import {States} from "./Door"; - - -test('testInit', () => { - builderDoorStateMachine.build() -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 7d789b9..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; -import {States} from "./Door"; - - -test('testInit', () => { - builderDoorStateMachine.build() as TypesDoorStateMachine -}) - - - -test('testScenario0', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = builderDoorStateMachine.build() as TypesDoorStateMachine - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt deleted file mode 100644 index 349c13f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -import {DoorStateMachine} from "./Door"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt deleted file mode 100644 index 46957b2..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -import {DoorStateMachine} from "./Door"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt deleted file mode 100644 index 349c13f..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -import {DoorStateMachine} from "./Door"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('ajarPlus') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe("AJAR") - - sm.transition('close') - expect(sm.getState()).toBe("CLOSE") - - sm.transition('preOpen') - expect(sm.getState()).toBe("AJAR") - - sm.transition('open') - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt deleted file mode 100644 index 46957b2..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ /dev/null @@ -1,117 +0,0 @@ -import {DoorStateMachine} from "./Door"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.ajarPlus() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe("AJAR") - - sm.close() - expect(sm.getState()).toBe("CLOSE") - - sm.preOpen() - expect(sm.getState()).toBe("AJAR") - - sm.open() - expect(sm.getState()).toBe("OPEN") - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt deleted file mode 100644 index 9c4d633..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {DoorStateMachine} from "./Door"; -import {States} from "./Door"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt deleted file mode 100644 index 7806a77..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {DoorStateMachine} from "./Door"; -import {States} from "./Door"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt deleted file mode 100644 index 9c4d633..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {DoorStateMachine} from "./Door"; -import {States} from "./Door"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('ajarPlus') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.transition('preClose') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('close') - expect(sm.getState()).toBe(States.CLOSE) - - sm.transition('preOpen') - expect(sm.getState()).toBe(States.AJAR) - - sm.transition('open') - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt deleted file mode 100644 index 7806a77..0000000 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ /dev/null @@ -1,118 +0,0 @@ -import {DoorStateMachine} from "./Door"; -import {States} from "./Door"; - - -test('testInit', () => { - new DoorStateMachine() -}) - - - -test('testScenario0', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario1', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.ajarPlus() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - -test('testScenario2', () => { - const sm = new DoorStateMachine() - sm.disableEvents() - - - sm.preClose() - expect(sm.getState()).toBe(States.AJAR) - - sm.close() - expect(sm.getState()).toBe(States.CLOSE) - - sm.preOpen() - expect(sm.getState()).toBe(States.AJAR) - - sm.open() - expect(sm.getState()).toBe(States.OPEN) - -}) - - -test('testJsonSchema', () => { - const sm = new DoorStateMachine() - expect(JSON.parse(`{ - "states": [ - "AJAR", - "CLOSE", - "OPEN" - ], - "startState": "OPEN", - "transitions": [ - { - "name": "preOpen", - "start": "CLOSE", - "end": "AJAR" - }, - { - "name": "preClose", - "start": "OPEN", - "end": "AJAR" - }, - { - "name": "open", - "start": "AJAR", - "end": "OPEN" - }, - { - "name": "close", - "start": "AJAR", - "end": "CLOSE" - }, - { - "name": "ajarPlus", - "start": "AJAR", - "end": "AJAR" - }, - { - "name": "ajarMinus", - "start": "AJAR", - "end": "AJAR" - } - ] -}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) -}) - From 5b8030402d8bd7d43dfbe2036437182a7aaa2988 Mon Sep 17 00:00:00 2001 From: phoenix Date: Wed, 16 Apr 2025 20:33:43 +0300 Subject: [PATCH 63/69] Add cases and export json schema --- .github/workflows/project_tests.yml | 4 + ...rTests.BuilderContextGenerate.verified.txt | 29 ++++++ ...derContextGenerateWithContext.verified.txt | 0 ...rateDoorTests.BuilderGenerate.verified.txt | 0 ....BuilderGenerateWithInterface.verified.txt | 0 ...s.BuilderStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderStateGenerate.verified.txt | 0 ...derStateGenerateWithInterface.verified.txt | 0 ...oorTests.ClazzContextGenerate.verified.txt | 0 ...azzContextGenerateWithContext.verified.txt | 0 ...nerateDoorTests.ClazzGenerate.verified.txt | 0 ...ts.ClazzGenerateWithInterface.verified.txt | 0 ...sts.ClazzStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...eDoorTests.ClazzStateGenerate.verified.txt | 0 ...azzStateGenerateWithInterface.verified.txt | 0 ...s.BuilderTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderTestsGenerate.verified.txt | 0 ...derTestsGenerateWithInterface.verified.txt | 0 ...lderTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...sts.BuilderTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...sts.ClazzTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...sDoorTests.ClazzTestsGenerate.verified.txt | 0 ...azzTestsGenerateWithInterface.verified.txt | 0 ...lazzTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...Tests.ClazzTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...rTests.BuilderContextGenerate.verified.txt | 0 ...derContextGenerateWithContext.verified.txt | 0 ...rateDoorTests.BuilderGenerate.verified.txt | 0 ....BuilderGenerateWithInterface.verified.txt | 0 ...s.BuilderStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderStateGenerate.verified.txt | 0 ...derStateGenerateWithInterface.verified.txt | 0 ...oorTests.ClazzContextGenerate.verified.txt | 0 ...azzContextGenerateWithContext.verified.txt | 0 ...nerateDoorTests.ClazzGenerate.verified.txt | 0 ...ts.ClazzGenerateWithInterface.verified.txt | 0 ...sts.ClazzStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...eDoorTests.ClazzStateGenerate.verified.txt | 0 ...azzStateGenerateWithInterface.verified.txt | 0 ...s.BuilderTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderTestsGenerate.verified.txt | 0 ...derTestsGenerateWithInterface.verified.txt | 0 ...lderTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...sts.BuilderTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...sts.ClazzTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...sDoorTests.ClazzTestsGenerate.verified.txt | 0 ...azzTestsGenerateWithInterface.verified.txt | 0 ...lazzTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...Tests.ClazzTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...rTests.BuilderContextGenerate.verified.txt | 0 ...derContextGenerateWithContext.verified.txt | 0 ...rateDoorTests.BuilderGenerate.verified.txt | 0 ....BuilderGenerateWithInterface.verified.txt | 0 ...s.BuilderStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderStateGenerate.verified.txt | 0 ...derStateGenerateWithInterface.verified.txt | 0 ...oorTests.ClazzContextGenerate.verified.txt | 0 ...azzContextGenerateWithContext.verified.txt | 0 ...nerateDoorTests.ClazzGenerate.verified.txt | 0 ...ts.ClazzGenerateWithInterface.verified.txt | 0 ...sts.ClazzStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...eDoorTests.ClazzStateGenerate.verified.txt | 0 ...azzStateGenerateWithInterface.verified.txt | 0 ...s.BuilderTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderTestsGenerate.verified.txt | 0 ...derTestsGenerateWithInterface.verified.txt | 0 ...lderTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...sts.BuilderTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...sts.ClazzTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...eDoorTests.ClazzTestsGenerate.verified.txt | 0 ...azzTestsGenerateWithInterface.verified.txt | 0 ...lazzTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...Tests.ClazzTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...rTests.BuilderContextGenerate.verified.txt | 0 ...derContextGenerateWithContext.verified.txt | 0 ...rateDoorTests.BuilderGenerate.verified.txt | 0 ....BuilderGenerateWithInterface.verified.txt | 0 ...s.BuilderStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderStateGenerate.verified.txt | 0 ...derStateGenerateWithInterface.verified.txt | 0 ...oorTests.ClazzContextGenerate.verified.txt | 0 ...azzContextGenerateWithContext.verified.txt | 0 ...nerateDoorTests.ClazzGenerate.verified.txt | 0 ...ts.ClazzGenerateWithInterface.verified.txt | 0 ...sts.ClazzStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...eDoorTests.ClazzStateGenerate.verified.txt | 0 ...azzStateGenerateWithInterface.verified.txt | 0 ...s.BuilderTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderTestsGenerate.verified.txt | 0 ...derTestsGenerateWithInterface.verified.txt | 0 ...lderTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...sts.BuilderTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...sts.ClazzTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...sDoorTests.ClazzTestsGenerate.verified.txt | 0 ...azzTestsGenerateWithInterface.verified.txt | 0 ...lazzTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...Tests.ClazzTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...rTests.BuilderContextGenerate.verified.txt | 0 ...derContextGenerateWithContext.verified.txt | 0 ...rateDoorTests.BuilderGenerate.verified.txt | 0 ....BuilderGenerateWithInterface.verified.txt | 0 ...s.BuilderStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderStateGenerate.verified.txt | 0 ...derStateGenerateWithInterface.verified.txt | 0 ...oorTests.ClazzContextGenerate.verified.txt | 0 ...azzContextGenerateWithContext.verified.txt | 0 ...nerateDoorTests.ClazzGenerate.verified.txt | 0 ...ts.ClazzGenerateWithInterface.verified.txt | 0 ...sts.ClazzStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...eDoorTests.ClazzStateGenerate.verified.txt | 0 ...azzStateGenerateWithInterface.verified.txt | 0 ...s.BuilderTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderTestsGenerate.verified.txt | 0 ...derTestsGenerateWithInterface.verified.txt | 0 ...lderTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...sts.BuilderTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...sts.ClazzTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...sDoorTests.ClazzTestsGenerate.verified.txt | 0 ...azzTestsGenerateWithInterface.verified.txt | 0 ...lazzTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...Tests.ClazzTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...rTests.BuilderContextGenerate.verified.txt | 0 ...derContextGenerateWithContext.verified.txt | 0 ...rateDoorTests.BuilderGenerate.verified.txt | 0 ....BuilderGenerateWithInterface.verified.txt | 0 ...s.BuilderStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderStateGenerate.verified.txt | 0 ...derStateGenerateWithInterface.verified.txt | 0 ...oorTests.ClazzContextGenerate.verified.txt | 0 ...azzContextGenerateWithContext.verified.txt | 0 ...nerateDoorTests.ClazzGenerate.verified.txt | 0 ...ts.ClazzGenerateWithInterface.verified.txt | 0 ...sts.ClazzStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...eDoorTests.ClazzStateGenerate.verified.txt | 0 ...azzStateGenerateWithInterface.verified.txt | 0 ...s.BuilderTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderTestsGenerate.verified.txt | 0 ...derTestsGenerateWithInterface.verified.txt | 0 ...lderTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...sts.BuilderTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...sts.ClazzTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...sDoorTests.ClazzTestsGenerate.verified.txt | 0 ...azzTestsGenerateWithInterface.verified.txt | 0 ...lazzTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...Tests.ClazzTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...rTests.BuilderContextGenerate.verified.txt | 0 ...derContextGenerateWithContext.verified.txt | 0 ...rateDoorTests.BuilderGenerate.verified.txt | 0 ....BuilderGenerateWithInterface.verified.txt | 0 ...s.BuilderStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderStateGenerate.verified.txt | 0 ...derStateGenerateWithInterface.verified.txt | 0 ...oorTests.ClazzContextGenerate.verified.txt | 0 ...azzContextGenerateWithContext.verified.txt | 0 ...nerateDoorTests.ClazzGenerate.verified.txt | 0 ...ts.ClazzGenerateWithInterface.verified.txt | 0 ...sts.ClazzStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...eDoorTests.ClazzStateGenerate.verified.txt | 0 ...azzStateGenerateWithInterface.verified.txt | 0 ...s.BuilderTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...oorTests.BuilderTestsGenerate.verified.txt | 0 ...derTestsGenerateWithInterface.verified.txt | 0 ...lderTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...sts.BuilderTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 ...sts.ClazzTestsContextGenerate.verified.txt | 0 ...stsContextGenerateWithContext.verified.txt | 0 ...sDoorTests.ClazzTestsGenerate.verified.txt | 0 ...azzTestsGenerateWithInterface.verified.txt | 0 ...lazzTestsStateContextGenerate.verified.txt | 0 ...ateContextGenerateWithContext.verified.txt | 0 ...Tests.ClazzTestsStateGenerate.verified.txt | 0 ...stsStateGenerateWithInterface.verified.txt | 0 src/Stater.CodeGeneration/JsonLoader.cs | 52 ----------- src/Stater.Domain/Models/StateTransition.cs | 9 +- src/Stater/Plugin/ButtonFilePlugin.cs | 1 + src/Stater/Plugin/JsonCodeExportPlugin.cs | 18 ++++ src/Stater/Plugin/JsonCodeImportPlugin.cs | 6 +- src/Stater/Plugin/SLXPlugin.cs | 1 + src/Stater/TestData/BR_GATES_CH_schema.json | 90 +++++++++++++++++++ src/Stater/ViewModels/MainWindowViewModel.cs | 3 +- src/Stater/Views/MainWindow.axaml.cs | 48 +++++++--- 234 files changed, 192 insertions(+), 69 deletions(-) create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt create mode 100644 src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt delete mode 100644 src/Stater.CodeGeneration/JsonLoader.cs create mode 100644 src/Stater/Plugin/JsonCodeExportPlugin.cs create mode 100644 src/Stater/TestData/BR_GATES_CH_schema.json diff --git a/.github/workflows/project_tests.yml b/.github/workflows/project_tests.yml index bdd7a0c..6334ea9 100644 --- a/.github/workflows/project_tests.yml +++ b/.github/workflows/project_tests.yml @@ -1,5 +1,9 @@ name: c# Tests and Coverage +on: + push: + pull_request: + jobs: build-and-test: runs-on: ubuntu-latest diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..ff105a5 --- /dev/null +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,29 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new Door_context()) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/Stater.CodeGeneration/JsonLoader.cs b/src/Stater.CodeGeneration/JsonLoader.cs deleted file mode 100644 index 139ec5a..0000000 --- a/src/Stater.CodeGeneration/JsonLoader.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Newtonsoft.Json; -using Stater.Domain.Models; - -namespace Stater.CodeGeneration; - -public class JsonTransition(string name, string start, string end) -{ - public string Name { get; } = name; - public string Start { get; } = start; - public string End { get; } = end; -} - -public class JsonSchema -( - List states, - string startState, - List transitions -) -{ - public List States { get; } = states; - public string StartState { get; } = startState; - public List Transitions { get; } = transitions; -} - -public class JsonLoader -{ - public static StateMachine Load(string schema) - { - var schemaObject = JsonConvert.DeserializeObject(schema); - - var states = schemaObject.States.Select(x => - { - var state = new State() with { Name = x }; - if (x == schemaObject.StartState) - { - state = state with { Type = StateType.Start }; - } - - return state; - }).ToList(); - - var stateMachine = new StateMachine { States = states }; - - var transition = schemaObject.Transitions.Select(x => new Transition - { - Name = x.Name, Start = stateMachine.GetStateByName(x.Start)!.Guid, - End = stateMachine.GetStateByName(x.End)!.Guid - }).ToList(); - - return stateMachine with { Transitions = transition }; - } -} \ No newline at end of file diff --git a/src/Stater.Domain/Models/StateTransition.cs b/src/Stater.Domain/Models/StateTransition.cs index 78e89e5..cd41b99 100644 --- a/src/Stater.Domain/Models/StateTransition.cs +++ b/src/Stater.Domain/Models/StateTransition.cs @@ -4,4 +4,11 @@ public record StateTransition( State StartState, State EndState, Transition Transition -); \ No newline at end of file +) +{ + public StateTransition() : this( + null, null, null + ) + { + } +}; \ No newline at end of file diff --git a/src/Stater/Plugin/ButtonFilePlugin.cs b/src/Stater/Plugin/ButtonFilePlugin.cs index 6be38c4..49c9793 100644 --- a/src/Stater/Plugin/ButtonFilePlugin.cs +++ b/src/Stater/Plugin/ButtonFilePlugin.cs @@ -3,6 +3,7 @@ namespace Stater.Plugin; public abstract class ButtonFilePlugin : IPlugin { public abstract PluginOutput Start(PluginInput pluginInput, string path); + public abstract bool Directory { get; } public virtual string Name => "ButtonFilePlugin"; } \ No newline at end of file diff --git a/src/Stater/Plugin/JsonCodeExportPlugin.cs b/src/Stater/Plugin/JsonCodeExportPlugin.cs new file mode 100644 index 0000000..4edd78b --- /dev/null +++ b/src/Stater/Plugin/JsonCodeExportPlugin.cs @@ -0,0 +1,18 @@ +using System.IO; +using Stater.Domain.Json; + +namespace Stater.Plugin; + +public class JsonCodeExportPlugin : ButtonFilePlugin +{ + public override PluginOutput Start(PluginInput pluginInput, string path) + { + System.IO.Directory.CreateDirectory(path); + var jsonSchema = StateMachineJsonAdapter.ToJsonSchema(pluginInput.StateMachine); + File.WriteAllText(Path.Combine(path, pluginInput.StateMachine.Name + "_schema.json"), jsonSchema); + return PluginOutput.From("OK"); + } + + public override string Name => "Export json code"; + public override bool Directory => true; +} \ No newline at end of file diff --git a/src/Stater/Plugin/JsonCodeImportPlugin.cs b/src/Stater/Plugin/JsonCodeImportPlugin.cs index d2f3892..ec5f720 100644 --- a/src/Stater/Plugin/JsonCodeImportPlugin.cs +++ b/src/Stater/Plugin/JsonCodeImportPlugin.cs @@ -1,6 +1,5 @@ -using System.Collections.Generic; using System.IO; -using Stater.CodeGeneration; +using Stater.Domain.Json; namespace Stater.Plugin; @@ -12,7 +11,7 @@ public override PluginOutput Start(PluginInput pluginInput, string path) { var content = File.ReadAllText(path); var result = PluginOutput.From("OK"); - result.ChangedStateMachines.Add(JsonLoader.Load(content)); + result.ChangedStateMachines.Add(StateMachineJsonAdapter.FromJsonSchema(content)); return result; } @@ -20,4 +19,5 @@ public override PluginOutput Start(PluginInput pluginInput, string path) } public override string Name => "Import json code"; + public override bool Directory => false; } \ No newline at end of file diff --git a/src/Stater/Plugin/SLXPlugin.cs b/src/Stater/Plugin/SLXPlugin.cs index ebaf74d..7b73138 100644 --- a/src/Stater/Plugin/SLXPlugin.cs +++ b/src/Stater/Plugin/SLXPlugin.cs @@ -15,4 +15,5 @@ public override PluginOutput Start(PluginInput pluginInput, string file) } public override string Name => "SLXParser"; + public override bool Directory => false; } \ No newline at end of file diff --git a/src/Stater/TestData/BR_GATES_CH_schema.json b/src/Stater/TestData/BR_GATES_CH_schema.json new file mode 100644 index 0000000..2a44432 --- /dev/null +++ b/src/Stater/TestData/BR_GATES_CH_schema.json @@ -0,0 +1,90 @@ +{ + "states": [ + "B1", + "dt\nBxG3 = 0;", + "dt\nen: BxG1 = 0;", + "dt1\nen: BxG0 = 0;", + "dt1\nen: BxG2 = 0;", + "G0_G1", + "G2_G3", + "OFF\nen: BxG0 = 0;...\nBxG1 = 1;", + "OFF\nen: BxG2 = 0;...\nBxG3 = 1;", + "ON\nen: BxG0 = 1;...\nBxG1 = 0;", + "ON\nen: BxG2 = 1;...\nBxG3 = 0;", + "tri_state\nen: BxG0 = 0;...\nBxG1 = 0;\n", + "tri_state\nen: BxG2 = 0;...\nBxG3 = 0;\n" + ], + "startState": "G0_G1", + "transitions": [ + { + "name": "[BRx == 2 || ... \nBRx == 3]", + "start": "tri_state\nen: BxG0 = 0;...\nBxG1 = 0;\n", + "end": "OFF\nen: BxG0 = 0;...\nBxG1 = 1;" + }, + { + "name": "[BRx == 0]", + "start": "B1", + "end": "tri_state\nen: BxG0 = 0;...\nBxG1 = 0;\n" + }, + { + "name": "[BRx == 1 || ... \nBRx == 4]", + "start": "tri_state\nen: BxG0 = 0;...\nBxG1 = 0;\n", + "end": "ON\nen: BxG0 = 1;...\nBxG1 = 0;" + }, + { + "name": "[BRx == 1 || ... \nBRx == 4]", + "start": "OFF\nen: BxG0 = 0;...\nBxG1 = 1;", + "end": "dt\nen: BxG1 = 0;" + }, + { + "name": "[after(dt,tick)]", + "start": "dt1\nen: BxG0 = 0;", + "end": "OFF\nen: BxG0 = 0;...\nBxG1 = 1;" + }, + { + "name": "[after(dt,tick)]", + "start": "dt\nen: BxG1 = 0;", + "end": "ON\nen: BxG0 = 1;...\nBxG1 = 0;" + }, + { + "name": "[BRx == 2 || ... \nBRx == 3]", + "start": "ON\nen: BxG0 = 1;...\nBxG1 = 0;", + "end": "dt1\nen: BxG0 = 0;" + }, + { + "name": "[BRx == 1 || ... \nBRx == 2]", + "start": "tri_state\nen: BxG2 = 0;...\nBxG3 = 0;\n", + "end": "OFF\nen: BxG2 = 0;...\nBxG3 = 1;" + }, + { + "name": "[BRx == 0]", + "start": "B1", + "end": "tri_state\nen: BxG2 = 0;...\nBxG3 = 0;\n" + }, + { + "name": "[BRx == 3 || ... \nBRx == 4]", + "start": "tri_state\nen: BxG2 = 0;...\nBxG3 = 0;\n", + "end": "ON\nen: BxG2 = 1;...\nBxG3 = 0;" + }, + { + "name": "[BRx == 3 || ... \nBRx == 4]", + "start": "OFF\nen: BxG2 = 0;...\nBxG3 = 1;", + "end": "dt\nBxG3 = 0;" + }, + { + "name": "[after(dt,tick)]", + "start": "dt1\nen: BxG2 = 0;", + "end": "OFF\nen: BxG2 = 0;...\nBxG3 = 1;" + }, + { + "name": "[after(dt,tick)]", + "start": "dt\nBxG3 = 0;", + "end": "ON\nen: BxG2 = 1;...\nBxG3 = 0;" + }, + { + "name": "[BRx == 1 || ... \nBRx == 2]", + "start": "ON\nen: BxG2 = 1;...\nBxG3 = 0;", + "end": "dt1\nen: BxG2 = 0;" + } + ] +} \ No newline at end of file diff --git a/src/Stater/ViewModels/MainWindowViewModel.cs b/src/Stater/ViewModels/MainWindowViewModel.cs index 2f8fdc8..6f3865d 100644 --- a/src/Stater/ViewModels/MainWindowViewModel.cs +++ b/src/Stater/ViewModels/MainWindowViewModel.cs @@ -58,7 +58,8 @@ public MainWindowViewModel(IProjectManager projectManager, IEditorManager editor new() { new SLXPlugin(), - new JsonCodeImportPlugin() + new JsonCodeImportPlugin(), + new JsonCodeExportPlugin() }; private StateMachine _stateMachine; diff --git a/src/Stater/Views/MainWindow.axaml.cs b/src/Stater/Views/MainWindow.axaml.cs index f768a0b..d82f71b 100644 --- a/src/Stater/Views/MainWindow.axaml.cs +++ b/src/Stater/Views/MainWindow.axaml.cs @@ -50,20 +50,44 @@ private async void MenuItem_OnClick(object? sender, RoutedEventArgs e) var pluginMenu = (MenuItem)sender; var plugin = (ButtonFilePlugin)pluginMenu.DataContext; var topLevel = GetTopLevel(this); - var files = await topLevel.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + + + if (plugin.Directory) { - Title = "Open File", - AllowMultiple = false - }); + var files = await topLevel.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + { + Title = "Open Folder", + AllowMultiple = false + }); - if (files.Count < 1) return; + if (files.Count < 1) return; - var context = (MainWindowViewModel)DataContext; - context?.PluginButtinCommand.Execute( - new PathPluginDto( - Plugin: plugin, - Path: files[0].Path.ToString().Replace("file:/", "") - ) - ).Subscribe(); + var context = (MainWindowViewModel)DataContext; + context?.PluginButtinCommand.Execute( + new PathPluginDto( + Plugin: plugin, + Path: files[0].Path.ToString().Replace("file:/", "") + ) + ).Subscribe(); + } + else + { + + var files = await topLevel.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + { + Title = "Open File", + AllowMultiple = false + }); + + if (files.Count < 1) return; + + var context = (MainWindowViewModel)DataContext; + context?.PluginButtinCommand.Execute( + new PathPluginDto( + Plugin: plugin, + Path: files[0].Path.ToString().Replace("file:/", "") + ) + ).Subscribe(); + } } } \ No newline at end of file From 237318db8995c2ce0977e72aad3e6bdee04ab2c1 Mon Sep 17 00:00:00 2001 From: phoenix Date: Wed, 16 Apr 2025 20:37:00 +0300 Subject: [PATCH 64/69] Create cases --- Stater.sln.DotSettings.user | 20 +- ...derContextGenerateWithContext.verified.txt | 108 +++++++ ...rateDoorTests.BuilderGenerate.verified.txt | 13 + ....BuilderGenerateWithInterface.verified.txt | 92 ++++++ ...s.BuilderStateContextGenerate.verified.txt | 54 ++++ ...ateContextGenerateWithContext.verified.txt | 133 +++++++++ ...oorTests.BuilderStateGenerate.verified.txt | 38 +++ ...derStateGenerateWithInterface.verified.txt | 117 ++++++++ ...oorTests.ClazzContextGenerate.verified.txt | 65 ++++ ...azzContextGenerateWithContext.verified.txt | 88 ++++++ ...nerateDoorTests.ClazzGenerate.verified.txt | 57 ++++ ...ts.ClazzGenerateWithInterface.verified.txt | 80 +++++ ...sts.ClazzStateContextGenerate.verified.txt | 90 ++++++ ...ateContextGenerateWithContext.verified.txt | 113 +++++++ ...eDoorTests.ClazzStateGenerate.verified.txt | 82 ++++++ ...azzStateGenerateWithInterface.verified.txt | 105 +++++++ ...s.BuilderTestsContextGenerate.verified.txt | 254 ++++++++++++++++ ...stsContextGenerateWithContext.verified.txt | 259 ++++++++++++++++ ...oorTests.BuilderTestsGenerate.verified.txt | 254 ++++++++++++++++ ...derTestsGenerateWithInterface.verified.txt | 259 ++++++++++++++++ ...lderTestsStateContextGenerate.verified.txt | 114 +++++++ ...ateContextGenerateWithContext.verified.txt | 119 ++++++++ ...sts.BuilderTestsStateGenerate.verified.txt | 114 +++++++ ...stsStateGenerateWithInterface.verified.txt | 119 ++++++++ ...sts.ClazzTestsContextGenerate.verified.txt | 114 +++++++ ...stsContextGenerateWithContext.verified.txt | 114 +++++++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 114 +++++++ ...azzTestsGenerateWithInterface.verified.txt | 114 +++++++ ...lazzTestsStateContextGenerate.verified.txt | 114 +++++++ ...ateContextGenerateWithContext.verified.txt | 114 +++++++ ...Tests.ClazzTestsStateGenerate.verified.txt | 114 +++++++ ...stsStateGenerateWithInterface.verified.txt | 114 +++++++ ...rTests.BuilderContextGenerate.verified.txt | 30 ++ ...derContextGenerateWithContext.verified.txt | 114 +++++++ ...rateDoorTests.BuilderGenerate.verified.txt | 15 + ....BuilderGenerateWithInterface.verified.txt | 99 +++++++ ...s.BuilderStateContextGenerate.verified.txt | 36 +++ ...ateContextGenerateWithContext.verified.txt | 120 ++++++++ ...oorTests.BuilderStateGenerate.verified.txt | 21 ++ ...derStateGenerateWithInterface.verified.txt | 105 +++++++ ...oorTests.ClazzContextGenerate.verified.txt | 62 ++++ ...azzContextGenerateWithContext.verified.txt | 91 ++++++ ...nerateDoorTests.ClazzGenerate.verified.txt | 55 ++++ ...ts.ClazzGenerateWithInterface.verified.txt | 84 ++++++ ...sts.ClazzStateContextGenerate.verified.txt | 68 +++++ ...ateContextGenerateWithContext.verified.txt | 97 ++++++ ...eDoorTests.ClazzStateGenerate.verified.txt | 61 ++++ ...azzStateGenerateWithInterface.verified.txt | 90 ++++++ ...s.BuilderTestsContextGenerate.verified.txt | 278 ++++++++++++++++++ ...stsContextGenerateWithContext.verified.txt | 278 ++++++++++++++++++ ...oorTests.BuilderTestsGenerate.verified.txt | 278 ++++++++++++++++++ ...derTestsGenerateWithInterface.verified.txt | 278 ++++++++++++++++++ ...lderTestsStateContextGenerate.verified.txt | 131 +++++++++ ...ateContextGenerateWithContext.verified.txt | 131 +++++++++ ...sts.BuilderTestsStateGenerate.verified.txt | 131 +++++++++ ...stsStateGenerateWithInterface.verified.txt | 131 +++++++++ ...sts.ClazzTestsContextGenerate.verified.txt | 131 +++++++++ ...stsContextGenerateWithContext.verified.txt | 131 +++++++++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 131 +++++++++ ...azzTestsGenerateWithInterface.verified.txt | 131 +++++++++ ...lazzTestsStateContextGenerate.verified.txt | 131 +++++++++ ...ateContextGenerateWithContext.verified.txt | 131 +++++++++ ...Tests.ClazzTestsStateGenerate.verified.txt | 131 +++++++++ ...stsStateGenerateWithInterface.verified.txt | 131 +++++++++ ...rTests.BuilderContextGenerate.verified.txt | 31 ++ ...derContextGenerateWithContext.verified.txt | 89 ++++++ ...rateDoorTests.BuilderGenerate.verified.txt | 16 + ....BuilderGenerateWithInterface.verified.txt | 74 +++++ ...s.BuilderStateContextGenerate.verified.txt | 37 +++ ...ateContextGenerateWithContext.verified.txt | 95 ++++++ ...oorTests.BuilderStateGenerate.verified.txt | 22 ++ ...derStateGenerateWithInterface.verified.txt | 80 +++++ ...oorTests.ClazzContextGenerate.verified.txt | 66 +++++ ...azzContextGenerateWithContext.verified.txt | 90 ++++++ ...nerateDoorTests.ClazzGenerate.verified.txt | 59 ++++ ...ts.ClazzGenerateWithInterface.verified.txt | 83 ++++++ ...sts.ClazzStateContextGenerate.verified.txt | 72 +++++ ...ateContextGenerateWithContext.verified.txt | 96 ++++++ ...eDoorTests.ClazzStateGenerate.verified.txt | 65 ++++ ...azzStateGenerateWithInterface.verified.txt | 89 ++++++ ...s.BuilderTestsContextGenerate.verified.txt | 270 +++++++++++++++++ ...stsContextGenerateWithContext.verified.txt | 270 +++++++++++++++++ ...oorTests.BuilderTestsGenerate.verified.txt | 270 +++++++++++++++++ ...derTestsGenerateWithInterface.verified.txt | 270 +++++++++++++++++ ...lderTestsStateContextGenerate.verified.txt | 127 ++++++++ ...ateContextGenerateWithContext.verified.txt | 127 ++++++++ ...sts.BuilderTestsStateGenerate.verified.txt | 127 ++++++++ ...stsStateGenerateWithInterface.verified.txt | 127 ++++++++ ...sts.ClazzTestsContextGenerate.verified.txt | 127 ++++++++ ...stsContextGenerateWithContext.verified.txt | 127 ++++++++ ...eDoorTests.ClazzTestsGenerate.verified.txt | 127 ++++++++ ...azzTestsGenerateWithInterface.verified.txt | 127 ++++++++ ...lazzTestsStateContextGenerate.verified.txt | 127 ++++++++ ...ateContextGenerateWithContext.verified.txt | 127 ++++++++ ...Tests.ClazzTestsStateGenerate.verified.txt | 127 ++++++++ ...stsStateGenerateWithInterface.verified.txt | 127 ++++++++ ...rTests.BuilderContextGenerate.verified.txt | 29 ++ ...derContextGenerateWithContext.verified.txt | 59 ++++ ...rateDoorTests.BuilderGenerate.verified.txt | 19 ++ ....BuilderGenerateWithInterface.verified.txt | 49 +++ ...s.BuilderStateContextGenerate.verified.txt | 35 +++ ...ateContextGenerateWithContext.verified.txt | 65 ++++ ...oorTests.BuilderStateGenerate.verified.txt | 25 ++ ...derStateGenerateWithInterface.verified.txt | 55 ++++ ...oorTests.ClazzContextGenerate.verified.txt | 61 ++++ ...azzContextGenerateWithContext.verified.txt | 85 ++++++ ...nerateDoorTests.ClazzGenerate.verified.txt | 51 ++++ ...ts.ClazzGenerateWithInterface.verified.txt | 75 +++++ ...sts.ClazzStateContextGenerate.verified.txt | 67 +++++ ...ateContextGenerateWithContext.verified.txt | 91 ++++++ ...eDoorTests.ClazzStateGenerate.verified.txt | 57 ++++ ...azzStateGenerateWithInterface.verified.txt | 81 +++++ ...s.BuilderTestsContextGenerate.verified.txt | 257 ++++++++++++++++ ...stsContextGenerateWithContext.verified.txt | 257 ++++++++++++++++ ...oorTests.BuilderTestsGenerate.verified.txt | 257 ++++++++++++++++ ...derTestsGenerateWithInterface.verified.txt | 257 ++++++++++++++++ ...lderTestsStateContextGenerate.verified.txt | 118 ++++++++ ...ateContextGenerateWithContext.verified.txt | 118 ++++++++ ...sts.BuilderTestsStateGenerate.verified.txt | 118 ++++++++ ...stsStateGenerateWithInterface.verified.txt | 118 ++++++++ ...sts.ClazzTestsContextGenerate.verified.txt | 117 ++++++++ ...stsContextGenerateWithContext.verified.txt | 117 ++++++++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 117 ++++++++ ...azzTestsGenerateWithInterface.verified.txt | 117 ++++++++ ...lazzTestsStateContextGenerate.verified.txt | 118 ++++++++ ...ateContextGenerateWithContext.verified.txt | 118 ++++++++ ...Tests.ClazzTestsStateGenerate.verified.txt | 118 ++++++++ ...stsStateGenerateWithInterface.verified.txt | 118 ++++++++ ...rTests.BuilderContextGenerate.verified.txt | 28 ++ ...derContextGenerateWithContext.verified.txt | 90 ++++++ ...rateDoorTests.BuilderGenerate.verified.txt | 13 + ....BuilderGenerateWithInterface.verified.txt | 75 +++++ ...s.BuilderStateContextGenerate.verified.txt | 34 +++ ...ateContextGenerateWithContext.verified.txt | 96 ++++++ ...oorTests.BuilderStateGenerate.verified.txt | 19 ++ ...derStateGenerateWithInterface.verified.txt | 81 +++++ ...oorTests.ClazzContextGenerate.verified.txt | 55 ++++ ...azzContextGenerateWithContext.verified.txt | 62 ++++ ...nerateDoorTests.ClazzGenerate.verified.txt | 40 +++ ...ts.ClazzGenerateWithInterface.verified.txt | 47 +++ ...sts.ClazzStateContextGenerate.verified.txt | 61 ++++ ...ateContextGenerateWithContext.verified.txt | 68 +++++ ...eDoorTests.ClazzStateGenerate.verified.txt | 46 +++ ...azzStateGenerateWithInterface.verified.txt | 53 ++++ ...s.BuilderTestsContextGenerate.verified.txt | 265 +++++++++++++++++ ...stsContextGenerateWithContext.verified.txt | 265 +++++++++++++++++ ...oorTests.BuilderTestsGenerate.verified.txt | 265 +++++++++++++++++ ...derTestsGenerateWithInterface.verified.txt | 265 +++++++++++++++++ ...lderTestsStateContextGenerate.verified.txt | 125 ++++++++ ...ateContextGenerateWithContext.verified.txt | 125 ++++++++ ...sts.BuilderTestsStateGenerate.verified.txt | 125 ++++++++ ...stsStateGenerateWithInterface.verified.txt | 125 ++++++++ ...sts.ClazzTestsContextGenerate.verified.txt | 125 ++++++++ ...stsContextGenerateWithContext.verified.txt | 125 ++++++++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 125 ++++++++ ...azzTestsGenerateWithInterface.verified.txt | 125 ++++++++ ...lazzTestsStateContextGenerate.verified.txt | 125 ++++++++ ...ateContextGenerateWithContext.verified.txt | 125 ++++++++ ...Tests.ClazzTestsStateGenerate.verified.txt | 125 ++++++++ ...stsStateGenerateWithInterface.verified.txt | 125 ++++++++ ...rTests.BuilderContextGenerate.verified.txt | 30 ++ ...derContextGenerateWithContext.verified.txt | 57 ++++ ...rateDoorTests.BuilderGenerate.verified.txt | 23 ++ ....BuilderGenerateWithInterface.verified.txt | 50 ++++ ...s.BuilderStateContextGenerate.verified.txt | 37 +++ ...ateContextGenerateWithContext.verified.txt | 64 ++++ ...oorTests.BuilderStateGenerate.verified.txt | 30 ++ ...derStateGenerateWithInterface.verified.txt | 57 ++++ ...oorTests.ClazzContextGenerate.verified.txt | 58 ++++ ...azzContextGenerateWithContext.verified.txt | 76 +++++ ...nerateDoorTests.ClazzGenerate.verified.txt | 51 ++++ ...ts.ClazzGenerateWithInterface.verified.txt | 69 +++++ ...sts.ClazzStateContextGenerate.verified.txt | 65 ++++ ...ateContextGenerateWithContext.verified.txt | 83 ++++++ ...eDoorTests.ClazzStateGenerate.verified.txt | 58 ++++ ...azzStateGenerateWithInterface.verified.txt | 76 +++++ ...s.BuilderTestsContextGenerate.verified.txt | 251 ++++++++++++++++ ...stsContextGenerateWithContext.verified.txt | 251 ++++++++++++++++ ...oorTests.BuilderTestsGenerate.verified.txt | 251 ++++++++++++++++ ...derTestsGenerateWithInterface.verified.txt | 251 ++++++++++++++++ ...lderTestsStateContextGenerate.verified.txt | 113 +++++++ ...ateContextGenerateWithContext.verified.txt | 113 +++++++ ...sts.BuilderTestsStateGenerate.verified.txt | 113 +++++++ ...stsStateGenerateWithInterface.verified.txt | 113 +++++++ ...sts.ClazzTestsContextGenerate.verified.txt | 112 +++++++ ...stsContextGenerateWithContext.verified.txt | 112 +++++++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 112 +++++++ ...azzTestsGenerateWithInterface.verified.txt | 112 +++++++ ...lazzTestsStateContextGenerate.verified.txt | 113 +++++++ ...ateContextGenerateWithContext.verified.txt | 113 +++++++ ...Tests.ClazzTestsStateGenerate.verified.txt | 113 +++++++ ...stsStateGenerateWithInterface.verified.txt | 113 +++++++ ...rTests.BuilderContextGenerate.verified.txt | 37 +++ ...derContextGenerateWithContext.verified.txt | 70 +++++ ...rateDoorTests.BuilderGenerate.verified.txt | 12 + ....BuilderGenerateWithInterface.verified.txt | 45 +++ ...s.BuilderStateContextGenerate.verified.txt | 43 +++ ...ateContextGenerateWithContext.verified.txt | 76 +++++ ...oorTests.BuilderStateGenerate.verified.txt | 18 ++ ...derStateGenerateWithInterface.verified.txt | 51 ++++ ...oorTests.ClazzContextGenerate.verified.txt | 69 +++++ ...azzContextGenerateWithContext.verified.txt | 94 ++++++ ...nerateDoorTests.ClazzGenerate.verified.txt | 44 +++ ...ts.ClazzGenerateWithInterface.verified.txt | 69 +++++ ...sts.ClazzStateContextGenerate.verified.txt | 75 +++++ ...ateContextGenerateWithContext.verified.txt | 100 +++++++ ...eDoorTests.ClazzStateGenerate.verified.txt | 50 ++++ ...azzStateGenerateWithInterface.verified.txt | 75 +++++ ...s.BuilderTestsContextGenerate.verified.txt | 257 ++++++++++++++++ ...stsContextGenerateWithContext.verified.txt | 257 ++++++++++++++++ ...oorTests.BuilderTestsGenerate.verified.txt | 257 ++++++++++++++++ ...derTestsGenerateWithInterface.verified.txt | 257 ++++++++++++++++ ...lderTestsStateContextGenerate.verified.txt | 118 ++++++++ ...ateContextGenerateWithContext.verified.txt | 118 ++++++++ ...sts.BuilderTestsStateGenerate.verified.txt | 118 ++++++++ ...stsStateGenerateWithInterface.verified.txt | 118 ++++++++ ...sts.ClazzTestsContextGenerate.verified.txt | 117 ++++++++ ...stsContextGenerateWithContext.verified.txt | 117 ++++++++ ...sDoorTests.ClazzTestsGenerate.verified.txt | 117 ++++++++ ...azzTestsGenerateWithInterface.verified.txt | 117 ++++++++ ...lazzTestsStateContextGenerate.verified.txt | 118 ++++++++ ...ateContextGenerateWithContext.verified.txt | 118 ++++++++ ...Tests.ClazzTestsStateGenerate.verified.txt | 118 ++++++++ ...stsStateGenerateWithInterface.verified.txt | 118 ++++++++ 224 files changed, 24522 insertions(+), 17 deletions(-) diff --git a/Stater.sln.DotSettings.user b/Stater.sln.DotSettings.user index 72a8a61..47c9603 100644 --- a/Stater.sln.DotSettings.user +++ b/Stater.sln.DotSettings.user @@ -5,7 +5,7 @@ False SOLUTION - <SessionState ContinuousTestingMode="0" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <SessionState ContinuousTestingMode="0" IsActive="True" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <Or> <TestAncestor> <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> @@ -18,22 +18,8 @@ <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> </Or> </SessionState> - <SessionState ContinuousTestingMode="0" IsActive="True" Name="Session" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <And> - <Namespace>Stater.CodeGeneration.Tests.LanguageAdapter</Namespace> - <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> - <Or> - <TestAncestor> - <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> - <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Python.PythonAdapterDoorTests</TestId> - <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.ScenarioFinderTests.ClazzGenerate</TestId> - <TestId>xUnit::D1E2AF9B-55A2-4198-8797-633ABA37AA81::net8.0::Stater.Domain.Tests.Json.StateMachineJsonAdapterTests.TestToJsonSchema</TestId> - <TestId>xUnit::D1E2AF9B-55A2-4198-8797-633ABA37AA81::net8.0::Stater.Domain.Tests.Json.StateMachineJsonAdapterTests.TestFromJsonSchema</TestId> - </TestAncestor> - <ProjectFile>D1E2AF9B-55A2-4198-8797-633ABA37AA81/d:Json/f:StateMachineJsonAdapterTests.cs</ProjectFile> - <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> - </Or> - </And> + <SessionState ContinuousTestingMode="0" Name="Session" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> </SessionState> True True diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt index e69de29..2a3fab2 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,108 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + Door_context *context, + const std::string &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + Door_context *context, + std::string start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::std::string, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new Door_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt index e69de29..e040396 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,13 @@ +#pragma once + +#include + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new empty_context()) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt index e69de29..a83f586 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,92 @@ +#pragma once + +#include + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + empty_context *context, + const std::string &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + empty_context *context, + std::string start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::std::string, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state("OPEN") + .set_context(new empty_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .add_transition("preClose", "OPEN", "AJAR") + .add_transition("open", "AJAR", "OPEN") + .add_transition("close", "AJAR", "CLOSE") + .add_transition("ajarPlus", "AJAR", "AJAR") + .add_transition("ajarMinus", "AJAR", "AJAR"); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt index e69de29..1c67b15 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,54 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new Door_context()) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt index e69de29..76428e9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,133 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + Door_context *context, + const e_Door_states &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + Door_context *context, + e_Door_states start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new Door_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .set_transition_event("preOpen", [](Door_context *ctx) { ctx->degreeOfOpening = 1; }) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .set_transition_event("preClose", [](Door_context *ctx) { ctx->degreeOfOpening = 99; }) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .set_transition_condition("open", [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }) + .set_transition_event("open", [](Door_context *ctx) { ctx->degreeOfOpening = 100; }) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .set_transition_condition("close", [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }) + .set_transition_event("close", [](Door_context *ctx) { ctx->degreeOfOpening = 0; }) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarPlus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; }) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR) + .set_transition_event("ajarMinus", [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; }); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt index e69de29..c12c426 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,38 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new empty_context()) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt index e69de29..d6398dd 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,117 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class types_Door_state_machine : public stater_state_machine { +public: + types_Door_state_machine( + const std::vector> &transitions, + empty_context *context, + const e_Door_states &start_state, + const std::unordered_set &states, + const std::unordered_map>> &transition_middlewares, + const std::vector> &transition_all_middlewares, + const std::unordered_map>> &transition_callbacks, + const std::vector> &transition_all_callbacks, + const std::unordered_map>> &state_callbacks, + const std::vector> &state_all_callbacks, + const std::shared_ptr<::context_json_adapter > &context_json_adapter + ) : stater_state_machine( + transitions, + context, + start_state, + states, + transition_middlewares, + transition_all_middlewares, + transition_callbacks, + transition_all_callbacks, + state_callbacks, + state_all_callbacks, + context_json_adapter + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; + +inline state_machine_factory typed_Door_factory = []( + const std::vector > &transitions, + empty_context *context, + e_Door_states start_state, + const std::unordered_set &states, + const std::unordered_map > > & + transition_middleware, + const std::vector > & + transition_all_middlewares, + const std::unordered_map > > & + transition_callbacks, + const std::vector > &transition_all_callbacks, + const std::unordered_map<::e_Door_states, std::vector > > &state_callbacks, + const std::vector > &state_all_callbacks, + const std::shared_ptr >& context_json_adapter_) -> + std::unique_ptr { + return std::make_unique( + transitions, context, start_state, states, + transition_middleware, transition_all_middlewares, + transition_callbacks, transition_all_callbacks, + state_callbacks, state_all_callbacks, context_json_adapter_); +}; + + +inline stater_state_machine_builder builder_Door_state_machine = stater_state_machine_builder() + .set_start_state(e_Door_states::OPEN) + .set_context(new empty_context()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", e_Door_states::CLOSE, e_Door_states::AJAR) + .add_transition("preClose", e_Door_states::OPEN, e_Door_states::AJAR) + .add_transition("open", e_Door_states::AJAR, e_Door_states::OPEN) + .add_transition("close", e_Door_states::AJAR, e_Door_states::CLOSE) + .add_transition("ajarPlus", e_Door_states::AJAR, e_Door_states::AJAR) + .add_transition("ajarMinus", e_Door_states::AJAR, e_Door_states::AJAR); \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt index e69de29..fed2f33 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,65 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, Door_context>( + "preOpen", + "CLOSE", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::std::string, Door_context>( + "preClose", + "OPEN", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::std::string, Door_context>( + "open", + "AJAR", + "OPEN", + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::std::string, Door_context>( + "close", + "AJAR", + "CLOSE", + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::std::string, Door_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::std::string, Door_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + "OPEN" + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt index e69de29..f1aa929 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,88 @@ +#pragma once + +#include + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, Door_context>( + "preOpen", + "CLOSE", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::std::string, Door_context>( + "preClose", + "OPEN", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::std::string, Door_context>( + "open", + "AJAR", + "OPEN", + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::std::string, Door_context>( + "close", + "AJAR", + "CLOSE", + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::std::string, Door_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::std::string, Door_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + "OPEN" + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt index e69de29..324f61b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,57 @@ +#pragma once + +#include + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, empty_context>( + "preOpen", + "CLOSE", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "preClose", + "OPEN", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "open", + "AJAR", + "OPEN", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "close", + "AJAR", + "CLOSE", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + "OPEN" + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt index e69de29..2df84f0 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,80 @@ +#pragma once + +#include + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::std::string, empty_context>( + "preOpen", + "CLOSE", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "preClose", + "OPEN", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "open", + "AJAR", + "OPEN", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "close", + "AJAR", + "CLOSE", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarPlus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::std::string, empty_context>( + "ajarMinus", + "AJAR", + "AJAR", + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + "OPEN" + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt index e69de29..93712ec 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,90 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, Door_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::e_Door_states, Door_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::e_Door_states, Door_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::e_Door_states, Door_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + e_Door_states::OPEN + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt index e69de29..065cb21 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,113 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_context final : context { +public: + int degreeOfOpening = 0; + bool closeVariable = true; + std::string doorName = "asd"; + float floatVariable = 0f; +}; + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, Door_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 1; } + ), + transition_t<::e_Door_states, Door_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 99; } + ), + transition_t<::e_Door_states, Door_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](Door_context *ctx) { return ctx->degreeOfOpening >= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 100; } + ), + transition_t<::e_Door_states, Door_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](Door_context *ctx) { return ctx->degreeOfOpening <= 0; }, + [](Door_context *ctx) { ctx->degreeOfOpening = 0; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening + 1; } + ), + transition_t<::e_Door_states, Door_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](Door_context *ctx) { return true; }, + [](Door_context *ctx) { ctx->degreeOfOpening = ctx->degreeOfOpening - 1; } + ) + }, + new Door_context(), + e_Door_states::OPEN + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt index e69de29..b2a15f6 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,82 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, empty_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + e_Door_states::OPEN + ) { + } + +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt index e69de29..322b8d0 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,105 @@ +#pragma once + +#include + +enum class e_Door_states { + OPEN, + AJAR, + CLOSE +}; + +inline void to_json(nlohmann::json &j, const e_Door_states &e) { + switch (e) { + case e_Door_states::OPEN: j = "OPEN"; + break; + case e_Door_states::AJAR: j = "AJAR"; + break; + case e_Door_states::CLOSE: j = "CLOSE"; + break; + } +} + +inline void from_json(const nlohmann::json &j, e_Door_states &e) { + std::string state_str = j.get(); + + if (state_str == "OPEN") e = e_Door_states::OPEN; + else if (state_str == "AJAR") e = e_Door_states::AJAR; + else if (state_str == "CLOSE") e = e_Door_states::CLOSE; +} + +class Door_state_machine : public stater_state_machine { +public: + Door_state_machine() : stater_state_machine ( + { + transition_t<::e_Door_states, empty_context>( + "preOpen", + e_Door_states::CLOSE, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "preClose", + e_Door_states::OPEN, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "open", + e_Door_states::AJAR, + e_Door_states::OPEN, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "close", + e_Door_states::AJAR, + e_Door_states::CLOSE, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarPlus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ), + transition_t<::e_Door_states, empty_context>( + "ajarMinus", + e_Door_states::AJAR, + e_Door_states::AJAR, + [](empty_context *ctx) { return true; }, + [](empty_context *ctx) { } + ) + }, + new empty_context(), + e_Door_states::OPEN + ) { + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } +}; \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt index e69de29..707e61f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,254 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + builder_Door_state_machine.build(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = builder_Door_state_machine.build(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} + +TEST(Door_state_machine_test, test_system_append_state_transition) { + auto sm_builder = builder_Door_state_machine; + + sm_builder = sm_builder.add_state("__test_state_1__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_state("__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt index e69de29..f7a80a3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,259 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + const auto st = builder_Door_state_machine.build(); + dynamic_cast(st.get()); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + const auto st = builder_Door_state_machine.build(); + auto sm = dynamic_cast(st.get()); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} + +TEST(Door_state_machine_test, test_system_append_state_transition) { + auto sm_builder = builder_Door_state_machine; + + sm_builder = sm_builder.add_state("__test_state_1__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_state("__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt index e69de29..707e61f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,254 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + builder_Door_state_machine.build(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = builder_Door_state_machine.build(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} + +TEST(Door_state_machine_test, test_system_append_state_transition) { + auto sm_builder = builder_Door_state_machine; + + sm_builder = sm_builder.add_state("__test_state_1__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_state("__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt index e69de29..f7a80a3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,259 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + const auto st = builder_Door_state_machine.build(); + dynamic_cast(st.get()); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + const auto st = builder_Door_state_machine.build(); + auto sm = dynamic_cast(st.get()); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} + +TEST(Door_state_machine_test, test_system_append_state_transition) { + auto sm_builder = builder_Door_state_machine; + + sm_builder = sm_builder.add_state("__test_state_1__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_state("__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); + + sm_builder = sm_builder.add_transition("__test_transition__", "__test_state_1__", "__test_state_2__"); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +})"), nlohmann::json::parse(sm_builder.build()->to_json_schema())); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt index e69de29..a238513 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + builder_Door_state_machine.build(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = builder_Door_state_machine.build(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt index e69de29..73c17ac 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,119 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + const auto st = builder_Door_state_machine.build(); + dynamic_cast(st.get()); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + const auto st = builder_Door_state_machine.build(); + auto sm = dynamic_cast(st.get()); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt index e69de29..a238513 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + builder_Door_state_machine.build(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = builder_Door_state_machine.build(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = builder_Door_state_machine.build(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt index e69de29..73c17ac 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,119 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + const auto st = builder_Door_state_machine.build(); + dynamic_cast(st.get()); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto st = builder_Door_state_machine.build(); + const auto sm = dynamic_cast(st.get()); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + const auto st = builder_Door_state_machine.build(); + auto sm = dynamic_cast(st.get()); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt index e69de29..b2df42c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt index e69de29..47d878a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt index e69de29..b2df42c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt index e69de29..47d878a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->close(); + ASSERT_EQ(sm->get_state(), "CLOSE"); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), "AJAR"); + + sm->open(); + ASSERT_EQ(sm->get_state(), "OPEN"); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt index e69de29..8bf2ac3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt index e69de29..6da3797 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt index e69de29..8bf2ac3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("ajarPlus"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->transition("preClose"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("close"); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->transition("preOpen"); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->transition("open"); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt index e69de29..6da3797 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,114 @@ +#include + +#include + + + +TEST(Door_state_machine_test, test_init) { + new Door_state_machine(); +} + + +TEST(Door_state_machine_test, test_scenario_0) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_1) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->ajarPlus(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_scenario_2) { + const auto sm = new Door_state_machine(); + sm->disable_events(); + + + sm->preClose(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->close(); + ASSERT_EQ(sm->get_state(), e_Door_states::CLOSE); + + sm->preOpen(); + ASSERT_EQ(sm->get_state(), e_Door_states::AJAR); + + sm->open(); + ASSERT_EQ(sm->get_state(), e_Door_states::OPEN); +} + +TEST(Door_state_machine_test, test_json_schema) { + auto sm = new Door_state_machine(); + ASSERT_EQ(nlohmann::json::parse(R"({ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +})"), nlohmann::json::parse(sm->to_json_schema())); +} diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt index e69de29..f3772d1 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,30 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new DoorFSMContext()) + .AddTransition("preOpen", "CLOSE", "AJAR") + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", "OPEN", "AJAR") + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", "AJAR", "OPEN") + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", "AJAR", "CLOSE") + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", "AJAR", "AJAR") + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", "AJAR", "AJAR") + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt index e69de29..e5fc93c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,114 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + String startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new DoorFSMContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", "CLOSE", "AJAR") + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", "OPEN", "AJAR") + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", "AJAR", "OPEN") + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", "AJAR", "CLOSE") + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", "AJAR", "AJAR") + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", "AJAR", "AJAR") + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt index e69de29..f654445 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,15 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new EmptyContext()) + .AddTransition("preOpen", "CLOSE", "AJAR") + .AddTransition("preClose", "OPEN", "AJAR") + .AddTransition("open", "AJAR", "OPEN") + .AddTransition("close", "AJAR", "CLOSE") + .AddTransition("ajarPlus", "AJAR", "AJAR") + .AddTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt index e69de29..9452f85 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,99 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + EmptyContext context, + String startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState("OPEN") + .SetContext(new EmptyContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", "CLOSE", "AJAR") + .AddTransition("preClose", "OPEN", "AJAR") + .AddTransition("open", "AJAR", "OPEN") + .AddTransition("close", "AJAR", "CLOSE") + .AddTransition("ajarPlus", "AJAR", "AJAR") + .AddTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt index e69de29..ff7b863 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,36 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new DoorFSMContext()) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", States.OPEN, States.AJAR) + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", States.AJAR, States.OPEN) + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", States.AJAR, States.CLOSE) + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt index e69de29..e3e9312 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,120 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + States startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new DoorFSMContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .SetTransitionEvent("preOpen", ctx => ctx.degreeOfOpening = 1) + .AddTransition("preClose", States.OPEN, States.AJAR) + .SetTransitionEvent("preClose", ctx => ctx.degreeOfOpening = 99) + .AddTransition("open", States.AJAR, States.OPEN) + .SetTransitionCondition("open", ctx => ctx.degreeOfOpening >= 0) + .SetTransitionEvent("open", ctx => ctx.degreeOfOpening = 100) + .AddTransition("close", States.AJAR, States.CLOSE) + .SetTransitionCondition("close", ctx => ctx.degreeOfOpening <= 0) + .SetTransitionEvent("close", ctx => ctx.degreeOfOpening = 0) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarPlus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .AddTransition("ajarMinus", States.AJAR, States.AJAR) + .SetTransitionEvent("ajarMinus", ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt index e69de29..2ce669b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,21 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class Door { + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new EmptyContext()) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .AddTransition("preClose", States.OPEN, States.AJAR) + .AddTransition("open", States.AJAR, States.OPEN) + .AddTransition("close", States.AJAR, States.CLOSE) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .AddTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt index e69de29..cba52d6 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,105 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class Door { + public class TypesDoorStateMachine( + List> transitions, + EmptyContext context, + States startState, + HashSet states, + Dictionary>> transitionMiddlewares, + List> transitionAllMiddlewares, + Dictionary>> transitionCallbacks, + List> transitionAllCallbacks, + Dictionary>> stateCallbacks, + List> stateAllCallbacks, + IContextJsonAdapter contextJsonAdapter + ) : StaterStateMachine( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ) + { + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } + } + private static StateMachineFactory TypedDoorFactory = ( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ) => new TypesDoorStateMachine( + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA + ); + + + public static StaterStateMachineBuilder BuilderDoorStateMachine = new StaterStateMachineBuilder() + .SetStartState(States.OPEN) + .SetContext(new EmptyContext()) + .SetFactory(TypedDoorFactory) + .AddTransition("preOpen", States.CLOSE, States.AJAR) + .AddTransition("preClose", States.OPEN, States.AJAR) + .AddTransition("open", States.AJAR, States.OPEN) + .AddTransition("close", States.AJAR, States.CLOSE) + .AddTransition("ajarPlus", States.AJAR, States.AJAR) + .AddTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt index e69de29..7b16d80 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,62 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + "AJAR", + "OPEN", + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + "OPEN" +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt index e69de29..6470034 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,91 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + "AJAR", + "OPEN", + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + "OPEN" +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt index e69de29..c39540a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,55 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "open", + "AJAR", + "OPEN", + ctx => true, + ctx => { } + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + "OPEN" +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt index e69de29..a01817a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,84 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + "CLOSE", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "preClose", + "OPEN", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "open", + "AJAR", + "OPEN", + ctx => true, + ctx => { } + ), + new( + "close", + "AJAR", + "CLOSE", + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + "AJAR", + "AJAR", + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + "OPEN" +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt index e69de29..633a73a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,68 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + States.OPEN +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt index e69de29..77a7aee 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,97 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorFSMContext : IContext{ + public int degreeOfOpening = 0; + public bool closeVariable = true; + public string doorName = "asd"; + public float floatVariable = 0f; +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 1 + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = 99 + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => ctx.degreeOfOpening >= 0, + ctx => ctx.degreeOfOpening = 100 + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => ctx.degreeOfOpening <= 0, + ctx => ctx.degreeOfOpening = 0 + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + }, + new DoorFSMContext(), + States.OPEN +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt index e69de29..6300b25 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,61 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => true, + ctx => { } + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + States.OPEN +) +{ +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt index e69de29..b45c5f5 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,90 @@ +namespace fsm.door; + +using Stater.StateMachine.Lib; + +public enum States { + OPEN, + AJAR, + CLOSE +} + +public class DoorStateMachine() : StaterStateMachine( + new List> + { + new( + "preOpen", + States.CLOSE, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "preClose", + States.OPEN, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "open", + States.AJAR, + States.OPEN, + ctx => true, + ctx => { } + ), + new( + "close", + States.AJAR, + States.CLOSE, + ctx => true, + ctx => { } + ), + new( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ), + new( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx => true, + ctx => { } + ) + }, + new EmptyContext(), + States.OPEN +) +{ + public void preOpen() + { + Transition("preOpen"); + } + + public void preClose() + { + Transition("preClose"); + } + + public void open() + { + Transition("open"); + } + + public void close() + { + Transition("close"); + } + + public void ajarPlus() + { + Transition("ajarPlus"); + } + + public void ajarMinus() + { + Transition("ajarMinus"); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt index e69de29..cb025ef 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,278 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build(); + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + + [Fact] + private void TestSystemAppendStateTransition() + { + var smBuilder = Door.BuilderDoorStateMachine.Copy(); + + smBuilder = smBuilder.AddState("__test_state_1__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddState("__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt index e69de29..58aee24 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,278 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + + [Fact] + private void TestSystemAppendStateTransition() + { + var smBuilder = Door.BuilderDoorStateMachine.Copy(); + + smBuilder = smBuilder.AddState("__test_state_1__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddState("__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt index e69de29..cb025ef 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,278 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build(); + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + + [Fact] + private void TestSystemAppendStateTransition() + { + var smBuilder = Door.BuilderDoorStateMachine.Copy(); + + smBuilder = smBuilder.AddState("__test_state_1__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddState("__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt index e69de29..58aee24 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,278 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + + [Fact] + private void TestSystemAppendStateTransition() + { + var smBuilder = Door.BuilderDoorStateMachine.Copy(); + + smBuilder = smBuilder.AddState("__test_state_1__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddState("__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + + smBuilder = smBuilder.AddTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + } + """), JObject.Parse(smBuilder.Build().ToJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt index e69de29..d645422 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build(); + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt index e69de29..01c26b2 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt index e69de29..d645422 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build(); + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt index e69de29..01c26b2 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + } + + + [Fact] + private void TestScenario0() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = Door.BuilderDoorStateMachine.Build() as Door.TypesDoorStateMachine; + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt index e69de29..7bbe63c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt index e69de29..0a1d5db 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt index e69de29..7bbe63c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("close"); + Assert.Equal("CLOSE", sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal("AJAR", sm.GetState()); + + sm.Transition("open"); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt index e69de29..0a1d5db 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.ajarPlus(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal("AJAR", sm.GetState()); + + sm.close(); + Assert.Equal("CLOSE", sm.GetState()); + + sm.preOpen(); + Assert.Equal("AJAR", sm.GetState()); + + sm.open(); + Assert.Equal("OPEN", sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt index e69de29..901953b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt index e69de29..650cd06 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt index e69de29..901953b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("ajarPlus"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.Transition("preClose"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("close"); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.Transition("preOpen"); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.Transition("open"); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt index e69de29..650cd06 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,131 @@ +namespace fsm.door; + +using Newtonsoft.Json.Linq; + +[Collection("Door Auto Generated Tests")] +public class TestDoor { + [Fact] + private void TestInit() + { + _ = new DoorStateMachine(); + } + + + [Fact] + private void TestScenario0() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario1() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.ajarPlus(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + [Fact] + private void TestScenario2() + { + var sm = new DoorStateMachine(); + sm.DisableEvents(); + + + sm.preClose(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.close(); + Assert.Equal(States.CLOSE, sm.GetState()); + + sm.preOpen(); + Assert.Equal(States.AJAR, sm.GetState()); + + sm.open(); + Assert.Equal(States.OPEN, sm.GetState()); + + } + + [Fact] + private void TestJsonSchema() + { + var sm = new DoorStateMachine(); + Assert.Equal(JObject.Parse(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), JObject.Parse(sm.ToJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt index e69de29..751ce1e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,31 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new DoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt index e69de29..068457f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,89 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + String startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt index e69de29..0c26998 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,16 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt index e69de29..1cada91 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,74 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + EmptyContext context, + String startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR"); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt index e69de29..88b6798 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,37 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new DoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt index e69de29..60e1cd3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,95 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + DoorFSMContext context, + States startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", ctx -> ctx.degreeOfOpening = 1) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", ctx -> ctx.degreeOfOpening = 99) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", ctx -> ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", ctx -> ctx.degreeOfOpening = 100) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", ctx -> ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", ctx -> ctx.degreeOfOpening = 0) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt index e69de29..2fefcc7 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,22 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt index e69de29..27c37c1 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,80 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class TypesDoorStateMachine extends StaterStateMachine { + public TypesDoorStateMachine( + List> transitions, + EmptyContext context, + States startState, + Set states, + Map>> transitionMiddlewares, + List> transitionAllMiddlewares, + Map>> transitionCallbacks, + List> transitionAllCallbacks, + Map>> stateCallbacks, + List> stateAllCallbacks, + ContextJsonAdapter contextJsonAdapter + ) { + super( + transitions, + context, + startState, + states, + transitionMiddlewares, + transitionAllMiddlewares, + transitionCallbacks, + transitionAllCallbacks, + stateCallbacks, + stateAllCallbacks, + contextJsonAdapter + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } + + static private final StateMachineFactory typedDoorFactory = TypesDoorStateMachine::new; + + + static public final StaterStateMachineBuilder builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR); +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt index e69de29..a529085 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,66 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + "OPEN" + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt index e69de29..5df87cb 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,90 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + "OPEN" + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt index e69de29..96f622f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,59 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + "OPEN" + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt index e69de29..44330ea 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,83 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + "CLOSE", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + "OPEN", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + "AJAR", + "OPEN", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + "AJAR", + "CLOSE", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + "AJAR", + "AJAR", + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + "OPEN" + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt index e69de29..410d51e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,72 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + States.OPEN + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt index e69de29..f9c0377 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,96 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorFSMContext implements Context{ + int degreeOfOpening = 0; + boolean closeVariable = true; + String doorName = "asd"; + float floatVariable = 0f; + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 1 + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = 99 + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> ctx.degreeOfOpening >= 0, + ctx -> ctx.degreeOfOpening = 100 + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> ctx.degreeOfOpening <= 0, + ctx -> ctx.degreeOfOpening = 0 + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening + 1 + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> ctx.degreeOfOpening = ctx.degreeOfOpening - 1 + ) + ), + new DoorFSMContext(), + States.OPEN + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt index e69de29..04bb91b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,65 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + States.OPEN + ); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt index e69de29..1733222 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,89 @@ +package fsm.door; + +import com.stater.statemachine.java.*; +import java.util.*; + +class Door { + static enum States { + OPEN, + AJAR, + CLOSE + } + + static class DoorStateMachine extends StaterStateMachine{ + public DoorStateMachine() { + super( + List.of( + new Transition<>( + "preOpen", + States.CLOSE, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "preClose", + States.OPEN, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "open", + States.AJAR, + States.OPEN, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "close", + States.AJAR, + States.CLOSE, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarPlus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ), + new Transition<>( + "ajarMinus", + States.AJAR, + States.AJAR, + ctx -> true, + ctx -> {} + ) + ), + new EmptyContext(), + States.OPEN + ); + } + + void preOpen() { + transition("preOpen"); + } + + void preClose() { + transition("preClose"); + } + + void open() { + transition("open"); + } + + void close() { + transition("close"); + } + + void ajarPlus() { + transition("ajarPlus"); + } + + void ajarMinus() { + transition("ajarMinus"); + } + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt index e69de29..68b3604 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,270 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + + @Test + void testSystemAppendStateTransition() throws Exception { + var smBuilder = Door.builderDoorStateMachine; + + smBuilder = smBuilder.addState("__test_state_1__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addState("__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt index e69de29..cfed5ef 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,270 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + + @Test + void testSystemAppendStateTransition() throws Exception { + var smBuilder = Door.builderDoorStateMachine; + + smBuilder = smBuilder.addState("__test_state_1__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addState("__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt index e69de29..68b3604 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,270 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + + @Test + void testSystemAppendStateTransition() throws Exception { + var smBuilder = Door.builderDoorStateMachine; + + smBuilder = smBuilder.addState("__test_state_1__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addState("__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt index e69de29..cfed5ef 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,270 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + + @Test + void testSystemAppendStateTransition() throws Exception { + var smBuilder = Door.builderDoorStateMachine; + + smBuilder = smBuilder.addState("__test_state_1__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addState("__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__"); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] + }"""), new ObjectMapper().readTree(smBuilder.build().toJsonSchema())); + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt index e69de29..e83ade8 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt index e69de29..da9ad4a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt index e69de29..e83ade8 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt index e69de29..da9ad4a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + } + + + @Test + void testScenario0() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = (Door.TypesDoorStateMachine)Door.builderDoorStateMachine.build(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt index e69de29..8665347 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt index e69de29..6c11e6b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt index e69de29..8665347 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("close"); + assertEquals(sm.getState(), "CLOSE"); + + sm.transition("preOpen"); + assertEquals(sm.getState(), "AJAR"); + + sm.transition("open"); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt index e69de29..6c11e6b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.ajarPlus(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), "AJAR"); + + sm.close(); + assertEquals(sm.getState(), "CLOSE"); + + sm.preOpen(); + assertEquals(sm.getState(), "AJAR"); + + sm.open(); + assertEquals(sm.getState(), "OPEN"); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt index e69de29..1cfdbeb 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt index e69de29..a665230 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt index e69de29..1cfdbeb 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("ajarPlus"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.transition("preClose"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("close"); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.transition("preOpen"); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.transition("open"); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt index e69de29..a665230 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,127 @@ +package fsm.door; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.fasterxml.jackson.databind.ObjectMapper; + +class TestDoor { + @Test + void testInit() { + var fsm = new Door.DoorStateMachine(); + } + + + @Test + void testScenario0() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario1() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.ajarPlus(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + @Test + void testScenario2() { + var sm = new Door.DoorStateMachine(); + sm.disableEvents(); + + + sm.preClose(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.close(); + assertEquals(sm.getState(), Door.States.CLOSE); + + sm.preOpen(); + assertEquals(sm.getState(), Door.States.AJAR); + + sm.open(); + assertEquals(sm.getState(), Door.States.OPEN); + + } + + @Test + void testJsonSchema() throws Exception { + var sm = new Door.DoorStateMachine(); + assertEquals(new ObjectMapper().readTree(""" + { + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] + } + """ + ), new ObjectMapper().readTree(sm.toJsonSchema())); + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt index e69de29..9860945 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,29 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt index e69de29..a7527d9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,59 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt index e69de29..e887eb6 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,19 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext({}) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt index e69de29..2b3d743 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,49 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext({}) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt index e69de29..9d83a9d 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,35 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt index e69de29..f0a01d3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,65 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt index e69de29..60f5479 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,25 @@ +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext({}) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt index e69de29..5b93af7 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,55 @@ +import {StaterStateMachine} from "./index.js"; +import {StaterStateMachineBuilder} from "./index.js"; + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory = (...args) => new TypesDoorStateMachine(...args); + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext({}) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt index e69de29..33712dc 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,61 @@ +import {StaterStateMachine} from "./index.js"; + + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt index e69de29..bb1eb45 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,85 @@ +import {StaterStateMachine} from "./index.js"; + + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt index e69de29..df53f9c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,51 @@ +import {StaterStateMachine} from "./index.js"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt index e69de29..5ae8f81 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,75 @@ +import {StaterStateMachine} from "./index.js"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt index e69de29..e5795c9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,67 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt index e69de29..3d1307e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,91 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +const buildDoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt index e69de29..b4f3786 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,57 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt index e69de29..00336e3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,81 @@ +import {StaterStateMachine} from "./index.js"; + + +export const States = Object.freeze({ + OPEN: "OPEN", + AJAR: "AJAR", + CLOSE: "CLOSE" +}); + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + {}, + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt index e69de29..2712c5c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt index e69de29..547ac99 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt index e69de29..2712c5c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt index e69de29..547ac99 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt index e69de29..b82440c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt index e69de29..8079817 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt index e69de29..b82440c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt index e69de29..8079817 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt index e69de29..c9364b1 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt index e69de29..7c9897e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt index e69de29..c9364b1 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt index e69de29..7c9897e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt index e69de29..d1e1405 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt index e69de29..94ac6dd 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt index e69de29..d1e1405 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt index e69de29..94ac6dd 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door.js"; +import {States} from "./Door.js"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt index e69de29..5e1aa9b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,28 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(DoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt index e69de29..af22212 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,90 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class TypesDoorStateMachine( + transitions: List>, + startState: String, + states: Set, + context: DoorFSMContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt index e69de29..68b580e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,13 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt index e69de29..af4a437 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,75 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +class TypesDoorStateMachine( + transitions: List>, + startState: String, + states: Set, + context: EmptyContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt index e69de29..503c334 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,34 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(DoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt index e69de29..ba58150 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,96 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class TypesDoorStateMachine( + transitions: List>, + startState: States, + states: Set, + context: DoorFSMContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(DoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen") { it.degreeOfOpening = 1 } + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose") { it.degreeOfOpening = 99 } + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open") { it.degreeOfOpening >= 0 } + .setTransitionEvent("open") { it.degreeOfOpening = 100 } + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close") { it.degreeOfOpening <= 0 } + .setTransitionEvent("close") { it.degreeOfOpening = 0 } + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus") { it.degreeOfOpening = it.degreeOfOpening + 1 } + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus") { it.degreeOfOpening = it.degreeOfOpening - 1 } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt index e69de29..e7e94ae 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,19 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt index e69de29..85b593e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,81 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +class TypesDoorStateMachine( + transitions: List>, + startState: States, + states: Set, + context: EmptyContext, + transitionMiddlewares: Map>> = mapOf(), + transitionAllMiddlewares: List> = listOf(), + transitionCallbacks: Map>> = mapOf(), + transitionAllCallbacks: List> = listOf(), + stateCallbacks: Map>> = mapOf(), + stateAllCallbacks: List> = listOf(), + contextJsonAdapter: ContextJsonAdapter? = null, +) : StaterStateMachine( + transitions = transitions, + startState = startState, + states = states, + context = context, + transitionMiddlewares = transitionMiddlewares, + transitionAllMiddlewares = transitionAllMiddlewares, + transitionCallbacks = transitionCallbacks, + transitionAllCallbacks = transitionAllCallbacks, + stateCallbacks = stateCallbacks, + stateAllCallbacks = stateAllCallbacks, + contextJsonAdapter = contextJsonAdapter +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} + +private val typedDoorFactory: StateMachineFactory = { + transitionsA, + contextA, + startStateA, + statesA, + transitionMiddlewaresA, + transitionAllMiddlewaresA, + transitionCallbacksA, + transitionAllCallbacksA, + stateCallbacksA, + stateAllCallbacksA, + contextJsonAdapterA, + -> + TypesDoorStateMachine( + transitions = transitionsA, + context = contextA, + startState = startStateA, + states = statesA, + transitionMiddlewares = transitionMiddlewaresA, + transitionAllMiddlewares = transitionAllMiddlewaresA, + transitionCallbacks = transitionCallbacksA, + transitionAllCallbacks = transitionAllCallbacksA, + stateCallbacks = stateCallbacksA, + stateAllCallbacks = stateAllCallbacksA, + contextJsonAdapter = contextJsonAdapterA + ) +} + +val builderDoorStateMachine = StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt index e69de29..9ffd260 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,55 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR", + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR", + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN", + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE", + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = "OPEN", + context = DoorFSMContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt index e69de29..3577c6e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,62 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR", + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR", + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN", + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE", + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR", + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = "OPEN", + context = DoorFSMContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt index e69de29..82db949 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,40 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt index e69de29..0bbc2b5 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,47 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = "CLOSE", + end = "AJAR" + ), + Transition( + name = "preClose", + start = "OPEN", + end = "AJAR" + ), + Transition( + name = "open", + start = "AJAR", + end = "OPEN" + ), + Transition( + name = "close", + start = "AJAR", + end = "CLOSE" + ), + Transition( + name = "ajarPlus", + start = "AJAR", + end = "AJAR" + ), + Transition( + name = "ajarMinus", + start = "AJAR", + end = "AJAR" + ) + ), + startState = "OPEN", + context = EmptyContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt index e69de29..cab20c3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,61 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR, + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR, + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN, + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE, + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = States.OPEN, + context = DoorFSMContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt index e69de29..bf90ee9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,68 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +data class DoorFSMContext( + var degreeOfOpening: Int = 0, + var closeVariable: Boolean = true, + var doorName: String = "asd", + var floatVariable: Float = 0f +) : Context + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR, + event = { it.degreeOfOpening = 1 } + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR, + event = { it.degreeOfOpening = 99 } + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN, + condition = { it.degreeOfOpening >= 0 }, + event = { it.degreeOfOpening = 100 } + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE, + condition = { it.degreeOfOpening <= 0 }, + event = { it.degreeOfOpening = 0 } + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening + 1 } + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR, + event = { it.degreeOfOpening = it.degreeOfOpening - 1 } + ) + ), + startState = States.OPEN, + context = DoorFSMContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt index e69de29..031c53f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,46 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt index e69de29..7840728 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,53 @@ +package fsm.door + +import com.stater.statemachine.kotlin.* + +enum class States { + OPEN, + AJAR, + CLOSE +} + +class DoorStateMachine : StaterStateMachine( + transitions = listOf( + Transition( + name = "preOpen", + start = States.CLOSE, + end = States.AJAR + ), + Transition( + name = "preClose", + start = States.OPEN, + end = States.AJAR + ), + Transition( + name = "open", + start = States.AJAR, + end = States.OPEN + ), + Transition( + name = "close", + start = States.AJAR, + end = States.CLOSE + ), + Transition( + name = "ajarPlus", + start = States.AJAR, + end = States.AJAR + ), + Transition( + name = "ajarMinus", + start = States.AJAR, + end = States.AJAR + ) + ), + startState = States.OPEN, + context = EmptyContext() +) { + fun preOpen() = transition("preOpen") + fun preClose() = transition("preClose") + fun open() = transition("open") + fun close() = transition("close") + fun ajarPlus() = transition("ajarPlus") + fun ajarMinus() = transition("ajarMinus") +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt index e69de29..357f64e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,265 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + + @Test + fun testSystemAppendStateTransition(){ + var smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState("__test_state_1__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState("__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt index e69de29..5285b4f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,265 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() as TypesDoorStateMachine + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + + @Test + fun testSystemAppendStateTransition(){ + var smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState("__test_state_1__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState("__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt index e69de29..357f64e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,265 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + + @Test + fun testSystemAppendStateTransition(){ + var smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState("__test_state_1__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState("__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt index e69de29..5285b4f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,265 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() as TypesDoorStateMachine + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + + @Test + fun testSystemAppendStateTransition(){ + var smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState("__test_state_1__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState("__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition("__test_transition__", "__test_state_1__", "__test_state_2__") + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}"""), ObjectMapper().readTree(smBuilder.build().toJsonSchema())) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt index e69de29..a15095f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt index e69de29..3a5c5b2 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() as TypesDoorStateMachine + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt index e69de29..a15095f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt index e69de29..3a5c5b2 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + builderDoorStateMachine.build() as TypesDoorStateMachine + } + + + @Test + fun testScenario0() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = builderDoorStateMachine.build() as TypesDoorStateMachine + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt index e69de29..b779122 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt index e69de29..2c2922a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt index e69de29..b779122 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("ajarPlus") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), "AJAR") + + sm.transition("close") + assertEquals(sm.getState(), "CLOSE") + + sm.transition("preOpen") + assertEquals(sm.getState(), "AJAR") + + sm.transition("open") + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt index e69de29..2c2922a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.ajarPlus() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), "AJAR") + + sm.close() + assertEquals(sm.getState(), "CLOSE") + + sm.preOpen() + assertEquals(sm.getState(), "AJAR") + + sm.open() + assertEquals(sm.getState(), "OPEN") + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt index e69de29..e7234ed 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt index e69de29..2c6252e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt index e69de29..e7234ed 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("ajarPlus") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.transition("preClose") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("close") + assertEquals(sm.getState(), States.CLOSE) + + sm.transition("preOpen") + assertEquals(sm.getState(), States.AJAR) + + sm.transition("open") + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt index e69de29..2c6252e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,125 @@ +package fsm.door; + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import com.fasterxml.jackson.databind.ObjectMapper + +class TestDoor { + @Test + fun testInit() { + DoorStateMachine() + } + + + @Test + fun testScenario0() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario1() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.ajarPlus() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + @Test + fun testScenario2() { + val sm = DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + assertEquals(sm.getState(), States.AJAR) + + sm.close() + assertEquals(sm.getState(), States.CLOSE) + + sm.preOpen() + assertEquals(sm.getState(), States.AJAR) + + sm.open() + assertEquals(sm.getState(), States.OPEN) + + } + + @Test + fun testJsonSchema() { + val sm = DoorStateMachine() + assertEquals(ObjectMapper().readTree("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}"""), ObjectMapper().readTree(sm.toJsonSchema())) + } + + +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt index e69de29..029c210 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,30 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachineBuilder + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, DoorFSMContext]() + .set_start_state("OPEN") + .set_context(DoorFSMContext()) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt index e69de29..6e2adb8 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,57 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + + +class TypesDoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, DoorFSMContext]() + .set_start_state("OPEN") + .set_context(DoorFSMContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt index e69de29..e08c6e5 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,23 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachineBuilder + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, EmptyContext]() + .set_start_state("OPEN") + .set_context(EmptyContext()) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt index e69de29..68e9f42 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,50 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + + +class TypesDoorStateMachine(StaterStateMachine[str, EmptyContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[str, EmptyContext]() + .set_start_state("OPEN") + .set_context(EmptyContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", "CLOSE", "AJAR") + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", "OPEN", "AJAR") + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", "AJAR", "OPEN") + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", "AJAR", "CLOSE") + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", "AJAR", "AJAR") + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", "AJAR", "AJAR") + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt index e69de29..863ea0a 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,37 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, DoorFSMContext]() + .set_start_state(States.OPEN) + .set_context(DoorFSMContext()) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt index e69de29..76db2a5 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,64 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + + +class TypesDoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, DoorFSMContext]() + .set_start_state(States.OPEN) + .set_context(DoorFSMContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt index e69de29..58ddd62 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,30 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, EmptyContext]() + .set_start_state(States.OPEN) + .set_context(EmptyContext()) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt index e69de29..aad3826 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,57 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import StaterStateMachineBuilder + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + + +class TypesDoorStateMachine(StaterStateMachine[States, EmptyContext]): + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") + + +def typed_Door_factory(*args, **kwargs): + return TypesDoorStateMachine(*args, **kwargs) + + +builder_Door_state_machine = ( + StaterStateMachineBuilder[States, EmptyContext]() + .set_start_state(States.OPEN) + .set_context(EmptyContext()) + .set_factory(typed_Door_factory) + .add_transition("preOpen", States.CLOSE, States.AJAR) + .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) + .add_transition("preClose", States.OPEN, States.AJAR) + .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) + .add_transition("open", States.AJAR, States.OPEN) + .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) + .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) + .add_transition("close", States.AJAR, States.CLOSE) + .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) + .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) + .add_transition("ajarPlus", States.AJAR, States.AJAR) + .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) + .add_transition("ajarMinus", States.AJAR, States.AJAR) + .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) +) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt index e69de29..db7dec8 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,58 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state="OPEN", + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt index e69de29..f95e90e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,76 @@ +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[str, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state="OPEN", + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt index e69de29..2d83491 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,51 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorStateMachine(StaterStateMachine[str, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state="OPEN", + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt index e69de29..11251eb 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,69 @@ +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class DoorStateMachine(StaterStateMachine[str, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start="CLOSE", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start="OPEN", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start="AJAR", + end="OPEN", + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start="AJAR", + end="CLOSE", + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start="AJAR", + end="AJAR", + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state="OPEN", + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt index e69de29..8c0dba5 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,65 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state=States.OPEN, + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt index e69de29..5edb446 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,83 @@ +from enum import Enum +from pydantic import BaseModel +from stater_state_machine import Context +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorFSMContext(BaseModel, Context): + degreeOfOpening: int = 0 + closeVariable: bool = True + doorName: str = "asd" + floatVariable: float = 0 + +class DoorStateMachine(StaterStateMachine[States, DoorFSMContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=DoorFSMContext(), + start_state=States.OPEN, + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt index e69de29..92f3569 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,58 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorStateMachine(StaterStateMachine[States, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state=States.OPEN, + ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt index e69de29..be60674 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,76 @@ +from enum import Enum +from stater_state_machine import EmptyContext +from stater_state_machine import StaterStateMachine +from stater_state_machine import Transition + + +class States(Enum): + OPEN = "OPEN" + AJAR = "AJAR" + CLOSE = "CLOSE" + + +class DoorStateMachine(StaterStateMachine[States, EmptyContext]): + def __init__(self): + super().__init__( + transitions=[ + Transition( + name="preOpen", + start=States.CLOSE, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + ), + Transition( + name="preClose", + start=States.OPEN, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + ), + Transition( + name="open", + start=States.AJAR, + end=States.OPEN, + condition=lambda ctx: ctx.degreeOfOpening >= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + ), + Transition( + name="close", + start=States.AJAR, + end=States.CLOSE, + condition=lambda ctx: ctx.degreeOfOpening <= 0, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + ), + Transition( + name="ajarPlus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + ), + Transition( + name="ajarMinus", + start=States.AJAR, + end=States.AJAR, + event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + ) + ], + context=EmptyContext(), + start_state=States.OPEN, + ) + + def preOpen(self): + self.transition("preOpen") + + def preClose(self): + self.transition("preClose") + + def open(self): + self.transition("open") + + def close(self): + self.transition("close") + + def ajarPlus(self): + self.transition("ajarPlus") + + def ajarMinus(self): + self.transition("ajarMinus") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt index e69de29..df80b47 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,251 @@ +import json + +from .Door import builder_Door_state_machine + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + + +def test_system_append_state_transition(): + sm_builder = builder_Door_state_machine + + sm_builder = sm_builder.add_state('__test_state_1__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_state('__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt index e69de29..8c02cb3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,251 @@ +import json + +from .Door import builder_Door_state_machine + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + + +def test_system_append_state_transition(): + sm_builder = builder_Door_state_machine + + sm_builder = sm_builder.add_state('__test_state_1__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_state('__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt index e69de29..df80b47 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,251 @@ +import json + +from .Door import builder_Door_state_machine + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + + +def test_system_append_state_transition(): + sm_builder = builder_Door_state_machine + + sm_builder = sm_builder.add_state('__test_state_1__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_state('__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt index e69de29..8c02cb3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,251 @@ +import json + +from .Door import builder_Door_state_machine + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + + +def test_system_append_state_transition(): + sm_builder = builder_Door_state_machine + + sm_builder = sm_builder.add_state('__test_state_1__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_state('__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) + + sm_builder = sm_builder.add_transition('__test_transition__', '__test_state_1__', '__test_state_2__') + assert json.loads("""{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}""") == json.loads(sm_builder.build().to_json_schema()) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt index e69de29..1ea3f75 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import builder_Door_state_machine +from .Door import States + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt index e69de29..5f4e37b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import builder_Door_state_machine +from .Door import States + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt index e69de29..1ea3f75 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import builder_Door_state_machine +from .Door import States + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt index e69de29..5f4e37b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import builder_Door_state_machine +from .Door import States + + +def test_init(): + builder_Door_state_machine.build() + + +def test_scenario_0(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = builder_Door_state_machine.build() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = builder_Door_state_machine.build() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt index e69de29..9f04d6d 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,112 @@ +import json + +from .Door import DoorStateMachine + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt index e69de29..9b8217f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,112 @@ +import json + +from .Door import DoorStateMachine + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt index e69de29..9f04d6d 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,112 @@ +import json + +from .Door import DoorStateMachine + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('ajarPlus') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == "AJAR" + + sm.transition('close') + assert sm.get_state() == "CLOSE" + + sm.transition('preOpen') + assert sm.get_state() == "AJAR" + + sm.transition('open') + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt index e69de29..9b8217f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,112 @@ +import json + +from .Door import DoorStateMachine + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.ajarPlus() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == "AJAR" + + sm.close() + assert sm.get_state() == "CLOSE" + + sm.preOpen() + assert sm.get_state() == "AJAR" + + sm.open() + assert sm.get_state() == "OPEN" + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt index e69de29..d8ae62f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import DoorStateMachine +from .Door import States + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt index e69de29..bec93d3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import DoorStateMachine +from .Door import States + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt index e69de29..d8ae62f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import DoorStateMachine +from .Door import States + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('ajarPlus') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.transition('preClose') + assert sm.get_state() == States.AJAR + + sm.transition('close') + assert sm.get_state() == States.CLOSE + + sm.transition('preOpen') + assert sm.get_state() == States.AJAR + + sm.transition('open') + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt index e69de29..bec93d3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,113 @@ +import json + +from .Door import DoorStateMachine +from .Door import States + + +def test_init(): + DoorStateMachine() + + +def test_scenario_0(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_1(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.ajarPlus() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_scenario_2(): + sm = DoorStateMachine() + sm.disable_events() + + + sm.preClose() + assert sm.get_state() == States.AJAR + + sm.close() + assert sm.get_state() == States.CLOSE + + sm.preOpen() + assert sm.get_state() == States.AJAR + + sm.open() + assert sm.get_state() == States.OPEN + + +def test_json_schema(): + sm = DoorStateMachine() + assert json.loads("""{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}""") == json.loads(sm.to_json_schema()) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt index e69de29..c3a3fd3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerate.verified.txt @@ -0,0 +1,37 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt index e69de29..1cee7c3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt @@ -0,0 +1,70 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", "OPEN", "AJAR") + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", "AJAR", "OPEN") + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", "AJAR", "CLOSE") + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", "AJAR", "AJAR") + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", "AJAR", "AJAR") + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt index e69de29..28b7a2d 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -0,0 +1,12 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt index e69de29..efd53ad 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -0,0 +1,45 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState("OPEN") + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", "CLOSE", "AJAR") + .addTransition("preClose", "OPEN", "AJAR") + .addTransition("open", "AJAR", "OPEN") + .addTransition("close", "AJAR", "CLOSE") + .addTransition("ajarPlus", "AJAR", "AJAR") + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt index e69de29..759409e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerate.verified.txt @@ -0,0 +1,43 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt index e69de29..adfa16c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt @@ -0,0 +1,76 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(buildDoorFSMContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) + .addTransition("preClose", States.OPEN, States.AJAR) + .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) + .addTransition("open", States.AJAR, States.OPEN) + .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) + .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) + .addTransition("close", States.AJAR, States.CLOSE) + .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) + .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) + .addTransition("ajarMinus", States.AJAR, States.AJAR) + .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt index e69de29..5683fd3 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -0,0 +1,18 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt index e69de29..133b5fa 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -0,0 +1,51 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; +import {StaterStateMachineBuilder} from "./StaterStateMachine"; + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export class TypesDoorStateMachine extends StaterStateMachine { + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} + +const typedDoorFactory: StateMachineFactory = (...args): StaterStateMachine => { + return new TypesDoorStateMachine(...args); +}; + +export const builderDoorStateMachine = new StaterStateMachineBuilder() + .setStartState(States.OPEN) + .setContext(new EmptyContext()) + .setFactory(typedDoorFactory) + .addTransition("preOpen", States.CLOSE, States.AJAR) + .addTransition("preClose", States.OPEN, States.AJAR) + .addTransition("open", States.AJAR, States.OPEN) + .addTransition("close", States.AJAR, States.CLOSE) + .addTransition("ajarPlus", States.AJAR, States.AJAR) + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt index e69de29..bc5a550 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerate.verified.txt @@ -0,0 +1,69 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt index e69de29..2f9d2c1 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt @@ -0,0 +1,94 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: "AJAR", + end: "OPEN", + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: "AJAR", + end: "CLOSE", + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR", + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt index e69de29..9624b89 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -0,0 +1,44 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR" + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR" + }, + { + name: "open", + start: "AJAR", + end: "OPEN" + }, + { + name: "close", + start: "AJAR", + end: "CLOSE" + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR" + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR" + } + ], + new EmptyContext(), + "OPEN", + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt index e69de29..348d999 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -0,0 +1,69 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: "CLOSE", + end: "AJAR" + }, + { + name: "preClose", + start: "OPEN", + end: "AJAR" + }, + { + name: "open", + start: "AJAR", + end: "OPEN" + }, + { + name: "close", + start: "AJAR", + end: "CLOSE" + }, + { + name: "ajarPlus", + start: "AJAR", + end: "AJAR" + }, + { + name: "ajarMinus", + start: "AJAR", + end: "AJAR" + } + ], + new EmptyContext(), + "OPEN", + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt index e69de29..a530460 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerate.verified.txt @@ -0,0 +1,75 @@ +import {Context} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt index e69de29..e0f9cc8 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt @@ -0,0 +1,100 @@ +import {Context} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +interface DoorFSMContext extends Context { + degreeOfOpening: number + closeVariable: boolean + doorName: string + floatVariable: number +} + +const buildDoorFSMContext: () => DoorFSMContext = () => { + return { + degreeOfOpening: 0, + closeVariable: true, + doorName: "asd", + floatVariable: 0 + } +} + + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 1 } + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = 99 } + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN, + condition: (ctx) => ctx.degreeOfOpening >= 0, + event: (ctx) => { ctx.degreeOfOpening = 100 } + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE, + condition: (ctx) => ctx.degreeOfOpening <= 0, + event: (ctx) => { ctx.degreeOfOpening = 0 } + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR, + event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + } + ], + buildDoorFSMContext(), + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt index e69de29..4cdf26b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -0,0 +1,50 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR + } + ], + new EmptyContext(), + States.OPEN, + ) + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt index e69de29..2d48518 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -0,0 +1,75 @@ +import {EmptyContext} from "./StaterStateMachine"; +import {StateMachineFactory} from "./StaterStateMachine"; +import {StaterStateMachine} from "./StaterStateMachine"; + + +export enum States { + OPEN = "OPEN", + AJAR = "AJAR", + CLOSE = "CLOSE" +} + +export class DoorStateMachine extends StaterStateMachine { + constructor() { + super( + [ + { + name: "preOpen", + start: States.CLOSE, + end: States.AJAR + }, + { + name: "preClose", + start: States.OPEN, + end: States.AJAR + }, + { + name: "open", + start: States.AJAR, + end: States.OPEN + }, + { + name: "close", + start: States.AJAR, + end: States.CLOSE + }, + { + name: "ajarPlus", + start: States.AJAR, + end: States.AJAR + }, + { + name: "ajarMinus", + start: States.AJAR, + end: States.AJAR + } + ], + new EmptyContext(), + States.OPEN, + ) + } + + preOpen() { + this.transition("preOpen") + } + + preClose() { + this.transition("preClose") + } + + open() { + this.transition("open") + } + + close() { + this.transition("close") + } + + ajarPlus() { + this.transition("ajarPlus") + } + + ajarMinus() { + this.transition("ajarMinus") + } +} \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt index e69de29..b695a79 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerate.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt index e69de29..ff0da21 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() as TypesDoorStateMachine +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt index e69de29..b695a79 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerate.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt index e69de29..ff0da21 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsGenerateWithInterface.verified.txt @@ -0,0 +1,257 @@ +import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() as TypesDoorStateMachine +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + + +test('testSystemAppendStateTransition', () => { + let smBuilder = builderDoorStateMachine + + smBuilder = smBuilder.addState('__test_state_1__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addState('__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) + + smBuilder = smBuilder.addTransition('__test_transition__', '__test_state_1__', '__test_state_2__') + expect(JSON.parse(`{ + "states": [ + "__test_state_1__", + "__test_state_2__", + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "__test_transition__", + "start": "__test_state_1__", + "end": "__test_state_2__" + } + ] +}`)).toStrictEqual(JSON.parse(smBuilder.build().toJsonSchema())) +}) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt index e69de29..03e7f2e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerate.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt index e69de29..7d789b9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() as TypesDoorStateMachine +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt index e69de29..03e7f2e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerate.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt index e69de29..7d789b9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,118 @@ +import {builderDoorStateMachine, TypesDoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + builderDoorStateMachine.build() as TypesDoorStateMachine +}) + + + +test('testScenario0', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = builderDoorStateMachine.build() as TypesDoorStateMachine + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt index e69de29..349c13f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerate.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt index e69de29..46957b2 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt index e69de29..349c13f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerate.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('ajarPlus') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe("AJAR") + + sm.transition('close') + expect(sm.getState()).toBe("CLOSE") + + sm.transition('preOpen') + expect(sm.getState()).toBe("AJAR") + + sm.transition('open') + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt index e69de29..46957b2 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsGenerateWithInterface.verified.txt @@ -0,0 +1,117 @@ +import {DoorStateMachine} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.ajarPlus() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe("AJAR") + + sm.close() + expect(sm.getState()).toBe("CLOSE") + + sm.preOpen() + expect(sm.getState()).toBe("AJAR") + + sm.open() + expect(sm.getState()).toBe("OPEN") + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt index e69de29..9c4d633 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerate.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt index e69de29..7806a77 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt index e69de29..9c4d633 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerate.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('ajarPlus') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.transition('preClose') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('close') + expect(sm.getState()).toBe(States.CLOSE) + + sm.transition('preOpen') + expect(sm.getState()).toBe(States.AJAR) + + sm.transition('open') + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt index e69de29..7806a77 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateGenerateWithInterface.verified.txt @@ -0,0 +1,118 @@ +import {DoorStateMachine} from "./Door"; +import {States} from "./Door"; + + +test('testInit', () => { + new DoorStateMachine() +}) + + + +test('testScenario0', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario1', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.ajarPlus() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + +test('testScenario2', () => { + const sm = new DoorStateMachine() + sm.disableEvents() + + + sm.preClose() + expect(sm.getState()).toBe(States.AJAR) + + sm.close() + expect(sm.getState()).toBe(States.CLOSE) + + sm.preOpen() + expect(sm.getState()).toBe(States.AJAR) + + sm.open() + expect(sm.getState()).toBe(States.OPEN) + +}) + + +test('testJsonSchema', () => { + const sm = new DoorStateMachine() + expect(JSON.parse(`{ + "states": [ + "AJAR", + "CLOSE", + "OPEN" + ], + "startState": "OPEN", + "transitions": [ + { + "name": "preOpen", + "start": "CLOSE", + "end": "AJAR" + }, + { + "name": "preClose", + "start": "OPEN", + "end": "AJAR" + }, + { + "name": "open", + "start": "AJAR", + "end": "OPEN" + }, + { + "name": "close", + "start": "AJAR", + "end": "CLOSE" + }, + { + "name": "ajarPlus", + "start": "AJAR", + "end": "AJAR" + }, + { + "name": "ajarMinus", + "start": "AJAR", + "end": "AJAR" + } + ] +}`)).toStrictEqual(JSON.parse(sm.toJsonSchema())) +}) + From 516deeb74bb8058039b7c4ed870d4372123705df Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 20 Apr 2025 19:05:04 +0300 Subject: [PATCH 65/69] Rename --- Stater.sln.DotSettings.user | 4 ++-- .../LanguageAdapter/BaseTestAdapterGenerateDoorTests.cs | 8 ++++---- .../BaseTestAdapterGenerateTestsDoorTests.cs | 8 ++++---- ...ests.BuilderContextGenerateWithInterface.verified.txt} | 0 ...BuilderStateContextGenerateWithInterface.verified.txt} | 0 ...rTests.ClazzContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzStateContextGenerateWithInterface.verified.txt} | 0 ...BuilderTestsContextGenerateWithInterface.verified.txt} | 0 ...erTestsStateContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzTestsContextGenerateWithInterface.verified.txt} | 0 ...zzTestsStateContextGenerateWithInterface.verified.txt} | 0 ...ests.BuilderContextGenerateWithInterface.verified.txt} | 0 ...BuilderStateContextGenerateWithInterface.verified.txt} | 0 ...rTests.ClazzContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzStateContextGenerateWithInterface.verified.txt} | 0 ...BuilderTestsContextGenerateWithInterface.verified.txt} | 0 ...erTestsStateContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzTestsContextGenerateWithInterface.verified.txt} | 0 ...zzTestsStateContextGenerateWithInterface.verified.txt} | 0 ...ests.BuilderContextGenerateWithInterface.verified.txt} | 0 ...BuilderStateContextGenerateWithInterface.verified.txt} | 0 ...rTests.ClazzContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzStateContextGenerateWithInterface.verified.txt} | 0 ...BuilderTestsContextGenerateWithInterface.verified.txt} | 0 ...erTestsStateContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzTestsContextGenerateWithInterface.verified.txt} | 0 ...zzTestsStateContextGenerateWithInterface.verified.txt} | 0 ...ests.BuilderContextGenerateWithInterface.verified.txt} | 0 ...BuilderStateContextGenerateWithInterface.verified.txt} | 0 ...rTests.ClazzContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzStateContextGenerateWithInterface.verified.txt} | 0 ...BuilderTestsContextGenerateWithInterface.verified.txt} | 0 ...erTestsStateContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzTestsContextGenerateWithInterface.verified.txt} | 0 ...zzTestsStateContextGenerateWithInterface.verified.txt} | 0 ...ests.BuilderContextGenerateWithInterface.verified.txt} | 0 ...BuilderStateContextGenerateWithInterface.verified.txt} | 0 ...rTests.ClazzContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzStateContextGenerateWithInterface.verified.txt} | 0 ...BuilderTestsContextGenerateWithInterface.verified.txt} | 0 ...erTestsStateContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzTestsContextGenerateWithInterface.verified.txt} | 0 ...zzTestsStateContextGenerateWithInterface.verified.txt} | 0 .../LanguageAdapter/ModuleInitializer.cs | 2 +- ...ests.BuilderContextGenerateWithInterface.verified.txt} | 0 ...BuilderStateContextGenerateWithInterface.verified.txt} | 0 ...rTests.ClazzContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzStateContextGenerateWithInterface.verified.txt} | 0 ...BuilderTestsContextGenerateWithInterface.verified.txt} | 0 ...erTestsStateContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzTestsContextGenerateWithInterface.verified.txt} | 0 ...zzTestsStateContextGenerateWithInterface.verified.txt} | 0 ...ests.BuilderContextGenerateWithInterface.verified.txt} | 0 ...BuilderStateContextGenerateWithInterface.verified.txt} | 0 ...rTests.ClazzContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzStateContextGenerateWithInterface.verified.txt} | 0 ...BuilderTestsContextGenerateWithInterface.verified.txt} | 0 ...erTestsStateContextGenerateWithInterface.verified.txt} | 0 ...s.ClazzTestsContextGenerateWithInterface.verified.txt} | 0 ...zzTestsStateContextGenerateWithInterface.verified.txt} | 0 60 files changed, 11 insertions(+), 11 deletions(-) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/{CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt => CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/{CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt => CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/{CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt => CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/{CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt => CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/{CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt => CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/{CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt => CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/{CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt => CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/{CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt => CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/{CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt => CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/{CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt => CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/{CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt => CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/{CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt => CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/{CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt => CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/{CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt => CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/{CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt => CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/{CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt => CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/{JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt => JavaAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/{JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt => JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/{JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt => JavaAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/{JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt => JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/{JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt => JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/{JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt => JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/{JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt => JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/{JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt => JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/{JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt => JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/{JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt => JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/{JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt => JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/{JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt => JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/{JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt => JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/{JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt => JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/{JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt => JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/{JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt => JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/{KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt => KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/{KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt => KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/{KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt => KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/{KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt => KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/{KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt => KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/{KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt => KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/{KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt => KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/{KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt => KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/{PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt => PythonAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/{PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt => PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/{PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt => PythonAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/{PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt => PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/{PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt => PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/{PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt => PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/{PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt => PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/{PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt => PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/{TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt => TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/{TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt => TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/{TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt => TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/{TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt => TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/{TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt => TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/{TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt => TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/{TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt => TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt} (100%) rename src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/{TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt => TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt} (100%) diff --git a/Stater.sln.DotSettings.user b/Stater.sln.DotSettings.user index 47c9603..ed3781e 100644 --- a/Stater.sln.DotSettings.user +++ b/Stater.sln.DotSettings.user @@ -5,7 +5,7 @@ False SOLUTION - <SessionState ContinuousTestingMode="0" IsActive="True" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <SessionState ContinuousTestingMode="0" Name="ConvertToKotlin_ShouldGenerateValidCode" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <Or> <TestAncestor> <TestId>xUnit::879047E1-76DD-4892-AF8F-8EC562514AD7::net8.0::Stater.CodeGeneration.Tests.LanguageAdapter.Kotlin.KotlinAdapterDoorTests</TestId> @@ -18,7 +18,7 @@ <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> </Or> </SessionState> - <SessionState ContinuousTestingMode="0" Name="Session" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <SessionState ContinuousTestingMode="0" IsActive="True" Name="Session" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <Project Location="/Users/vnazarov/RiderProjects/Stater3/src/Stater.CodeGeneration.Tests" Presentation="&lt;Stater.CodeGeneration.Tests&gt;" /> </SessionState> True diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateDoorTests.cs index b18008b..c6eedb2 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateDoorTests.cs +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateDoorTests.cs @@ -75,7 +75,7 @@ public Task ClazzContextGenerate() } [Fact] - public Task ClazzContextGenerateWithContext() + public Task ClazzContextGenerateWithInterface() { var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var settings = new GenerationSettings( @@ -103,7 +103,7 @@ public Task ClazzStateContextGenerate() } [Fact] - public Task ClazzStateContextGenerateWithContext() + public Task ClazzStateContextGenerateWithInterface() { var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var settings = new GenerationSettings( @@ -188,7 +188,7 @@ public Task BuilderContextGenerate() } [Fact] - public Task BuilderContextGenerateWithContext() + public Task BuilderContextGenerateWithInterface() { var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var settings = new GenerationSettings( @@ -218,7 +218,7 @@ public Task BuilderStateContextGenerate() } [Fact] - public Task BuilderStateContextGenerateWithContext() + public Task BuilderStateContextGenerateWithInterface() { var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var settings = new GenerationSettings( diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateTestsDoorTests.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateTestsDoorTests.cs index 598241e..a029e39 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateTestsDoorTests.cs +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/BaseTestAdapterGenerateTestsDoorTests.cs @@ -80,7 +80,7 @@ public Task ClazzTestsContextGenerate() } [Fact] - public Task ClazzTestsContextGenerateWithContext() + public Task ClazzTestsContextGenerateWithInterface() { var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var scenarios = ScenarioFinder.FindScenarios(stateMachine); @@ -110,7 +110,7 @@ public Task ClazzTestsStateContextGenerate() } [Fact] - public Task ClazzTestsStateContextGenerateWithContext() + public Task ClazzTestsStateContextGenerateWithInterface() { var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var scenarios = ScenarioFinder.FindScenarios(stateMachine); @@ -201,7 +201,7 @@ public Task BuilderTestsContextGenerate() } [Fact] - public Task BuilderTestsContextGenerateWithContext() + public Task BuilderTestsContextGenerateWithInterface() { var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var scenarios = ScenarioFinder.FindScenarios(stateMachine); @@ -233,7 +233,7 @@ public Task BuilderTestsStateContextGenerate() } [Fact] - public Task BuilderTestsStateContextGenerateWithContext() + public Task BuilderTestsStateContextGenerateWithInterface() { var stateMachine = DoorStateMachineTestData.CreateDoorStateMachine(); var scenarios = ScenarioFinder.FindScenarios(stateMachine); diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CPlusPlus/CPlusPlusAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/CSharp/CShaprAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Java/JavaTestsAdapterGenerateDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Kotlin/KotlinAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs index 2b46b10..b2624c2 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs @@ -7,6 +7,6 @@ public class ModuleInitializer [ModuleInitializer] public static void Init() { - // VerifierSettings.AutoVerify(); + VerifierSettings.AutoVerify(); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.BuilderStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateDoorTests.ClazzStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.BuilderTestsStateContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsContextGenerateWithInterface.verified.txt diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt similarity index 100% rename from src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithContext.verified.txt rename to src/Stater.CodeGeneration.Tests/LanguageAdapter/TypeScript/TypeScriptAdapterGenerateTestsDoorTests.ClazzTestsStateContextGenerateWithInterface.verified.txt From fd4e3582e39903ff71fda3f9064a54af8ef2dae4 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 20 Apr 2025 20:20:39 +0300 Subject: [PATCH 66/69] bugfix js --- ...rateDoorTests.BuilderGenerate.verified.txt | 10 +--------- ....BuilderGenerateWithInterface.verified.txt | 10 +--------- ...oorTests.BuilderStateGenerate.verified.txt | 10 +--------- ...derStateGenerateWithInterface.verified.txt | 10 +--------- ...nerateDoorTests.ClazzGenerate.verified.txt | 20 ++++++------------- ...ts.ClazzGenerateWithInterface.verified.txt | 20 ++++++------------- ...eDoorTests.ClazzStateGenerate.verified.txt | 20 ++++++------------- ...azzStateGenerateWithInterface.verified.txt | 20 ++++++------------- .../LanguageAdapter/ModuleInitializer.cs | 2 +- .../Templates/javascript.scriban | 8 ++++---- 10 files changed, 33 insertions(+), 97 deletions(-) diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt index e887eb6..6d55837 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -4,16 +4,8 @@ export const builderDoorStateMachine = new StaterStateMachineBuilder() .setStartState("OPEN") .setContext({}) .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt index 2b3d743..76d856b 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -34,16 +34,8 @@ export const builderDoorStateMachine = new StaterStateMachineBuilder() .setContext({}) .setFactory(typedDoorFactory) .addTransition("preOpen", "CLOSE", "AJAR") - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) .addTransition("preClose", "OPEN", "AJAR") - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) .addTransition("open", "AJAR", "OPEN") - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) .addTransition("close", "AJAR", "CLOSE") - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) .addTransition("ajarPlus", "AJAR", "AJAR") - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", "AJAR", "AJAR") - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file + .addTransition("ajarMinus", "AJAR", "AJAR") \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt index 60f5479..294d90c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -10,16 +10,8 @@ export const builderDoorStateMachine = new StaterStateMachineBuilder() .setStartState(States.OPEN) .setContext({}) .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt index 5b93af7..368db9e 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -40,16 +40,8 @@ export const builderDoorStateMachine = new StaterStateMachineBuilder() .setContext({}) .setFactory(typedDoorFactory) .addTransition("preOpen", States.CLOSE, States.AJAR) - .setTransitionEvent("preOpen", (ctx) => { ctx.degreeOfOpening = 1 }) .addTransition("preClose", States.OPEN, States.AJAR) - .setTransitionEvent("preClose", (ctx) => { ctx.degreeOfOpening = 99 }) .addTransition("open", States.AJAR, States.OPEN) - .setTransitionCondition("open", (ctx) => ctx.degreeOfOpening >= 0) - .setTransitionEvent("open", (ctx) => { ctx.degreeOfOpening = 100 }) .addTransition("close", States.AJAR, States.CLOSE) - .setTransitionCondition("close", (ctx) => ctx.degreeOfOpening <= 0) - .setTransitionEvent("close", (ctx) => { ctx.degreeOfOpening = 0 }) .addTransition("ajarPlus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarPlus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 }) - .addTransition("ajarMinus", States.AJAR, States.AJAR) - .setTransitionEvent("ajarMinus", (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 }) \ No newline at end of file + .addTransition("ajarMinus", States.AJAR, States.AJAR) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt index df53f9c..dbe27b9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -8,40 +8,32 @@ export class DoorStateMachine extends StaterStateMachine { { name: "preOpen", start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } + end: "AJAR" }, { name: "preClose", start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } + end: "AJAR" }, { name: "open", start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } + end: "OPEN" }, { name: "close", start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } + end: "CLOSE" }, { name: "ajarPlus", start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + end: "AJAR" }, { name: "ajarMinus", start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + end: "AJAR" } ], {}, diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt index 5ae8f81..430ddf6 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -8,40 +8,32 @@ export class DoorStateMachine extends StaterStateMachine { { name: "preOpen", start: "CLOSE", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 1 } + end: "AJAR" }, { name: "preClose", start: "OPEN", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = 99 } + end: "AJAR" }, { name: "open", start: "AJAR", - end: "OPEN", - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } + end: "OPEN" }, { name: "close", start: "AJAR", - end: "CLOSE", - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } + end: "CLOSE" }, { name: "ajarPlus", start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + end: "AJAR" }, { name: "ajarMinus", start: "AJAR", - end: "AJAR", - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + end: "AJAR" } ], {}, diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt index b4f3786..b8bd825 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -14,40 +14,32 @@ export class DoorStateMachine extends StaterStateMachine { { name: "preOpen", start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } + end: States.AJAR }, { name: "preClose", start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } + end: States.AJAR }, { name: "open", start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } + end: States.OPEN }, { name: "close", start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } + end: States.CLOSE }, { name: "ajarPlus", start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + end: States.AJAR }, { name: "ajarMinus", start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + end: States.AJAR } ], {}, diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt index 00336e3..a5d16b9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/JavaScript/JavaScriptAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -14,40 +14,32 @@ export class DoorStateMachine extends StaterStateMachine { { name: "preOpen", start: States.CLOSE, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 1 } + end: States.AJAR }, { name: "preClose", start: States.OPEN, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = 99 } + end: States.AJAR }, { name: "open", start: States.AJAR, - end: States.OPEN, - condition: (ctx) => ctx.degreeOfOpening >= 0, - event: (ctx) => { ctx.degreeOfOpening = 100 } + end: States.OPEN }, { name: "close", start: States.AJAR, - end: States.CLOSE, - condition: (ctx) => ctx.degreeOfOpening <= 0, - event: (ctx) => { ctx.degreeOfOpening = 0 } + end: States.CLOSE }, { name: "ajarPlus", start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening + 1 } + end: States.AJAR }, { name: "ajarMinus", start: States.AJAR, - end: States.AJAR, - event: (ctx) => { ctx.degreeOfOpening = ctx.degreeOfOpening - 1 } + end: States.AJAR } ], {}, diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs b/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs index b2624c2..2b46b10 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/ModuleInitializer.cs @@ -7,6 +7,6 @@ public class ModuleInitializer [ModuleInitializer] public static void Init() { - VerifierSettings.AutoVerify(); + // VerifierSettings.AutoVerify(); } } \ No newline at end of file diff --git a/src/Stater.CodeGeneration/Templates/javascript.scriban b/src/Stater.CodeGeneration/Templates/javascript.scriban index cf026b5..f34eec1 100644 --- a/src/Stater.CodeGeneration/Templates/javascript.scriban +++ b/src/Stater.CodeGeneration/Templates/javascript.scriban @@ -38,9 +38,9 @@ export class {{ fsm.name }}StateMachine extends StaterStateMachine { { name: "{{ item.transition.name }}", start: {{ state item.start_state.name }}, - end: {{ state item.end_state.name }} {{- if item.transition.condition }}, + end: {{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, condition: (ctx) => {{ convert_condition item.transition item.transition.condition }} - {{- end }}{{- if item.transition.event }}, + {{- end }}{{- if item.transition.event && settings.generate_context }}, event: (ctx) => { {{ convert_event item.transition item.transition.event }} } {{- end }} }{{- if !for.last }}{{ "," }}{{- end }} @@ -90,10 +90,10 @@ export const builder{{ fsm.name }}StateMachine = new StaterStateMachineBuilder() {{- end }} {{- for item in fsm.state_transitions }} .addTransition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) - {{- if item.transition.condition }} + {{- if item.transition.condition && settings.generate_context }} .setTransitionCondition("{{ item.transition.name }}", (ctx) => {{ convert_condition item.transition item.transition.condition }}) {{- end }} - {{- if item.transition.event }} + {{- if item.transition.event && settings.generate_context }} .setTransitionEvent("{{ item.transition.name }}", (ctx) => { {{ convert_event item.transition item.transition.event }} }) {{- end }} {{- end }} From 3f7c08185cde54e39b14dfb2abe62d88bd4c10bd Mon Sep 17 00:00:00 2001 From: phoenix Date: Sun, 20 Apr 2025 20:24:14 +0300 Subject: [PATCH 67/69] Fix python3 --- ...rateDoorTests.BuilderGenerate.verified.txt | 8 -------- ....BuilderGenerateWithInterface.verified.txt | 8 -------- ...oorTests.BuilderStateGenerate.verified.txt | 8 -------- ...derStateGenerateWithInterface.verified.txt | 8 -------- ...nerateDoorTests.ClazzGenerate.verified.txt | 20 ++++++------------- ...ts.ClazzGenerateWithInterface.verified.txt | 20 ++++++------------- ...eDoorTests.ClazzStateGenerate.verified.txt | 20 ++++++------------- ...azzStateGenerateWithInterface.verified.txt | 20 ++++++------------- .../Templates/python.scriban | 8 ++++---- 9 files changed, 28 insertions(+), 92 deletions(-) diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt index e08c6e5..2e2642d 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerate.verified.txt @@ -7,17 +7,9 @@ builder_Door_state_machine = ( .set_start_state("OPEN") .set_context(EmptyContext()) .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt index 68e9f42..7f9a38c 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderGenerateWithInterface.verified.txt @@ -34,17 +34,9 @@ builder_Door_state_machine = ( .set_context(EmptyContext()) .set_factory(typed_Door_factory) .add_transition("preOpen", "CLOSE", "AJAR") - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) .add_transition("preClose", "OPEN", "AJAR") - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) .add_transition("open", "AJAR", "OPEN") - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) .add_transition("close", "AJAR", "CLOSE") - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) .add_transition("ajarPlus", "AJAR", "AJAR") - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) .add_transition("ajarMinus", "AJAR", "AJAR") - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt index 58ddd62..59b2f10 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerate.verified.txt @@ -14,17 +14,9 @@ builder_Door_state_machine = ( .set_start_state(States.OPEN) .set_context(EmptyContext()) .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt index aad3826..943c7a9 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.BuilderStateGenerateWithInterface.verified.txt @@ -41,17 +41,9 @@ builder_Door_state_machine = ( .set_context(EmptyContext()) .set_factory(typed_Door_factory) .add_transition("preOpen", States.CLOSE, States.AJAR) - .set_transition_event("preOpen", lambda ctx: setattr(ctx, 'degreeOfOpening', 1)) .add_transition("preClose", States.OPEN, States.AJAR) - .set_transition_event("preClose", lambda ctx: setattr(ctx, 'degreeOfOpening', 99)) .add_transition("open", States.AJAR, States.OPEN) - .set_transition_condition("open", lambda ctx: ctx.degreeOfOpening >= 0) - .set_transition_event("open", lambda ctx: setattr(ctx, 'degreeOfOpening', 100)) .add_transition("close", States.AJAR, States.CLOSE) - .set_transition_condition("close", lambda ctx: ctx.degreeOfOpening <= 0) - .set_transition_event("close", lambda ctx: setattr(ctx, 'degreeOfOpening', 0)) .add_transition("ajarPlus", States.AJAR, States.AJAR) - .set_transition_event("ajarPlus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1)) .add_transition("ajarMinus", States.AJAR, States.AJAR) - .set_transition_event("ajarMinus", lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1)) ) \ No newline at end of file diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt index 2d83491..de546f0 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerate.verified.txt @@ -10,40 +10,32 @@ class DoorStateMachine(StaterStateMachine[str, EmptyContext]): Transition( name="preOpen", start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + end="AJAR" ), Transition( name="preClose", start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + end="AJAR" ), Transition( name="open", start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + end="OPEN" ), Transition( name="close", start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + end="CLOSE" ), Transition( name="ajarPlus", start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + end="AJAR" ), Transition( name="ajarMinus", start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + end="AJAR" ) ], context=EmptyContext(), diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt index 11251eb..62b6f0f 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzGenerateWithInterface.verified.txt @@ -10,40 +10,32 @@ class DoorStateMachine(StaterStateMachine[str, EmptyContext]): Transition( name="preOpen", start="CLOSE", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + end="AJAR" ), Transition( name="preClose", start="OPEN", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + end="AJAR" ), Transition( name="open", start="AJAR", - end="OPEN", - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + end="OPEN" ), Transition( name="close", start="AJAR", - end="CLOSE", - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + end="CLOSE" ), Transition( name="ajarPlus", start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + end="AJAR" ), Transition( name="ajarMinus", start="AJAR", - end="AJAR", - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + end="AJAR" ) ], context=EmptyContext(), diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt index 92f3569..ab4e1e8 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerate.verified.txt @@ -17,40 +17,32 @@ class DoorStateMachine(StaterStateMachine[States, EmptyContext]): Transition( name="preOpen", start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + end=States.AJAR ), Transition( name="preClose", start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + end=States.AJAR ), Transition( name="open", start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + end=States.OPEN ), Transition( name="close", start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + end=States.CLOSE ), Transition( name="ajarPlus", start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + end=States.AJAR ), Transition( name="ajarMinus", start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + end=States.AJAR ) ], context=EmptyContext(), diff --git a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt index be60674..7cccd13 100644 --- a/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt +++ b/src/Stater.CodeGeneration.Tests/LanguageAdapter/Python3/PythonAdapterGenerateDoorTests.ClazzStateGenerateWithInterface.verified.txt @@ -17,40 +17,32 @@ class DoorStateMachine(StaterStateMachine[States, EmptyContext]): Transition( name="preOpen", start=States.CLOSE, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 1) + end=States.AJAR ), Transition( name="preClose", start=States.OPEN, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 99) + end=States.AJAR ), Transition( name="open", start=States.AJAR, - end=States.OPEN, - condition=lambda ctx: ctx.degreeOfOpening >= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 100) + end=States.OPEN ), Transition( name="close", start=States.AJAR, - end=States.CLOSE, - condition=lambda ctx: ctx.degreeOfOpening <= 0, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', 0) + end=States.CLOSE ), Transition( name="ajarPlus", start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening + 1) + end=States.AJAR ), Transition( name="ajarMinus", start=States.AJAR, - end=States.AJAR, - event=lambda ctx: setattr(ctx, 'degreeOfOpening', ctx.degreeOfOpening - 1) + end=States.AJAR ) ], context=EmptyContext(), diff --git a/src/Stater.CodeGeneration/Templates/python.scriban b/src/Stater.CodeGeneration/Templates/python.scriban index fe002bc..0c86eb9 100644 --- a/src/Stater.CodeGeneration/Templates/python.scriban +++ b/src/Stater.CodeGeneration/Templates/python.scriban @@ -38,9 +38,9 @@ class {{ fsm.name }}StateMachine(StaterStateMachine[{{ state_generic }}, {{ cont Transition( name="{{ item.transition.name }}", start={{ state item.start_state.name }}, - end={{ state item.end_state.name }} {{- if item.transition.condition }}, + end={{ state item.end_state.name }} {{- if item.transition.condition && settings.generate_context }}, condition=lambda ctx: {{ convert_condition item.transition item.transition.condition }} - {{- end }}{{- if item.transition.event }}, + {{- end }}{{- if item.transition.event && settings.generate_context }}, event=lambda ctx: {{ convert_event item.transition item.transition.event }} {{- end }} ){{- if !for.last }}{{ "," }}{{- end }} @@ -90,10 +90,10 @@ builder_{{ fsm.name }}_state_machine = ( {{- end }} {{- for item in fsm.state_transitions }} .add_transition("{{ item.transition.name }}", {{ state item.start_state.name }}, {{ state item.end_state.name }}) - {{- if item.transition.condition }} + {{- if item.transition.condition && settings.generate_context }} .set_transition_condition("{{ item.transition.name }}", lambda ctx: {{ convert_condition item.transition item.transition.condition }}) {{- end }} - {{- if item.transition.event }} + {{- if item.transition.event && settings.generate_context }} .set_transition_event("{{ item.transition.name }}", lambda ctx: {{ convert_event item.transition item.transition.event }}) {{- end }} {{- end }} From 191d2d343859e5bcf47a72989e854694ed1ae9a9 Mon Sep 17 00:00:00 2001 From: phoenix Date: Tue, 27 May 2025 21:52:23 +0300 Subject: [PATCH 68/69] BugFix --- src/Stater/Views/Plugins/CodeGeneration.axaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Stater/Views/Plugins/CodeGeneration.axaml b/src/Stater/Views/Plugins/CodeGeneration.axaml index 2c1efac..7511d21 100644 --- a/src/Stater/Views/Plugins/CodeGeneration.axaml +++ b/src/Stater/Views/Plugins/CodeGeneration.axaml @@ -8,7 +8,7 @@ x:DataType="vm:CodeGenerationViewModel"> - + Java Kotlin JavaScript @@ -20,7 +20,7 @@ - + Class Builder From 9069e2d8f3353184ff6de9b460ea5f56e9e61958 Mon Sep 17 00:00:00 2001 From: phoenix Date: Mon, 2 Jun 2025 20:58:09 +0300 Subject: [PATCH 69/69] Add readme --- README.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cffad8a..dc4dbc6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Stater — это мощное приложение, разработанное для упрощения создания, управления и выполнения конечных автоматов с использованием фреймворка C# Avalonia. Stater идеально подходит для разработчиков и дизайнеров, которые имеют дело со сложной логикой состояний. Stater предоставляет интуитивно понятный интерфейс для проектирования и управления конечными автоматами для различных приложений. -## Функции +## Основные возможности - **Управление проектами:** Легкое создание и управление проектами, содержащими несколько конечных автоматов. - **Редактирование конечного автомата:** Проектирование конечных автоматов с состояниями, переходами и условиями. @@ -46,4 +46,63 @@ var state2 = projectManager.CreateState(); var transition = projectManager.CreateTransition(state1, state2); projectManager.UpdateStateMachine(stateMachine); -``` \ No newline at end of file +``` + +## Stater.CodeGeneration +Генерация исходного кода из моделей конечных автоматов с использованием шаблонов и языковых адаптеров. + +Этот пакет предоставляет механизм генерации кода для различных языков программирования на основе внутренней модели автомата. Он гибко настраивается с помощью шаблонов и параметров генерации. + +Для каждого сгенерированного кода необходимо установить соответсвующую библиотеку [stater-fsm-code](https://github.com/PhoenixNazarov/stater-fsm-code). + +### Основные компоненты +- `CodeGenerator.cs`. Главная точка входа в процесс генерации. Координирует адаптеры, загрузку шаблонов и вывод итоговых файлов. +- `Entity/`. Модели данных, описывающие параметры генерации: + - `GenerationSettings.cs` — общие настройки генерации (язык, режим, путь и т.д.). + - `Language.cs` — перечисление поддерживаемых языков. + - `Mode.cs` — режимы генерации (например, с тестами / без тестов). +- `LanguageAdapter/`. Адаптеры для различных языков. Каждый из них отвечает за конкретный синтаксис, соглашения и поведение языка. Основаны на базовом классе `BaseLanguageAdapter`. + - `Base/` + - `BaseLanguageAdapter.cs` — абстрактный класс, реализующий общую логику адаптеров. + - `TemplateLoader.cs` — загрузка и обработка шаблонов Scriban. + +### Языковые адаптеры: +- `CSharpAdapter.cs` +- `PythonAdapter.cs` +- `JavaAdapter.cs` +- `JavaScriptAdapter.cs` +- `TypeScriptAdapter.cs` +- `KotlinAdapter.cs` +- `CPlusPlusAdapter.cs` + +`ScenarioFinder.cs`. + +Утилита для нахождения и анализа сценариев в модели автомата — возможно используется для генерации тестов или автоматизации переходов. + +`Stater.CodeGeneration.csproj`. + +Файл проекта .NET с зависимостями, настройками сборки и т.д. + +### Шаблоны: Templates/ +Scriban-шаблоны, используемые при генерации: + +`{language}.scriban` — основной шаблон генерации. + +`{language}-test.scriban` — шаблон для генерации unit-тестов. + +Поддерживаемые языки: + +- `c#`, `python`, `java`, `javascript`, `typescript`, `kotlin`, `c++` + +### Пример генерации +```c# +var settings = new GenerationSettings +{ + Language = Language.CSharp, + OutputDirectory = "./Generated", + Mode = Mode.Full +}; + +var generator = new CodeGenerator(); +generator.Generate(projectModel, settings); +```