summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/uscxml-browser.cpp15
-rw-r--r--src/bindings/swig/wrapped/WrappedDataModel.h12
-rw-r--r--src/bindings/swig/wrapped/WrappedIOProcessor.cpp4
-rw-r--r--src/bindings/swig/wrapped/WrappedIOProcessor.h6
-rw-r--r--src/uscxml/interpreter/BasicContentExecutor.cpp29
-rw-r--r--src/uscxml/interpreter/BasicDelayedEventQueue.cpp18
-rw-r--r--src/uscxml/interpreter/ContentExecutorImpl.h3
-rw-r--r--src/uscxml/interpreter/InterpreterImpl.cpp47
-rw-r--r--src/uscxml/interpreter/InterpreterImpl.h10
-rw-r--r--src/uscxml/messages/Data.cpp4
-rw-r--r--src/uscxml/messages/Data.h35
-rw-r--r--src/uscxml/plugins/DataModel.cpp12
-rw-r--r--src/uscxml/plugins/DataModel.h10
-rw-r--r--src/uscxml/plugins/DataModelImpl.h19
-rw-r--r--src/uscxml/plugins/EventHandler.h3
-rw-r--r--src/uscxml/plugins/Factory.cpp15
-rw-r--r--src/uscxml/plugins/Factory.h3
-rw-r--r--src/uscxml/plugins/IOProcessorImpl.h23
-rw-r--r--src/uscxml/plugins/InvokerImpl.h2
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp31
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h10
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp46
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h10
-rw-r--r--src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp24
-rw-r--r--src/uscxml/plugins/datamodel/lua/LuaDataModel.h10
-rw-r--r--src/uscxml/plugins/datamodel/null/NULLDataModel.h14
-rw-r--r--src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp132
-rw-r--r--src/uscxml/plugins/datamodel/promela/PromelaDataModel.h10
-rw-r--r--src/uscxml/plugins/datamodel/promela/PromelaParser.h2
-rw-r--r--src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp10
-rw-r--r--src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp22
-rw-r--r--src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.cpp10
-rw-r--r--src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h4
-rw-r--r--src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.cpp40
-rw-r--r--src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h6
-rw-r--r--test/CMakeLists.txt12
-rw-r--r--test/ctest/CTestCustom.ctest.in92
-rw-r--r--test/ctest/scripts/run_header_compiles.cmake1
-rw-r--r--test/ctest/scripts/test_generated_java.cmake4
-rw-r--r--test/src/test-extensions.cpp8
-rw-r--r--test/src/test-gen-c.cpp78
-rwxr-xr-xtest/src/test-http-debugger.pl9
-rw-r--r--test/w3c/TESTS.md994
-rw-r--r--test/w3c/confLua.xsl2
-rwxr-xr-xtest/w3c/create-test-table.pl3
-rw-r--r--test/w3c/lua/test488.scxml2
46 files changed, 1223 insertions, 633 deletions
diff --git a/apps/uscxml-browser.cpp b/apps/uscxml-browser.cpp
index 8ab5524..e8d8305 100644
--- a/apps/uscxml-browser.cpp
+++ b/apps/uscxml-browser.cpp
@@ -21,13 +21,6 @@ int main(int argc, char** argv) {
InterpreterOptions options = InterpreterOptions::fromCmdLine(argc, argv);
- if (options.pluginPath.length() > 0) {
- Factory::setDefaultPluginPath(options.pluginPath);
- }
-
- if (options.verbose) {
- Factory::getInstance()->listComponents();
- }
if (!options) {
InterpreterOptions::printUsageAndExit(argv[0]);
}
@@ -49,6 +42,14 @@ int main(int argc, char** argv) {
}
HTTPServer::getInstance(options.httpPort, options.wsPort, sslConf);
+ if (options.pluginPath.length() > 0) {
+ Factory::setDefaultPluginPath(options.pluginPath);
+ }
+
+ if (options.verbose) {
+ Factory::getInstance()->listComponents();
+ }
+
// instantiate and configure interpreters
std::list<Interpreter> interpreters;
for(int i = 0; i < options.interpreters.size(); i++) {
diff --git a/src/bindings/swig/wrapped/WrappedDataModel.h b/src/bindings/swig/wrapped/WrappedDataModel.h
index 1fefcbe..de0c4a9 100644
--- a/src/bindings/swig/wrapped/WrappedDataModel.h
+++ b/src/bindings/swig/wrapped/WrappedDataModel.h
@@ -82,16 +82,16 @@ public:
return true;
}
- virtual void assign(const std::string& location, const Data& data) {}
- virtual void init(const std::string& location, const Data& data) {}
+ virtual void assign(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr) {}
+ virtual void init(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr) {}
virtual void addExtension(DataModelExtension* ext) {
}
- virtual std::string andExpressions(std::list<std::string>) {
- return "";
- }
-
protected:
DataModelCallbacks* callbacks;
};
diff --git a/src/bindings/swig/wrapped/WrappedIOProcessor.cpp b/src/bindings/swig/wrapped/WrappedIOProcessor.cpp
index 6c96840..741e88d 100644
--- a/src/bindings/swig/wrapped/WrappedIOProcessor.cpp
+++ b/src/bindings/swig/wrapped/WrappedIOProcessor.cpp
@@ -21,8 +21,8 @@
namespace uscxml {
-WrappedIOProcessor::WrappedIOProcessor(InterpreterImpl* interpreter) {
- _interpreter = interpreter;
+WrappedIOProcessor::WrappedIOProcessor(IOProcessorCallbacks* callbacks) {
+ _callbacks = callbacks;
}
WrappedIOProcessor::~WrappedIOProcessor() {}
diff --git a/src/bindings/swig/wrapped/WrappedIOProcessor.h b/src/bindings/swig/wrapped/WrappedIOProcessor.h
index f1820a4..98774b2 100644
--- a/src/bindings/swig/wrapped/WrappedIOProcessor.h
+++ b/src/bindings/swig/wrapped/WrappedIOProcessor.h
@@ -36,15 +36,15 @@ namespace uscxml {
class WrappedIOProcessor : public IOProcessorImpl {
public:
- WrappedIOProcessor(InterpreterImpl* interpreter);
+ WrappedIOProcessor(IOProcessorCallbacks* callbacks);
virtual ~WrappedIOProcessor();
virtual std::list<std::string> getNames() {
return std::list<std::string>();
};
- virtual std::shared_ptr<IOProcessorImpl> create(InterpreterImpl* interpreter) {
- std::shared_ptr<IOProcessorImpl> ioProc = std::shared_ptr<IOProcessorImpl>(new WrappedIOProcessor(interpreter));
+ virtual std::shared_ptr<IOProcessorImpl> create(IOProcessorCallbacks* callbacks) {
+ std::shared_ptr<IOProcessorImpl> ioProc = std::shared_ptr<IOProcessorImpl>(new WrappedIOProcessor(callbacks));
return ioProc;
}
diff --git a/src/uscxml/interpreter/BasicContentExecutor.cpp b/src/uscxml/interpreter/BasicContentExecutor.cpp
index bbd6bca..192e714 100644
--- a/src/uscxml/interpreter/BasicContentExecutor.cpp
+++ b/src/uscxml/interpreter/BasicContentExecutor.cpp
@@ -118,7 +118,7 @@ void BasicContentExecutor::processSend(XERCESC_NS::DOMElement* element) {
*/
sendEvent.sendid = ATTR(getParentState(element), "id") + "." + UUID::getUUID();
if (HAS_ATTR(element, "idlocation")) {
- _callbacks->assign(ATTR(element, "idlocation"), Data(sendEvent.sendid, Data::VERBATIM));
+ _callbacks->assign(ATTR(element, "idlocation"), Data(sendEvent.sendid, Data::VERBATIM), std::map<std::string, std::string>());
} else {
sendEvent.hideSendId = true;
}
@@ -242,7 +242,16 @@ void BasicContentExecutor::processIf(XERCESC_NS::DOMElement* content) {
void BasicContentExecutor::processAssign(XERCESC_NS::DOMElement* content) {
std::string location = ATTR(content, "location");
- _callbacks->assign(location, elementAsData(content));
+
+ std::map<std::string, std::string> additionalAttr;
+ auto xmlAttrs = content->getAttributes();
+ size_t nrAttrs = xmlAttrs->getLength();
+ for (size_t i = 0; i < nrAttrs; i++) {
+ auto attr = xmlAttrs->item(i);
+ additionalAttr[X(attr->getNodeName()).str()] = X(attr->getNodeValue()).str();
+ }
+
+ _callbacks->assign(location, elementAsData(content, true), additionalAttr);
}
void BasicContentExecutor::processForeach(XERCESC_NS::DOMElement* content) {
@@ -321,10 +330,10 @@ void BasicContentExecutor::process(XERCESC_NS::DOMElement* block, const X& xmlPr
for (std::list<std::string>::iterator nameIter = names.begin(); nameIter != names.end(); nameIter++) {
if (event.namelist.find(*nameIter) != event.namelist.end()) {
// scxml i/o proc keeps a dedicated namelist
- _callbacks->assign(*nameIter, event.namelist.at(*nameIter));
+ _callbacks->assign(*nameIter, event.namelist.at(*nameIter), std::map<std::string, std::string>());
} else if (event.data.compound.find(*nameIter) != event.data.compound.end()) {
// this is where it would end up with non scxml i/o processors
- _callbacks->assign(*nameIter, event.data.compound.at(*nameIter));
+ _callbacks->assign(*nameIter, event.data.compound.at(*nameIter), std::map<std::string, std::string>());
}
}
}
@@ -405,7 +414,7 @@ void BasicContentExecutor::invoke(XERCESC_NS::DOMElement* element) {
} else {
invokeEvent.invokeid = ATTR(getParentState(element), "id") + "." + UUID::getUUID();
if (HAS_ATTR(element, "idlocation")) {
- _callbacks->assign(ATTR(element, "idlocation"), Data(invokeEvent.invokeid, Data::VERBATIM));
+ _callbacks->assign(ATTR(element, "idlocation"), Data(invokeEvent.invokeid, Data::VERBATIM), std::map<std::string, std::string>());
}
}
@@ -684,12 +693,10 @@ Data BasicContentExecutor::elementAsData(XERCESC_NS::DOMElement* element, bool a
if (asExpression) // not actually used, but likely expected
return Data(contentSS.str(), Data::INTERPRETED);
- // test153
- try {
- Data d = _callbacks->getAsData(contentSS.str());
- if (!d.empty())
- return d;
- } catch(...) {}
+ // test153, we need to throw for test150 in promela
+ Data d = _callbacks->getAsData(contentSS.str());
+ if (!d.empty())
+ return d;
// never actually occurs with the w3c tests
return Data(spaceNormalize(contentSS.str()), Data::VERBATIM);
diff --git a/src/uscxml/interpreter/BasicDelayedEventQueue.cpp b/src/uscxml/interpreter/BasicDelayedEventQueue.cpp
index 3521dc6..74ab757 100644
--- a/src/uscxml/interpreter/BasicDelayedEventQueue.cpp
+++ b/src/uscxml/interpreter/BasicDelayedEventQueue.cpp
@@ -69,14 +69,22 @@ std::shared_ptr<DelayedEventQueueImpl> BasicDelayedEventQueue::create(DelayedEve
void BasicDelayedEventQueue::timerCallback(evutil_socket_t fd, short what, void *arg) {
struct callbackData *data = (struct callbackData*)arg;
- std::lock_guard<std::recursive_mutex> lock(data->eventQueue->_mutex);
+ {
+ std::lock_guard<std::recursive_mutex> lock(data->eventQueue->_mutex);
- if (data->eventQueue->_callbackData.find(data->eventUUID) == data->eventQueue->_callbackData.end())
- return;
+ if (data->eventQueue->_callbackData.find(data->eventUUID) == data->eventQueue->_callbackData.end())
+ return;
+
+ event_free(data->event);
+ }
- event_free(data->event);
+ // we cannot hold the mutex as this may trigger a delayed send
data->eventQueue->_callbacks->eventReady(data->userData, data->eventUUID);
- data->eventQueue->_callbackData.erase(data->eventUUID);
+
+ {
+ std::lock_guard<std::recursive_mutex> lock(data->eventQueue->_mutex);
+ data->eventQueue->_callbackData.erase(data->eventUUID);
+ }
}
void BasicDelayedEventQueue::enqueueDelayed(const Event& event, size_t delayMs, const std::string& eventUUID) {
diff --git a/src/uscxml/interpreter/ContentExecutorImpl.h b/src/uscxml/interpreter/ContentExecutorImpl.h
index 278cbb9..e8c89f9 100644
--- a/src/uscxml/interpreter/ContentExecutorImpl.h
+++ b/src/uscxml/interpreter/ContentExecutorImpl.h
@@ -28,6 +28,7 @@
#include <string>
#include <set>
+#include <map>
namespace XERCESC_NS {
class DOMDocument;
@@ -59,7 +60,7 @@ public:
virtual Data evalAsData(const std::string& expr) = 0;
virtual Data getAsData(const std::string& expr) = 0;
- virtual void assign(const std::string& location, const Data& data) = 0;
+ virtual void assign(const std::string& location, const Data& data, const std::map<std::string, std::string>& attrs) = 0;
virtual std::string getInvokeId() = 0;
diff --git a/src/uscxml/interpreter/InterpreterImpl.cpp b/src/uscxml/interpreter/InterpreterImpl.cpp
index 60ce29d..33a1169 100644
--- a/src/uscxml/interpreter/InterpreterImpl.cpp
+++ b/src/uscxml/interpreter/InterpreterImpl.cpp
@@ -388,18 +388,26 @@ void InterpreterImpl::init() {
void InterpreterImpl::initData(XERCESC_NS::DOMElement* root) {
std::string id = ATTR(root, "id");
Data d;
+
+ std::map<std::string, std::string> additionalAttr;
+ auto xmlAttrs = root->getAttributes();
+ size_t nrAttrs = xmlAttrs->getLength();
+ for (size_t i = 0; i < nrAttrs; i++) {
+ auto attr = xmlAttrs->item(i);
+ additionalAttr[X(attr->getNodeName()).str()] = X(attr->getNodeValue()).str();
+ }
+
try {
if (Event::getParam(_invokeReq.params, id, d)) {
- _dataModel.init(id, d);
+ _dataModel.init(id, d, additionalAttr);
} else if (_invokeReq.namelist.find(id) != _invokeReq.namelist.end()) {
- _dataModel.init(id, _invokeReq.namelist[id]);
+ _dataModel.init(id, _invokeReq.namelist[id], additionalAttr);
} else {
try {
- _dataModel.init(id, _execContent.elementAsData(root));
+ _dataModel.init(id, _execContent.elementAsData(root), additionalAttr);
} catch (ErrorEvent e) {
// test 453
- _dataModel.init(id, _execContent.elementAsData(root, true));
-
+ _dataModel.init(id, _execContent.elementAsData(root, true), additionalAttr);
}
}
} catch(ErrorEvent e) {
@@ -408,8 +416,8 @@ void InterpreterImpl::initData(XERCESC_NS::DOMElement* root) {
}
}
-void InterpreterImpl::assign(const std::string& location, const Data& data) {
- _dataModel.assign(location, data);
+void InterpreterImpl::assign(const std::string& location, const Data& data, const std::map<std::string, std::string>& attrs) {
+ _dataModel.assign(location, data, attrs);
}
bool InterpreterImpl::isMatched(const Event& event, const std::string& eventDesc) {
@@ -556,4 +564,29 @@ void InterpreterImpl::uninvoke(const std::string& invokeId) {
}
+void InterpreterImpl::enqueueAtInvoker(const std::string& invokeId, const Event& event) {
+ if (_invokers.find(invokeId) != _invokers.end()) {
+ std::lock_guard<std::recursive_mutex> lock(_instanceMutex);
+ try {
+ _invokers[invokeId].eventFromSCXML(event);
+ } catch (const std::exception &e) {
+ ERROR_COMMUNICATION_THROW("Exception caught while sending event to invoker '" + invokeId + "': " + e.what());
+ } catch(...) {
+ ERROR_COMMUNICATION_THROW("Exception caught while sending event to invoker '" + invokeId + "'");
+ }
+ } else {
+ ERROR_COMMUNICATION_THROW("Can not send to invoked component '" + invokeId + "', no such invokeId");
+ }
+
+}
+
+void InterpreterImpl::enqueueAtParent(const Event& event) {
+ if (_parentQueue) {
+ _parentQueue.enqueue(event);
+ } else {
+ ERROR_COMMUNICATION_THROW("Sending to parent invoker, but none is set");
+ }
+
+}
+
}
diff --git a/src/uscxml/interpreter/InterpreterImpl.h b/src/uscxml/interpreter/InterpreterImpl.h
index 2b12624..bd3898c 100644
--- a/src/uscxml/interpreter/InterpreterImpl.h
+++ b/src/uscxml/interpreter/InterpreterImpl.h
@@ -31,6 +31,7 @@
#include "uscxml/util/URL.h"
#include "uscxml/plugins/Factory.h"
#include "uscxml/plugins/DataModelImpl.h"
+#include "uscxml/plugins/IOProcessorImpl.h"
#include "uscxml/interpreter/MicroStepImpl.h"
#include "uscxml/interpreter/ContentExecutorImpl.h"
#include "uscxml/interpreter/EventQueue.h"
@@ -49,6 +50,7 @@ class InterpreterIssue;
class USCXML_API InterpreterImpl :
public MicroStepCallbacks,
public DataModelCallbacks,
+ public IOProcessorCallbacks,
public ContentExecutorCallbacks,
public DelayedEventQueueCallbacks,
public std::enable_shared_from_this<InterpreterImpl> {
@@ -187,7 +189,7 @@ public:
return _dataModel.getAsData(expr);
}
- virtual void assign(const std::string& location, const Data& data);
+ virtual void assign(const std::string& location, const Data& data, const std::map<std::string, std::string>& attrs);
virtual std::string getInvokeId() {
return _invokeId;
@@ -206,6 +208,12 @@ public:
}
/**
+ IOProcessorCallbacks
+ */
+ virtual void enqueueAtInvoker(const std::string& invokeId, const Event& event);
+ virtual void enqueueAtParent(const Event& event);
+
+ /**
DelayedEventQueueCallbacks
*/
diff --git a/src/uscxml/messages/Data.cpp b/src/uscxml/messages/Data.cpp
index 277b7d8..6c48c46 100644
--- a/src/uscxml/messages/Data.cpp
+++ b/src/uscxml/messages/Data.cpp
@@ -350,8 +350,8 @@ std::string Data::jsonEscape(const std::string& expr) {
os << "\\n";
} else if (expr[i] == '\r') {
os << "\\r";
- } else if (expr[i] == '\'') {
- os << "\\'";
+// } else if (expr[i] == '\'') {
+// os << "\\\'";
} else if (expr[i] == '\"') {
os << "\\\"";
} else if (expr[i] == '\\') {
diff --git a/src/uscxml/messages/Data.h b/src/uscxml/messages/Data.h
index 19134dd..b279696 100644
--- a/src/uscxml/messages/Data.h
+++ b/src/uscxml/messages/Data.h
@@ -23,6 +23,7 @@
#include <list>
#include <map>
#include <memory>
+#include <type_traits>
#include "uscxml/Common.h"
#include "uscxml/util/Convenience.h"
@@ -49,27 +50,27 @@ public:
Data() : node(NULL), type(INTERPRETED) {}
- Data(const char* data, size_t size, const std::string& mimeType, bool adopt = false);
+ explicit Data(const char* data, size_t size, const std::string& mimeType, bool adopt = false);
// convenience constructors
- Data(bool atom) : node(NULL), type(VERBATIM) {
- if (atom) {
- this->atom = "true";
- } else {
- this->atom = "false";
- }
- }
+// explicit Data(bool atom) : node(NULL), type(VERBATIM) {
+// if (atom) {
+// this->atom = "true";
+// } else {
+// this->atom = "false";
+// }
+// }
explicit Data(XERCESC_NS::DOMNode* node_) : node(node_) {}
- // template <typename T> Data(T value, Type type = INTERPRETED) : atom(toStr(value)), type(type) {}
- // we will have to drop this constructor as it interferes with operator Data() and requires C++11
- template <typename T>
- explicit Data(T value, typename std::enable_if<! std::is_base_of<Data, T>::value>::type* = nullptr)
- : node(NULL), atom(toStr(value)), type(VERBATIM) {}
+ explicit Data(const std::string& value) : node(NULL), atom(toStr(value)), type(VERBATIM) {}
+
+ template <typename T, typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
+ explicit Data(T value)
+ : node(NULL), atom(toStr(value)), type(INTERPRETED) {}
+
template <typename T>
- explicit Data(T value, Type type, typename std::enable_if<! std::is_base_of<Data, T>::value>::type* = nullptr)
- : node(NULL), atom(toStr(value)), type(type) {}
+ explicit Data(T value, Type type) : node(NULL), atom(toStr(value)), type(type) {}
~Data() {
}
@@ -170,11 +171,11 @@ public:
}
bool operator==(const Data &other) const {
- return (*this < other || other < *this);
+ return !(*this != other);
}
bool operator!=(const Data &other) const {
- return !(*this == other);
+ return (*this < other || other < *this);
}
operator std::string() const {
diff --git a/src/uscxml/plugins/DataModel.cpp b/src/uscxml/plugins/DataModel.cpp
index 96afd89..07fd4b4 100644
--- a/src/uscxml/plugins/DataModel.cpp
+++ b/src/uscxml/plugins/DataModel.cpp
@@ -57,12 +57,12 @@ void DataModel::setForeach(const std::string& item,
return _impl->setForeach(item, array, index, iteration);
}
-void DataModel::assign(const std::string& location, const Data& data) {
- return _impl->assign(location, data);
+void DataModel::assign(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
+ return _impl->assign(location, data, attr);
}
-void DataModel::init(const std::string& location, const Data& data) {
- return _impl->init(location, data);
+void DataModel::init(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
+ return _impl->init(location, data, attr);
}
bool DataModel::isDeclared(const std::string& expr) {
@@ -73,10 +73,6 @@ size_t DataModel::replaceExpressions(std::string& content) {
return _impl->replaceExpressions(content);
}
-std::string DataModel::andExpressions(std::list<std::string> expressions) {
- return _impl->andExpressions(expressions);
-}
-
void DataModel::addExtension(DataModelExtension* ext) {
return _impl->addExtension(ext);
}
diff --git a/src/uscxml/plugins/DataModel.h b/src/uscxml/plugins/DataModel.h
index 7716ad7..9185cc8 100644
--- a/src/uscxml/plugins/DataModel.h
+++ b/src/uscxml/plugins/DataModel.h
@@ -66,17 +66,19 @@ public:
uint32_t iteration);
/// @copydoc DataModelImpl::assign()
- virtual void assign(const std::string& location, const Data& data);
+ virtual void assign(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
/// @copydoc DataModelImpl::init()
- virtual void init(const std::string& location, const Data& data);
+ virtual void init(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
/// @copydoc DataModelImpl::isDeclared()
virtual bool isDeclared(const std::string& expr);
/// @copydoc DataModelImpl::replaceExpressions()
size_t replaceExpressions(std::string& content);
- /// @copydoc DataModelImpl::andExpressions()
- std::string andExpressions(std::list<std::string> expressions);
/// @copydoc DataModelImpl::addExtension()
virtual void addExtension(DataModelExtension* ext);
diff --git a/src/uscxml/plugins/DataModelImpl.h b/src/uscxml/plugins/DataModelImpl.h
index e93361d..b1fbd88 100644
--- a/src/uscxml/plugins/DataModelImpl.h
+++ b/src/uscxml/plugins/DataModelImpl.h
@@ -182,8 +182,11 @@ public:
\endverbatim
* @param location A variable or locatio to assign to.
* @param data The Data object with the respective data.
+ * @param attr Additional attributes of the XML assign element.
*/
- virtual void assign(const std::string& location, const Data& data) = 0;
+ virtual void assign(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>()) = 0;
/**
* Initialize a variable / location in the data-model with a given data object.
@@ -192,8 +195,11 @@ public:
*
* @param location A variable or locatio to assign to.
* @param data The Data object with the respective data.
+ * @param attr Additional attributes of the XML data element.
*/
- virtual void init(const std::string& location, const Data& data) = 0;
+ virtual void init(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>()) = 0;
/**
* Register an extension to get data into and out of the data-model.
@@ -201,15 +207,6 @@ public:
*/
virtual void addExtension(DataModelExtension* ext);
- /**
- * Concat the given terms into a conjunctive form.
- * @todo This is required to automatically transform a state-chart into a
- * state-machine. Actual transformation is still only available in legacy though.
- */
- virtual std::string andExpressions(std::list<std::string>) {
- return "";
- }
-
protected:
DataModelCallbacks* _callbacks;
};
diff --git a/src/uscxml/plugins/EventHandler.h b/src/uscxml/plugins/EventHandler.h
index 436f878..5122e9b 100644
--- a/src/uscxml/plugins/EventHandler.h
+++ b/src/uscxml/plugins/EventHandler.h
@@ -53,9 +53,6 @@ public:
* @return An object to be represented at `_x['name']`
*/
virtual Data getDataModelVariables() = 0;
-
-protected:
- InterpreterImpl* _interpreter;
};
/**
diff --git a/src/uscxml/plugins/Factory.cpp b/src/uscxml/plugins/Factory.cpp
index 443cb59..60e7a3e 100644
--- a/src/uscxml/plugins/Factory.cpp
+++ b/src/uscxml/plugins/Factory.cpp
@@ -106,7 +106,6 @@ void Factory::registerPlugins() {
}
#endif
-
#ifdef WITH_DM_ECMA_V8
{
V8DataModel* dataModel = new V8DataModel();
@@ -352,12 +351,12 @@ bool Factory::hasIOProcessor(const std::string& type) {
return false;
}
-std::shared_ptr<IOProcessorImpl> Factory::createIOProcessor(const std::string& type, InterpreterImpl* interpreter) {
+std::shared_ptr<IOProcessorImpl> Factory::createIOProcessor(const std::string& type, IOProcessorCallbacks* callbacks) {
// do we have this type ourself?
if (_ioProcessorAliases.find(type) != _ioProcessorAliases.end()) {
std::string canonicalName = _ioProcessorAliases[type];
if (_ioProcessors.find(canonicalName) != _ioProcessors.end()) {
- std::shared_ptr<IOProcessorImpl> ioProc = _ioProcessors[canonicalName]->create(interpreter);
+ std::shared_ptr<IOProcessorImpl> ioProc = _ioProcessors[canonicalName]->create(callbacks);
// ioProc->setInterpreter(interpreter);
return ioProc;
}
@@ -365,7 +364,7 @@ std::shared_ptr<IOProcessorImpl> Factory::createIOProcessor(const std::string& t
// lookup in parent factory
if (_parentFactory) {
- return _parentFactory->createIOProcessor(type, interpreter);
+ return _parentFactory->createIOProcessor(type, callbacks);
} else {
ERROR_EXECUTION_THROW("No IOProcessor named '" + type + "' known");
}
@@ -497,9 +496,9 @@ void IOProcessorImpl::eventToSCXML(Event& event,
event.origintype = type;
if (internal) {
- _interpreter->enqueueInternal(event);
+ _callbacks->enqueueInternal(event);
} else {
- _interpreter->enqueueExternal(event);
+ _callbacks->enqueueExternal(event);
}
}
@@ -517,9 +516,9 @@ void InvokerImpl::eventToSCXML(Event& event,
event.origintype = type;
if (internal) {
- _interpreter->enqueueInternal(event);
+ _callbacks->enqueueInternal(event);
} else {
- _interpreter->enqueueExternal(event);
+ _callbacks->enqueueExternal(event);
}
}
diff --git a/src/uscxml/plugins/Factory.h b/src/uscxml/plugins/Factory.h
index f80b581..9653107 100644
--- a/src/uscxml/plugins/Factory.h
+++ b/src/uscxml/plugins/Factory.h
@@ -25,6 +25,7 @@
#include "uscxml/plugins/ExecutableContent.h"
#include "uscxml/plugins/EventHandler.h"
#include "uscxml/plugins/IOProcessor.h"
+#include "uscxml/plugins/IOProcessorImpl.h"
#include "uscxml/plugins/Invoker.h"
#include "uscxml/plugins/DataModelImpl.h"
@@ -53,7 +54,7 @@ public:
void registerExecutableContent(ExecutableContentImpl* executableContent);
std::shared_ptr<DataModelImpl> createDataModel(const std::string& type, DataModelCallbacks* callbacks);
- std::shared_ptr<IOProcessorImpl> createIOProcessor(const std::string& type, InterpreterImpl* interpreter);
+ std::shared_ptr<IOProcessorImpl> createIOProcessor(const std::string& type, IOProcessorCallbacks* callbacks);
std::shared_ptr<InvokerImpl> createInvoker(const std::string& type, InterpreterImpl* interpreter);
std::shared_ptr<ExecutableContentImpl> createExecutableContent(const std::string& localName, const std::string& nameSpace, InterpreterImpl* interpreter);
diff --git a/src/uscxml/plugins/IOProcessorImpl.h b/src/uscxml/plugins/IOProcessorImpl.h
index bd28406..24d2631 100644
--- a/src/uscxml/plugins/IOProcessorImpl.h
+++ b/src/uscxml/plugins/IOProcessorImpl.h
@@ -23,13 +23,31 @@
#include "uscxml/Common.h"
#include "uscxml/plugins/EventHandler.h"
+#include "uscxml/interpreter/Logging.h"
#include "uscxml/messages/Event.h"
-#include "uscxml/interpreter/InterpreterImpl.h"
namespace uscxml {
/**
* @ingroup ioproc
+ * @ingroup callback
+ * Callbacks available for every IO processor.
+ */
+class USCXML_API IOProcessorCallbacks {
+public:
+ virtual ~IOProcessorCallbacks() {} ///< silence virtual destructor warning from swig
+ virtual const std::string& getName() = 0;
+ virtual const std::string& getSessionId() = 0;
+ virtual void enqueueInternal(const Event& event) = 0;
+ virtual void enqueueExternal(const Event& event) = 0;
+ virtual void enqueueAtInvoker(const std::string& invokeId, const Event& event) = 0;
+ virtual void enqueueAtParent(const Event& event) = 0;
+ virtual Logger getLogger() = 0;
+
+};
+
+/**
+ * @ingroup ioproc
* @ingroup abstract
* Abstract base class for IOProcessor%s implementations.
*/
@@ -41,7 +59,7 @@ public:
* @param interpreter The imlementation of the associated Interpreter
* @todo We will eventually introduce callbacks and prevent complete access to the interpreter.
*/
- virtual std::shared_ptr<IOProcessorImpl> create(InterpreterImpl* interpreter) = 0;
+ virtual std::shared_ptr<IOProcessorImpl> create(IOProcessorCallbacks* callbacks) = 0;
/**
* We received an event from the SCXML Interpreter we are associated with.
@@ -67,6 +85,7 @@ protected:
*/
void eventToSCXML(Event& event, const std::string& type, const std::string& origin, bool internal = false);
+ IOProcessorCallbacks* _callbacks;
};
}
diff --git a/src/uscxml/plugins/InvokerImpl.h b/src/uscxml/plugins/InvokerImpl.h
index e0446e1..e5f7366 100644
--- a/src/uscxml/plugins/InvokerImpl.h
+++ b/src/uscxml/plugins/InvokerImpl.h
@@ -115,7 +115,7 @@ protected:
XERCESC_NS::DOMElement* _finalize;
std::string _invokeId;
-
+ InterpreterImpl* _callbacks;
};
}
diff --git a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp
index 22e8ccc..bcde9c9 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp
+++ b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp
@@ -420,7 +420,12 @@ Data JSCDataModel::getAsData(const std::string& content) {
(trimmed[0] == '\'' && trimmed[trimmed.length() - 1] == '\''))) {
d = Data(trimmed.substr(1, trimmed.length() - 2), Data::VERBATIM);
} else {
- d = Data(trimmed, Data::INTERPRETED);
+ // test558, test562
+ ERROR_EXECUTION(e, "Given content cannot be interpreted as data");
+ e.data.compound["literal"] = Data(trimmed, Data::VERBATIM);
+ throw e;
+
+// d = Data(trimmed, Data::INTERPRETED);
}
}
return d;
@@ -684,7 +689,7 @@ JSValueRef JSCDataModel::getNodeAsValue(const DOMNode* node) {
// }
}
-void JSCDataModel::assign(const std::string& location, const Data& data) {
+void JSCDataModel::assign(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
// flags on attribute are ignored?
if (location.compare("_sessionid") == 0) // test 322
@@ -714,7 +719,7 @@ void JSCDataModel::assign(const std::string& location, const Data& data) {
handleException(exception);
}
-void JSCDataModel::init(const std::string& location, const Data& data) {
+void JSCDataModel::init(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
try {
if (data.empty()) {
assign(location, Data("null", Data::INTERPRETED));
@@ -728,26 +733,6 @@ void JSCDataModel::init(const std::string& location, const Data& data) {
}
}
-std::string JSCDataModel::andExpressions(std::list<std::string> expressions) {
- if (expressions.size() == 0)
- return "";
-
- if (expressions.size() == 1)
- return *(expressions.begin());
-
- std::ostringstream exprSS;
- exprSS << "(";
- std::string conjunction = "";
- for (std::list<std::string>::const_iterator exprIter = expressions.begin();
- exprIter != expressions.end();
- exprIter++) {
- exprSS << conjunction << "(" << *exprIter << ")";
- conjunction = " && ";
- }
- exprSS << ")";
- return exprSS.str();
-}
-
void JSCDataModel::handleException(JSValueRef exception) {
JSStringRef exceptionStringRef = JSValueToStringCopy(_ctx, exception, NULL);
size_t maxSize = JSStringGetMaximumUTF8CStringSize(exceptionStringRef);
diff --git a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h
index c5129a4..3a53da2 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h
+++ b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h
@@ -80,10 +80,12 @@ public:
virtual bool isDeclared(const std::string& expr);
- virtual void assign(const std::string& location, const Data& data);
- virtual void init(const std::string& location, const Data& data);
-
- virtual std::string andExpressions(std::list<std::string>);
+ virtual void assign(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
+ virtual void init(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
protected:
diff --git a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp
index 283372d..61eb815 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp
+++ b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp
@@ -408,7 +408,7 @@ void V8DataModel::setEvent(const Event& event) {
}
}
if (!data.empty()) {
-// std::cout << Data::toJSON(eventCopy.data);
+// std::cout << Data::toJSON(data);
eventObj->Set(v8::String::NewSymbol("data"), getDataAsValue(data)); // set data part of _event
} else {
// test 343 / test 488
@@ -436,7 +436,10 @@ Data V8DataModel::getAsData(const std::string& content) {
(trimmed[0] == '\'' && trimmed[trimmed.length() - 1] == '\''))) {
d = Data(trimmed.substr(1, trimmed.length() - 2), Data::VERBATIM);
} else {
- d = Data(trimmed, Data::INTERPRETED);
+ // test558, test562
+ ERROR_EXECUTION(e, "Given content cannot be interpreted as data");
+ e.data.compound["literal"] = Data(trimmed, Data::VERBATIM);
+ throw e;
}
}
return d;
@@ -631,12 +634,22 @@ void V8DataModel::jsIn(const v8::FunctionCallbackInfo<v8::Value>& info) {
}
bool V8DataModel::isValidSyntax(const std::string& expr) {
+ v8::Locker locker(_isolate);
+ v8::Isolate::Scope isoScope(_isolate);
+ v8::HandleScope scope(_isolate);
+
+ v8::Local<v8::Context> ctx = v8::Local<v8::Context>::New(_isolate, _context);
+ v8::Context::Scope contextScope(ctx); // segfaults at newinstance without!
+
v8::TryCatch tryCatch;
v8::Local<v8::String> source = v8::String::New(expr.c_str());
- v8::Local<v8::Script> script = v8::Script::Compile(source);
+ if (tryCatch.HasCaught() || source.IsEmpty()) {
+ return false;
+ }
- if (script.IsEmpty() || tryCatch.HasCaught()) {
+ v8::Local<v8::Script> script = v8::Script::Compile(source);
+ if (tryCatch.HasCaught() || script.IsEmpty()) {
return false;
}
@@ -726,7 +739,7 @@ bool V8DataModel::evalAsBool(const std::string& expr) {
}
-void V8DataModel::assign(const std::string& location, const Data& data) {
+void V8DataModel::assign(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
v8::Locker locker(_isolate);
v8::Isolate::Scope isoScope(_isolate);
@@ -754,8 +767,7 @@ void V8DataModel::assign(const std::string& location, const Data& data) {
}
}
-void V8DataModel::init(const std::string& location,
- const Data& data) {
+void V8DataModel::init(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
v8::Locker locker(_isolate);
v8::Isolate::Scope isoScope(_isolate);
v8::HandleScope scope(_isolate);
@@ -774,26 +786,6 @@ void V8DataModel::init(const std::string& location,
}
}
-std::string V8DataModel::andExpressions(std::list<std::string> expressions) {
- if (expressions.size() == 0)
- return "";
-
- if (expressions.size() == 1)
- return *(expressions.begin());
-
- std::ostringstream exprSS;
- exprSS << "(";
- std::string conjunction = "";
- for (std::list<std::string>::const_iterator exprIter = expressions.begin();
- exprIter != expressions.end();
- exprIter++) {
- exprSS << conjunction << "(" << *exprIter << ")";
- conjunction = " && ";
- }
- exprSS << ")";
- return exprSS.str();
-}
-
v8::Local<v8::Value> V8DataModel::evalAsValue(const std::string& expr, bool dontThrow) {
// v8::Locker locker(_isolate);
diff --git a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h
index 3b4d776..a9dbca1 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h
+++ b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h
@@ -73,10 +73,12 @@ public:
virtual bool isDeclared(const std::string& expr);
- virtual void assign(const std::string& location, const Data& data);
- virtual void init(const std::string& location, const Data& data);
-
- virtual std::string andExpressions(std::list<std::string>);
+ virtual void assign(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
+ virtual void init(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
protected:
diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
index 2ad89b5..ad35f80 100644
--- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
+++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp
@@ -349,9 +349,12 @@ Data LuaDataModel::evalAsData(const std::string& content) {
throw originalError; // we will assume syntax error and throw
}
- if (retVals == 0)
+#if 1
+ // Note: Empty result is not an error test302, but how to do test488?
+ if (retVals == 0 && !isValidSyntax(trimmedExpr)) {
throw originalError; // we will assume syntax error and throw
-
+ }
+#endif
try {
if (retVals == 1) {
@@ -446,7 +449,7 @@ bool LuaDataModel::isDeclared(const std::string& expr) {
}
-void LuaDataModel::assign(const std::string& location, const Data& data) {
+void LuaDataModel::assign(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
if (location.length() == 0) {
ERROR_EXECUTION_THROW("Assign element has neither id nor location");
}
@@ -539,7 +542,7 @@ void LuaDataModel::assign(const std::string& location, const Data& data) {
}
}
-void LuaDataModel::init(const std::string& location, const Data& data) {
+void LuaDataModel::init(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
luabridge::setGlobal(_luaState, luabridge::Nil(), location.c_str());
assign(location, data);
}
@@ -582,17 +585,4 @@ Data LuaDataModel::getAsData(const std::string& content) {
return data;
}
-
-std::string LuaDataModel::andExpressions(std::list<std::string> exprs) {
- std::stringstream exprSS;
- std::list<std::string>::const_iterator listIter;
- std::string andExpr;
- for (listIter = exprs.begin(); listIter != exprs.end(); listIter++) {
- exprSS << andExpr << *listIter;
- andExpr = " && ";
- }
- return exprSS.str();
-}
-
-
}
diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.h b/src/uscxml/plugins/datamodel/lua/LuaDataModel.h
index 7b7121f..85d7b53 100644
--- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.h
+++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.h
@@ -77,10 +77,12 @@ public:
virtual bool isDeclared(const std::string& expr);
- virtual void assign(const std::string& location, const Data& data);
- virtual void init(const std::string& location, const Data& data);
-
- virtual std::string andExpressions(std::list<std::string>);
+ virtual void assign(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
+ virtual void init(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
protected:
diff --git a/src/uscxml/plugins/datamodel/null/NULLDataModel.h b/src/uscxml/plugins/datamodel/null/NULLDataModel.h
index 4bea664..fba8577 100644
--- a/src/uscxml/plugins/datamodel/null/NULLDataModel.h
+++ b/src/uscxml/plugins/datamodel/null/NULLDataModel.h
@@ -90,24 +90,14 @@ public:
return true;
}
- virtual void assign(const XERCESC_NS::DOMElement* assignElem,
- const XERCESC_NS::DOMNode* node,
- const std::string& content) {}
- virtual void assign(const std::string& location, const Data& data) {}
-
- virtual void init(const XERCESC_NS::DOMElement* dataElem,
- const XERCESC_NS::DOMNode* node,
- const std::string& content) {}
- virtual void init(const std::string& location, const Data& data) {}
+ virtual void assign(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {}
+ virtual void init(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {}
virtual void setCallbacks(DataModelCallbacks* callbacks) {
_callbacks = callbacks;
}
virtual void addExtension(DataModelExtension* ext) {}
- virtual std::string andExpressions(std::list<std::string>) {
- return "";
- }
protected:
diff --git a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp
index a524c7e..14d24c3 100644
--- a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp
+++ b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp
@@ -146,7 +146,7 @@ void PromelaDataModel::setEvent(const Event& event) {
start != end; start = event.params.upper_bound(start->first)) {
// only set first param key
if (isNumeric(start->second.atom.c_str(), 10)) {
- variable.compound["value"].compound["data"].compound[start->first] = strTo<int>(start->second.atom);
+ variable.compound["value"].compound["data"].compound[start->first] = Data(strTo<int>(start->second.atom));
} else {
variable.compound["value"].compound["data"].compound[start->first] = start->second;
}
@@ -154,7 +154,7 @@ void PromelaDataModel::setEvent(const Event& event) {
for (Event::namelist_t::const_iterator iter = event.namelist.begin(); iter != event.namelist.end(); iter++) {
if (isNumeric(iter->second.atom.c_str(), 10)) {
- variable.compound["value"].compound["data"].compound[iter->first] = strTo<int>(iter->second.atom);
+ variable.compound["value"].compound["data"].compound[iter->first] = Data(strTo<int>(iter->second.atom));
} else {
variable.compound["value"].compound["data"].compound[iter->first] = iter->second;
}
@@ -225,11 +225,25 @@ void PromelaDataModel::setEvent(const Event& event) {
PromelaParser arrayParser(ss.str(), 1, PromelaParser::PROMELA_EXPR);
- setVariable(itemParser.ast, getVariable(arrayParser.ast));
+ try {
+ setVariable(itemParser.ast, getVariable(arrayParser.ast));
+ } catch (ErrorEvent e) {
+ // test150
+ PromelaParser itemDeclParser("int " + item); // this is likely the wrong type
+ evaluateDecl(itemDeclParser.ast);
+ setVariable(itemParser.ast, getVariable(arrayParser.ast));
+ }
if (index.length() > 0) {
PromelaParser indexParser(index, 1, PromelaParser::PROMELA_EXPR);
- setVariable(indexParser.ast, iteration);
+ try {
+ setVariable(indexParser.ast, Data(iteration));
+ } catch (ErrorEvent e) {
+ // test150
+ PromelaParser indexDeclParser("int " + index);
+ evaluateDecl(indexDeclParser.ast);
+ setVariable(indexParser.ast, Data(iteration));
+ }
}
}
@@ -322,7 +336,7 @@ void PromelaDataModel::setEvent(const Event& event) {
PromelaParserNode* name = *opIterAsgn++;
int size = dataToInt(evaluateExpr(*opIterAsgn++));
- variable.compound["size"] = size;
+ variable.compound["size"] = Data(size);
for (size_t i = 0; i < size; i++) {
variable.compound["value"].array.push_back(Data(0, Data::INTERPRETED));
}
@@ -385,7 +399,7 @@ void PromelaDataModel::setEvent(const Event& event) {
return Data(false);
if (iequals(node->value, "true"))
return Data(true);
- return strTo<int>(node->value);
+ return Data(strTo<int>(node->value));
case PML_NAME:
case PML_VAR_ARRAY:
case PML_CMPND:
@@ -396,13 +410,13 @@ void PromelaDataModel::setEvent(const Event& event) {
// return Data(node->value, Data::INTERPRETED);
}
case PML_PLUS:
- return dataToInt(evaluateExpr(*opIter++)) + dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) + dataToInt(evaluateExpr(*opIter++)));
case PML_MINUS:
- return dataToInt(evaluateExpr(*opIter++)) - dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) - dataToInt(evaluateExpr(*opIter++)));
case PML_DIVIDE:
- return dataToInt(evaluateExpr(*opIter++)) / dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) / dataToInt(evaluateExpr(*opIter++)));
case PML_MODULO:
- return dataToInt(evaluateExpr(*opIter++)) % dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) % dataToInt(evaluateExpr(*opIter++)));
case PML_EQ: {
PromelaParserNode* lhs = *opIter++;
PromelaParserNode* rhs = *opIter++;
@@ -418,24 +432,24 @@ void PromelaDataModel::setEvent(const Event& event) {
|| (left.type == Data::VERBATIM && right.type == Data::VERBATIM)) {
return (left.atom.compare(right.atom) == 0 ? Data(true) : Data(false));
}
- return dataToInt(left) == dataToInt(right);
+ return Data(dataToInt(left) == dataToInt(right));
}
case PML_NEG:
- return !dataToBool(evaluateExpr(*opIter++));
+ return Data(!dataToBool(evaluateExpr(*opIter++)));
case PML_LT:
- return dataToInt(evaluateExpr(*opIter++)) < dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) < dataToInt(evaluateExpr(*opIter++)));
case PML_LE:
- return dataToInt(evaluateExpr(*opIter++)) <= dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) <= dataToInt(evaluateExpr(*opIter++)));
case PML_GT:
- return dataToInt(evaluateExpr(*opIter++)) > dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) > dataToInt(evaluateExpr(*opIter++)));
case PML_GE:
- return dataToInt(evaluateExpr(*opIter++)) >= dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) >= dataToInt(evaluateExpr(*opIter++)));
case PML_TIMES:
- return dataToInt(evaluateExpr(*opIter++)) * dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) * dataToInt(evaluateExpr(*opIter++)));
case PML_LSHIFT:
- return dataToInt(evaluateExpr(*opIter++)) << dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) << dataToInt(evaluateExpr(*opIter++)));
case PML_RSHIFT:
- return dataToInt(evaluateExpr(*opIter++)) >> dataToInt(evaluateExpr(*opIter++));
+ return Data(dataToInt(evaluateExpr(*opIter++)) >> dataToInt(evaluateExpr(*opIter++)));
case PML_AND:
case PML_OR: {
PromelaParserNode* lhs = *opIter++;
@@ -452,15 +466,15 @@ void PromelaDataModel::setEvent(const Event& event) {
bool truthRight = dataToBool(right);
if (node->type == PML_AND) {
- return truthLeft && truthRight;
+ return Data(truthLeft && truthRight);
} else {
- return truthLeft || truthRight;
+ return Data(truthLeft || truthRight);
}
}
default:
ERROR_EXECUTION_THROW("Support for " + PromelaParserNode::typeToDesc(node->type) + " expressions not implemented");
}
- return 0;
+ return Data(0, Data::INTERPRETED);
}
void PromelaDataModel::evaluateStmnt(void* ast) {
@@ -481,12 +495,12 @@ void PromelaDataModel::setEvent(const Event& event) {
}
case PML_INCR: {
PromelaParserNode* name = *opIter++;
- setVariable(name, strTo<long>(getVariable(name)) + 1);
+ setVariable(name, Data(strTo<long>(getVariable(name)) + 1));
break;
}
case PML_DECR: {
PromelaParserNode* name = *opIter++;
- setVariable(name, strTo<long>(getVariable(name)) - 1);
+ setVariable(name, Data(strTo<long>(getVariable(name)) - 1));
break;
}
default:
@@ -503,11 +517,6 @@ void PromelaDataModel::setEvent(const Event& event) {
ERROR_EXECUTION_THROW("Cannot assign to " + node->value);
}
-// if (_variables.compound.find(name->value) == _variables.compound.end()) {
-// // declare implicitly / convenience
-// evaluateDecl(ast);
-// }
-
switch (node->type) {
case PML_VAR_ARRAY: {
std::list<PromelaParserNode*>::iterator opIter = node->operands.begin();
@@ -515,6 +524,10 @@ void PromelaDataModel::setEvent(const Event& event) {
PromelaParserNode* name = *opIter++;
PromelaParserNode* expr = *opIter++;
+ if (!_variables.hasKey(name->value)) {
+ ERROR_EXECUTION_THROW("Variable " + name->value + " is undeclared");
+ }
+
// is the location an array?
if (!_variables[name->value].hasKey("size")) {
ERROR_EXECUTION_THROW("Variable " + name->value + " is no array");
@@ -532,6 +545,10 @@ void PromelaDataModel::setEvent(const Event& event) {
}
case PML_NAME: {
// location is an array, but no array was passed
+ if (!_variables.hasKey(node->value)) {
+ ERROR_EXECUTION_THROW("Variable " + node->value + " is undeclared");
+ }
+
if (_variables[node->value].hasKey("size")) {
if (value.compound.size() > 0 || value.atom.size() > 0)
ERROR_EXECUTION_THROW("Variable " + node->value + " is an array");
@@ -547,6 +564,10 @@ void PromelaDataModel::setEvent(const Event& event) {
std::list<PromelaParserNode*>::iterator opIter = node->operands.begin();
PromelaParserNode* name = *opIter++;
+ if (!_variables.hasKey(name->value)) {
+ ERROR_EXECUTION_THROW("Variable " + name->value + " is undeclared");
+ }
+
// location is no array
if (_variables[name->value].hasKey("size")) {
ERROR_EXECUTION_THROW("Variable " + name->value + " is an array");
@@ -657,38 +678,43 @@ void PromelaDataModel::setEvent(const Event& event) {
default:
ERROR_EXECUTION_THROW("Retrieving value of " + PromelaParserNode::typeToDesc(node->type) + " variable not implemented");
}
- return 0;
+ return Data(0, Data::INTERPRETED);
}
- std::string PromelaDataModel::andExpressions(std::list<std::string> expressions) {
+ void PromelaDataModel::assign(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
+ PromelaParser parser(location);
+ if (data.atom.size() > 0 && data.type == Data::INTERPRETED) {
+ setVariable(parser.ast, evalAsData(data.atom));
+ } else {
+ setVariable(parser.ast, data);
+ }
+ }
- if (expressions.size() == 0)
- return "";
+ void PromelaDataModel::init(const std::string& location, const Data& data, const std::map<std::string, std::string>& attr) {
+ {
+ std::string type = (attr.find("type") != attr.end() ? attr.at("type") : "auto");
+ std::string arrSize;
- if (expressions.size() == 1)
- return *(expressions.begin());
+ size_t bracketPos = type.find("[");
+ if (bracketPos != std::string::npos) {
+ arrSize = type.substr(bracketPos, type.length() - bracketPos);
+ type = type.substr(0, bracketPos);
+ }
- std::ostringstream exprSS;
- exprSS << "(";
- std::string conjunction = "";
- for (std::list<std::string>::const_iterator exprIter = expressions.begin();
- exprIter != expressions.end();
- exprIter++) {
- exprSS << conjunction << "(" << *exprIter << ")";
- conjunction = " && ";
+ std::string expr = type + " " + location + arrSize;
+ PromelaParser parser(expr, 1, PromelaParser::PROMELA_DECL);
+ evaluateDecl(parser.ast);
}
- exprSS << ")";
- return exprSS.str();
- }
- void PromelaDataModel::assign(const std::string& location, const Data& data) {
- // used for e.g. to assign command line parameters and idlocation
PromelaParser parser(location);
- setVariable(parser.ast, data);
- }
-
- void PromelaDataModel::init(const std::string& location, const Data& data) {
- assign(location, data);
+ if (data.atom.size() > 0 && data.type == Data::INTERPRETED) {
+ Data d = Data::fromJSON(data);
+ if (!d.empty())
+ setVariable(parser.ast, Data::fromJSON(data));
+ setVariable(parser.ast, data);
+ } else {
+ setVariable(parser.ast, data);
+ }
}
bool PromelaDataModel::isDeclared(const std::string& expr) {
diff --git a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h
index 2c1f58d..4a763ac 100644
--- a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h
+++ b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h
@@ -60,10 +60,12 @@ public:
virtual bool isDeclared(const std::string& expr);
- virtual void assign(const std::string& location, const Data& data);
- virtual void init(const std::string& location, const Data& data);
-
- virtual std::string andExpressions(std::list<std::string>);
+ virtual void assign(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
+ virtual void init(const std::string& location,
+ const Data& data,
+ const std::map<std::string, std::string>& attr = std::map<std::string, std::string>());
protected:
diff --git a/src/uscxml/plugins/datamodel/promela/PromelaParser.h b/src/uscxml/plugins/datamodel/promela/PromelaParser.h
index 51a2111..236233d 100644
--- a/src/uscxml/plugins/datamodel/promela/PromelaParser.h
+++ b/src/uscxml/plugins/datamodel/promela/PromelaParser.h
@@ -83,7 +83,7 @@ public:
PromelaParserNode* ast;
Type type;
- Event pendingException;
+ ErrorEvent pendingException;
operator bool() const {
return ast != NULL;
}
diff --git a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp
index d6d0f99..b5d7e8b 100644
--- a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp
+++ b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp
@@ -65,7 +65,7 @@ DirMonInvoker::~DirMonInvoker() {
std::shared_ptr<InvokerImpl> DirMonInvoker::create(InterpreterImpl* interpreter) {
std::shared_ptr<DirMonInvoker> invoker(new DirMonInvoker());
- invoker->_interpreter = interpreter;
+ invoker->_callbacks = interpreter;
return invoker;
}
@@ -99,7 +99,7 @@ void DirMonInvoker::eventFromSCXML(const Event& event) {
void DirMonInvoker::invoke(const std::string& source, const Event& req) {
if (req.params.find("dir") == req.params.end()) {
- LOG(_interpreter->getLogger(), USCXML_ERROR) << "No dir param given";
+ LOG(_callbacks->getLogger(), USCXML_ERROR) << "No dir param given";
return;
}
@@ -134,10 +134,10 @@ void DirMonInvoker::invoke(const std::string& source, const Event& req) {
std::multimap<std::string, Data>::const_iterator dirIter = req.params.find("dir");
while(dirIter != req.params.upper_bound("dir")) {
// this is simplified - Data might be more elaborate than a simple string atom
- URL url = URL::resolve(dirIter->second.atom, _interpreter->getBaseURL());
+ URL url = URL::resolve(dirIter->second.atom, _callbacks->getBaseURL());
if (!url.isAbsolute()) {
- LOG(_interpreter->getLogger(), USCXML_ERROR) << "Given directory '" << dirIter->second << "' cannot be transformed to absolute path";
+ LOG(_callbacks->getLogger(), USCXML_ERROR) << "Given directory '" << dirIter->second << "' cannot be transformed to absolute path";
} else {
_dir = url.path();
}
@@ -145,7 +145,7 @@ void DirMonInvoker::invoke(const std::string& source, const Event& req) {
}
_watcher = new DirectoryWatch(_dir, _recurse);
- _watcher->setLogger(_interpreter->getLogger());
+ _watcher->setLogger(_callbacks->getLogger());
_watcher->addMonitor(this);
_watcher->updateEntries(true);
diff --git a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp
index 0f7cc24..9ac8621 100644
--- a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp
+++ b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp
@@ -134,7 +134,7 @@ void USCXMLInvoker::run(void* instance) {
e.eventType = Event::PLATFORM;
e.invokeid = INSTANCE->_invokedInterpreter.getImpl()->getInvokeId();
e.name = "done.invoke." + e.invokeid;
- INSTANCE->_interpreter->enqueueExternal(e);
+ INSTANCE->_callbacks->enqueueExternal(e);
}
INSTANCE->_isActive = false;
@@ -142,7 +142,7 @@ void USCXMLInvoker::run(void* instance) {
std::shared_ptr<InvokerImpl> USCXMLInvoker::create(InterpreterImpl* interpreter) {
std::shared_ptr<USCXMLInvoker> invoker(new USCXMLInvoker());
- invoker->_interpreter = interpreter;
+ invoker->_callbacks = interpreter;
return invoker;
}
@@ -163,10 +163,10 @@ void USCXMLInvoker::invoke(const std::string& source, const Event& invokeEvent)
document->appendChild(newNode);
// TODO: where do we get the namespace from?
- _invokedInterpreter = Interpreter::fromDocument(document, _interpreter->getBaseURL(), false);
+ _invokedInterpreter = Interpreter::fromDocument(document, _callbacks->getBaseURL(), false);
} else if (invokeEvent.data.atom.size() > 0) {
// test530 when deserializing
- _invokedInterpreter = Interpreter::fromXML(invokeEvent.data.atom, _interpreter->getBaseURL());
+ _invokedInterpreter = Interpreter::fromXML(invokeEvent.data.atom, _callbacks->getBaseURL());
} else {
_isActive = false;
@@ -181,17 +181,17 @@ void USCXMLInvoker::invoke(const std::string& source, const Event& invokeEvent)
// create new instances from the parent's ActionLanguage
#if 1
InterpreterImpl* invoked = _invokedInterpreter.getImpl().get();
- invoked->_execContent = _interpreter->_execContent.getImpl()->create(invoked);
- invoked->_delayQueue = _interpreter->_delayQueue.getImplDelayed()->create(invoked);
- invoked->_internalQueue = _interpreter->_internalQueue.getImplBase()->create();
- invoked->_externalQueue = _interpreter->_externalQueue.getImplBase()->create();
- invoked->_microStepper = _interpreter->_microStepper.getImpl()->create(invoked);
+ invoked->_execContent = _callbacks->_execContent.getImpl()->create(invoked);
+ invoked->_delayQueue = _callbacks->_delayQueue.getImplDelayed()->create(invoked);
+ invoked->_internalQueue = _callbacks->_internalQueue.getImplBase()->create();
+ invoked->_externalQueue = _callbacks->_externalQueue.getImplBase()->create();
+ invoked->_microStepper = _callbacks->_microStepper.getImpl()->create(invoked);
// TODO: setup invokers dom, check datamodel attribute and create new instance from parent if matching?
#endif
// copy monitors
- std::set<InterpreterMonitor*>::const_iterator monIter = _interpreter->_monitors.begin();
- while(monIter != _interpreter->_monitors.end()) {
+ std::set<InterpreterMonitor*>::const_iterator monIter = _callbacks->_monitors.begin();
+ while(monIter != _callbacks->_monitors.end()) {
if ((*monIter)->copyToInvokers()) {
_invokedInterpreter.getImpl()->_monitors.insert(*monIter);
}
diff --git a/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.cpp b/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.cpp
index d6993dc..cc0c9d4 100644
--- a/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.cpp
+++ b/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.cpp
@@ -72,16 +72,16 @@ BasicHTTPIOProcessor::~BasicHTTPIOProcessor() {
}
-std::shared_ptr<IOProcessorImpl> BasicHTTPIOProcessor::create(InterpreterImpl* interpreter) {
+std::shared_ptr<IOProcessorImpl> BasicHTTPIOProcessor::create(IOProcessorCallbacks* callbacks) {
std::shared_ptr<BasicHTTPIOProcessor> io(new BasicHTTPIOProcessor());
- io->_interpreter = interpreter;
+ io->_callbacks = callbacks;
// register at http server
- std::string path = interpreter->getName();
+ std::string path = callbacks->getName();
int i = 2;
while (!HTTPServer::registerServlet(path + "/basichttp", io.get())) {
std::stringstream ss;
- ss << interpreter->getName() << i++;
+ ss << callbacks->getName() << i++;
path = ss.str();
}
@@ -184,7 +184,7 @@ void BasicHTTPIOProcessor::eventFromSCXML(const std::string& target, const Event
// TODO: is this still needed with isValidTarget()?
if (target.length() == 0) {
- _interpreter->enqueueInternal(Event("error.communication", Event::PLATFORM));
+ _callbacks->enqueueInternal(Event("error.communication", Event::PLATFORM));
return;
}
diff --git a/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h b/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h
index b70ce8e..dec22fe 100644
--- a/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h
+++ b/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h
@@ -59,7 +59,7 @@ class USCXML_PLUGIN_API BasicHTTPIOProcessor : public IOProcessorImpl, public HT
public:
BasicHTTPIOProcessor();
virtual ~BasicHTTPIOProcessor();
- virtual std::shared_ptr<IOProcessorImpl> create(uscxml::InterpreterImpl* interpreter);
+ virtual std::shared_ptr<IOProcessorImpl> create(uscxml::IOProcessorCallbacks* callbacks);
virtual std::list<std::string> getNames() {
std::list<std::string> names;
@@ -102,4 +102,4 @@ PLUMA_INHERIT_PROVIDER(BasicHTTPIOProcessor, IOProcessorImpl);
}
-#endif /* end of include guard: BASICHTTPIOPROCESSOR_H_2CUY93KU */ \ No newline at end of file
+#endif /* end of include guard: BASICHTTPIOPROCESSOR_H_2CUY93KU */
diff --git a/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.cpp b/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.cpp
index c53915b..5a82860 100644
--- a/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.cpp
+++ b/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.cpp
@@ -41,16 +41,16 @@ SCXMLIOProcessor::~SCXMLIOProcessor() {
}
-std::shared_ptr<IOProcessorImpl> SCXMLIOProcessor::create(InterpreterImpl* interpreter) {
+std::shared_ptr<IOProcessorImpl> SCXMLIOProcessor::create(IOProcessorCallbacks* callbacks) {
std::shared_ptr<SCXMLIOProcessor> io(new SCXMLIOProcessor());
- io->_interpreter = interpreter;
+ io->_callbacks = callbacks;
return io;
}
Data SCXMLIOProcessor::getDataModelVariables() {
Data data;
- data.compound["location"] = Data("#_scxml_" + _interpreter->getSessionId(), Data::VERBATIM);
+ data.compound["location"] = Data("#_scxml_" + _callbacks->getSessionId(), Data::VERBATIM);
return data;
}
@@ -71,7 +71,7 @@ void SCXMLIOProcessor::eventFromSCXML(const std::string& target, const Event& ev
eventCopy.origintype = "http://www.w3.org/TR/scxml/#SCXMLEventProcessor";
// test 336
- eventCopy.origin = "#_scxml_" + _interpreter->getSessionId();
+ eventCopy.origin = "#_scxml_" + _callbacks->getSessionId();
if (false) {
} else if(target.length() == 0) {
@@ -85,14 +85,14 @@ void SCXMLIOProcessor::eventFromSCXML(const std::string& target, const Event& ev
// reqCopy.sendid = "";
// test 198
- _interpreter->enqueueExternal(eventCopy);
+ _callbacks->enqueueExternal(eventCopy);
} else if (iequals(target, "#_internal")) {
/**
* #_internal: If the target is the special term '#_internal', the Processor
* must add the event to the internal event queue of the sending session.
*/
- _interpreter->enqueueInternal(eventCopy);
+ _callbacks->enqueueInternal(eventCopy);
} else if (iequals(target, "#_parent")) {
/**
@@ -100,13 +100,7 @@ void SCXMLIOProcessor::eventFromSCXML(const std::string& target, const Event& ev
* add the event to the external event queue of the SCXML session that invoked
* the sending session, if there is one.
*/
-
- if (_interpreter->_parentQueue) {
- _interpreter->_parentQueue.enqueue(eventCopy);
- } else {
- ERROR_COMMUNICATION_THROW("Sending to parent invoker, but none is set");
- }
-
+ _callbacks->enqueueAtParent(eventCopy);
} else if (target.length() > 8 && iequals(target.substr(0, 8), "#_scxml_")) {
/**
* #_scxml_sessionid: If the target is the special term '#_scxml_sessionid',
@@ -117,7 +111,7 @@ void SCXMLIOProcessor::eventFromSCXML(const std::string& target, const Event& ev
*/
std::string sessionId = target.substr(8);
- std::lock_guard<std::recursive_mutex> lock(_interpreter->_instanceMutex);
+ std::lock_guard<std::recursive_mutex> lock(InterpreterImpl::_instanceMutex);
std::map<std::string, std::weak_ptr<InterpreterImpl> > instances = InterpreterImpl::getInstances();
if (instances.find(sessionId) != instances.end()) {
std::shared_ptr<InterpreterImpl> otherSession = instances[sessionId].lock();
@@ -138,21 +132,7 @@ void SCXMLIOProcessor::eventFromSCXML(const std::string& target, const Event& ev
* session.
*/
std::string invokeId = target.substr(2);
- if (_interpreter->_invokers.find(invokeId) != _interpreter->_invokers.end()) {
- std::lock_guard<std::recursive_mutex> lock(_interpreter->_instanceMutex);
- try {
- _interpreter->_invokers[invokeId].eventFromSCXML(eventCopy);
- } catch(Event e) {
- // Is this the right thing to do?
-// _interpreter->enqueueExternal(eventCopy);
- } catch (const std::exception &e) {
- ERROR_COMMUNICATION_THROW("Exception caught while sending event to invoker '" + invokeId + "': " + e.what());
- } catch(...) {
- ERROR_COMMUNICATION_THROW("Exception caught while sending event to invoker '" + invokeId + "'");
- }
- } else {
- ERROR_COMMUNICATION_THROW("Can not send to invoked component '" + invokeId + "', no such invokeId");
- }
+ _callbacks->enqueueAtInvoker(invokeId, eventCopy);
} else {
ERROR_COMMUNICATION_THROW("Not sure what to make of the target '" + target + "' - raising error");
}
@@ -160,4 +140,4 @@ void SCXMLIOProcessor::eventFromSCXML(const std::string& target, const Event& ev
-} \ No newline at end of file
+}
diff --git a/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h b/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h
index 21fd13a..6494873 100644
--- a/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h
+++ b/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h
@@ -32,7 +32,7 @@ class SCXMLIOProcessor : public IOProcessorImpl {
public:
SCXMLIOProcessor();
virtual ~SCXMLIOProcessor();
- virtual std::shared_ptr<IOProcessorImpl> create(uscxml::InterpreterImpl* interpreter);
+ virtual std::shared_ptr<IOProcessorImpl> create(uscxml::IOProcessorCallbacks* callbacks);
virtual std::list<std::string> getNames() {
std::list<std::string> names;
@@ -46,7 +46,7 @@ public:
Data getDataModelVariables();
protected:
- InterpreterImpl* _interpreter;
+ IOProcessorCallbacks* _callbacks;
};
#ifdef BUILD_AS_PLUGINS
@@ -55,4 +55,4 @@ PLUMA_INHERIT_PROVIDER(SCXMLIOProcessor, IOProcessorImpl);
}
-#endif /* end of include guard: SCXMLIOProcessor_H_2CUY93KU */ \ No newline at end of file
+#endif /* end of include guard: SCXMLIOProcessor_H_2CUY93KU */
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 658d93c..bc1c85a 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,4 +1,5 @@
set(TEST_TIMEOUT 30)
+set(CTEST_TEST_TIMEOUT 30)
set(TEST_BENCHMARK_ITERATIONS 1000)
find_program(SPIN_BIN spin)
@@ -37,6 +38,7 @@ function(USCXML_TEST_COMPILE)
if (NOT ${USCXML_TEST_BUILD_ONLY})
add_test(${USCXML_TEST_NAME} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${USCXML_TEST_NAME} ${USCXML_TEST_ARGS})
set_property(TEST ${USCXML_TEST_NAME} PROPERTY LABELS ${USCXML_TEST_LABEL})
+ set_property(TEST ${USCXML_TEST_NAME} PROPERTY TIMEOUT ${TEST_TIMEOUT})
endif ()
set_target_properties(${USCXML_TEST_NAME} PROPERTIES FOLDER "Tests")
endfunction()
@@ -47,7 +49,11 @@ USCXML_TEST_COMPILE(NAME test-url LABEL general/test-url FILES src/test-url.cpp)
USCXML_TEST_COMPILE(NAME test-lifecycle LABEL general/test-lifecycle FILES src/test-lifecycle.cpp)
USCXML_TEST_COMPILE(NAME test-validating LABEL general/test-validating FILES src/test-validating.cpp)
USCXML_TEST_COMPILE(NAME test-snippets LABEL general/test-snippets FILES src/test-snippets.cpp)
-USCXML_TEST_COMPILE(NAME test-serialization LABEL general/test-serialization FILES src/test-serialization.cpp ../contrib/src/uscxml/PausableDelayedEventQueue.cpp)
+USCXML_TEST_COMPILE(
+ NAME test-serialization
+ LABEL general/test-serialization
+ FILES src/test-serialization.cpp ../contrib/src/uscxml/PausableDelayedEventQueue.cpp
+ ARGS ${CMAKE_CURRENT_SOURCE_DIR}/w3c/ecma)
# USCXML_TEST_COMPILE(NAME test-c89-parser LABEL general/test-c89-parser FILES src/test-c89-parser.cpp)
# test-stress is not an automated test
@@ -156,7 +162,6 @@ if (NOT BUILD_MINIMAL)
# "xpath"
"null"
"lua"
- "c89"
"promela"
# generated c source
@@ -187,6 +192,9 @@ if (NOT BUILD_MINIMAL)
# "perf/gen/c/ecma"
# "perf/ecma"
)
+ if (WITH_DM_C89)
+ LIST(APPEND TEST_CLASSES c89)
+ endif()
# prepare directories for test classes and copy resources over
foreach (W3C_RESOURCE ${W3C_RESOURCES})
diff --git a/test/ctest/CTestCustom.ctest.in b/test/ctest/CTestCustom.ctest.in
index f63b925..8f30989 100644
--- a/test/ctest/CTestCustom.ctest.in
+++ b/test/ctest/CTestCustom.ctest.in
@@ -35,33 +35,6 @@ set(CTEST_CUSTOM_TESTS_IGNORE
"w3c/ecma/test436.scxml" # Tests NULL datamodel - PASSED
- ### Ignore for flattened ECMAScript datamodel
- "w3c/fsm/ecma/test178.scxml" # Manual - PASSED
- "w3c/fsm/ecma/test230.scxml" # Manual - PASSED
- "w3c/fsm/ecma/test250.scxml" # Manual - PASSED
- "w3c/fsm/ecma/test307.scxml" # Manual - PASSED
- "w3c/fsm/ecma/test313.scxml" # Manual - PASSED
- "w3c/fsm/ecma/test314.scxml" # Manual - PASSED
- "w3c/fsm/ecma/test415.scxml" # Manual - PASSED
- # "w3c/fsm/ecma/test513.txt" # Manual - PASSED
-
- "w3c/fsm/ecma/test301.scxml" # Invalid script URL - PASSED
- "w3c/fsm/ecma/test436.scxml" # Tests NULL datamodel - PASSED
-
- ### Ignore for flattened, minimized ECMAScript datamodel
- "w3c/fsm/minimized/ecma/test178.scxml" # Manual - PASSED
- "w3c/fsm/minimized/ecma/test230.scxml" # Manual - PASSED
- "w3c/fsm/minimized/ecma/test250.scxml" # Manual - PASSED
- "w3c/fsm/minimized/ecma/test307.scxml" # Manual - PASSED
- "w3c/fsm/minimized/ecma/test313.scxml" # Manual - PASSED
- "w3c/fsm/minimized/ecma/test314.scxml" # Manual - PASSED
- "w3c/fsm/minimized/ecma/test415.scxml" # Manual - PASSED
- # "w3c/fsm/minimized/ecma/test513.txt" # Manual - PASSED
-
- "w3c/fsm/minimized/ecma/test301.scxml" # Invalid script URL - PASSED
- "w3c/fsm/minimized/ecma/test436.scxml" # Tests NULL datamodel - PASSED
-
-
### Just ignore the XPath datamodel tests that hang, most of the rest fails as well
"w3c/xpath/test178.scxml" # Manual - PASSED
"w3c/xpath/test230.scxml" # Manual - PASSED
@@ -85,7 +58,6 @@ set(CTEST_CUSTOM_TESTS_IGNORE
"w3c/lua/test314.scxml" # Manual - PASSED
"w3c/lua/test415.scxml" # Manual - PASSED
# "w3c/lua/test513.txt" # Manual - PASSED
-
"w3c/lua/test301.scxml" # Invalid script URL - PASSED
"w3c/lua/test436.scxml" # Tests NULL datamodel - PASSED
@@ -97,8 +69,7 @@ set(CTEST_CUSTOM_TESTS_IGNORE
"w3c/prolog/test313.scxml" # Manual - PASSED
"w3c/prolog/test314.scxml" # Manual - PASSED
"w3c/prolog/test415.scxml" # Manual - PASSED
- # "w3c/lua/test513.txt" # Manual - PASSED
-
+ # "w3c/prolog/test513.txt" # Manual - PASSED
"w3c/prolog/test301.scxml" # Invalid script URL - PASSED
"w3c/prolog/test436.scxml" # Tests NULL datamodel - PASSED
@@ -119,16 +90,16 @@ set(CTEST_CUSTOM_TESTS_IGNORE
# "w3c/promela/test190.scxml" # string concatenation
- # "w3c/promela/test224.scxml" # string operation startWith
+ "w3c/promela/test224.scxml" # string operation startWith
# "w3c/promela/test280.scxml" # no runtime checks for undeclared variables
# "w3c/promela/test350.scxml" # string concatenation
- # "w3c/promela/test509.scxml" # string operation contains
- # "w3c/promela/test518.scxml" # string operation contains
- # "w3c/promela/test519.scxml" # string operation contains
- # "w3c/promela/test520.scxml" # string operation contains
+ "w3c/promela/test509.scxml" # string operation contains
+ "w3c/promela/test518.scxml" # string operation contains
+ "w3c/promela/test519.scxml" # string operation contains
+ "w3c/promela/test520.scxml" # string operation contains
# "w3c/promela/test525.scxml" # assumes unbound arrays
# "w3c/promela/test530.scxml" # assigns DOM node to variable
- # "w3c/promela/test534.scxml" # string operation contains
+ "w3c/promela/test534.scxml" # string operation contains
### Ignore for SPIN model checking
@@ -195,7 +166,7 @@ set(CTEST_CUSTOM_TESTS_IGNORE
"w3c/spin/promela/test553.scxml" # error in namelist
"w3c/spin/promela/test554.scxml" # evaluation of <invoke>'s args causes an error
"w3c/spin/promela/test577.scxml" # send without target for basichttp
-
+
### Ignore for generated C sources
@@ -203,6 +174,7 @@ set(CTEST_CUSTOM_TESTS_IGNORE
# we do not support io processors yet
"w3c/gen/c/ecma/test201.scxml" # basichttp
+ "w3c/gen/c/ecma/test453.scxml" # functions as first-class objects
"w3c/gen/c/ecma/test500.scxml" # _ioprocessors
"w3c/gen/c/ecma/test501.scxml" # _ioprocessors
"w3c/gen/c/ecma/test509.scxml" # _ioprocessors / basichttp
@@ -211,9 +183,11 @@ set(CTEST_CUSTOM_TESTS_IGNORE
"w3c/gen/c/ecma/test519.scxml" # _ioprocessors / basichttp
"w3c/gen/c/ecma/test520.scxml" # _ioprocessors / basichttp
"w3c/gen/c/ecma/test522.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/ecma/test528.scxml" # runtime type information
"w3c/gen/c/ecma/test531.scxml" # _ioprocessors / basichttp
"w3c/gen/c/ecma/test532.scxml" # _ioprocessors / basichttp
"w3c/gen/c/ecma/test534.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/ecma/test558.scxml" # content per url
"w3c/gen/c/ecma/test567.scxml" # _ioprocessors / basichttp
"w3c/gen/c/ecma/test569.scxml" # _ioprocessors
"w3c/gen/c/ecma/test577.scxml" # basichttp
@@ -230,6 +204,50 @@ set(CTEST_CUSTOM_TESTS_IGNORE
"w3c/gen/c/ecma/test561.scxml"
+ "w3c/gen/c/lua/test201.scxml" # basichttp
+ "w3c/gen/c/lua/test216.scxml" # invoke srcexpr
+ "w3c/gen/c/lua/test301.scxml" # failing is succeeding
+ "w3c/gen/c/lua/test453.scxml" # functions as first-class objects
+ "w3c/gen/c/lua/test500.scxml" # _ioprocessors
+ "w3c/gen/c/lua/test501.scxml" # _ioprocessors
+ "w3c/gen/c/lua/test509.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test510.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test518.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test519.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test520.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test522.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test528.scxml" # runtime type information
+ "w3c/gen/c/lua/test530.scxml" # DOM in data
+ "w3c/gen/c/lua/test531.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test532.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test534.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test558.scxml" # content per url
+ "w3c/gen/c/lua/test567.scxml" # _ioprocessors / basichttp
+ "w3c/gen/c/lua/test569.scxml" # _ioprocessors
+ "w3c/gen/c/lua/test577.scxml" # basichttp
+
+ # ignore for python bindings
+ "w3c/binding/python/ecma/test178.scxml"
+ "w3c/binding/python/ecma/test201.scxml"
+ "w3c/binding/python/ecma/test230.scxml"
+ "w3c/binding/python/ecma/test250.scxml"
+ "w3c/binding/python/ecma/test301.scxml"
+ "w3c/binding/python/ecma/test326.scxml"
+ "w3c/binding/python/ecma/test415.scxml"
+ "w3c/binding/python/ecma/test509.scxml"
+ "w3c/binding/python/ecma/test510.scxml"
+ "w3c/binding/python/ecma/test518.scxml"
+ "w3c/binding/python/ecma/test519.scxml"
+ "w3c/binding/python/ecma/test520.scxml"
+ "w3c/binding/python/ecma/test522.scxml"
+ "w3c/binding/python/ecma/test531.scxml"
+ "w3c/binding/python/ecma/test532.scxml"
+ "w3c/binding/python/ecma/test534.scxml"
+ "w3c/binding/python/ecma/test558.scxml"
+ "w3c/binding/python/ecma/test567.scxml"
+ "w3c/binding/python/ecma/test578.scxml"
+
+
### Ignore for delay with performance
# timeouts with benchmarking due to delayed events
diff --git a/test/ctest/scripts/run_header_compiles.cmake b/test/ctest/scripts/run_header_compiles.cmake
index 8bed4e1..3aac909 100644
--- a/test/ctest/scripts/run_header_compiles.cmake
+++ b/test/ctest/scripts/run_header_compiles.cmake
@@ -8,6 +8,7 @@ set(COMPILE_CMD_BIN
# "-I${PROJECT_BINARY_DIR}/deps/libevent/include"
# "-I${PROJECT_BINARY_DIR}/deps/uriparser/include"
# "-I${PROJECT_SOURCE_DIR}/contrib/src/evws"
+"-std=c++11"
"-I${CMAKE_BINARY_DIR}"
"-I${PROJECT_BINARY_DIR}"
"-I${PROJECT_SOURCE_DIR}/src"
diff --git a/test/ctest/scripts/test_generated_java.cmake b/test/ctest/scripts/test_generated_java.cmake
index 81317ef..31824b2 100644
--- a/test/ctest/scripts/test_generated_java.cmake
+++ b/test/ctest/scripts/test_generated_java.cmake
@@ -22,11 +22,11 @@ execute_process(COMMAND
${ANT_BIN}
-Dtest.file=${W3C_TEST}
-Dgenerated.dir=${OUTDIR}
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/test/bindings/java
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/contrib/java/bindings
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}")
+ message(FATAL_ERROR "Error running ${ANT_BIN} : ${CMD_RESULT} ${PROJECT_SOURCE_DIR}/contrib/java/bindings ${CMD_OUTPUT}")
endif ()
diff --git a/test/src/test-extensions.cpp b/test/src/test-extensions.cpp
index 7686f9f..da81f3b 100644
--- a/test/src/test-extensions.cpp
+++ b/test/src/test-extensions.cpp
@@ -75,10 +75,14 @@ bool testPausableEventQueue() {
interpreter.addMonitor(&mon);
size_t iterations = 10;
+ int now = time(NULL);
+ int startedAt = time(NULL);
InterpreterState state = InterpreterState::USCXML_UNDEF;
- while (state != USCXML_FINISHED) {
- state = interpreter.step();
+ while (state != USCXML_FINISHED && now - startedAt < 5) {
+ state = interpreter.step(200);
+ now = time(NULL);
+
if (nestedDelayQueue) {
/*
* As soon as we have the nested event queue instantiated, we pause and resume it
diff --git a/test/src/test-gen-c.cpp b/test/src/test-gen-c.cpp
index acf1246..3971845 100644
--- a/test/src/test-gen-c.cpp
+++ b/test/src/test-gen-c.cpp
@@ -17,16 +17,20 @@
#endif
#ifndef AUTOINCLUDE_TEST
-#include "test-c-machine.scxml.c"
-//#include "/Users/sradomski/Documents/TK/Code/uscxml/build/cli/test/gen/c/ecma/test329.scxml.machine.c"
+//#include "test-c-machine.scxml.c"
+//#include "/Users/sradomski/Documents/TK/Code/uscxml/build/cli/test/gen/c/ecma/test562.scxml.machine.c"
+//#include "/Users/sradomski/Documents/TK/Code/uscxml/build/cli/test/gen/c/ecma/test558.scxml.machine.c"
+#include "/Users/sradomski/Documents/TK/Code/uscxml/build/cli/test/gen/c/lua/test530.scxml.machine.c"
#endif
#include "uscxml/util/URL.h"
//#include "uscxml/concurrency/Timer.h"
//#include "uscxml/dom/DOMUtils.h"
#include "uscxml/plugins/Factory.h"
+#include "uscxml/plugins/IOProcessorImpl.h"
//#include "uscxml/Interpreter.h"
#include "uscxml/util/UUID.h"
+//#include "uscxml/server/HTTPServer.h"
#include "uscxml/interpreter/InterpreterImpl.h"
#include "uscxml/interpreter/BasicEventQueue.h"
@@ -40,7 +44,7 @@
using namespace uscxml;
-class StateMachine : public DataModelCallbacks, public DelayedEventQueueCallbacks {
+class StateMachine : public DataModelCallbacks, public IOProcessorCallbacks, public DelayedEventQueueCallbacks {
public:
StateMachine(const uscxml_machine* machine) : machine(machine), parentMachine(NULL), topMostMachine(NULL), invocation(NULL) {
allMachines[sessionId] = this;
@@ -70,6 +74,23 @@ public:
return ioProcs;
}
+ void enqueueInternal(const Event& event) {
+ iq.push_back(event);
+ }
+ void enqueueExternal(const Event& event) {
+ eq.push_back(event);
+ }
+
+ void enqueueAtInvoker(const std::string& invokeId, const Event& event) {
+ if (invokers.find(invokeId) != invokers.end())
+ invokers[invokeId].eventFromSCXML(event);
+ }
+
+ void enqueueAtParent(const Event& event) {
+ if (parentMachine != NULL)
+ parentMachine->enqueueExternal(event);
+ }
+
bool isInState(const std::string& stateId) {
for (size_t i = 0; i < ctx.machine->nr_states; i++) {
if (ctx.machine->states[i].name &&
@@ -119,6 +140,16 @@ public:
name = machine->name;
+ // register IO Procs
+ std::map<std::string, IOProcessorImpl*> allIOProcs = Factory::getInstance()->getIOProcessors();
+ for (auto ioProcImpl : allIOProcs) {
+ ioProcs[ioProcImpl.first] = Factory::getInstance()->createIOProcessor(ioProcImpl.first, this);
+ std::list<std::string> names = ioProcImpl.second->getNames();
+ for (auto name : names) {
+ ioProcs[name] = ioProcs[ioProcImpl.first];
+ }
+ }
+
delayQueue = DelayedEventQueue(std::shared_ptr<DelayedEventQueueImpl>(new BasicDelayedEventQueue(this)));
dataModel = Factory::getInstance()->createDataModel(machine->datamodel, this);
@@ -310,7 +341,12 @@ public:
if (donedata) {
if (donedata->content != NULL) {
- e.data = Data(donedata->content, Data::VERBATIM);
+ if (isNumeric(donedata->content, 10)) {
+ // test 529
+ e.data = Data(strTo<double>(donedata->content), Data::INTERPRETED);
+ } else {
+ e.data = Data(donedata->content, Data::VERBATIM);
+ }
} else if (donedata->contentexpr != NULL) {
try {
e.data = USER_DATA(ctx)->dataModel.getAsData(donedata->contentexpr);
@@ -369,13 +405,13 @@ public:
}
if (target.size() > 0 && (target[0] != '#' || target[1] != '_')) {
+ std::cerr << "Target '" << target << "' is not supported yet" << std::endl;
e.name = "error.execution";
execContentRaise(ctx, e);
return USCXML_ERR_INVALID_TARGET;
}
e.origintype = "http://www.w3.org/TR/scxml/#SCXMLEventProcessor";
-// e.origin = target;
std::string type;
try {
@@ -400,6 +436,7 @@ public:
}
e.origintype = type;
+ e.origin = "#_scxml_" + USER_DATA(ctx)->sessionId;
e.invokeid = USER_DATA(ctx)->invokeId;
if (send->eventexpr != NULL) {
@@ -446,11 +483,13 @@ public:
}
if (send->content != NULL) {
- // will it parse as json?
- Data d = USER_DATA(ctx)->dataModel.getAsData(send->content);
- if (!d.empty()) {
- e.data = d;
- } else {
+ try {
+ // will it parse as json?
+ Data d = USER_DATA(ctx)->dataModel.getAsData(send->content);
+ if (!d.empty()) {
+ e.data = d;
+ }
+ } catch (Event err) {
e.data = Data(spaceNormalize(send->content), Data::VERBATIM);
}
}
@@ -560,8 +599,9 @@ public:
try {
// Data d = USER_DATA(ctx)->dataModel.getStringAsData(expr);
if (assign->expr != NULL) {
- USER_DATA(ctx)->dataModel.assign(key,
- USER_DATA(ctx)->dataModel.evalAsData(assign->expr));
+// USER_DATA(ctx)->dataModel.assign(key,
+// USER_DATA(ctx)->dataModel.evalAsData(assign->expr));
+ USER_DATA(ctx)->dataModel.assign(key, Data(assign->expr, Data::INTERPRETED));
} else if (assign->content != NULL) {
Data d = Data(assign->content, Data::INTERPRETED);
USER_DATA(ctx)->dataModel.assign(key, d);
@@ -628,7 +668,8 @@ public:
try {
if (data->expr != NULL) {
- d = USER_DATA(ctx)->dataModel.evalAsData(data->expr);
+ d = Data(data->expr, Data::INTERPRETED);
+// d = USER_DATA(ctx)->dataModel.evalAsData(data->expr);
} else if (data->content != NULL || data->src != NULL) {
if (data->content) {
@@ -647,7 +688,9 @@ public:
* as space normalized string literals if this fails below
*/
d = USER_DATA(ctx)->dataModel.getAsData(content.str());
-
+ if (d.empty()) {
+ d = Data(escape(spaceNormalize(content.str())), Data::VERBATIM);
+ }
} else {
// leave d undefined
}
@@ -895,6 +938,8 @@ NEXT_DESC:
std::deque<Event> eq;
DataModel dataModel;
+ std::map<std::string, IOProcessor> ioProcs;
+ std::map<std::string, Invoker> invokers;
protected:
struct scxml_foreach_info {
@@ -903,8 +948,6 @@ protected:
};
X xmlPrefix;
- std::map<std::string, IOProcessor> ioProcs;
- std::map<std::string, Invoker> invokers;
XERCESC_NS::DOMDocument* document;
DelayedEventQueue delayQueue;
@@ -925,6 +968,9 @@ int main(int argc, char** argv) {
benchmarkRuns = strTo<size_t>(envBenchmarkRuns);
}
+ // start the webserver for the basichttp tests
+// HTTPServer::getInstance(3453, 3454, NULL);
+
size_t remainingRuns = benchmarkRuns;
size_t microSteps = 0;
diff --git a/test/src/test-http-debugger.pl b/test/src/test-http-debugger.pl
index a7a1d0a..fcc675f 100755
--- a/test/src/test-http-debugger.pl
+++ b/test/src/test-http-debugger.pl
@@ -26,16 +26,19 @@ my @breakpointSeq;
my $pid = fork;
if (!$pid) {
- # exec("$scxmlBin -t4088 -d");
+ exec("$scxmlBin -t4088 -d");
exit;
}
-# my $baseURL = 'http://localhost:4088/debug';
-my $baseURL = 'http://localhost:5080/debug';
+my $baseURL = 'http://localhost:4088/debug';
+# my $baseURL = 'http://localhost:5080/debug';
sub assertSuccess {
my $response = shift;
my $message = shift;
+ print "-----\n";
+ print $response->content();
+ print "-----\n";
from_json($response->content())->{'status'} eq "success" or die($message);
}
diff --git a/test/w3c/TESTS.md b/test/w3c/TESTS.md
index cb50028..43282c6 100644
--- a/test/w3c/TESTS.md
+++ b/test/w3c/TESTS.md
@@ -1,88 +1,100 @@
-
<table>
+
<thead>
<tr>
<th colspan="3">Test (Req. / Man.)</th>
+ <th>ECMA</th>
+ <th>C (Lua)</th>
<th>NS</th>
- <th>VHDL Promela</th>
<th>Java (JEXL)</th>
+ <th>Spin</th>
+ <th>C (ECMA)</th>
+ <th>Python (ECMA)</th>
<th>Lua</th>
- <th>ECMA</th>
<th>Promela</th>
- <th>C (ECMA)</th>
- <th>C (Lua)</th>
+ <th>VHDL Promela</th>
</tr>
</thead>
<tbody>
<tr>
- <td colspan="11"><b><big>Core Constructs</big></b></td>
+ <td colspan="13"><b><big>Core Constructs</big></b></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#history">&sect;3.10</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The History Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The History Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test387.txml" alt="Before the parent state has been visited for the first time, if a transition is executed that takes the history state as its target, the SCXML processor MUST behave as if the transition had taken the default stored state configuration as its target.">387</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test388.txml" alt="After the parent state has been visited for the first time, if a transition is executed that takes the history state as its target, the SCXML processor MUST behave as if the transition had taken the stored state configuration as its target.">388</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test579.txml" alt="Before the parent state has been visited for the first time, if a transition is executed that takes the history state as its target, the SCXML processor MUST execute any executable content in the transition after the parent state's onentry content and any content in a possible initial transition.">579</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test580.txml" alt="It follows from the semantics of history states that they never end up in the state configuration">580</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#events">&sect;3.12</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>SCXML Events</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>SCXML Events</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test396.txml" alt="The SCXML processor MUST use this same name value (the one reflected in the event variable) to match against the `event` attribute of transitions.">396</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -95,23 +107,27 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test401.txml" alt="The processor MUST place these (error) events in the internal event queue.">401</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -121,50 +137,58 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#SelectingTransitions">&sect;3.13</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>Selecting and Executing Transitions</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>Selecting and Executing Transitions</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test403a.txml" alt="To execute a microstep, the SCXML Processor MUST execute the transitions in the corresponding optimal enabled transition set, where the optimal transition set enabled by event E in state configuration C is the largest set of transitions such that a) each transition in the set is optimally enabled by E in an atomic state in C b) no transition conflicts with another transition in the set c) there is no optimally enabled transition outside the set that has a higher priority than some member of the set.">403a</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test403c.txml" alt="To execute a microstep, the SCXML Processor MUST execute the transitions in the corresponding optimal enabled transition set, where the optimal transition set enabled by event E in state configuration C is the largest set of transitions such that a) each transition in the set is optimally enabled by E in an atomic state in C b) no transition conflicts with another transition in the set c) there is no optimally enabled transition outside the set that has a higher priority than some member of the set.">403c</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test403b.txml" alt="To execute a microstep, the SCXML Processor MUST execute the transitions in the corresponding optimal enabled transition set, where the optimal transition set enabled by event E in state configuration C is the largest set of transitions such that a) each transition in the set is optimally enabled by E in an atomic state in C b) no transition conflicts with another transition in the set c) there is no optimally enabled transition outside the set that has a higher priority than some member of the set.">403b</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -177,46 +201,54 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test405.txml" alt="(the SCXML Processor executing a set of transitions) MUST then (after the onexits) execute the executable content contained in the transitions in document order.">405</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test406.txml" alt="(the SCXML Processor executing a set of transitions) MUST then (after the exits and the transitions) enter the states in the transitions' entry set in entry order.">406</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test407.txml" alt="To exit a state, the SCXML Processor MUST execute the executable content in the state's onexit handler.">407</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -229,7 +261,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -242,44 +276,53 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test412.txml" alt="If the state is a default entry state and has an initial child, the SCXML Processor MUST then (after doing the active state add and the onentry handlers) execute the executable content in the initial child's transition.">412</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test413.txml" alt="At startup, the SCXML Processor MUST place the state machine in the configuration specified by the `initial` attribute of the scxml element.">413</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test415.txml" alt="If it (the SCXML Processor) has entered a final state that is a child of scxml (during the last microstep), it MUST halt processing.">415</a></b></td>
<td>X</td>
<td>X</td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
@@ -287,14 +330,15 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test416.txml" alt="If it (the SCXML processor) has entered a final state that is a child of a compound state (during the last microstep), it MUST generate the event done.state.id, where id is the id of the compound state.">416</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -307,7 +351,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -320,7 +366,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -333,46 +381,54 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test422.txml" alt="After completing a macrostep, the SCXML Processor MUST execute in document order the invoke handlers in all states that have been entered (and not exited) since the completion of the last macrostep.">422</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test423.txml" alt="Then (after invoking the new invoke handlers since the last macrostep) the Processor MUST remove events from the external event queue, waiting till events appear if necessary, until it finds one that enables a non-empty optimal transition set in the current configuration. The Processor MUST then execute that set (the enabled non-empty optimal transition set in the current configuration triggered by an external event) as a microstep.">423</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test503.txml" alt="If the transition does not contain a `target`, its exit set is empty.">503</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -385,7 +441,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -398,7 +456,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -411,7 +471,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -424,7 +486,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -434,14 +498,16 @@
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#scxml">&sect;3.2</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The SCXML Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The SCXML Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test355.txml" alt="At system initialization time, if the `initial` attribute is not present, the Processor MUST enter the first state in document order.">355</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -454,41 +520,47 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#state">&sect;3.3</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The State Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The State Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test364.txml" alt="Definition: The default initial state(s) of a compound state are those specified by the `initial` attribute or initial element, if either is present. Otherwise it is the state's first child state in document order. If a compound state is entered either as an initial state or as the target of a transition (i.e. and no descendent of it is specified), then the SCXML Processor MUST enter the default initial state(s) after it enters the parent state.">364</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#final">&sect;3.7</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Final Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Final Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test372.txml" alt="When the state machine enters the final child of a state element, the SCXML processor MUST generate the event done.state.id after completion of the onentry elements, where id is the id of the parent state.">372</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -501,24 +573,28 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#onentry">&sect;3.8</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Onentry Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Onentry Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test375.txml" alt="The SCXML processor MUST execute the onentry handlers of a state in document order when the state is entered.">375</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -531,7 +607,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -541,14 +619,16 @@
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#onexit">&sect;3.9</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Onexit Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Onexit Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test377.txml" alt="The SCXML processor MUST execute the onexit handlers of a state in document order when the state is exited.">377</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -561,7 +641,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -570,18 +652,20 @@
<td><code>OK</code></td>
</tr>
<tr>
- <td colspan="11"><b><big>Executable Content</big></b></td>
+ <td colspan="13"><b><big>Executable Content</big></b></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#raise">&sect;4.2</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Raise Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Raise Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test144.txml" alt="The SCXML processor MUST place the event that is generated by the raise element at the rear of the session's internal event queue.">144</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -591,96 +675,110 @@
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#if">&sect;4.3</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The If Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The If Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test147.txml" alt="When the if element is executed, the SCXML processor MUST execute the first partition in document order that is defined by a tag whose `cond` attribute evaluates to true, if there is one.">147</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test148.txml" alt="When the if element is executed, if no `cond`attribute evaluates to true, the SCXML Processor must execute the partition defined by the else tag, if there is one.">148</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test149.txml" alt="When it executes an if element, if no `cond` attribute evaluates to true and there is no else element, the SCXML processor must not evaluate any executable content within the element.">149</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#foreach">&sect;4.6</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Foreach Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Foreach Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test150.txml" alt="In the foreach element, the SCXML processor MUST declare a new variable if the one specified by `item` is not already defined.">150</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test151.txml" alt="In the foreach element, if `index` is present, the SCXML processor MUST declare a new variable if the one specified by `index` is not already defined.">151</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test152.txml" alt="In the foreach element, if `array` does not evaluate to a legal iterable collection, or if `item` does not specify a legal variable name, the SCXML processor MUST terminate execution of the foreach element and the block that contains it, and place the error error.execution on the internal event queue.">152</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test153.txml" alt="When evaluating foreach, the SCXML processor MUST start with the first item in the collection and proceed to the last item in the iteration order that is defined for the collection. For each item in the collection in turn, the processor MUST assign it to the item variable.">153</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -693,7 +791,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -706,10 +806,12 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -719,24 +821,28 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#EvaluationofExecutableContent">&sect;4.9</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>Evaluation of Executable Content</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>Evaluation of Executable Content</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test158.txml" alt="The SCXML processor MUST execute the elements of a block of executable contentin document order.">158</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -749,27 +855,31 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
</tr>
<tr>
- <td colspan="11"><b><big>Data Model and Manipulation</big></b></td>
+ <td colspan="13"><b><big>Data Model and Manipulation</big></b></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#SystemVariables">&sect;5.10</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>System Variables</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>System Variables</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test318.txml" alt="The SCXML Processor MUST bind the \_event variable when an event is pulled off the internal or external event queue to be processed, and MUST keep the variable bound to that event until another event is processed.">318</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -782,7 +892,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -795,49 +907,57 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test322.txml" alt="The Processor MUST keep the \_sessionid variable bound to the system-generated id until the session terminates.">322</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test323.txml" alt="The Processor MUST bind the variable \_name at load time to the value of the `name` attribute of the scxml element. a">323</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test324.txml" alt="The Processor MUST keep the \_name variable bound to the value of the `name` attribute of the scxml element until the session terminates.">324</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -847,25 +967,29 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test326.txml" alt="The Processor MUST keep the \_ioprocessors variable bound to its set of values until the session terminates.">326</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
@@ -873,20 +997,24 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test330.txml" alt="The SCXML Processor MUST insure that the following fields (name, type, sendid, origin, origintype, invokeid, data) are present in all events (\_event variable), whether internal or external.">330</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -899,11 +1027,13 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
</tr>
@@ -912,10 +1042,12 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -925,7 +1057,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -938,7 +1072,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -951,12 +1087,14 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
@@ -964,7 +1102,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -977,20 +1117,24 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test339.txml" alt="If an event is not generated from an invoked child process, the Processor MUST leave the invokeid field blank.">339</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1003,63 +1147,73 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test346.txml" alt="The Processor MUST place the error error.execution on the internal event queue when any attempt to change the value of a system variable is made.">346</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#data">&sect;5.3</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Data Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Data Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test276.txml" alt="The SCXML Processor MUST allow the environment to provide values for top-level data elements at instantiation time. (Top-level data elements are those that are children of the datamodel element that is a child of scxml). Specifically, the Processor MUST use the values provided at instantiation time instead of those contained in these data elements.">276</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test277.txml" alt="If the value specified for a data element (by `src`, children, or the environment) is not a legal data value, the SCXML Processor MUST raise place error.execution in the internal event queue and MUST create an empty data element in the data model with the specified id.">277</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test279.txml" alt="When `binding` attribute on the scxml element is assigned the value &quot;early&quot; (the default), the SCXML Processor MUST create all data elements and assign their initial values at document initialization time.">279</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1072,10 +1226,12 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1085,7 +1241,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1098,7 +1256,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1111,7 +1271,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1121,27 +1283,31 @@
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#assign">&sect;5.4</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Assign Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Assign Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test286.txml" alt="If the location expression of an assign does not denote a valid location in the datamodel the processor MUST place the error error.execution in the internal event queue.">286</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test287.txml" alt="If the location expression of an assign denotes a valid location in the datamodel and if the value specified by `expr` is a legal value for the location specified, the processor MUST place the specified value at the specified location.">287</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1154,7 +1320,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1167,47 +1335,53 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#donedata">&sect;5.5</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Donedata Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Donedata Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test294.txml" alt="In cases where the SCXML Processor generates a `done` event upon entry into the final state, it MUST evaluate the donedata elements param or content children and place the resulting data in the \_event.data field. The exact format of that data will be determined by the datamodel">294</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#content">&sect;5.6</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Content Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Content Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test527.txml" alt="When the SCXML Processor evaluates the content element, if the `expr` value expression is present, the Processor MUST evaluate it and use the result as the output of the content element.">527</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test528.txml" alt="f the evaluation of `expr` produces an error, the Processor MUST place error.execution in the internal event queue and use the empty string as the output of the content element.">528</a></b></td>
@@ -1217,17 +1391,21 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test529.txml" alt="If the `expr` attribute is not present, the Processor MUST use the children of content as the output.">529</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1237,106 +1415,120 @@
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#param">&sect;5.7</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Param Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Param Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test298.txml" alt="If the `location` attribute on a param element does not refer to a valid location in the data model, the processor MUST place the error error.execution on the internal event queue.">298</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test343.txml" alt="If the `location` attribute on a param element does not refer to a valid location in the data model, or if the evaluation of the `expr` produces an error, the processor MUST ignore the name and value.">343</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test488.txml" alt="if the evaluation of the `expr` produces an error, the processor MUST place the error error.execution on the internal event queue.">488</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#script">&sect;5.8</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Script Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Script Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test301.txml" alt="If the script specified by the `src` attribute of a script element cannot be downloaded within a platform-specific timeout interval, the document is considered non-conformant, and the platform MUST reject it. N.B. This test is valid only for datamodels that support scripting.">301</a></b></td>
<td>X</td>
<td>X</td>
- <td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test302.txml" alt="The SCXML Processor MUST evaluate any script element that is a child of scxml at document load time. N.B. This test is valid only for datamodels that support scripting.">302</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test303.txml" alt="The SCXML Processor MUST evaluate all script elements not children of scxml as part of normal executable content evaluation. N.B. This test is valid only for datamodels that support scripting.">303</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test304.txml" alt="In a conformant SCXML document, the name of any script variable MAY be used as a location expression. N.B. This test is valid only for datamodels that support scripting.">304</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#Expressions">&sect;5.9</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>Expressions</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>Expressions</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test307.txml" alt="When &quot;late&quot; data binding is used, accessing data substructure in expressions before the corresponding data element is loaded MUST yield the same execution-time behavior as accessing non-existent data substructure in a loaded data instance.">307</a></b></td>
@@ -1350,16 +1542,20 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test309.txml" alt="If a conditional expression cannot be evaluated as a boolean value (`true` or `false`) or if its evaluation causes an error, the SCXML processor MUST treat the expression as if it evaluated to `false`.">309</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1369,7 +1565,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1382,92 +1580,106 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test312.txml" alt="If a value expression does not return a legal data value, the SCXML processor MUST place the error error.execution in the internal event queue.">312</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test313.txml" alt="The SCXML processor MAY reject documents containing syntactically ill-formed expressions at document load time, or it MAY wait and place error.execution in the internal event queue at runtime when the expressions are evaluated.">313</a></b></td>
<td>X</td>
<td>X</td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test314.txml" alt="If the SCXML processor waits until it evaluates the expressions at runtime to raise errors, it MUST raise errors caused by expressions returning illegal values at the points at which Appendix A Algorithm for SCXML Interpretation indicates that the expressions are to be evaluated.">314</a></b></td>
<td>X</td>
<td>X</td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test344.txml" alt="If a conditional expression cannot be evaluated as a boolean value (`true` or `false`) or if its evaluation causes an error, the SCXML processor MUST place the error `error.execution` in the internal event queue.">344</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
- <td colspan="11"><b><big>External Communications</big></b></td>
+ <td colspan="13"><b><big>External Communications</big></b></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#send">&sect;6.2</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Send Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Send Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test172.txml" alt="If `eventexpr` is present, the SCXML Processor MUST evaluate it when the parent send element is evaluated and treat the result as if it had been entered as the value of `event`.">172</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test173.txml" alt="If `targetexpr` is present, the SCXML Processor MUST evaluate it when the parent send element is evaluated and treat the result as if it had been entered as the value of `target`.">173</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1480,7 +1692,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1493,7 +1707,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1506,7 +1722,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1518,6 +1736,9 @@
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test178.txml" alt="The SCXML Processor MUST include all attributes and values provided by param and/or `namelist` even if duplicates occur.">178</a></b></td>
<td>X</td>
<td>X</td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
@@ -1525,14 +1746,15 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test179.txml" alt="The SCXML Processor MUST evaluate the content element when the parent send element is evaluated and pass the resulting data unmodified to the external service when the message is delivered.">179</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1545,7 +1767,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1558,7 +1782,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1571,7 +1797,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1584,7 +1812,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1597,20 +1827,24 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test198.txml" alt="If neither the `type` nor the `typeexpr` is defined, the SCXML Processor MUST assume the default value of http://www.w3.org/TR/scxml/#SCXMLEventProcessor.">198</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1623,20 +1857,24 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test200.txml" alt="SCXML Processors MUST support the type http://www.w3.org/TR/scxml/#SCXMLEventProcessor">200</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1653,16 +1891,20 @@
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test205.txml" alt="The sending SCXML Interpreter MUST not alter the content of the send and include it in the message that it sends to the destination specified in the target attribute of send.">205</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1675,50 +1917,58 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test553.txml" alt="If the evaluation of send's arguments produces an error, If the evaluation of send's arguments produces an error, the Processor MUST discard the message without attempting to deliver it.">553</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#cancel">&sect;6.3</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Cancel Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Cancel Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test207.txml" alt="The SCXML Processor MUST NOT allow cancel to affect events that were not raised in the same session.">207</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test208.txml" alt="The Processor SHOULD make its best attempt to cancel all delayed events with the specified id.">208</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1731,7 +1981,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1741,20 +1993,22 @@
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#invoke">&sect;6.4</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Invoke Element</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Invoke Element</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test215.txml" alt="If the typeexpr attribute is present, the SCXML Processor MUST evaluate it when the parent invoke element is evaluated and treat the result as if it had been entered as the value of `type`.">215</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test216.txml" alt="If the srcexpr attribute is present, the SCXML Processor MUST evaluate it when the parent invoke element is evaluated and treat the result as if it had been entered as the value of `src`.">216</a></b></td>
@@ -1764,9 +2018,11 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
@@ -1774,20 +2030,24 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test223.txml" alt="If the `idlocation` attribute is present, the SCXML Processor MUST generate an id automatically when the invoke element is evaluated and store it in the location specified by `idlocation`.">223</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1800,20 +2060,24 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test225.txml" alt="n the automatically generated invoke identifier, platformid MUST be unique within the current session">225</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1826,7 +2090,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1839,59 +2105,69 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test229.txml" alt="When the `autoforward` attribute is set to true, the SCXML Processor MUST send an exact copy of every external event it receives to the invoked process.">229</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test230.txml" alt="When the SCXML Processor autoforwards an event to the invoked process, all the fields specified in 5.11.1 The Internal Structure of Events MUST have the same values in the forwarded copy of the event">230</a></b></td>
<td>X</td>
<td>X</td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
- <td><code>OK</code></td>
- <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test232.txml" alt="he invoked external service MAY return multiple events while it is processing">232</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test233.txml" alt="If there is a finalize handler in the instance of invoke that created the service that generated the event, the SCXML Processor MUST execute the code in that finalize handler right before it removes the event from the event queue for processing.">233</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1904,7 +2180,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1917,7 +2195,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -1930,85 +2210,99 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test237.txml" alt="If the invoking session takes a transition out of the state containing the invoke before it receives the `done.invoke.id` event, the SCXML Processor MUST automatically cancel the invoked component and stop its processing.">237</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test239.txml" alt="Invoked services of type http://www.w3.org/TR/scxml/, http://www.w3.org/TR/ccxml/, http://www.w3.org/TR/voicexml30/, or http://www.w3.org/TR/voicexml21 MUST interpret values specified by the content element or `src` attribute as markup to be executed">239</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test240.txml" alt="Invoked services of type http://www.w3.org/TR/scxml/, http://www.w3.org/TR/ccxml/, http://www.w3.org/TR/voicexml30/, or http://www.w3.org/TR/voicexml21 MUST interpret values specified by param element or `namelist` attribute as values that are to be injected into their data models">240</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test241.txml" alt="Invoked services MUST treat values specified by param and namelist identically.">241</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test242.txml" alt="Invoked services MUST also treat values specified by `src` and content identically.">242</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test243.txml" alt="If the invoked process is of type http://www.w3.org/TR/scxml/ and `name` of a param element in the invoke matches the `id` of a data element in the top-level data declarations of the invoked session, the SCXML Processor MUST use the value of the param element as the initial value of the corresponding data element.">243</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2021,7 +2315,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2034,7 +2330,9 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2047,18 +2345,23 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test250.txml" alt="When an invoked process of type http://www.w3.org/TR/scxml/is cancelled by the invoking process, the Processor MUST execute the onexit handlers for all active states in the invoked session">250</a></b></td>
<td>X</td>
<td>X</td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
@@ -2066,33 +2369,36 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test252.txml" alt="Once it cancels an invoked session, the Processor MUST NOT insert any events it receives from the invoked session into the external event queue of the invoking session.">252</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test253.txml" alt="When the invoked session is of type http://www.w3.org/TR/scxml/, The SCXML Processor MUST support the use of SCXML Event/IO processor (E.1 SCXML Event I/O Processor) to communicate between the invoking and the invoked sessions.">253</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test530.txml" alt="The SCXML Processor MUST evaluate a child content element when the parent invoke element is evaluated and pass the resulting data to the invoked service.">530</a></b></td>
@@ -2102,9 +2408,11 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
@@ -2112,20 +2420,22 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
- <td colspan="11"><b><big>Data Models</big></b></td>
+ <td colspan="13"><b><big>Data Models</big></b></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#minimal-profile">&sect;C.1</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The Null Data Model</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The Null Data Model</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test436.txml" alt="When the &quot;datamodel&quot; attribute of the scxml element has the value &quot;null&quot;, the In() predicate must return `true` if and only if that state is in the current state configuration.">436</a></b></td>
@@ -2139,17 +2449,21 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#ecma-profile">&sect;C.2</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The ECMAScript Data Model</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The ECMAScript Data Model</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test278.txml" alt="In the ECMAScript data model, the SCXML processor MUST allow any data element to be accessed from any state.">278</a></b></td>
<td></td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2163,12 +2477,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test445.txml" alt="In the ECMAScript datamodel for each data element in the document, if the variable object associated with the element is not assigned at the time indicated by the `binding` attribute on the scxml element, then the SCXML Processor must assign the variable the default value ECMAScript undefined.">445</a></b></td>
@@ -2176,12 +2492,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test446.txml" alt="In the ECMAScript data model, if either the `src` attribute or in-line content is provided in the data elemenet, then if the content (whether fetched or provided in-line) is JSON and the processor supports JSON, the SCXML Processor MUST create the corresponding ECMAScript structure and assign it as the value of the data element.">446</a></b></td>
@@ -2189,12 +2507,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test448.txml" alt="In the ECMAScript datamodel, the SCXML Processor must place all variables in a single global ECMAScript scope.">448</a></b></td>
@@ -2202,12 +2522,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test449.txml" alt="In the ECMAScript datamodel, the SCXML Processor must convert ECMAScript expressions used in conditional expressions into their effective boolean value using the ToBoolean operator as described in Section 9.2 of (ECMASCRIPT-262).">449</a></b></td>
@@ -2215,12 +2537,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test451.txml" alt="In the ECMAScript datamodel, the SCXML Processor must add an ECMAScript function `In()` to the SCXML namespace that takes a stateID as its argument and returns `true` if and only if that state is in the current state configuration, as described in 5.10.1 Conditional Expressions.">451</a></b></td>
@@ -2228,12 +2552,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test452.txml" alt="In the ECMAScript datamodel, the SCXML Processor must accept any ECMAScript left-hand-side expression as a location expression.">452</a></b></td>
@@ -2241,12 +2567,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test453.txml" alt="In the ECMAScript datamodel, the SCXML Processor must accept any ECMAScript expression as a value expression.">453</a></b></td>
@@ -2254,11 +2582,13 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>N/A</code></td>
<td><code>N/A</code></td>
</tr>
<tr>
@@ -2267,12 +2597,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test457.txml" alt="In the ECMAScript data model, the legal iterable collections are arrays, namely objects that satisfy instanceof(Array) in ECMAScript. The legal values for the `item` attribute on foreach are legal ECMAScript variable names.">457</a></b></td>
@@ -2280,12 +2612,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test459.txml" alt="In the ECMAScript data model, the iteration order for the foreach element is the order of the underlying ECMAScript array, and goes from an index of 0 by increments of one to an index of array\_name.length - 1.">459</a></b></td>
@@ -2293,12 +2627,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test460.txml" alt="In the ECMAScript data model, since shallow copy is required for the foreach element, foreach assignment is equivalent to item = array\_name(index) in ECMAScript.">460</a></b></td>
@@ -2306,12 +2642,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test557.txml" alt="In the ECMAScript data model, if either the `src` attribute or in-line content is provided in the data element, then if the content (whether fetched or provided in-line) is an XML document, the SCXML Processor MUST create the corresponding DOM structure and assign it as the value of the data element.">557</a></b></td>
@@ -2319,6 +2657,8 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
@@ -2332,11 +2672,13 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
</tr>
<tr>
@@ -2345,12 +2687,14 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test561.txml" alt="In the ECMAScript data model, if the content provided to populate \_event.data can be interpreted as a valid XML document (and cannot be interpreted as key-value pairs or JSON), the Processor MUST create the corresponding DOM structure and assign it as the value \_event.data.">561</a></b></td>
@@ -2358,6 +2702,8 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
@@ -2371,11 +2717,13 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code>N/A</code></td>
</tr>
<tr>
@@ -2384,6 +2732,8 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
@@ -2397,16 +2747,18 @@
<td></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>N/A</code></td>
- <td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>N/A</code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#xpath-profile">&sect;C.3</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>The XPath Data Model</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>The XPath Data Model</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test463.txml" alt="In the XPath datamodel, for each data element in the document, the SCXML Processor MUST create a child of datamodel called &lt;data&gt; with an `id` attribute whose value is the same as that of the `id` attribute of the document data element. The Processor MUST bind an XPath variable of the same name to that datamodel data element.">463</a></b></td>
@@ -2420,6 +2772,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test464.txml" alt="In the XPath datamodel, for each data element in the document, if a value is not assigned at the time indicated by the `binding` attribute on the scxml element, then the SCXML Processor must leave the datamodel data element empty, as follows: &lt;data xmlns=&quot;&quot;&gt;&lt;/data&gt;">464</a></b></td>
@@ -2433,6 +2787,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test465.txml" alt="In the XPath datamodel, the SCXML Processor must place all variables in a single global XPath scope, such that they are subsequently available to all expressions within the document.">465</a></b></td>
@@ -2446,6 +2802,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test466.txml" alt="In the XPath datamodel, the SCXML Processor must accept any XPath 2.0 expression as a conditional expression and must convert it into its effective boolean value as described in section 2.4.3 of the (XPath 2.0) specification.">466</a></b></td>
@@ -2459,6 +2817,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test467.txml" alt="In the XPath datamodel, the SCXML Processor must add an XPath function to the SCXML namespace that takes a stateID as its argument and returns `true` if and only if that state is in the current state configuration, as described in 5.10.1 Conditional Expressions.">467</a></b></td>
@@ -2472,6 +2832,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test468.txml" alt="In the XPath datamodel, the SCXML Processor must accept any XPath 2.0 expression as a location expression.">468</a></b></td>
@@ -2485,6 +2847,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test469.txml" alt="In the XPath datamodel,the SCXML Processor must allow any XPath expression to be used as a value expression.">469</a></b></td>
@@ -2498,6 +2862,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test470.txml" alt="In the XPath datamodel, if the result of a value expression is a node-set, the Processor must make a deep copy of the subtree rooted at each node.">470</a></b></td>
@@ -2511,6 +2877,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test473.txml" alt="In the XPath datamodel, if the `type` attribute of the assign element is specified with a value of `replacechildren`, the SCXML Processor must either replace all the children at `location` with the value specified by `expr` or place the error error.execution on the internal event queue.">473</a></b></td>
@@ -2524,6 +2892,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test474.txml" alt="In the XPath datamodel, if the `type` attribute of the assign element is specified with a value of `firstchild`, the SCXML Processor must either insert the value specified by `expr` before all of the children at `location` or place the error error.execution on the internal event queue.">474</a></b></td>
@@ -2537,6 +2907,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test475.txml" alt="In the XPath datamodel,if the `type` attribute of the assign element is specified with a value of `lastchild`, the SCXML Processor must either insert the value specified by `expr` after all of the children at `location` or place the error error.execution on the internal event queue.">475</a></b></td>
@@ -2550,6 +2922,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test476.txml" alt="In the XPath datamodel,if the `type` attribute of the assign element is specified with a value of `previoussibling`, the SCXML Processor must either insert the value specified by `expr` before the node specified by `location`, keeping the same parent, or place the error error.execution on the internal event queue.">476</a></b></td>
@@ -2563,6 +2937,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test477.txml" alt="In the XPath datamodel, if the `type` attribute of the assign element is specified with a value of `nextsibling`, the SCXML Processor must either insert the value specified by `expr` after the node specified by `location`, keeping the same parent, or place the error error.execution on the internal event queue.">477</a></b></td>
@@ -2576,6 +2952,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test478.txml" alt="In the XPath datamodel, if the `type` attribute of the assign element is specified with a value of `replace`, the SCXML Processor must either replace the node specified by `location` with the value specified by `expr` or place the error error.execution on the internal event queue.">478</a></b></td>
@@ -2589,6 +2967,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test479.txml" alt="In the XPath datamodel, if the `type` attribute of the assign element is specified with a value of `delete`, the SCXML Processor must either delete the node specified by `location` or place the error error.execution on the internal event queue.">479</a></b></td>
@@ -2602,6 +2982,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test480.txml" alt="In the XPath datamodel, if the `type` attribute of the assign element is specified with a value of `addattribute`, the SCXML Processor must either add an attribute with the name specified by `attr` and value specified by `expr` to the node specified by `location` or place the error error.execution on the internal event queue.">480</a></b></td>
@@ -2615,6 +2997,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test481.txml" alt="In the XPath datamodel, if the evaluation of any of the expressions in an assign element causes an error to be raised, evaluation of the element terminates immediately and the assign has no effect. Similarly, if the processor is unable to place the specified value at the node specified by `location` it must terminate immediately, placing the error error.execution on the internal event queue, and the assign has no effect.">481</a></b></td>
@@ -2628,6 +3012,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test482.txml" alt="In the XPath datamodel, for each system variable defined in 5.11 System Variables, the SCXML Processor MUST create a datamodel &lt;data&gt; element with an `id` attribue whose value is the name of the system variable. The Processor also MUST bind an XPath variable whose name is the name of the system variable to this element.">482</a></b></td>
@@ -2641,6 +3027,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test483.txml" alt="In the XPath datamodel, In the XPath data model, the legal iterable collections are Node-Sets, and the legal values for the `item` attribute on foreach are legal XPath variable names. The iteration order is the order of the underlying Node-set, and goes from an index of 1 by increments of one to an index of count(node-set).">483</a></b></td>
@@ -2654,6 +3042,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test537.txml" alt="In the XPath datamodel,the SCXML Processor MUST maintain the XPath data model as an XML structure with a root element called &lt;datamodel&gt;. For each datamodel &lt;data&gt; element, the Processor MUST insert the value of the document data element as the child(ren) of the datamodel &lt;data&gt; element.">537</a></b></td>
@@ -2667,6 +3057,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test539.txml" alt="In the XPath datamodel, for each data element, ff either the `src` attribute or in-line content is provided in the document data element, then if the content (whether fetched or provided in-line) is XML, the SCXML Processor MUST insert the XML as the child(ren) of the datamodel &lt;data&gt; element">539</a></b></td>
@@ -2680,6 +3072,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test540.txml" alt="In the XPath datamodel, for each data element, if either the `src` attribute or in-line content is provided in the document data element, then if the content (whether fetched or provided in-line) is not XML, the Processor MUST treat the content as a space-normalized string literal and insert it as the child of the datamodel &lt;data&gt; element.">540</a></b></td>
@@ -2693,6 +3087,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test542.txml" alt="In the XPath datamodel, when content is a child of donedata, the Processor MUST interpret its value as defined in D.3.7.1 \_event.data">542</a></b></td>
@@ -2706,6 +3102,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test543.txml" alt="In the XPath datamodel, for the \_event system variable (i.e., the &lt;data id=&quot;\_event&quot;&gt; child of &lt;datamodel&gt;), for each of the fields defined in 5.11.1 The Internal Structure of Events, the Processor MUST create an child element whose name is the name of the field.">543</a></b></td>
@@ -2719,6 +3117,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test544.txml" alt="In the XPath datamodel, if the content provided to populate \_event.data can be interpreted as key-value pairs, then for each unique key, the SCXML Processor MUST create a &lt;data&gt; element as a child of \_event's data child with an `id` attribute whose value is the name of the key. The Processor MUST insert the value of the key-value pair as the content of this element.">544</a></b></td>
@@ -2732,6 +3132,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test545.txml" alt="In the XPath datamodel,if the content provided to populate \_event.data can be interpreted as a valid XML document (and not as key-value pairs), the Processor MUST insert the XML structure as the content of \_event's &lt;data&gt; child.">545</a></b></td>
@@ -2745,6 +3147,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test546.txml" alt="In the XPath datamodel, if the content provided to populate \_event.data cannot be interpreted as either key-value pairs or as a vaild XML document, the Processor MUST treat the content as a space-normalized string literal and insert it as the content of \_event's &lt;data&gt; child.">546</a></b></td>
@@ -2758,6 +3162,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test547.txml" alt="In the XPath datamodel, (when evaluating assign If the specified location contains a node set, the Processor MUST perform the assignment to each node in the set.">547</a></b></td>
@@ -2771,6 +3177,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test555.txml" alt="In the XPath datamodel, In contexts where a string is expected, the Processor MAY convert the expression result to a string using string().">555</a></b></td>
@@ -2784,6 +3192,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test568.txml" alt="In the XPath datamodel, For the \_ioprocessors system variable the Processor MUST create an child element for each Event I/O processor that it supports, where the name of the child element is the same as that of the I/O processor. For the SCXML and BasicHTTP Event I/O processors, the Processor MUST create a &lt;location&gt;child under the child element, assigning the access URI as its text child.">568</a></b></td>
@@ -2797,20 +3207,24 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
- <td colspan="11"><b><big>Event I/O Processor</big></b></td>
+ <td colspan="13"><b><big>Event I/O Processor</big></b></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#SCXMLEventProcessor">&sect;D.1</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>SCXML Event I/O Processor</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>SCXML Event I/O Processor</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test189.txml" alt="When using the scxml event i/o processor) If the target is the special term `#\_internal`, the Processor MUST add the event to the internal event queue of the sending session">189</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2823,20 +3237,24 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test191.txml" alt="(When using the scxml event i/o processor) If the target is the special term `#\_parent`, the Processor MUST add the event to the external event queue of the SCXML session that invoked the sending session, if there is one.">191</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2849,46 +3267,54 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test193.txml" alt="(When using the scxml event i/o processor) If neither the `target` nor the `targetexpr` attribute is specified, the SCXML Processor MUST add the event to the external event queue of the sending session.">193</a></b></td>
<td></td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test347.txml" alt="SCXML Processors MUST support sending messages to and receiving messages from other SCXML sessions using the SCXML Event I/O Processor.">347</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test348.txml" alt="name'. The sending SCXML Processor MUST take the value of this attribute from the `event` attribute of the send element. The receiving SCXML Processor MUST use it as the value the `name` field in the event that it generates.">348</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2901,23 +3327,27 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test350.txml" alt="target'. The sending SCXML Processor MUST take the value of this attribute from the `target` attribute of the send element. The receiving SCXML Processor MUST use this value to determine which session to deliver the message to.">350</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2927,20 +3357,24 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test352.txml" alt="`sourcetype`. The sending SCXML Processor MUST assign this attribute the value &quot;scxml&quot;. (Note that other types of senders will assign different values.) The receiving Processor MUST use this value as the value of the `origintype` field of the event that it generates.">352</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2953,20 +3387,24 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test495.txml" alt="If no errors occur, the receiving Processor MUST convert the message into an SCXML event, using the mapping defined above and insert it into the appropriate queue, as defined in Send Targets.">495</a></b></td>
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
@@ -2979,13 +3417,15 @@
<td>X</td>
<td></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test500.txml" alt="SCXML Processors that support the BasicHTTP Event I/O Processor MUST maintain a `scxml` entry in the \_ioprocessors system variable. The Processor MUST maintain a `location` field inside this entry whose value holds an address that external entities can use to communicate with this SCXML session using the SCXML Event I/O Processor.">500</a></b></td>
@@ -2996,9 +3436,11 @@
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test501.txml" alt="The `location` field inside the entry for the SCXML Event I/O Processor in the \_ioprocessors system variable MUST hold an address that external entities can use to communicate with this SCXML session using the SCXML Event I/O Processor.">501</a></b></td>
@@ -3009,13 +3451,15 @@
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td><b><a href="http://www.w3.org/TR/2015/REC-scxml-20150901/#BasicHTTPEventProcessor">&sect;D.2</a></b></td>
- <td colspan="10"><sub>&nbsp;</sub><b>Basic HTTP Event I/O Processor</b><sup>&nbsp;</sup></td>
+ <td colspan="12"><sub>&nbsp;</sub><b>Basic HTTP Event I/O Processor</b><sup>&nbsp;</sup></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test509.txml" alt="An SCXML Processor that supports the Basic HTTP Event I/O Processor MUST accept messages at the access URI as HTTP POST requests">509</a></b></td>
@@ -3025,10 +3469,12 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test510.txml" alt="The SCXML Processor MUST validate the message it receives (via the Basic HTTP Event I/O Processor) and then MUST build the appropriate SCXML event and MUST add it to the external event queue">510</a></b></td>
@@ -3039,8 +3485,10 @@
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
@@ -3055,6 +3503,8 @@
<td><code>N/A</code></td>
<td><code>N/A</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test518.txml" alt="If the namelist attribute is defined (in send), the SCXML Processor MUST map its variable names and values to HTTP POST parameters">518</a></b></td>
@@ -3064,10 +3514,12 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test519.txml" alt="If one or more param children are present (in send), the SCXML Processor MUST map their names (i.e. name attributes) and values to HTTP POST parameters">519</a></b></td>
@@ -3077,10 +3529,12 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test520.txml" alt="If a content child is present, the SCXML Processor MUST use its value as the body of the message.">520</a></b></td>
@@ -3090,8 +3544,10 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code>N/A</code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
@@ -3104,8 +3560,10 @@
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
@@ -3116,9 +3574,11 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
@@ -3129,9 +3589,11 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
<tr>
@@ -3142,10 +3604,12 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
<td><code>OK</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test567.txml" alt="The processor MUST use any message content other than `\_scxmleventname` to populate \_event.data.">567</a></b></td>
@@ -3156,9 +3620,11 @@
<td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>OK</code></td>
<td><code>N/A</code></td>
- <td><code><mark><b>FAIL</b></mark></code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
+ <td><code>OK</code></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;<b><a href="https://github.com/tklab-tud/uscxml/tree/master/test/w3c/txml/test577.txml" alt="If neither the `target` nor the `targetexpr` attribute is specified, the SCXML Processor MUST add the event error.communication to the internal event queue of the sending session.">577</a></b></td>
@@ -3168,9 +3634,11 @@
<td><code>N/A</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
+ <td><code>N/A</code></td>
+ <td><code>N/A</code></td>
+ <td><code>OK</code></td>
<td><code>OK</code></td>
<td><code>OK</code></td>
- <td><code>N/A</code></td>
<td><code><mark><b>FAIL</b></mark></code></td>
</tr>
</tbody>
diff --git a/test/w3c/confLua.xsl b/test/w3c/confLua.xsl
index d0a15b1..b261b20 100644
--- a/test/w3c/confLua.xsl
+++ b/test/w3c/confLua.xsl
@@ -141,7 +141,7 @@
<!-- this should return a value that cannot be assigned to a var. -->
<xsl:template match="//@conf:illegalExpr">
- <xsl:attribute name="expr">return</xsl:attribute>
+ <xsl:attribute name="expr">return#</xsl:attribute>
</xsl:template>
<!-- this should add 1 to the value of the specified variable -->
diff --git a/test/w3c/create-test-table.pl b/test/w3c/create-test-table.pl
index bca8f87..e35f098 100755
--- a/test/w3c/create-test-table.pl
+++ b/test/w3c/create-test-table.pl
@@ -30,7 +30,8 @@ my %testClasses = (
'w3c/gen/c/ecma' => 'C (ECMA)',
'w3c/gen/c/lua' => 'C (Lua)',
'w3c/binding/java/jexl' => 'Java (JEXL)',
-# 'w3c/spin/promela' => 'Spin'
+'w3c/binding/python/ecma' => 'Python (ECMA)',
+'w3c/spin/promela' => 'Spin',
'w3c/gen/vhdl/promela' => 'VHDL Promela',
# 'w3c/gen/vhdl/ecma' => 'VHDL ECMA',
);
diff --git a/test/w3c/lua/test488.scxml b/test/w3c/lua/test488.scxml
index db6b062..b5dfcf1 100644
--- a/test/w3c/lua/test488.scxml
+++ b/test/w3c/lua/test488.scxml
@@ -12,7 +12,7 @@
</state>
<final id="s02">
<donedata>
- <param expr="return" name="someParam"/>
+ <param expr="return#" name="someParam"/>
</donedata>
</final>
</state>