From 193a01614dc3290eec51745a91be65c166c3763b Mon Sep 17 00:00:00 2001 From: Stefan Radomski Date: Wed, 2 Jul 2014 01:44:48 +0200 Subject: More work on C# embedding examples --- embedding/csharp/uSCXMLEmbedding.suo | Bin 29184 -> 30208 bytes embedding/csharp/uSCXMLEmbedding/Examples.csproj | 2 +- .../Extensions/CustomExecutableContent.cs | 4 +- .../uSCXMLEmbedding/Extensions/CustomInvoker.cs | 32 ++- embedding/csharp/uSCXMLEmbedding/Program.cs | 64 ----- embedding/csharp/uSCXMLEmbedding/RunTests.cs | 274 +++++++++++++++++++++ 6 files changed, 308 insertions(+), 68 deletions(-) delete mode 100644 embedding/csharp/uSCXMLEmbedding/Program.cs create mode 100644 embedding/csharp/uSCXMLEmbedding/RunTests.cs diff --git a/embedding/csharp/uSCXMLEmbedding.suo b/embedding/csharp/uSCXMLEmbedding.suo index b08325e..9bacedf 100644 Binary files a/embedding/csharp/uSCXMLEmbedding.suo and b/embedding/csharp/uSCXMLEmbedding.suo differ diff --git a/embedding/csharp/uSCXMLEmbedding/Examples.csproj b/embedding/csharp/uSCXMLEmbedding/Examples.csproj index b312b5f..1ffc38b 100644 --- a/embedding/csharp/uSCXMLEmbedding/Examples.csproj +++ b/embedding/csharp/uSCXMLEmbedding/Examples.csproj @@ -47,7 +47,7 @@ - + diff --git a/embedding/csharp/uSCXMLEmbedding/Extensions/CustomExecutableContent.cs b/embedding/csharp/uSCXMLEmbedding/Extensions/CustomExecutableContent.cs index 4789020..94cf111 100644 --- a/embedding/csharp/uSCXMLEmbedding/Extensions/CustomExecutableContent.cs +++ b/embedding/csharp/uSCXMLEmbedding/Extensions/CustomExecutableContent.cs @@ -15,12 +15,12 @@ namespace embedding public override void enterElement(string node) { - + Console.WriteLine("enterElement " + node); } public override void exitElement(string node) { - + Console.WriteLine("exitElement " + node); } public override ExecutableContent create(Interpreter interpreter) diff --git a/embedding/csharp/uSCXMLEmbedding/Extensions/CustomInvoker.cs b/embedding/csharp/uSCXMLEmbedding/Extensions/CustomInvoker.cs index 3fd01ce..da941b0 100644 --- a/embedding/csharp/uSCXMLEmbedding/Extensions/CustomInvoker.cs +++ b/embedding/csharp/uSCXMLEmbedding/Extensions/CustomInvoker.cs @@ -3,6 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using org.uscxml; +using System.Xml; +using System.Xml.XPath; +using System.IO; namespace embedding { @@ -22,7 +25,7 @@ namespace embedding public override StringList getNames() { StringList names = new StringList(); - names.add("simple"); + names.add("custom"); return names; } @@ -32,6 +35,33 @@ namespace embedding public override void send(SendRequest req) { + Console.WriteLine(req); + // send in s1.onentry + if ("This is some content!" == req.getContent()) + { + returnEvent(new Event("received1")); + return; + } + // send in s2.onentry + if (req.getParams().ContainsKey("foo") + && "bar" == (req.getParams()["foo"][0].getAtom())) + { + returnEvent(new Event("received2")); + return; + } + // send in s3 + if (req.getXML().Length > 0) + { + XmlReaderSettings set = new XmlReaderSettings(); + set.ConformanceLevel = ConformanceLevel.Fragment; + XPathDocument doc = new XPathDocument(XmlReader.Create(new StringReader(req.getXML()), set)); + XPathNavigator nav = doc.CreateNavigator(); + + Console.WriteLine("Root element :" + nav.SelectSingleNode("/").Value); + returnEvent(new Event("received3")); + return; + } + } } } diff --git a/embedding/csharp/uSCXMLEmbedding/Program.cs b/embedding/csharp/uSCXMLEmbedding/Program.cs deleted file mode 100644 index 0c76cb4..0000000 --- a/embedding/csharp/uSCXMLEmbedding/Program.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Diagnostics; -using System.Runtime.InteropServices; - -namespace embedding -{ - using org.uscxml; - - class Program - { - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - private static extern void SetDllDirectory(string lpPathName); - - static bool testLifecycle() { - // try to instantiate an interpreter with a parse error - try - { - Interpreter interpreter = Interpreter.fromXML(""); - Debug.Assert(interpreter.getState() == InterpreterState.USCXML_INSTANTIATED); - InterpreterState state = interpreter.step(); - - Debug.Assert(false); - } - catch (InterpreterException e) - { - Console.Write(e.Message); - } - - return true; - } - - static void Main(string[] args) - { - - /* - * Make sure this path contains the uscxmlNativeCSharp.dll! - */ - if (System.Environment.Is64BitProcess) - { - SetDllDirectory("C:\\Users\\sradomski\\Desktop\\build\\uscxml64\\lib\\csharp"); - } - else - { - SetDllDirectory("C:\\Users\\sradomski\\Desktop\\build\\uscxml\\lib\\csharp"); - } - - testLifecycle(); - Console.ReadKey(); - } - } -} diff --git a/embedding/csharp/uSCXMLEmbedding/RunTests.cs b/embedding/csharp/uSCXMLEmbedding/RunTests.cs new file mode 100644 index 0000000..d98bca1 --- /dev/null +++ b/embedding/csharp/uSCXMLEmbedding/RunTests.cs @@ -0,0 +1,274 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace embedding +{ + using org.uscxml; + + class RunTests + { + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + private static extern void SetDllDirectory(string lpPathName); + + static void Main(string[] args) + { + + /* + * Make sure this path contains the uscxmlNativeCSharp.dll! + */ + if (System.Environment.Is64BitProcess) + { + SetDllDirectory("C:\\Users\\sradomski\\Desktop\\build\\uscxml64\\lib\\csharp"); + } + else + { + SetDllDirectory("C:\\Users\\sradomski\\Desktop\\build\\uscxml\\lib\\csharp"); + } + + testLifeCycle(); + testExecutableContent(); + testIOProcessor(); + testInvoker(); + Console.ReadKey(); + } + + public static void testInvoker() { + CustomInvoker invoker = new CustomInvoker(); + // just register prototype at global factory + Factory.getInstance().registerInvoker(invoker); + + String xml = + "" + + " " + + " " + + " Some string content" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + ""; + + // parse and interpret + Interpreter interpreter = Interpreter.fromXML(xml); + interpreter.interpret(); + + } + + public static void testIOProcessor() + { + CustomIOProc ioproc = new CustomIOProc(); + // just register prototype at global factory + Factory.getInstance().registerIOProcessor(ioproc); + + String xml = + "" + + " " + + " " + + " " + + " This is some content!" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + ""; + + // parse and interpret + Interpreter interpreter = Interpreter.fromXML(xml); + interpreter.interpret(); + + } + + public static void testExecutableContent() + { + CustomExecutableContent execContent = new CustomExecutableContent(); + Factory.getInstance().registerExecutableContent(execContent); + + Interpreter interpreter = Interpreter.fromXML( + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " " + + " \n" + + " " + + "\n" + ); + interpreter.interpret(); + } + + public static void testLifeCycle() + { + // syntactic xml parse error -> throws + try + { + String xml = " throws + try + { + String xml = ""; + Interpreter interpreter = Interpreter.fromXML(xml); + Debug.Assert(interpreter.getState() == InterpreterState.USCXML_INSTANTIATED); + interpreter.step(); + Debug.Assert(false); + } + catch (InterpreterException e) + { + Console.WriteLine(e); + } + + // request unknown datamodel + try + { + string xml = + "" + + " " + + " " + + " " + + " " + + ""; + Interpreter interpreter = Interpreter.fromXML(xml); + Debug.Assert(interpreter.getState() == InterpreterState.USCXML_INSTANTIATED); + interpreter.step(); + Debug.Assert(false); + } + catch (InterpreterException e) + { + Console.WriteLine(e); + } + + + try + { + // two microsteps + string xml = + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + ""; + + Interpreter interpreter = Interpreter.fromXML(xml); + + Debug.Assert(interpreter.getState() == InterpreterState.USCXML_INSTANTIATED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_MICROSTEPPED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_MICROSTEPPED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_FINISHED); + + } + catch (InterpreterException e) + { + Console.WriteLine(e); + } + + + try + { + // single macrostep, multiple runs + string xml = + "" + + " " + + " " + + " " + + " " + + ""; + + Interpreter interpreter = Interpreter.fromXML(xml); + Debug.Assert(interpreter.getState() == InterpreterState.USCXML_INSTANTIATED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_MICROSTEPPED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_FINISHED); + interpreter.reset(); + + Debug.Assert(interpreter.getState() == InterpreterState.USCXML_INSTANTIATED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_MICROSTEPPED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_FINISHED); + + } + catch (InterpreterException e) + { + Console.WriteLine(e); + } + + + try + { + // macrostep in between + string xml = + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + ""; + + Interpreter interpreter = Interpreter.fromXML(xml); + Debug.Assert(interpreter.getState() == InterpreterState.USCXML_INSTANTIATED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_IDLE); + Debug.Assert(interpreter.step(true) == InterpreterState.USCXML_MACROSTEPPED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_MICROSTEPPED); + Debug.Assert(interpreter.step() == InterpreterState.USCXML_FINISHED); + + } + catch (InterpreterException e) + { + Console.WriteLine(e); + } + } + + } +} -- cgit v0.12