summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/uscxml/Interpreter.cpp2
-rw-r--r--src/uscxml/interpreter/BasicContentExecutor.cpp11
-rw-r--r--src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp4
-rw-r--r--test/issues/test-issue116.scxml8
-rw-r--r--test/issues/test-issue121.scxml13
-rw-r--r--test/issues/test-issue127.scxml29
6 files changed, 56 insertions, 11 deletions
diff --git a/src/uscxml/Interpreter.cpp b/src/uscxml/Interpreter.cpp
index c29c2ec..9390ca4 100644
--- a/src/uscxml/Interpreter.cpp
+++ b/src/uscxml/Interpreter.cpp
@@ -258,7 +258,7 @@ std::list<InterpreterIssue> Interpreter::validate() {
static void printNodeSet(Logger& logger, const std::list<XERCESC_NS::DOMElement*> nodes) {
std::string seperator;
for (auto nIter = nodes.begin(); nIter != nodes.end(); nIter++) {
- LOG(logger, USCXML_VERBATIM) << seperator << (HAS_ATTR(*nIter, kXMLCharId) ? ATTR(*nIter, kXMLCharId) : DOMUtils::xPathForNode(*nIter)) << std::endl;
+ LOG(logger, USCXML_VERBATIM) << seperator << (HAS_ATTR(*nIter, kXMLCharId) ? ATTR(*nIter, kXMLCharId) : DOMUtils::xPathForNode(*nIter));
seperator = ", ";
}
}
diff --git a/src/uscxml/interpreter/BasicContentExecutor.cpp b/src/uscxml/interpreter/BasicContentExecutor.cpp
index 4443237..f3f5376 100644
--- a/src/uscxml/interpreter/BasicContentExecutor.cpp
+++ b/src/uscxml/interpreter/BasicContentExecutor.cpp
@@ -512,7 +512,7 @@ void BasicContentExecutor::raiseDoneEvent(XERCESC_NS::DOMElement* state, XERCESC
try {
// namelist
processNameLists(doneEvent.namelist, doneData);
- } catch (Event e) {
+ } catch (ErrorEvent e) {
ERROR_EXECUTION_RETHROW(e, "Syntax error in donedata element namelist", doneData);
}
@@ -520,7 +520,7 @@ void BasicContentExecutor::raiseDoneEvent(XERCESC_NS::DOMElement* state, XERCESC
try {
// params
processParams(doneEvent.params, doneData);
- } catch (Event e) {
+ } catch (ErrorEvent e) {
ERROR_EXECUTION_RETHROW(e, "Syntax error in donedata element param expr", doneData);
}
@@ -530,7 +530,7 @@ void BasicContentExecutor::raiseDoneEvent(XERCESC_NS::DOMElement* state, XERCESC
if (contents.size() > 0) {
doneEvent.data = elementAsData(contents.front());
}
- } catch (Event e) {
+ } catch (ErrorEvent e) {
ERROR_EXECUTION_RETHROW(e, "Syntax error in donedata element content", doneData);
}
@@ -542,7 +542,10 @@ void BasicContentExecutor::raiseDoneEvent(XERCESC_NS::DOMElement* state, XERCESC
_callbacks->enqueueInternal(e);
// std::cout << exc << std::endl;
// throw e;
- }
+ } catch (Event e) {
+ ERROR_EXECUTION_RETHROW(e, "Error in donedata element", doneData);
+ }
+
}
_callbacks->enqueueInternal(doneEvent);
diff --git a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp
index 048deb5..a764c82 100644
--- a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp
+++ b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp
@@ -409,6 +409,10 @@ void PromelaDataModel::setEvent(const Event& event) {
case PML_NAME: {
Data d = getVariable(node);
if (d.atom.size() != 0)
+ // fixes issue 127
+ if (isNumeric(d.atom.c_str(), 10)) {
+ return Data(d.atom, Data::VERBATIM);
+ }
return Data(d.asJSON(), Data::VERBATIM);
if (d.type == Data::INTERPRETED && d.atom[0] == '\'' && d.atom[d.atom.size() - 1] == '\'')
return Data(d.atom.substr(1, d.atom.size() - 2), Data::VERBATIM);
diff --git a/test/issues/test-issue116.scxml b/test/issues/test-issue116.scxml
index 8d1d2b8..b5e618e 100644
--- a/test/issues/test-issue116.scxml
+++ b/test/issues/test-issue116.scxml
@@ -9,9 +9,9 @@ end
</data>
</datamodel>
<state id="StateShape1">
- <transition cond="Var1==0" target="Pass"/>
- <transition cond="Var1==555" target="Fail"/>
+ <transition cond="Var1==0" target="pass"/>
+ <transition cond="Var1==555" target="fail"/>
</state>
- <final id="Pass"/>
- <final id="Fail"/>
+ <final id="pass"/>
+ <final id="fail"/>
</scxml> \ No newline at end of file
diff --git a/test/issues/test-issue121.scxml b/test/issues/test-issue121.scxml
index d5bf353..aa7fe15 100644
--- a/test/issues/test-issue121.scxml
+++ b/test/issues/test-issue121.scxml
@@ -1,9 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" initial="s0" version="1.0" datamodel="promela">
<datamodel>
- <data id="var1" type="int" />
+ <data id="var1" type="int" expr="0" />
</datamodel>
<state id="s0" initial="s01">
+ <onentry>
+ <send event="timeout" delay="1000"/>
+ </onentry>
+
+ <transition cond="var1 == 3" target="pass" />
+ <transition event="timeout" target="fail" />
+
<invoke src="test-issue121.child" type="http://www.w3.org/TR/scxml/" id="pOne">
<param name="p_id" type="int" expr="1" />
</invoke>
@@ -12,10 +19,12 @@
</invoke>
<state id="s01">
<transition event="Random_Event">
- <assign location="var1" expr="_event.data.var1"/>
+ <assign location="var1" expr="_event.data.var1 + var1"/>
<log label="var1 value" expr="var1"/>
</transition>
</state>
</state>
+ <final id="pass"/>
+ <final id="fail"/>
</scxml>
\ No newline at end of file
diff --git a/test/issues/test-issue127.scxml b/test/issues/test-issue127.scxml
new file mode 100644
index 0000000..e522f43
--- /dev/null
+++ b/test/issues/test-issue127.scxml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scxml xmlns="http://www.w3.org/2005/07/scxml" initial="s01" version="1.0" datamodel="promela">
+ <datamodel>
+ <data id="var1" type="int" expr="0"/>
+ <data id="var2" type="int" expr="2"/>
+ <data id="var3" type="int" expr="2"/>
+ </datamodel>
+ <state id="s01">
+ <onentry>
+ <assign location="var1" type="int" expr="var3"/> <!--on substituting expr = "var3 + 0 ". SCXML will pass-->
+ <log label="var1" expr="var1"/>
+ <assign location="var2" type="int" expr="var3 + 1"/>
+ <log label="var2" expr="var2"/>
+ </onentry>
+ <transition cond="var1 == 2" target="pass" />
+ <transition target="fail" />
+ </state>
+ <final id="pass">
+ <onentry>
+ <log label="result" expr="'pass'"/>
+ </onentry>
+ </final>
+ <final id="fail">
+ <onentry>
+ <log label="result" expr="'fail'"/>
+ </onentry>
+ </final>
+</scxml>
+ \ No newline at end of file