From a6313d4ab2005196f376870c9ca945c691948416 Mon Sep 17 00:00:00 2001 From: Stefan Radomski Date: Mon, 28 Nov 2016 18:03:31 +0100 Subject: Refactored Java into bindings and generated --- apps/uscxml-transform.cpp | 30 +-- .../common/org/uscxml/dm/jexl/JexlDataModel.java | 268 +++++++++++++++++++++ .../java/common/org/uscxml/helper/StopWatch.java | 19 ++ .../java/common/org/uscxml/helper/TestMonitor.java | 71 ++++++ contrib/java/generated/build.properties | 5 + contrib/java/generated/build.xml | 35 +++ contrib/java/generated/org/uscxml/Data.java | 59 +++++ contrib/java/generated/org/uscxml/DataList.java | 20 ++ contrib/java/generated/org/uscxml/DataMap.java | 20 ++ contrib/java/generated/org/uscxml/DataModel.java | 77 ++++++ .../generated/org/uscxml/DataModelExtension.java | 5 + contrib/java/generated/org/uscxml/ErrorEvent.java | 9 + contrib/java/generated/org/uscxml/Event.java | 5 + .../generated/org/uscxml/InterpreterException.java | 11 + .../generated/org/uscxml/InterpreterMonitor.java | 65 +++++ contrib/java/generated/org/uscxml/StateChart.java | 222 +++++++++++++++++ .../generated/org/uscxml/StateChartJava5Impl.java | 89 +++++++ contrib/java/generated/org/uscxml/StringList.java | 10 + .../java/generated/org/uscxml/StringVector.java | 15 ++ .../org/uscxml/dm/jexl/DataModelExtension.java | 5 + .../java/generated/org/uscxml/dm/jexl/Event.java | 5 + .../generated/org/uscxml/examples/hello-world.xml | 25 ++ .../org/uscxml/tests/gen/TestStateChart.java | 27 +++ contrib/java/libs/commons-jexl3-3.0.jar | Bin 0 -> 383861 bytes contrib/java/libs/commons-logging-1.2.jar | Bin 0 -> 61829 bytes src/uscxml/transform/ChartToJava.cpp | 55 ++++- src/uscxml/transform/ChartToVHDL.cpp | 4 +- src/uscxml/transform/Transformer.h | 2 +- src/uscxml/util/String.cpp | 5 +- test/CMakeLists.txt | 155 ++++++------ test/bindings/java/build.properties | 9 - test/bindings/java/build.xml | 43 ---- test/bindings/java/libs/commons-jexl3-3.0.jar | Bin 383861 -> 0 bytes test/bindings/java/libs/commons-logging-1.2.jar | Bin 61829 -> 0 bytes .../org/uscxml/apache/commons/scxml2/Context.java | 7 - .../uscxml/apache/commons/scxml2/Evaluator.java | 7 - .../apache/commons/scxml2/JexlEvaluator.java | 19 -- .../org/uscxml/apache/commons/scxml2/SCXML.java | 8 - .../apache/commons/scxml2/SCXMLExecutor.java | 49 ---- .../uscxml/apache/commons/scxml2/SCXMLReader.java | 13 - .../apache/commons/scxml2/SimpleErrorReporter.java | 5 - .../java/org/uscxml/dm/jexl/JEXLDataModel.java | 267 -------------------- .../java/org/uscxml/examples/ApacheCommonsAPI.java | 45 ---- .../java/org/uscxml/examples/BasicExample.java | 46 ---- .../java/org/uscxml/examples/DataModelExample.java | 60 ----- .../java/org/uscxml/examples/MonitorExample.java | 55 ----- .../java/org/uscxml/examples/hello-world.xml | 25 -- .../bindings/java/org/uscxml/helper/StopWatch.java | 22 -- .../java/org/uscxml/helper/TestMonitor.java | 71 ------ .../java/org/uscxml/tests/JexlDataModelTest.java | 73 ------ test/ctest/scripts/test_generated_c.cmake | 89 +++++++ test/ctest/scripts/test_generated_java.cmake | 32 +++ test/ctest/scripts/test_generated_vhdl.cmake | 48 ++++ 53 files changed, 1379 insertions(+), 932 deletions(-) create mode 100644 contrib/java/common/org/uscxml/dm/jexl/JexlDataModel.java create mode 100644 contrib/java/common/org/uscxml/helper/StopWatch.java create mode 100644 contrib/java/common/org/uscxml/helper/TestMonitor.java create mode 100644 contrib/java/generated/build.properties create mode 100644 contrib/java/generated/build.xml create mode 100644 contrib/java/generated/org/uscxml/Data.java create mode 100644 contrib/java/generated/org/uscxml/DataList.java create mode 100644 contrib/java/generated/org/uscxml/DataMap.java create mode 100644 contrib/java/generated/org/uscxml/DataModel.java create mode 100644 contrib/java/generated/org/uscxml/DataModelExtension.java create mode 100644 contrib/java/generated/org/uscxml/ErrorEvent.java create mode 100644 contrib/java/generated/org/uscxml/Event.java create mode 100644 contrib/java/generated/org/uscxml/InterpreterException.java create mode 100644 contrib/java/generated/org/uscxml/InterpreterMonitor.java create mode 100644 contrib/java/generated/org/uscxml/StateChart.java create mode 100644 contrib/java/generated/org/uscxml/StateChartJava5Impl.java create mode 100644 contrib/java/generated/org/uscxml/StringList.java create mode 100644 contrib/java/generated/org/uscxml/StringVector.java create mode 100644 contrib/java/generated/org/uscxml/dm/jexl/DataModelExtension.java create mode 100644 contrib/java/generated/org/uscxml/dm/jexl/Event.java create mode 100644 contrib/java/generated/org/uscxml/examples/hello-world.xml create mode 100644 contrib/java/generated/org/uscxml/tests/gen/TestStateChart.java create mode 100644 contrib/java/libs/commons-jexl3-3.0.jar create mode 100644 contrib/java/libs/commons-logging-1.2.jar delete mode 100644 test/bindings/java/build.properties delete mode 100644 test/bindings/java/build.xml delete mode 100644 test/bindings/java/libs/commons-jexl3-3.0.jar delete mode 100644 test/bindings/java/libs/commons-logging-1.2.jar delete mode 100644 test/bindings/java/org/uscxml/apache/commons/scxml2/Context.java delete mode 100644 test/bindings/java/org/uscxml/apache/commons/scxml2/Evaluator.java delete mode 100644 test/bindings/java/org/uscxml/apache/commons/scxml2/JexlEvaluator.java delete mode 100644 test/bindings/java/org/uscxml/apache/commons/scxml2/SCXML.java delete mode 100644 test/bindings/java/org/uscxml/apache/commons/scxml2/SCXMLExecutor.java delete mode 100644 test/bindings/java/org/uscxml/apache/commons/scxml2/SCXMLReader.java delete mode 100644 test/bindings/java/org/uscxml/apache/commons/scxml2/SimpleErrorReporter.java delete mode 100644 test/bindings/java/org/uscxml/dm/jexl/JEXLDataModel.java delete mode 100644 test/bindings/java/org/uscxml/examples/ApacheCommonsAPI.java delete mode 100644 test/bindings/java/org/uscxml/examples/BasicExample.java delete mode 100644 test/bindings/java/org/uscxml/examples/DataModelExample.java delete mode 100644 test/bindings/java/org/uscxml/examples/MonitorExample.java delete mode 100644 test/bindings/java/org/uscxml/examples/hello-world.xml delete mode 100644 test/bindings/java/org/uscxml/helper/StopWatch.java delete mode 100644 test/bindings/java/org/uscxml/helper/TestMonitor.java delete mode 100644 test/bindings/java/org/uscxml/tests/JexlDataModelTest.java create mode 100644 test/ctest/scripts/test_generated_c.cmake create mode 100644 test/ctest/scripts/test_generated_java.cmake create mode 100644 test/ctest/scripts/test_generated_vhdl.cmake diff --git a/apps/uscxml-transform.cpp b/apps/uscxml-transform.cpp index b85879a..d9be7cf 100644 --- a/apps/uscxml-transform.cpp +++ b/apps/uscxml-transform.cpp @@ -125,6 +125,7 @@ int main(int argc, char** argv) { break; case 'o': outputFile = optarg; + extensions.insert(std::pair("outputFile", outputFile)); break; case 'l': break; @@ -370,38 +371,15 @@ int main(int argc, char** argv) { outStream.close(); } -#if 0 - if (options.size() > 0) { - ChartToFSM annotater(interpreter); - if (std::find(options.begin(), options.end(), "priority") != options.end()) - annotater.indexTransitions(); - if (std::find(options.begin(), options.end(), "conflicts") != options.end()) - annotater.annotateConflicts(); - if (std::find(options.begin(), options.end(), "exitset") != options.end()) - annotater.annotateExitSet(); - if (std::find(options.begin(), options.end(), "entryset") != options.end()) - annotater.annotateEntrySet(); - if (std::find(options.begin(), options.end(), "domain") != options.end()) - annotater.annotateDomain(); - - if (outputFile.size() == 0 || outputFile == "-") { - std::cout << annotater.getDocument(); - } else { - std::ofstream outStream; - outStream.open(outputFile.c_str()); - outStream << annotater.getDocument(); - outStream.close(); - } - exit(EXIT_SUCCESS); - } -#endif } catch (Event e) { std::cout << e << std::endl; + return EXIT_FAILURE; } catch (const std::exception &e) { std::cout << e.what() << std::endl; + return EXIT_FAILURE; } - return EXIT_SUCCESS; + return EXIT_SUCCESS; } diff --git a/contrib/java/common/org/uscxml/dm/jexl/JexlDataModel.java b/contrib/java/common/org/uscxml/dm/jexl/JexlDataModel.java new file mode 100644 index 0000000..731ceaa --- /dev/null +++ b/contrib/java/common/org/uscxml/dm/jexl/JexlDataModel.java @@ -0,0 +1,268 @@ +package org.uscxml.dm.jexl; + +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.jexl3.JexlBuilder; +import org.apache.commons.jexl3.JexlEngine; +import org.apache.commons.jexl3.JexlException; +import org.apache.commons.jexl3.JexlExpression; +import org.apache.commons.jexl3.MapContext; +import org.uscxml.Data; +import org.uscxml.DataList; +import org.uscxml.DataMap; +import org.uscxml.DataModel; +import org.uscxml.DataModelExtension; +import org.uscxml.ErrorEvent; +import org.uscxml.Event; +import org.uscxml.StringList; +import org.uscxml.StringVector; + +public class JexlDataModel extends DataModel { + + protected static final JexlEngine jexl = new JexlBuilder().cache(512).strict(true).silent(false).create(); + public MapContext ctx = new MapContext(); + + @Override + public void addExtension(DataModelExtension ext) { + throw new UnsupportedOperationException("Cannot add extensions to the jexl datamodel"); + } + + @Override + public StringList getNames() { + StringList names = new StringList(); + names.add("jexl"); + return names; + } + + @Override + public DataModel create() { + JexlDataModel dm = new JexlDataModel(); + return dm; + } + + @Override + public boolean isValidSyntax(String expr) { + try { + jexl.createExpression(expr); + return true; + } catch(JexlException e) { + return false; + } + } + + @Override + public void setEvent(Event event) { + ctx.set("_event", event); + } + + @Override + public Data getAsData(String content) { + try { + JexlExpression ex = jexl.createExpression(content); + return getJexlObjectAsData(ex.evaluate(ctx)); + } catch(Exception e) { + } + return null; + } + + @Override + public Data evalAsData(String content) { + JexlExpression expr = jexl.createExpression(content); + Data d = getJexlObjectAsData(expr.evaluate(ctx)); +// d.setAtom(expr.getParsedText()); +// d.setType(Data.Type.VERBATIM); + return d; + } + + @Override + public boolean evalAsBool(String expr) { + try { + JexlExpression ex = jexl.createExpression("!!" + expr); + Object result = ex.evaluate(ctx); + return (Boolean) result; + } catch(Exception e) { + e.printStackTrace(); + } + return false; + } + + @Override + public long getLength(String expr) { + try { + JexlExpression ex = jexl.createExpression(expr); + Object res = ex.evaluate(ctx); + + return Array.getLength(res); + + } catch(Exception e) { + throw new ErrorEvent("Cannot evaluate '" + expr + "' as an array: " + e.getMessage()); + } + } + + @Override + public void setForeach(String item, String array, String index, long iteration) { + Object res = null; + try { + JexlExpression ex = jexl.createExpression(array); + res = ex.evaluate(ctx); + } catch(Exception e) { + throw new ErrorEvent("Cannot evaluate '" + array + "' as an array: " + e.getMessage()); + } + try { + JexlExpression ex = jexl.createExpression(item + "==" + item + ";"); + ex.evaluate(ctx); + + ctx.set(item, Array.get(res, (int) iteration)); + } catch(Exception e) { + throw new ErrorEvent("Cannot set item '" + item + "' to current item: " + e.getMessage()); + } + try { + if (index.length() > 0) { + ctx.set(index, iteration); + } + } catch(Exception e) { + throw new ErrorEvent("Cannot set index '" + index + "' to current index: " + e.getMessage()); + } + } + + @Override + public void assign(String location, Data data) { + try { + ctx.set(location, getDataAsJexlObject(data)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void init(String location, Data data) { + ctx.set(location, null); + assign(location, data); + } + + @Override + public boolean isDeclared(String expr) { + try { + JexlExpression ex = jexl.createExpression(expr); + Object result = ex.evaluate(ctx); + return (Boolean) result; + } catch(JexlException e) { + } + return false; + } + + protected Object evalAsObject(String expr) { + try { + JexlExpression ex = jexl.createExpression(expr); + return (ex.evaluate(ctx)); + } catch(JexlException e) { + } + return null; + } + + protected Data getJexlObjectAsData(Object obj) { + Data d = new Data(); + if (obj.getClass().isArray()) { + int length = Array.getLength(obj); + for (int i = 0; i < length; i ++) { + d.getArray().add(getJexlObjectAsData(Array.get(obj, i))); + } + } else if (obj.getClass().isPrimitive() || isWrapperType(obj.getClass())) { + String val = obj.toString(); + try { + Integer.parseInt(obj.toString()); + d.setAtom(obj.toString()); + d.setType(Data.Type.INTERPRETED); + return d; + } catch(NumberFormatException e) {} + try { + Double.parseDouble(obj.toString()); + d.setAtom(obj.toString()); + d.setType(Data.Type.INTERPRETED); + return d; + } catch(NumberFormatException e) {} + d.setAtom(obj.toString()); + d.setType(Data.Type.VERBATIM); + return d; + } else { + Field[] fields = obj.getClass().getDeclaredFields(); + for (Field field: fields) { + Object newObj = null; + try { + field.get(newObj); + d.getCompound().set(field.getName(), getJexlObjectAsData(newObj)); + } + catch (IllegalArgumentException e) {} + catch (IllegalAccessException e) {} + } + return d; + } + + return d; + } + + protected Object getDataAsJexlObject(Data data) { + if (data.getAtom().length() > 0) { + if (data.getType() == Data.Type.INTERPRETED) { + try { + JexlExpression exp = jexl.createExpression(data.getAtom()); + return exp.evaluate(ctx); + } catch (Exception e) { + e.printStackTrace(); + } + return new String(data.getAtom()); + } + try { + JexlExpression exp = jexl.createExpression(data.getAtom()); + return exp.evaluate(ctx); + } catch (Exception e) { + } + return new String("\"" + data.getAtom() + "\""); + + } else if (data.getCompound().size() > 0) { + StringVector keys = data.getCompoundKeys(); + DataMap dataCompound = data.getCompound(); + Map objCompound = new HashMap(); + for (int i = 0; i < keys.size(); i++) { + objCompound.put(keys.get(i), getDataAsJexlObject(dataCompound.get(keys.get(i)))); + } + return objCompound; + } else if (data.getArray().size() > 0) { + DataList dataList = data.getArray(); + List objList = new ArrayList((int) data.getArray().size()); + for (int i = 0; i < dataList.size(); i++) { + objList.add(i, getDataAsJexlObject(dataList.get(i))); + } + return objList; + } + return new Object(); + } + + protected static boolean isWrapperType(Class clazz) { + return WRAPPER_TYPES.contains(clazz); + } + + private static final Set> WRAPPER_TYPES = getWrapperTypes(); + + private static Set> getWrapperTypes() { + Set> ret = new HashSet>(); + ret.add(Boolean.class); + ret.add(Character.class); + ret.add(Byte.class); + ret.add(Short.class); + ret.add(Integer.class); + ret.add(Long.class); + ret.add(Float.class); + ret.add(Double.class); + ret.add(Void.class); + return ret; + } + +} diff --git a/contrib/java/common/org/uscxml/helper/StopWatch.java b/contrib/java/common/org/uscxml/helper/StopWatch.java new file mode 100644 index 0000000..29ce434 --- /dev/null +++ b/contrib/java/common/org/uscxml/helper/StopWatch.java @@ -0,0 +1,19 @@ +package org.uscxml.helper; + +public class StopWatch { + + public StopWatch() { + } + + public void reset() { + System.out.println("RESET"); + } + + public void start() { + System.out.println("START"); + } + public void stop() { + System.out.println("STOP"); + } + +} diff --git a/contrib/java/common/org/uscxml/helper/TestMonitor.java b/contrib/java/common/org/uscxml/helper/TestMonitor.java new file mode 100644 index 0000000..2b71d82 --- /dev/null +++ b/contrib/java/common/org/uscxml/helper/TestMonitor.java @@ -0,0 +1,71 @@ +package org.uscxml.helper; + +import org.uscxml.InterpreterMonitor; +import org.uscxml.StringList; + +public class TestMonitor extends InterpreterMonitor { + + public TestMonitor() {} + + @Override + public void beforeExitingState(String stateId, String xpath, String stateXML) { + System.out.println("beforeExitingState: " + stateId + " " + xpath); + } + + @Override + public void afterExitingState(String stateId, String xpath, String stateXML) { + System.out.println("afterExitingState: " + stateId + " " + xpath); + } + + @Override + public void beforeExecutingContent(String tagName, String xpath, String contentXML) { + System.out.println("afterExecutingContent: " + tagName + " " + xpath); + } + + @Override + public void afterExecutingContent(String tagName, String xpath, String contentXML) { + System.out.println("afterExecutingContent: " + tagName + " " + xpath); + } + + @Override + public void beforeUninvoking(String xpath, String invokeid, String invokerXML) { + System.out.println("beforeUninvoking: " + xpath + " " + invokeid); + } + + @Override + public void afterUninvoking(String xpath, String invokeid, String invokerXML) { + System.out.println("beforeUninvoking: " + xpath + " " + invokeid); + } + + @Override + public void beforeTakingTransition(String xpath, String source, StringList targets, String transitionXML) { + System.out.println("beforeTakingTransition: " + xpath + " " + source + " " + targets); + } + + @Override + public void afterTakingTransition(String xpath, String source, StringList targets, String transitionXML) { + System.out.println("afterTakingTransition: " + xpath + " " + source + " " + targets); + } + + @Override + public void beforeEnteringState(String stateId, String xpath, String stateXML) { + System.out.println("beforeEnteringState: " + stateId + " " + xpath); + } + + @Override + public void afterEnteringState(String stateId, String xpath, String stateXML) { + System.out.println("afterEnteringState: " + stateId + " " + xpath); + } + + @Override + public void beforeInvoking(String xpath, String invokeid, String invokerXML) { + System.out.println("beforeInvoking: " + xpath + " " + invokeid); + } + + @Override + public void afterInvoking(String xpath, String invokeid, String invokerXML) { + System.out.println("afterInvoking: " + xpath + " " + invokeid); + } + + +} diff --git a/contrib/java/generated/build.properties b/contrib/java/generated/build.properties new file mode 100644 index 0000000..94338e2 --- /dev/null +++ b/contrib/java/generated/build.properties @@ -0,0 +1,5 @@ +# Default path on Windows (maybe with an '(x86)' in there for good measure) +#umundo.jar=C:\\Program Files\\uMundo\\share\\umundo\\lib\\umundo.jar + +jexl.jar=../libs/commons-jexl3-3.0.jar +logging.jar=../libs/commons-logging-1.2.jar \ No newline at end of file diff --git a/contrib/java/generated/build.xml b/contrib/java/generated/build.xml new file mode 100644 index 0000000..087ee3e --- /dev/null +++ b/contrib/java/generated/build.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/contrib/java/generated/org/uscxml/Data.java b/contrib/java/generated/org/uscxml/Data.java new file mode 100644 index 0000000..c3dfe7d --- /dev/null +++ b/contrib/java/generated/org/uscxml/Data.java @@ -0,0 +1,59 @@ +package org.uscxml; + +import java.lang.reflect.Field; + +import org.uscxml.Data.Type; + +public class Data { + + public static enum Type { + VERBATIM, + INTERPRETED + } + + public DataList getArray() { + // TODO Auto-generated method stub + return null; + } + + public void setAtom(String string) { + // TODO Auto-generated method stub + + } + + public void setType(Type interpreted) { + // TODO Auto-generated method stub + + } + + public DataMap getCompound() { + // TODO Auto-generated method stub + return null; + } + + public void set(String name, Data jexlObjectAsData) { + // TODO Auto-generated method stub + + } + + public String getAtom() { + // TODO Auto-generated method stub + return null; + } + + public Type getType() { + // TODO Auto-generated method stub + return null; + } + + public int size() { + // TODO Auto-generated method stub + return 0; + } + + public StringVector getCompoundKeys() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/contrib/java/generated/org/uscxml/DataList.java b/contrib/java/generated/org/uscxml/DataList.java new file mode 100644 index 0000000..f98d5f6 --- /dev/null +++ b/contrib/java/generated/org/uscxml/DataList.java @@ -0,0 +1,20 @@ +package org.uscxml; + +public class DataList { + + public void add(Data jexlObjectAsData) { + // TODO Auto-generated method stub + + } + + public int size() { + // TODO Auto-generated method stub + return 0; + } + + public Data get(int i) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/contrib/java/generated/org/uscxml/DataMap.java b/contrib/java/generated/org/uscxml/DataMap.java new file mode 100644 index 0000000..ceed1ce --- /dev/null +++ b/contrib/java/generated/org/uscxml/DataMap.java @@ -0,0 +1,20 @@ +package org.uscxml; + +public class DataMap { + + public int size() { + // TODO Auto-generated method stub + return 0; + } + + public Data get(String object) { + // TODO Auto-generated method stub + return null; + } + + public void set(String name, Data jexlObjectAsData) { + // TODO Auto-generated method stub + + } + +} diff --git a/contrib/java/generated/org/uscxml/DataModel.java b/contrib/java/generated/org/uscxml/DataModel.java new file mode 100644 index 0000000..8e12d19 --- /dev/null +++ b/contrib/java/generated/org/uscxml/DataModel.java @@ -0,0 +1,77 @@ +package org.uscxml; + +import org.uscxml.dm.jexl.Event; + +public class DataModel { + + public long getLength(String expr) { + // TODO Auto-generated method stub + return 0; + } + + public void setEvent(Event event) { + // TODO Auto-generated method stub + + } + + public void addExtension(DataModelExtension ext) { + // TODO Auto-generated method stub + + } + + public StringList getNames() { + // TODO Auto-generated method stub + return null; + } + + public DataModel create() { + // TODO Auto-generated method stub + return null; + } + + public boolean isValidSyntax(String expr) { + // TODO Auto-generated method stub + return false; + } + + public void setEvent(org.uscxml.Event event) { + // TODO Auto-generated method stub + + } + + public Data getAsData(String content) { + // TODO Auto-generated method stub + return null; + } + + public Data evalAsData(String content) { + // TODO Auto-generated method stub + return null; + } + + public boolean evalAsBool(String expr) { + // TODO Auto-generated method stub + return false; + } + + public void setForeach(String item, String array, String index, long iteration) { + // TODO Auto-generated method stub + + } + + public void assign(String location, Data data) { + // TODO Auto-generated method stub + + } + + public void init(String location, Data data) { + // TODO Auto-generated method stub + + } + + public boolean isDeclared(String expr) { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/contrib/java/generated/org/uscxml/DataModelExtension.java b/contrib/java/generated/org/uscxml/DataModelExtension.java new file mode 100644 index 0000000..fbb38f9 --- /dev/null +++ b/contrib/java/generated/org/uscxml/DataModelExtension.java @@ -0,0 +1,5 @@ +package org.uscxml; + +public class DataModelExtension { + +} diff --git a/contrib/java/generated/org/uscxml/ErrorEvent.java b/contrib/java/generated/org/uscxml/ErrorEvent.java new file mode 100644 index 0000000..699ddad --- /dev/null +++ b/contrib/java/generated/org/uscxml/ErrorEvent.java @@ -0,0 +1,9 @@ +package org.uscxml; + +public class ErrorEvent extends Event { + + public ErrorEvent(String string) { + // TODO Auto-generated constructor stub + } + +} diff --git a/contrib/java/generated/org/uscxml/Event.java b/contrib/java/generated/org/uscxml/Event.java new file mode 100644 index 0000000..9469b5f --- /dev/null +++ b/contrib/java/generated/org/uscxml/Event.java @@ -0,0 +1,5 @@ +package org.uscxml; + +public class Event extends java.lang.RuntimeException { + +} diff --git a/contrib/java/generated/org/uscxml/InterpreterException.java b/contrib/java/generated/org/uscxml/InterpreterException.java new file mode 100644 index 0000000..b2baa99 --- /dev/null +++ b/contrib/java/generated/org/uscxml/InterpreterException.java @@ -0,0 +1,11 @@ +package org.uscxml; + +public class InterpreterException extends Exception { + private static final long serialVersionUID = -3534919496547591015L; + + public InterpreterException(String name, String msg) { + super(msg); + } + + public String name; +} diff --git a/contrib/java/generated/org/uscxml/InterpreterMonitor.java b/contrib/java/generated/org/uscxml/InterpreterMonitor.java new file mode 100644 index 0000000..f67039f --- /dev/null +++ b/contrib/java/generated/org/uscxml/InterpreterMonitor.java @@ -0,0 +1,65 @@ +package org.uscxml; + +public class InterpreterMonitor { + + public void beforeExitingState(String stateId, String xpath, String stateXML) { + // TODO Auto-generated method stub + + } + + public void afterExitingState(String stateId, String xpath, String stateXML) { + // TODO Auto-generated method stub + + } + + public void beforeExecutingContent(String tagName, String xpath, String contentXML) { + // TODO Auto-generated method stub + + } + + public void afterExecutingContent(String tagName, String xpath, String contentXML) { + // TODO Auto-generated method stub + + } + + public void beforeUninvoking(String xpath, String invokeid, String invokerXML) { + // TODO Auto-generated method stub + + } + + public void afterUninvoking(String xpath, String invokeid, String invokerXML) { + // TODO Auto-generated method stub + + } + + public void beforeTakingTransition(String xpath, String source, StringList targets, String transitionXML) { + // TODO Auto-generated method stub + + } + + public void afterTakingTransition(String xpath, String source, StringList targets, String transitionXML) { + // TODO Auto-generated method stub + + } + + public void beforeEnteringState(String stateId, String xpath, String stateXML) { + // TODO Auto-generated method stub + + } + + public void afterEnteringState(String stateId, String xpath, String stateXML) { + // TODO Auto-generated method stub + + } + + public void beforeInvoking(String xpath, String invokeid, String invokerXML) { + // TODO Auto-generated method stub + + } + + public void afterInvoking(String xpath, String invokeid, String invokerXML) { + // TODO Auto-generated method stub + + } + +} diff --git a/contrib/java/generated/org/uscxml/StateChart.java b/contrib/java/generated/org/uscxml/StateChart.java new file mode 100644 index 0000000..6b620ab --- /dev/null +++ b/contrib/java/generated/org/uscxml/StateChart.java @@ -0,0 +1,222 @@ +package org.uscxml; + +import java.util.BitSet; +import java.util.Deque; +import java.util.List; +import java.util.Map; + +/** Base class for generated StateCharts */ + +public abstract class StateChart { + + public enum InterpreterState { + USCXML_FINISHED, + USCXML_UNDEF, + USCXML_IDLE, + USCXML_INITIALIZED, + USCXML_INSTANTIATED, + USCXML_MICROSTEPPED, + USCXML_MACROSTEPPED, + USCXML_CANCELLED + } + + public enum StateType { + USCXML_STATE_ATOMIC, + USCXML_STATE_PARALLEL, + USCXML_STATE_COMPOUND, + USCXML_STATE_FINAL, + USCXML_STATE_HISTORY_DEEP, + USCXML_STATE_HISTORY_SHALLOW, + USCXML_STATE_INITIAL, + USCXML_STATE_HAS_HISTORY + } + + public enum TransitionType { + USCXML_TRANS_SPONTANEOUS, + USCXML_TRANS_TARGETLESS, + USCXML_TRANS_INTERNAL, + USCXML_TRANS_HISTORY, + USCXML_TRANS_INITIAL + } + + public abstract class State { + String name; + int parent; + BitSet children; + BitSet completion; + BitSet ancestors; + Data data; + StateType type; + + public abstract void onEntry() throws InterpreterException; + public abstract void onExit() throws InterpreterException; + public abstract void invoke(Invoke invoker, boolean invoke) throws InterpreterException; + } + + public abstract class Transition { + int source; + BitSet target; + String event; + String condition; + TransitionType type; + BitSet conflicts; + BitSet exitSet; + + public abstract boolean isEnabled(); + public abstract boolean isMatched(); + public abstract void onTransition(); + } + + public class Data { + String id; + String src; + String expr; + String content; + } + + public class Assign { + String location; + String expr; + String content; + } + + public class Foreach { + String array; + String item; + String index; + } + + public class Param { + String name; + String expr; + String location; + } + + public class DoneData { + int source; + String content; + String contentExpr; + List params; + } + + public abstract class Invoke { + StateChart machine; + String type; + String typeExpr; + String src; + String srcExpr; + String id; + String idlocation; + String sourceName; + String namelist; + boolean autoForward; + String content; + String contentExpr; + List params; + + public abstract void finalize(); + } + + public class Send { + String event; + String eventExpr; + String target; + String targetExpr; + String type; + String typeExpr; + String id; + String idlocation; + String delay; + String delayExpr; + String namelist; + String content; + String contentExpr; + List params; + } + + public List transitions; + public List states; + + public Deque externalQueue; + public Deque internalQueue; + + protected InterpreterState state = InterpreterState.USCXML_UNDEF; + protected Object event; + + protected BitSet flags; + protected BitSet config; + protected BitSet history; + protected BitSet invocations; + protected BitSet initializedData; + + protected Map stateNamesToIndex; + + public InterpreterState step() throws org.uscxml.InterpreterException { + return step(0); + } + + public InterpreterState step(long blockMs) throws org.uscxml.InterpreterException { + /** Here you would implement microstep(T) as in the book chapter */ + + + /** Just to silence the compiler warning */ + if (true) throw new InterpreterException("", ""); + return state; + } + + public void cancel() { + state = InterpreterState.USCXML_CANCELLED; + } + + public void reset() { + history.clear(); + config.clear(); + flags.clear(); + // @TODO: uninvoke any invokers + invocations.clear(); + } + + public InterpreterState getState() { return state; } + + public boolean isInState(String stateId) { + if (!stateNamesToIndex.containsKey(stateId)) + return false; + return config.get((int) stateNamesToIndex.get(stateId)); + } + + public void receive(Object event) { + externalQueue.addLast(event); + } + + protected Object dequeueInternal() { + try { + return internalQueue.removeLast(); + } catch(Exception e) { + return null; + } + } + + protected Object dequeueExternal() { + try { + return externalQueue.removeLast(); + } catch(Exception e) { + return null; + } + } + + public abstract boolean isTrue(String expression); + public abstract void raiseDoneEvent(State state, DoneData doneData); + + public abstract void execContentLog(String label, String expression); + public abstract void execContentRaise(String event); + public abstract void execContentSend(Send send); + public abstract void execContentForeachInit(Foreach foreach); + public abstract void execContentForeachNext(Foreach foreach); + public abstract void execContentForeachDone(Foreach foreach); + public abstract void execContentAssign(Assign assign); + public abstract void execContentInit(Data data); + public abstract void execContentCancel(String sendId, String sendIdExpr); + public abstract void execContentScript(String src, String content); + public abstract void execContentFinalize(Invoke invoker, Object event); + +} \ No newline at end of file diff --git a/contrib/java/generated/org/uscxml/StateChartJava5Impl.java b/contrib/java/generated/org/uscxml/StateChartJava5Impl.java new file mode 100644 index 0000000..381a214 --- /dev/null +++ b/contrib/java/generated/org/uscxml/StateChartJava5Impl.java @@ -0,0 +1,89 @@ +package org.uscxml; + +/** + * @author sradomski + * + * This is the base class inheriting the abstract StateChart class + * It is supposed to realize the callbacks with the language features + * found in Java5 only. + */ + +public class StateChartJava5Impl extends StateChart { + + @Override + public boolean isTrue(String expression) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void raiseDoneEvent(State state, DoneData doneData) { + // TODO Auto-generated method stub + } + + @Override + public void execContentLog(String label, String expression) { + // TODO Auto-generated method stub + } + + @Override + public void execContentRaise(String event) { + // TODO Auto-generated method stub + + } + + @Override + public void execContentSend(Send send) { + // TODO Auto-generated method stub + + } + + @Override + public void execContentForeachInit(Foreach foreach) { + // TODO Auto-generated method stub + + } + + @Override + public void execContentForeachNext(Foreach foreach) { + // TODO Auto-generated method stub + + } + + @Override + public void execContentForeachDone(Foreach foreach) { + // TODO Auto-generated method stub + + } + + @Override + public void execContentAssign(Assign assign) { + // TODO Auto-generated method stub + + } + + @Override + public void execContentInit(Data data) { + // TODO Auto-generated method stub + + } + + @Override + public void execContentCancel(String sendId, String sendIdExpr) { + // TODO Auto-generated method stub + + } + + @Override + public void execContentScript(String src, String content) { + // TODO Auto-generated method stub + + } + + @Override + public void execContentFinalize(Invoke invoker, Object event) { + // TODO Auto-generated method stub + + } + +} diff --git a/contrib/java/generated/org/uscxml/StringList.java b/contrib/java/generated/org/uscxml/StringList.java new file mode 100644 index 0000000..6b37b36 --- /dev/null +++ b/contrib/java/generated/org/uscxml/StringList.java @@ -0,0 +1,10 @@ +package org.uscxml; + +public class StringList { + + public void add(String string) { + // TODO Auto-generated method stub + + } + +} diff --git a/contrib/java/generated/org/uscxml/StringVector.java b/contrib/java/generated/org/uscxml/StringVector.java new file mode 100644 index 0000000..d760a37 --- /dev/null +++ b/contrib/java/generated/org/uscxml/StringVector.java @@ -0,0 +1,15 @@ +package org.uscxml; + +public class StringVector { + + public int size() { + // TODO Auto-generated method stub + return 0; + } + + public String get(int i) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/contrib/java/generated/org/uscxml/dm/jexl/DataModelExtension.java b/contrib/java/generated/org/uscxml/dm/jexl/DataModelExtension.java new file mode 100644 index 0000000..0f70395 --- /dev/null +++ b/contrib/java/generated/org/uscxml/dm/jexl/DataModelExtension.java @@ -0,0 +1,5 @@ +package org.uscxml.dm.jexl; + +public class DataModelExtension { + +} diff --git a/contrib/java/generated/org/uscxml/dm/jexl/Event.java b/contrib/java/generated/org/uscxml/dm/jexl/Event.java new file mode 100644 index 0000000..aa1eaae --- /dev/null +++ b/contrib/java/generated/org/uscxml/dm/jexl/Event.java @@ -0,0 +1,5 @@ +package org.uscxml.dm.jexl; + +public class Event { + +} diff --git a/contrib/java/generated/org/uscxml/examples/hello-world.xml b/contrib/java/generated/org/uscxml/examples/hello-world.xml new file mode 100644 index 0000000..3ac168c --- /dev/null +++ b/contrib/java/generated/org/uscxml/examples/hello-world.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/contrib/java/generated/org/uscxml/tests/gen/TestStateChart.java b/contrib/java/generated/org/uscxml/tests/gen/TestStateChart.java new file mode 100644 index 0000000..d459c7e --- /dev/null +++ b/contrib/java/generated/org/uscxml/tests/gen/TestStateChart.java @@ -0,0 +1,27 @@ +package org.uscxml.tests.gen; + +import org.uscxml.InterpreterException; +import org.uscxml.StateChart; +import org.uscxml.gen.TestStateChartBase; + +public class TestStateChart extends TestStateChartBase { + + public static void main(String[] args) { + System.out.println("Testing " + args[0]); + + TestStateChart machine = new TestStateChart(); + try { + while(machine.step() != StateChart.InterpreterState.USCXML_FINISHED) { + // here we could inspect the state chart after a step + } + // when we arrive here, the state chart is finished + assert(machine.isInState("pass")); + System.out.println("PASSED"); + System.exit(0); // EXIT_SUCCESS + } catch (InterpreterException e) { + System.out.println("FAILED"); + System.exit(-1); // EXIT_FAILURE + } + } + +} diff --git a/contrib/java/libs/commons-jexl3-3.0.jar b/contrib/java/libs/commons-jexl3-3.0.jar new file mode 100644 index 0000000..94566bf Binary files /dev/null and b/contrib/java/libs/commons-jexl3-3.0.jar differ diff --git a/contrib/java/libs/commons-logging-1.2.jar b/contrib/java/libs/commons-logging-1.2.jar new file mode 100644 index 0000000..93a3b9f Binary files /dev/null and b/contrib/java/libs/commons-logging-1.2.jar differ diff --git a/src/uscxml/transform/ChartToJava.cpp b/src/uscxml/transform/ChartToJava.cpp index da9c4d6..f31db71 100644 --- a/src/uscxml/transform/ChartToJava.cpp +++ b/src/uscxml/transform/ChartToJava.cpp @@ -42,6 +42,59 @@ ChartToJava::~ChartToJava() { } void ChartToJava::writeTo(std::ostream& stream) { + std::string className; + std::string packageName = "org.uscxml.gen"; + + if (_extensions.find("packageName") != _extensions.end()) { + packageName = _extensions.equal_range("packageName").first->second; + } + + if (_extensions.find("outputFile") != _extensions.end()) { + URL outputFileURL(_extensions.equal_range("outputFile").first->second); + className = outputFileURL.pathComponents().back(); + } else if (_baseURL.pathComponents().size() > 0) { + className = _baseURL.pathComponents().back(); + } else { + className = "StateChartBase"; + } + + std::string javaVersion = "5"; + if (_extensions.find("javaVersion") != _extensions.end()) { + javaVersion = _extensions.equal_range("javaVersion").first->second; + } + std::string baseClass = "StateChartJava" + javaVersion + "Impl"; + + + size_t dotPos = std::string::npos; + if ((dotPos = className.find(".")) != std::string::npos) { + className = className.substr(0, dotPos); + } + + stream << "package " << packageName << ";" << std::endl; + stream << std::endl; + + stream << "/**" << std::endl; + stream << " Generated from source:" << std::endl; + stream << " " << (std::string)_baseURL << std::endl; + stream << "*/" << std::endl; + stream << std::endl; + + + stream << std::endl; + stream << "import java.util.ArrayList;" << std::endl; + stream << "import java.util.HashMap;" << std::endl; + stream << "import org.uscxml.*;" << std::endl; + stream << std::endl; + stream << "public abstract class " << className << " extends " << baseClass << " {" << std::endl; + stream << std::endl; + stream << " public " << className << "() {" << std::endl; + stream << " transitions = new ArrayList();" << std::endl; + stream << " states = new ArrayList();" << std::endl; + stream << " stateNamesToIndex = new HashMap();" << std::endl; + stream << " /* TODO: initialize all members */" << std::endl; + stream << " }" << std::endl; + stream << "}" << std::endl; + } -} \ No newline at end of file +} diff --git a/src/uscxml/transform/ChartToVHDL.cpp b/src/uscxml/transform/ChartToVHDL.cpp index cbd46ef..9ef2f75 100644 --- a/src/uscxml/transform/ChartToVHDL.cpp +++ b/src/uscxml/transform/ChartToVHDL.cpp @@ -90,7 +90,7 @@ void ChartToVHDL::findEvents() { // Calculate needed bit size for the event fifo // --> |log2(n)| +1 with n is number of events // we do not add +1 because the std_logic_vector startes with 0 - _eventBitSize = ceil(abs(log2(_eventNames.size()))); + _eventBitSize = ceil(std::abs(log2(_eventNames.size()))); _execContent = DOMUtils::inDocumentOrder({ XML_PREFIX(_scxml).str() + "raise", @@ -1605,4 +1605,4 @@ void ChartToVHDL::writeSystemSignalMapping(std::ostream &stream) { } -} \ No newline at end of file +} diff --git a/src/uscxml/transform/Transformer.h b/src/uscxml/transform/Transformer.h index 6a9f2f3..d3c60e8 100644 --- a/src/uscxml/transform/Transformer.h +++ b/src/uscxml/transform/Transformer.h @@ -31,7 +31,7 @@ class USCXML_API TransformerImpl { public: TransformerImpl(const Interpreter& other) { interpreter = other; // we need to keep a reference to retain the document! - other.getImpl()->init(); + other.getImpl()->setupDOM(); _document = other.getImpl()->_document; _baseURL = other.getImpl()->_baseURL; _scxml = other.getImpl()->_scxml; diff --git a/src/uscxml/util/String.cpp b/src/uscxml/util/String.cpp index 95d69e9..7334d73 100644 --- a/src/uscxml/util/String.cpp +++ b/src/uscxml/util/String.cpp @@ -90,7 +90,8 @@ std::list tokenize(const std::string &line, const char sep, bool tr i++; // skip multiple occurences of seperator and whitespaces } start = i; - } else if (i + 1 == line.size()) { + } + if (i + 1 == line.size()) { tokens.push_back(line.substr(start, i + 1 - start)); } } @@ -224,4 +225,4 @@ NEXT_DESC: } -} \ No newline at end of file +} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f07df8d..850aa21 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,23 +1,23 @@ set(TEST_TIMEOUT 30) set(TEST_BENCHMARK_ITERATIONS 1000) -find_program(SPIN spin) -find_program(CC gcc) -find_program(CXX g++) -find_program(ANT_EXECUTABLE ant) -find_program(PERL perl) -find_program(GHDL ghdl) +find_program(SPIN_BIN spin) +find_program(CC_BIN gcc) +find_program(CXX_BIN g++) +find_program(ANT_BIN ant) +find_program(PERL_BIN perl) +find_program(GHDL_BIN ghdl) set(GHDL_VERSION "0") -if (GHDL) - execute_process(COMMAND ${GHDL} -v OUTPUT_VARIABLE GHDL_VERSION_OUT) +if (GHDL_BIN) + execute_process(COMMAND ${GHDL_BIN} -v OUTPUT_VARIABLE GHDL_VERSION_OUT) string(REGEX REPLACE "^GHDL " "" GHDL_VERSION_OUT ${GHDL_VERSION_OUT}) string(REGEX MATCH "^([0-9]+\\.[0-9]+)" GHDL_VERSION ${GHDL_VERSION_OUT}) if (${GHDL_VERSION} VERSION_LESS "0.32") message(WARNING "GHDL version 0.32 required - ${GHDL_VERSION} found, not building VHDL tests") message(WARNING "Try https://github.com/tgingold/ghdl/releases/tag/v0.33") - unset(GHDL) + unset(GHDL_BIN) endif () endif () @@ -110,8 +110,8 @@ foreach (USCXML_HEADER ${USCXML_PUBLIC_HEADERS}) add_test(NAME "header/${USCXML_REL_HEADER}" COMMAND ${CMAKE_COMMAND} -DTESTFILE:FILEPATH=${CMAKE_CURRENT_BINARY_DIR}/headers/${USCXML_REL_HEADER}.cpp - -DCC_BIN:FILEPATH=${CC} - -DCXX_BIN:FILEPATH=${CXX} + -DCC_BIN:FILEPATH=${CC_BIN} + -DCXX_BIN:FILEPATH=${CXX_BIN} -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} -DUSCXML_PLATFORM_ID=${USCXML_PLATFORM_ID} -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} @@ -123,9 +123,9 @@ foreach (USCXML_HEADER ${USCXML_PUBLIC_HEADERS}) endforeach () # debugger REST API -if (PERL) +if (PERL_BIN) add_test(NAME "general/test-debug-api" - COMMAND ${PERL} + COMMAND ${PERL_BIN} "${PROJECT_SOURCE_DIR}/test/src/test-http-debugger.pl" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/uscxml-browser" WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/test/src @@ -247,81 +247,84 @@ if (NOT BUILD_MINIMAL) # more properties for standard tests - else () - - if (TEST_TYPE MATCHES "^gen.*") - get_filename_component(TEST_TARGET ${TEST_TYPE} NAME) - if (TEST_TYPE MATCHES "^gen/${TEST_TARGET}") - - if (TEST_TARGET MATCHES "vhdl" AND "${GHDL_VERSION}" VERSION_LESS "0.32") - # do nothing - else () - - # generate native interpreters - add_test(NAME "${TEST_NAME}" - COMMAND ${CMAKE_COMMAND} - -DOUTDIR:FILEPATH=${CMAKE_CURRENT_BINARY_DIR}/${TEST_CLASS} - -DTESTFILE:FILEPATH=${W3C_TEST} - -DTARGETLANG=${TEST_TARGET} - -DJSC_LIBRARY:FILEPATH=${JSC_LIBRARY} - -DUSCXML_TRANSFORM_BIN:FILEPATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/uscxml-transform - -DCC_BIN:FILEPATH=${CC} - -DCXX_BIN:FILEPATH=${CXX} - -DGHDL_BIN:FILEPATH=${GHDL} - -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} - -DUSCXML_PLATFORM_ID=${USCXML_PLATFORM_ID} - -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} - -DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR} - -DXercesC_INCLUDE_DIRS=${XercesC_INCLUDE_DIRS} - -DURIPARSER_INCLUDE_DIR=${URIPARSER_INCLUDE_DIR} - -DLIBEVENT_INCLUDE_DIR=${LIBEVENT_INCLUDE_DIR} - -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} - -DSCAFFOLDING_FOR_GENERATED_C:FILEPATH=${CMAKE_CURRENT_SOURCE_DIR}/src/test-gen-c.cpp - -P ${CMAKE_CURRENT_SOURCE_DIR}/ctest/scripts/run_generated_test.cmake) - set_tests_properties("${TEST_NAME}" PROPERTIES DEPENDS uscxml-transform) - set(TEST_ADDED ON) - endif() - endif () - - elseif (TEST_TYPE MATCHES "^binding.*") - get_filename_component(TEST_LANG ${TEST_TYPE} NAME) - - if (TARGET jar AND TEST_LANG STREQUAL "java") - add_test(NAME "${TEST_NAME}" - COMMAND - ${ANT_EXECUTABLE} - -Dtest.file=${W3C_TEST} - -Duscxml.jar=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/uscxml.jar - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bindings/java - ) - set_tests_properties("${TEST_NAME}" PROPERTIES DEPENDS jar) - set(TEST_ADDED ON) - endif () - - elseif (TEST_TYPE MATCHES "^spin.*") - - if (NOT ${TEST_DATAMODEL} STREQUAL "promela") + elseif (TEST_TYPE MATCHES "^gen.*") + # tests for generated languages via ctest/scripts/test_generated_${TEST_TARGET}.cmake + get_filename_component(TEST_TARGET ${TEST_TYPE} NAME) + if (TEST_TYPE MATCHES "^gen/${TEST_TARGET}") + + # a few necessary preconditions per target language + if (TEST_TARGET MATCHES "vhdl" AND "${GHDL_VERSION}" VERSION_LESS "0.32") + break() + endif() + + if (TEST_TARGET MATCHES "java" AND NOT ANT_BIN) break() - endif () + endif() + # call test script add_test(NAME "${TEST_NAME}" COMMAND ${CMAKE_COMMAND} - -DOUTDIR:FILEPATH=${CMAKE_CURRENT_BINARY_DIR}/promela + -DOUTDIR:FILEPATH=${CMAKE_CURRENT_BINARY_DIR}/${TEST_CLASS} -DTESTFILE:FILEPATH=${W3C_TEST} + -DTARGETLANG=${TEST_TARGET} + -DJSC_LIBRARY:FILEPATH=${JSC_LIBRARY} -DUSCXML_TRANSFORM_BIN:FILEPATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/uscxml-transform - -DSPIN_BIN:FILEPATH=${SPIN} - -DCC_BIN:FILEPATH=${CC} - -P ${CMAKE_CURRENT_SOURCE_DIR}/ctest/scripts/run_promela_test.cmake) - set_tests_properties("${TEST_NAME}" PROPERTIES PASS_REGULAR_EXPRESSION "depth reached [0-9]+, errors: 0") - set_tests_properties("${TEST_NAME}" PROPERTIES FAIL_REGULAR_EXPRESSION "depth reached [0-9]+, errors: [1-9]+") + -DANT_BIN:FILEPATH=${ANT_BIN} + -DCC_BIN:FILEPATH=${CC_BIN} + -DCXX_BIN:FILEPATH=${CXX_BIN} + -DGHDL_BIN:FILEPATH=${GHDL_BIN} + -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} + -DUSCXML_PLATFORM_ID=${USCXML_PLATFORM_ID} + -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} + -DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR} + -DXercesC_INCLUDE_DIRS=${XercesC_INCLUDE_DIRS} + -DURIPARSER_INCLUDE_DIR=${URIPARSER_INCLUDE_DIR} + -DLIBEVENT_INCLUDE_DIR=${LIBEVENT_INCLUDE_DIR} + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + -DSCAFFOLDING_FOR_GENERATED_C:FILEPATH=${CMAKE_CURRENT_SOURCE_DIR}/src/test-gen-c.cpp + -P ${CMAKE_CURRENT_SOURCE_DIR}/ctest/scripts/test_generated_${TEST_TARGET}.cmake) + set_tests_properties("${TEST_NAME}" PROPERTIES DEPENDS uscxml-transform) set(TEST_ADDED ON) + endif() - elseif (TEST_TYPE MATCHES "^fsm.*") + elseif (TEST_TYPE MATCHES "^binding.*") + get_filename_component(TEST_LANG ${TEST_TYPE} NAME) - add_test("${TEST_NAME}" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-state-pass -f ${W3C_TEST}) + if (TARGET jar AND TEST_LANG STREQUAL "java") + add_test(NAME "${TEST_NAME}" + COMMAND + ${ANT_BIN} + -Dtest.file=${W3C_TEST} + -Duscxml.jar=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/uscxml.jar + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bindings/java + ) + set_tests_properties("${TEST_NAME}" PROPERTIES DEPENDS jar) set(TEST_ADDED ON) + endif () + + elseif (TEST_TYPE MATCHES "^spin.*") + if (NOT ${TEST_DATAMODEL} STREQUAL "promela") + break() endif () + + add_test(NAME "${TEST_NAME}" + COMMAND ${CMAKE_COMMAND} + -DOUTDIR:FILEPATH=${CMAKE_CURRENT_BINARY_DIR}/promela + -DTESTFILE:FILEPATH=${W3C_TEST} + -DUSCXML_TRANSFORM_BIN:FILEPATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/uscxml-transform + -DSPIN_BIN:FILEPATH=${SPIN_BIN} + -DCC_BIN:FILEPATH=${CC_BIN} + -P ${CMAKE_CURRENT_SOURCE_DIR}/ctest/scripts/run_promela_test.cmake) + set_tests_properties("${TEST_NAME}" PROPERTIES PASS_REGULAR_EXPRESSION "depth reached [0-9]+, errors: 0") + set_tests_properties("${TEST_NAME}" PROPERTIES FAIL_REGULAR_EXPRESSION "depth reached [0-9]+, errors: [1-9]+") + set(TEST_ADDED ON) + + elseif (TEST_TYPE MATCHES "^fsm.*") + + add_test("${TEST_NAME}" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-state-pass -f ${W3C_TEST}) + set(TEST_ADDED ON) + endif () if (TEST_ADDED) diff --git a/test/bindings/java/build.properties b/test/bindings/java/build.properties deleted file mode 100644 index dd0fe62..0000000 --- a/test/bindings/java/build.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Default path on Windows (maybe with an '(x86)' in there for good measure) -#umundo.jar=C:\\Program Files\\uMundo\\share\\umundo\\lib\\umundo.jar - -# Default path on MacOSX and Linux -uscxml.library.path=/usr/local/share/uscxml/bindings/java -uscxml.jar=/usr/local/share/uscxml/bindings/uscxml.jar - -jexl.jar=libs/commons-jexl3-3.0.jar -logging.jar=libs/commons-logging-1.2.jar \ No newline at end of file diff --git a/test/bindings/java/build.xml b/test/bindings/java/build.xml deleted file mode 100644 index 2f1f362..0000000 --- a/test/bindings/java/build.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/bindings/java/libs/commons-jexl3-3.0.jar b/test/bindings/java/libs/commons-jexl3-3.0.jar deleted file mode 100644 index 94566bf..0000000 Binary files a/test/bindings/java/libs/commons-jexl3-3.0.jar and /dev/null differ diff --git a/test/bindings/java/libs/commons-logging-1.2.jar b/test/bindings/java/libs/commons-logging-1.2.jar deleted file mode 100644 index 93a3b9f..0000000 Binary files a/test/bindings/java/libs/commons-logging-1.2.jar and /dev/null differ diff --git a/test/bindings/java/org/uscxml/apache/commons/scxml2/Context.java b/test/bindings/java/org/uscxml/apache/commons/scxml2/Context.java deleted file mode 100644 index a0208c9..0000000 --- a/test/bindings/java/org/uscxml/apache/commons/scxml2/Context.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.uscxml.apache.commons.scxml2; - -import org.uscxml.DataModel; - -public class Context { - public DataModel dm = null; -} diff --git a/test/bindings/java/org/uscxml/apache/commons/scxml2/Evaluator.java b/test/bindings/java/org/uscxml/apache/commons/scxml2/Evaluator.java deleted file mode 100644 index 5bd5642..0000000 --- a/test/bindings/java/org/uscxml/apache/commons/scxml2/Evaluator.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.uscxml.apache.commons.scxml2; - -public abstract class Evaluator { - - public abstract Context newContext(Object object); - -} diff --git a/test/bindings/java/org/uscxml/apache/commons/scxml2/JexlEvaluator.java b/test/bindings/java/org/uscxml/apache/commons/scxml2/JexlEvaluator.java deleted file mode 100644 index 127bed3..0000000 --- a/test/bindings/java/org/uscxml/apache/commons/scxml2/JexlEvaluator.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.uscxml.apache.commons.scxml2; - -import org.uscxml.Factory; -import org.uscxml.dm.jexl.JexlDataModel; - -public class JexlEvaluator extends Evaluator { - - public JexlEvaluator() { - - } - - @Override - public Context newContext(Object object) { - // TODO Auto-generated method stub - Context ctx = new Context(); - ctx.dm = new JexlDataModel(); - return ctx; - } -} diff --git a/test/bindings/java/org/uscxml/apache/commons/scxml2/SCXML.java b/test/bindings/java/org/uscxml/apache/commons/scxml2/SCXML.java deleted file mode 100644 index 67e5b1f..0000000 --- a/test/bindings/java/org/uscxml/apache/commons/scxml2/SCXML.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.uscxml.apache.commons.scxml2; - -import java.net.URL; - -public class SCXML { - public URL url = null; - -} diff --git a/test/bindings/java/org/uscxml/apache/commons/scxml2/SCXMLExecutor.java b/test/bindings/java/org/uscxml/apache/commons/scxml2/SCXMLExecutor.java deleted file mode 100644 index 704e897..0000000 --- a/test/bindings/java/org/uscxml/apache/commons/scxml2/SCXMLExecutor.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.uscxml.apache.commons.scxml2; - -import java.net.URL; - -import org.uscxml.ActionLanguage; -import org.uscxml.Factory; -import org.uscxml.Interpreter; -import org.uscxml.InterpreterException; -import org.uscxml.InterpreterState; -import org.uscxml.helper.TestMonitor; - -public class SCXMLExecutor { - - public Interpreter interpreter = null; - public URL sourceURL = null; - public ActionLanguage al = new ActionLanguage(); - - public SCXMLExecutor(Evaluator evaluator, Object object, SimpleErrorReporter simpleErrorReporter) { - // TODO Auto-generated constructor stub - } - - public void setStateMachine(SCXML scxml) { - sourceURL = scxml.url; - } - - public void setRootContext(Context rootContext) { - al.setDataModel(rootContext.dm); - } - - public void go() { - try { - interpreter = Interpreter.fromURL(sourceURL.toString()); - interpreter.setActionLanguage(al); - - TestMonitor tm = new TestMonitor(); - interpreter.addMonitor(tm); - - InterpreterState state = InterpreterState.USCXML_UNDEF; - while(state != InterpreterState.USCXML_FINISHED) { - interpreter.step(); - } - - } catch (InterpreterException e) { - e.printStackTrace(); - } - - } - -} diff --git a/test/bindings/java/org/uscxml/apache/commons/scxml2/SCXMLReader.java b/test/bindings/java/org/uscxml/apache/commons/scxml2/SCXMLReader.java deleted file mode 100644 index 45c2a54..0000000 --- a/test/bindings/java/org/uscxml/apache/commons/scxml2/SCXMLReader.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.uscxml.apache.commons.scxml2; - -import java.net.URL; - -public class SCXMLReader { - - public static SCXML read(URL scxml) { - SCXML foo = new SCXML(); - foo.url = scxml; - return foo; - } - -} diff --git a/test/bindings/java/org/uscxml/apache/commons/scxml2/SimpleErrorReporter.java b/test/bindings/java/org/uscxml/apache/commons/scxml2/SimpleErrorReporter.java deleted file mode 100644 index 06187f8..0000000 --- a/test/bindings/java/org/uscxml/apache/commons/scxml2/SimpleErrorReporter.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.uscxml.apache.commons.scxml2; - -public class SimpleErrorReporter { - -} diff --git a/test/bindings/java/org/uscxml/dm/jexl/JEXLDataModel.java b/test/bindings/java/org/uscxml/dm/jexl/JEXLDataModel.java deleted file mode 100644 index cd9d175..0000000 --- a/test/bindings/java/org/uscxml/dm/jexl/JEXLDataModel.java +++ /dev/null @@ -1,267 +0,0 @@ -package org.uscxml.dm.jexl; - -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.commons.jexl3.JexlBuilder; -import org.apache.commons.jexl3.JexlEngine; -import org.apache.commons.jexl3.JexlException; -import org.apache.commons.jexl3.JexlExpression; -import org.apache.commons.jexl3.MapContext; -import org.uscxml.Data; -import org.uscxml.DataList; -import org.uscxml.DataMap; -import org.uscxml.DataModel; -import org.uscxml.DataModelExtension; -import org.uscxml.ErrorEvent; -import org.uscxml.Event; -import org.uscxml.StringList; -import org.uscxml.StringVector; - -public class JexlDataModel extends DataModel { - - protected static final JexlEngine jexl = new JexlBuilder().cache(512).strict(true).silent(false).create(); - public MapContext ctx = new MapContext(); - - @Override - public void addExtension(DataModelExtension ext) { - throw new UnsupportedOperationException("Cannot add extensions to the jexl datamodel"); - } - - @Override - public StringList getNames() { - StringList names = new StringList(); - names.add("jexl"); - return names; - } - - @Override - public DataModel create() { - JexlDataModel dm = new JexlDataModel(); - return dm; - } - - @Override - public boolean isValidSyntax(String expr) { - try { - jexl.createExpression(expr); - return true; - } catch(JexlException e) { - return false; - } - } - - @Override - public void setEvent(Event event) { - ctx.set("_event", event); - } - - @Override - public Data getAsData(String content) { - try { - JexlExpression ex = jexl.createExpression(content); - return getJexlObjectAsData(ex.evaluate(ctx)); - } catch(Exception e) { - } - return null; - } - - @Override - public Data evalAsData(String content) { - JexlExpression expr = jexl.createExpression(content); - Data d = getJexlObjectAsData(expr.evaluate(ctx)); -// d.setAtom(expr.getParsedText()); -// d.setType(Data.Type.VERBATIM); - return d; - } - - @Override - public boolean evalAsBool(String expr) { - try { - JexlExpression ex = jexl.createExpression("!!" + expr); - Object result = ex.evaluate(ctx); - return (Boolean) result; - } catch(Exception e) { - e.printStackTrace(); - } - return false; - } - - @Override - public long getLength(String expr) { - try { - JexlExpression ex = jexl.createExpression(expr); - Object res = ex.evaluate(ctx); - - return Array.getLength(res); - - } catch(Exception e) { - throw new ErrorEvent("Cannot evaluate '" + expr + "' as an array: " + e.getMessage()); - } - } - - @Override - public void setForeach(String item, String array, String index, long iteration) { - Object res = null; - try { - JexlExpression ex = jexl.createExpression(array); - res = ex.evaluate(ctx); - } catch(Exception e) { - throw new ErrorEvent("Cannot evaluate '" + array + "' as an array: " + e.getMessage()); - } - try { - JexlExpression ex = jexl.createExpression(item + "==" + item + ";"); - ex.evaluate(ctx); - - ctx.set(item, Array.get(res, (int) iteration)); - } catch(Exception e) { - throw new ErrorEvent("Cannot set item '" + item + "' to current item: " + e.getMessage()); - } - try { - if (index.length() > 0) { - ctx.set(index, iteration); - } - } catch(Exception e) { - throw new ErrorEvent("Cannot set index '" + index + "' to current index: " + e.getMessage()); - } - } - - @Override - public void assign(String location, Data data) { - try { - ctx.set(location, getDataAsJexlObject(data)); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Override - public void init(String location, Data data) { - ctx.set(location, null); - assign(location, data); - } - - @Override - public boolean isDeclared(String expr) { - try { - JexlExpression ex = jexl.createExpression(expr); - Object result = ex.evaluate(ctx); - return (boolean) result; - } catch(JexlException e) { - } - return false; - } - - protected Object evalAsObject(String expr) { - try { - JexlExpression ex = jexl.createExpression(expr); - return (ex.evaluate(ctx)); - } catch(JexlException e) { - } - return null; - } - - protected Data getJexlObjectAsData(Object obj) { - Data d = new Data(); - if (obj.getClass().isArray()) { - int length = Array.getLength(obj); - for (int i = 0; i < length; i ++) { - d.getArray().add(getJexlObjectAsData(Array.get(obj, i))); - } - } else if (obj.getClass().isPrimitive() || isWrapperType(obj.getClass())) { - String val = obj.toString(); - try { - Integer.parseInt(obj.toString()); - d.setAtom(obj.toString()); - d.setType(Data.Type.INTERPRETED); - return d; - } catch(NumberFormatException e) {} - try { - Double.parseDouble(obj.toString()); - d.setAtom(obj.toString()); - d.setType(Data.Type.INTERPRETED); - return d; - } catch(NumberFormatException e) {} - d.setAtom(obj.toString()); - d.setType(Data.Type.VERBATIM); - return d; - } else { - Field[] fields = obj.getClass().getDeclaredFields(); - for (Field field: fields) { - Object newObj = null; - try { - field.get(newObj); - d.getCompound().set(field.getName(), getJexlObjectAsData(newObj)); - } catch (IllegalArgumentException | IllegalAccessException e) { - } - } - return d; - } - - return d; - } - - protected Object getDataAsJexlObject(Data data) { - if (data.getAtom().length() > 0) { - if (data.getType() == Data.Type.INTERPRETED) { - try { - JexlExpression exp = jexl.createExpression(data.getAtom()); - return exp.evaluate(ctx); - } catch (Exception e) { - e.printStackTrace(); - } - return new String(data.getAtom()); - } - try { - JexlExpression exp = jexl.createExpression(data.getAtom()); - return exp.evaluate(ctx); - } catch (Exception e) { - } - return new String("\"" + data.getAtom() + "\""); - - } else if (data.getCompound().size() > 0) { - StringVector keys = data.getCompoundKeys(); - DataMap dataCompound = data.getCompound(); - Map objCompound = new HashMap(); - for (int i = 0; i < keys.size(); i++) { - objCompound.put(keys.get(i), getDataAsJexlObject(dataCompound.get(keys.get(i)))); - } - return objCompound; - } else if (data.getArray().size() > 0) { - DataList dataList = data.getArray(); - List objList = new ArrayList((int) data.getArray().size()); - for (int i = 0; i < dataList.size(); i++) { - objList.add(i, getDataAsJexlObject(dataList.get(i))); - } - return objList; - } - return new Object(); - } - - protected static boolean isWrapperType(Class clazz) { - return WRAPPER_TYPES.contains(clazz); - } - - private static final Set> WRAPPER_TYPES = getWrapperTypes(); - - private static Set> getWrapperTypes() { - Set> ret = new HashSet>(); - ret.add(Boolean.class); - ret.add(Character.class); - ret.add(Byte.class); - ret.add(Short.class); - ret.add(Integer.class); - ret.add(Long.class); - ret.add(Float.class); - ret.add(Double.class); - ret.add(Void.class); - return ret; - } - -} diff --git a/test/bindings/java/org/uscxml/examples/ApacheCommonsAPI.java b/test/bindings/java/org/uscxml/examples/ApacheCommonsAPI.java deleted file mode 100644 index 4cf3de4..0000000 --- a/test/bindings/java/org/uscxml/examples/ApacheCommonsAPI.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.uscxml.examples; - -import java.net.URL; - -//import org.uscxml.apache.commons.scxml2.*; -import org.apache.commons.scxml2.*; -import org.apache.commons.scxml2.env.SimpleErrorReporter; -import org.apache.commons.scxml2.env.jexl.JexlEvaluator; -import org.apache.commons.scxml2.io.SCXMLReader; -import org.apache.commons.scxml2.model.SCXML; - -public class ApacheCommonsAPI { - - // SCXML model source URL - private static final URL SCXML = ApacheCommonsAPI.class.getResource("hello-world.xml"); - - public static void main(String [] args) throws Exception { - String uSCXMLLibPath = "/Users/sradomski/Documents/TK/Code/uscxml/build/cli/lib/libuscxmlNativeJava.jnilib"; - if (System.getenv().containsKey("USCXML_JAVA_LIB")) { - uSCXMLLibPath = System.getenv("USCXML_JAVA_LIB"); - } - - System.load(uSCXMLLibPath); - - - // evaluator instance which is used by SCXML engine to evaluate expressions in SCXML - Evaluator evaluator = new JexlEvaluator(); - // engine to execute the scxml instance - SCXMLExecutor executor = new SCXMLExecutor(evaluator, null, new SimpleErrorReporter()); - - // parse SCXML URL into SCXML model - SCXML scxml = SCXMLReader.read(SCXML); - // set state machine (scxml instance) to execute - executor.setStateMachine(scxml); - - // create root context storing variables and being used by evaluator - Context rootContext = evaluator.newContext(null); - // set the root context for the engine - executor.setRootContext(rootContext); - - // initiate the execution of the state machine - executor.go(); - } - -} diff --git a/test/bindings/java/org/uscxml/examples/BasicExample.java b/test/bindings/java/org/uscxml/examples/BasicExample.java deleted file mode 100644 index 129a116..0000000 --- a/test/bindings/java/org/uscxml/examples/BasicExample.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.uscxml.examples; - -import org.uscxml.Interpreter; -import org.uscxml.InterpreterException; -import org.uscxml.InterpreterState; - -public class BasicExample { - - public static void main(String[] args) { - - String uSCXMLLibPath = "/Users/sradomski/Documents/TK/Code/uscxml/build/cli/lib/libuscxmlNativeJava.jnilib"; - if (System.getenv().containsKey("USCXML_JAVA_LIB")) { - uSCXMLLibPath = System.getenv("USCXML_JAVA_LIB"); - } - - System.load(uSCXMLLibPath); - - try { - Interpreter scxml = Interpreter.fromURL("https://raw.githubusercontent.com/tklab-tud/uscxml/master/test/w3c/null/test436.scxml"); - InterpreterState state = InterpreterState.USCXML_UNDEF; - while((state = scxml.step()) != InterpreterState.USCXML_FINISHED) { - switch (state) { - case USCXML_FINISHED: - case USCXML_UNDEF: - case USCXML_IDLE: - case USCXML_INITIALIZED: - case USCXML_INSTANTIATED: - case USCXML_MICROSTEPPED: - case USCXML_MACROSTEPPED: - case USCXML_CANCELLED: - break; - default: - break; - } - } - System.out.println("Machine finished"); - - } catch (InterpreterException e) { - e.printStackTrace(); - System.exit(-1); - } - System.exit(0); - - } - -} diff --git a/test/bindings/java/org/uscxml/examples/DataModelExample.java b/test/bindings/java/org/uscxml/examples/DataModelExample.java deleted file mode 100644 index bba64eb..0000000 --- a/test/bindings/java/org/uscxml/examples/DataModelExample.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.uscxml.examples; - -import java.io.File; -import java.net.MalformedURLException; - -import org.uscxml.Factory; -import org.uscxml.Interpreter; -import org.uscxml.InterpreterException; -import org.uscxml.InterpreterState; -import org.uscxml.dm.jexl.JexlDataModel; -import org.uscxml.helper.TestMonitor; - -public class DataModelExample { - - public static void main(String[] args) { - String uSCXMLLibPath = "/Users/sradomski/Documents/TK/Code/uscxml/build/cli/lib/libuscxmlNativeJava.jnilib"; - if (System.getenv().containsKey("USCXML_JAVA_LIB")) { - uSCXMLLibPath = System.getenv("USCXML_JAVA_LIB"); - } - - System.load(uSCXMLLibPath); - - JexlDataModel jdm = new JexlDataModel(); - Factory.getInstance().registerDataModel(jdm);; - - TestMonitor tm = new TestMonitor(); - - File folder = new File("/Users/sradomski/Documents/TK/Code/uscxml/test/w3c/jexl"); - File[] listOfFiles = folder.listFiles(); - - try { - for (File file : listOfFiles) { - if (!file.getName().endsWith(".scxml")) - continue; - String testName = file.toURI().toURL().toString(); - System.out.println(testName); - - Interpreter scxml = Interpreter.fromURL(testName); -// scxml.setMonitor(tm); - - while(scxml.step() != InterpreterState.USCXML_FINISHED) {} - - if (!scxml.isInState("pass")) { - System.out.println("FAIL: " + testName); - - throw new RuntimeException(); - } - System.out.println("SUCCESS"); - - } - - } catch (InterpreterException | MalformedURLException e) { - e.printStackTrace(); - System.exit(-1); - } - System.exit(0); - - } - -} diff --git a/test/bindings/java/org/uscxml/examples/MonitorExample.java b/test/bindings/java/org/uscxml/examples/MonitorExample.java deleted file mode 100644 index dc4cffa..0000000 --- a/test/bindings/java/org/uscxml/examples/MonitorExample.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.uscxml.examples; - -import org.uscxml.Interpreter; -import org.uscxml.InterpreterException; -import org.uscxml.InterpreterState; -import org.uscxml.StringVector; -import org.uscxml.helper.TestMonitor; - - -public class MonitorExample { - - public static void main(String[] args) { - - String uSCXMLLibPath = "/Users/sradomski/Documents/TK/Code/uscxml/build/cli/lib/libuscxmlNativeJava.jnilib"; - if (System.getenv().containsKey("USCXML_JAVA_LIB")) { - uSCXMLLibPath = System.getenv("USCXML_JAVA_LIB"); - } - - System.load(uSCXMLLibPath); - - try { - TestMonitor tm = new TestMonitor(); - Interpreter scxml = Interpreter.fromURL("https://raw.githubusercontent.com/tklab-tud/uscxml/master/test/w3c/null/test436.scxml"); - scxml.addMonitor(tm); - InterpreterState state = InterpreterState.USCXML_UNDEF; - while((state = scxml.step()) != InterpreterState.USCXML_FINISHED) { - switch (state) { - case USCXML_FINISHED: - case USCXML_UNDEF: - case USCXML_IDLE: - case USCXML_INITIALIZED: - case USCXML_INSTANTIATED: - break; - case USCXML_MICROSTEPPED: - case USCXML_MACROSTEPPED: - StringVector states = scxml.getConfiguration(); - for (int i = 0; i < states.size(); i++) { - System.out.print(states.get(i) + " "); - } - System.out.println(); - case USCXML_CANCELLED: - break; - default: - break; - } - } - - } catch (InterpreterException e) { - e.printStackTrace(); - System.exit(-1); - } - System.exit(0); - } - -} diff --git a/test/bindings/java/org/uscxml/examples/hello-world.xml b/test/bindings/java/org/uscxml/examples/hello-world.xml deleted file mode 100644 index 3ac168c..0000000 --- a/test/bindings/java/org/uscxml/examples/hello-world.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/test/bindings/java/org/uscxml/helper/StopWatch.java b/test/bindings/java/org/uscxml/helper/StopWatch.java deleted file mode 100644 index 4123ba1..0000000 --- a/test/bindings/java/org/uscxml/helper/StopWatch.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.uscxml.helper; - -import org.uscxml.Data; -import org.uscxml.DataModelExtension; - -public class StopWatch { - - public StopWatch() { - } - - public void reset() { - System.out.println("RESET"); - } - - public void start() { - System.out.println("START"); - } - public void stop() { - System.out.println("STOP"); - } - -} diff --git a/test/bindings/java/org/uscxml/helper/TestMonitor.java b/test/bindings/java/org/uscxml/helper/TestMonitor.java deleted file mode 100644 index 2b71d82..0000000 --- a/test/bindings/java/org/uscxml/helper/TestMonitor.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.uscxml.helper; - -import org.uscxml.InterpreterMonitor; -import org.uscxml.StringList; - -public class TestMonitor extends InterpreterMonitor { - - public TestMonitor() {} - - @Override - public void beforeExitingState(String stateId, String xpath, String stateXML) { - System.out.println("beforeExitingState: " + stateId + " " + xpath); - } - - @Override - public void afterExitingState(String stateId, String xpath, String stateXML) { - System.out.println("afterExitingState: " + stateId + " " + xpath); - } - - @Override - public void beforeExecutingContent(String tagName, String xpath, String contentXML) { - System.out.println("afterExecutingContent: " + tagName + " " + xpath); - } - - @Override - public void afterExecutingContent(String tagName, String xpath, String contentXML) { - System.out.println("afterExecutingContent: " + tagName + " " + xpath); - } - - @Override - public void beforeUninvoking(String xpath, String invokeid, String invokerXML) { - System.out.println("beforeUninvoking: " + xpath + " " + invokeid); - } - - @Override - public void afterUninvoking(String xpath, String invokeid, String invokerXML) { - System.out.println("beforeUninvoking: " + xpath + " " + invokeid); - } - - @Override - public void beforeTakingTransition(String xpath, String source, StringList targets, String transitionXML) { - System.out.println("beforeTakingTransition: " + xpath + " " + source + " " + targets); - } - - @Override - public void afterTakingTransition(String xpath, String source, StringList targets, String transitionXML) { - System.out.println("afterTakingTransition: " + xpath + " " + source + " " + targets); - } - - @Override - public void beforeEnteringState(String stateId, String xpath, String stateXML) { - System.out.println("beforeEnteringState: " + stateId + " " + xpath); - } - - @Override - public void afterEnteringState(String stateId, String xpath, String stateXML) { - System.out.println("afterEnteringState: " + stateId + " " + xpath); - } - - @Override - public void beforeInvoking(String xpath, String invokeid, String invokerXML) { - System.out.println("beforeInvoking: " + xpath + " " + invokeid); - } - - @Override - public void afterInvoking(String xpath, String invokeid, String invokerXML) { - System.out.println("afterInvoking: " + xpath + " " + invokeid); - } - - -} diff --git a/test/bindings/java/org/uscxml/tests/JexlDataModelTest.java b/test/bindings/java/org/uscxml/tests/JexlDataModelTest.java deleted file mode 100644 index da79d37..0000000 --- a/test/bindings/java/org/uscxml/tests/JexlDataModelTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.uscxml.tests; - -import java.io.File; -import java.net.MalformedURLException; - -import org.uscxml.ActionLanguage; -import org.uscxml.Factory; -import org.uscxml.Interpreter; -import org.uscxml.InterpreterException; -import org.uscxml.InterpreterState; -import org.uscxml.dm.jexl.JexlDataModel; -import org.uscxml.helper.StopWatch; -import org.uscxml.helper.TestMonitor; - -public class JexlDataModelTest { - - public static void main(String[] args) { - String uSCXMLLibPath = "/Users/sradomski/Documents/TK/Code/uscxml/build/cli/lib/libuscxmlNativeJava.jnilib"; - if (System.getenv().containsKey("USCXML_JAVA_LIB")) { - uSCXMLLibPath = System.getenv("USCXML_JAVA_LIB"); - } - - System.load(uSCXMLLibPath); -// String testUri = "/Users/sradomski/Documents/TK/Code/uscxml/test/w3c/jexl/test144.scxml"; -// String testUri = "/Users/sradomski/Desktop/stopwatch.xml"; - - -// if (args.length > 0) { -// testUri = args[0]; -// } - - { - JexlDataModel jdm = new JexlDataModel(); -// Factory.getInstance().registerDataModel(jdm); - - - TestMonitor tm = new TestMonitor(); - - try { -// File testFile = new File(testUri); -// String testName = testFile.toURI().toURL().toString(); - String testName = "https://raw.githubusercontent.com/woonsan/commons-scxml-examples/master/stopwatch/src/main/resources/com/github/woonsan/commons/scxml/examples/stopwatch/stopwatch.xml"; - System.out.println(testName); - - Interpreter scxml = Interpreter.fromURL(testName); - - jdm.ctx.set("stopWatch", new StopWatch()); - - ActionLanguage al = new ActionLanguage(); - al.setDataModel(jdm); - scxml.setActionLanguage(al); - - scxml.addMonitor(tm); - - while (scxml.step() != InterpreterState.USCXML_FINISHED) { - } - - if (!scxml.isInState("pass")) { - System.out.println("FAIL: " + testName); - throw new RuntimeException(); - } - System.out.println("SUCCESS"); - - } catch (InterpreterException e) { - e.printStackTrace(); - System.exit(-1); - } - } - - System.exit(0); - } - -} diff --git a/test/ctest/scripts/test_generated_c.cmake b/test/ctest/scripts/test_generated_c.cmake new file mode 100644 index 0000000..c170639 --- /dev/null +++ b/test/ctest/scripts/test_generated_c.cmake @@ -0,0 +1,89 @@ +# see test/CMakeLists.txt for passed variables + +set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/contrib/cmake) +include("${CMAKE_MODULE_PATH}/FileInformation.cmake") + +get_filename_component(TEST_FILE_NAME ${TESTFILE} NAME) +execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTDIR}) + +# message(FATAL_ERROR "PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}") + +message(STATUS "${USCXML_TRANSFORM_BIN} -t${TARGETLANG} -i ${TESTFILE} -o ${OUTDIR}/${TEST_FILE_NAME}.machine.c") +execute_process(COMMAND time -p ${USCXML_TRANSFORM_BIN} -t${TARGETLANG} -i ${TESTFILE} -o ${OUTDIR}/${TEST_FILE_NAME}.machine.c RESULT_VARIABLE CMD_RESULT) +if (CMD_RESULT) + message(FATAL_ERROR "Error running ${USCXML_TRANSFORM_BIN}: ${CMD_RESULT}") +endif () +message(STATUS "time for transforming to c machine") + +# set(COMPILE_CMD_OBJ +# "-c" "${OUTDIR}/${TEST_FILE_NAME}.machine.c" +# "-o" "${OUTDIR}/${TEST_FILE_NAME}.machine.c.o" +# "-Ofast" "-ansi" "-m16") +# +# message(STATUS "${CC_BIN} ${COMPILE_CMD_OBJ}") +# execute_process( +# COMMAND time -p ${CC_BIN} ${COMPILE_CMD_OBJ} +# WORKING_DIRECTORY ${OUTDIR} RESULT_VARIABLE CMD_RESULT) +# if(CMD_RESULT) +# message(FATAL_ERROR "Error running gcc ${CC_BIN}: ${CMD_RESULT}") +# endif() +# file (SIZE "${OUTDIR}/${TEST_FILE_NAME}.machine.c.o" BINARY_SIZE) +# message("Size of compiled unit optimized for speed: ${BINARY_SIZE}") +# +# set(COMPILE_CMD_OBJ +# "-c" "${OUTDIR}/${TEST_FILE_NAME}.machine.c" +# "-o" "${OUTDIR}/${TEST_FILE_NAME}.machine.c.o" +# "-Os" "-ansi" "-m16") +# +# message(STATUS "${CC_BIN} ${COMPILE_CMD_OBJ}") +# execute_process( +# COMMAND time -p ${CC_BIN} ${COMPILE_CMD_OBJ} +# WORKING_DIRECTORY ${OUTDIR} RESULT_VARIABLE CMD_RESULT) +# if(CMD_RESULT) +# message(FATAL_ERROR "Error running gcc ${CC_BIN}: ${CMD_RESULT}") +# endif() +# file (SIZE "${OUTDIR}/${TEST_FILE_NAME}.machine.c.o" BINARY_SIZE) +# message("Size of compiled unit optimized for size: ${BINARY_SIZE}") + +set(COMPILE_CMD_BIN + "-O0" + "-std=c++11" + "-Wl,-search_paths_first" + "-Wl,-headerpad_max_install_names" + "-o" "${OUTDIR}/${TEST_FILE_NAME}" + "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" + "-L${PROJECT_BINARY_DIR}/deps/xerces-c/lib" + "-luscxml" + "-lxerces-c" + "-include" "${OUTDIR}/${TEST_FILE_NAME}.machine.c" + "-I${PROJECT_SOURCE_DIR}/contrib/src" + "-I${PROJECT_SOURCE_DIR}/src" + "-I${PROJECT_BINARY_DIR}" + "-I${XercesC_INCLUDE_DIRS}" + "-I${URIPARSER_INCLUDE_DIR}" + "-I${LIBEVENT_INCLUDE_DIR}" + "-Wl,-rpath,${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" + "-DAUTOINCLUDE_TEST=ON" + "${SCAFFOLDING_FOR_GENERATED_C}") + +message(STATUS "${CXX_BIN} ${COMPILE_CMD_BIN}") +execute_process( + COMMAND time -p ${CXX_BIN} ${COMPILE_CMD_BIN} + WORKING_DIRECTORY ${OUTDIR} RESULT_VARIABLE CMD_RESULT) +if (CMD_RESULT) + message(FATAL_ERROR "Error running g++ ${CXX_BIN}: ${CMD_RESULT}") +endif () +message(STATUS "time for transforming to binary") + +message(STATUS "${OUTDIR}/${TEST_FILE_NAME}") +execute_process( + COMMAND time -p ${OUTDIR}/${TEST_FILE_NAME} + WORKING_DIRECTORY ${OUTDIR} + RESULT_VARIABLE CMD_RESULT) +if (CMD_RESULT) + message(FATAL_ERROR "Error running generated c test: ${CMD_RESULT}") +endif () +message(STATUS "time for execution") + +# message(STATUS "${TEST_OUT}") +# file(WRITE ${OUTDIR}/${TEST_FILE_NAME}.pml.out ${TEST_OUT}) \ No newline at end of file diff --git a/test/ctest/scripts/test_generated_java.cmake b/test/ctest/scripts/test_generated_java.cmake new file mode 100644 index 0000000..81317ef --- /dev/null +++ b/test/ctest/scripts/test_generated_java.cmake @@ -0,0 +1,32 @@ +# see test/CMakeLists.txt for passed variables + +get_filename_component(TEST_FILE_NAME ${TESTFILE} NAME) +get_filename_component(TEST_FILE_NAME_WE ${TESTFILE} NAME_WE) +set(JAVA_PACKAGE_NAME "org.uscxml.gen") +set(JAVA_PACKAGE_PATH "org/uscxml/gen") + +execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTDIR}/${JAVA_PACKAGE_PATH}) + +# message(FATAL_ERROR "PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}") + +execute_process( + COMMAND time -p ${USCXML_TRANSFORM_BIN} -t${TARGETLANG} -i ${TESTFILE} -o ${OUTDIR}/${JAVA_PACKAGE_PATH}/TestStateChartBase.java -XpackageName=${JAVA_PACKAGE_NAME} -XjavaVersion=5 + RESULT_VARIABLE CMD_RESULT +) +if (CMD_RESULT) + message(FATAL_ERROR "Error running ${USCXML_TRANSFORM_BIN}: ${CMD_RESULT}") +endif () +message(STATUS "time for transforming to Java machine") + +execute_process(COMMAND + ${ANT_BIN} + -Dtest.file=${W3C_TEST} + -Dgenerated.dir=${OUTDIR} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/test/bindings/java + RESULT_VARIABLE CMD_RESULT + OUTPUT_VARIABLE CMD_OUTPUT +) + +if (CMD_RESULT) + message(FATAL_ERROR "Error running ${ANT_BIN} : ${CMD_RESULT} ${CMAKE_PROJECT_DIR}/test/bindings/java ${CMD_OUTPUT}") +endif () diff --git a/test/ctest/scripts/test_generated_vhdl.cmake b/test/ctest/scripts/test_generated_vhdl.cmake new file mode 100644 index 0000000..f621c2c --- /dev/null +++ b/test/ctest/scripts/test_generated_vhdl.cmake @@ -0,0 +1,48 @@ +# see test/CMakeLists.txt for passed variables + +get_filename_component(TEST_FILE_NAME ${TESTFILE} NAME) +execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTDIR}) + +if(NOT GHDL_BIN) + return() +endif() + +set(VHDL_TESTBENCH_NAME "tb") + +execute_process(COMMAND time -p ${USCXML_TRANSFORM_BIN} -t${TARGETLANG} -i ${TESTFILE} -o ${OUTDIR}/${TEST_FILE_NAME}.machine.vhdl RESULT_VARIABLE CMD_RESULT) +if (CMD_RESULT) + message(FATAL_ERROR "Error running ${USCXML_TRANSFORM_BIN}: ${CMD_RESULT}") +endif () +message(STATUS "time for transforming to VHDL machine") + +message(STATUS "GHDL cleaning directory") +execute_process( + COMMAND time -p ${GHDL_BIN} --clean + WORKING_DIRECTORY ${OUTDIR} RESULT_VARIABLE CMD_RESULT) + +message(STATUS "${GHDL_BIN} -a --std=08 ${OUTDIR}/${TEST_FILE_NAME}.machine.vhdl") +execute_process( + COMMAND time -p ${GHDL_BIN} -a --std=08 ${OUTDIR}/${TEST_FILE_NAME}.machine.vhdl + WORKING_DIRECTORY ${OUTDIR} RESULT_VARIABLE CMD_RESULT) +if (CMD_RESULT) + message(FATAL_ERROR "Error running ghdl ${GHDL_BIN}: ${CMD_RESULT}") +endif () +message(STATUS "time for syntax check") + +message(STATUS "${GHDL_BIN} -e --std=08 ${VHDL_TESTBENCH_NAME}") +execute_process( + COMMAND time -p ${GHDL_BIN} -e --std=08 ${VHDL_TESTBENCH_NAME} + WORKING_DIRECTORY ${OUTDIR} RESULT_VARIABLE CMD_RESULT) +if (CMD_RESULT) + message(FATAL_ERROR "Error running ghdl ${GHDL_BIN}: ${CMD_RESULT}") +endif () +message(STATUS "time for transforming to binary") + +message(STATUS "${GHDL_BIN} -r ${VHDL_TESTBENCH_NAME}") +execute_process( + COMMAND time -p ${GHDL_BIN} -r ${VHDL_TESTBENCH_NAME} + WORKING_DIRECTORY ${OUTDIR} RESULT_VARIABLE CMD_RESULT) +if (CMD_RESULT) + message(FATAL_ERROR "Error running ghdl ${GHDL_BIN}: ${CMD_RESULT}") +endif () +message(STATUS "time for transforming to binary") -- cgit v0.12