summaryrefslogtreecommitdiffstats
path: root/test/src
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-04-09 22:51:16 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-04-09 22:51:16 (GMT)
commit8a9b432d36e5748898abffe9f1607d93e45bab4b (patch)
tree0b95e832a9b3b2daf9ae45bf81084eda580752a0 /test/src
parent7d98ac1fd2e9da3162f3b6d38b22106f463edd9d (diff)
downloaduscxml-8a9b432d36e5748898abffe9f1607d93e45bab4b.zip
uscxml-8a9b432d36e5748898abffe9f1607d93e45bab4b.tar.gz
uscxml-8a9b432d36e5748898abffe9f1607d93e45bab4b.tar.bz2
Started with promela datamodel
Diffstat (limited to 'test/src')
-rw-r--r--test/src/test-promela-parser.cpp44
-rw-r--r--test/src/test-w3c.cpp89
2 files changed, 125 insertions, 8 deletions
diff --git a/test/src/test-promela-parser.cpp b/test/src/test-promela-parser.cpp
new file mode 100644
index 0000000..d89bb73
--- /dev/null
+++ b/test/src/test-promela-parser.cpp
@@ -0,0 +1,44 @@
+#include "uscxml/URL.h"
+#include "uscxml/Message.h"
+#include "uscxml/Interpreter.h"
+#include "uscxml/plugins/datamodel/promela/PromelaDataModel.h"
+#include "uscxml/plugins/datamodel/promela/PromelaParser.h"
+
+#include <assert.h>
+#include <boost/algorithm/string.hpp>
+#include <iostream>
+
+using namespace uscxml;
+using namespace boost;
+
+
+int main(int argc, char** argv) {
+
+ {
+ PromelaParser ast("bit b;");
+ ast.dump();
+ }
+
+ {
+ PromelaParser ast1("a + (1 << b)");
+ PromelaParser ast2("(a + 1) << b");
+ ast1.dump();
+ ast2.dump();
+ }
+
+ {
+ PromelaParser ast("(b < N)");
+ ast.dump();
+ }
+
+ {
+ PromelaParser ast("i+1");
+ ast.dump();
+ }
+
+ {
+ PromelaParser ast("(mt+1)%MAX;");
+ ast.dump();
+ }
+
+} \ No newline at end of file
diff --git a/test/src/test-w3c.cpp b/test/src/test-w3c.cpp
index df433b8..102487f 100644
--- a/test/src/test-w3c.cpp
+++ b/test/src/test-w3c.cpp
@@ -1,6 +1,7 @@
#include "uscxml/config.h"
#include "uscxml/Interpreter.h"
#include "uscxml/DOMUtils.h"
+#include "uscxml/transform/ChartToFSM.h"
#include <glog/logging.h>
#include <boost/algorithm/string.hpp>
@@ -20,6 +21,8 @@
#include "XGetopt.h"
#endif
+static bool withFlattening = false;
+static std::string documentURI;
#ifdef HAS_EXECINFO_H
void printBacktrace(void** array, int size) {
@@ -87,15 +90,72 @@ void customTerminate() {
}
class W3CStatusMonitor : public uscxml::InterpreterMonitor {
+
+ void beforeTakingTransition(uscxml::Interpreter interpreter, const Arabica::DOM::Element<std::string>& transition, bool moreComing) {
+ std::cout << "Transition: " << uscxml::DOMUtils::xPathForNode(transition) << std::endl;
+ }
+
+ void onStableConfiguration(uscxml::Interpreter interpreter) {
+ std::cout << "Config: {";
+ printNodeSet(interpreter.getConfiguration());
+ std::cout << "}" << std::endl;
+ }
+
+ void beforeProcessingEvent(uscxml::Interpreter interpreter, const uscxml::Event& event) {
+ std::cout << "Event: " << event.name << std::endl;
+ }
+
+ void beforeExitingState(uscxml::Interpreter interpreter, const Arabica::DOM::Element<std::string>& state, bool moreComing) {
+ exitingStates.push_back(state);
+ if (!moreComing) {
+ std::cout << "Exiting: {";
+ printNodeSet(exitingStates);
+ std::cout << "}" << std::endl;
+ exitingStates = Arabica::XPath::NodeSet<std::string>();
+ }
+ }
+
+ void beforeEnteringState(uscxml::Interpreter interpreter, const Arabica::DOM::Element<std::string>& state, bool moreComing) {
+ enteringStates.push_back(state);
+ if (!moreComing) {
+ std::cout << "Entering: {";
+ printNodeSet(enteringStates);
+ std::cout << "}" << std::endl;
+ enteringStates = Arabica::XPath::NodeSet<std::string>();
+ }
+
+ }
+
+ void printNodeSet(const Arabica::XPath::NodeSet<std::string>& config) {
+ std::string seperator;
+ for (int i = 0; i < config.size(); i++) {
+ std::cout << seperator << ATTR(config[i], "id");
+ seperator = ", ";
+ }
+ }
+
void beforeCompletion(uscxml::Interpreter interpreter) {
Arabica::XPath::NodeSet<std::string> config = interpreter.getConfiguration();
- if (config.size() == 1 && boost::iequals(ATTR(config[0], "id"), "pass")) {
- std::cout << "TEST SUCCEEDED" << std::endl;
- exit(EXIT_SUCCESS);
+ if (config.size() == 1) {
+ if (withFlattening) {
+ std::cout << ATTR(config[0], "id") << std::endl;
+ if (boost::starts_with(ATTR(config[0], "id"), "active-pass")) {
+ std::cout << "TEST SUCCEEDED" << std::endl;
+ exit(EXIT_SUCCESS);
+ }
+ } else {
+ if (boost::iequals(ATTR(config[0], "id"), "pass")) {
+ std::cout << "TEST SUCCEEDED" << std::endl;
+ exit(EXIT_SUCCESS);
+ }
+ }
}
std::cout << "TEST FAILED" << std::endl;
exit(EXIT_FAILURE);
}
+
+ Arabica::XPath::NodeSet<std::string> exitingStates;
+ Arabica::XPath::NodeSet<std::string> enteringStates;
};
int main(int argc, char** argv) {
@@ -116,12 +176,25 @@ int main(int argc, char** argv) {
google::InitGoogleLogging(argv[0]);
google::LogToStderr();
-// for (int i = 0; i < argc; i++)
-// std::cout << argv[i] << std::endl;
-// std::cout << optind << std::endl;
+
+ for (int i = 1; i < argc; i++) {
+ if (std::string(argv[i]) == "-f") {
+ withFlattening = true;
+ } else {
+ documentURI = argv[i];
+ }
+ }
+
+ Interpreter interpreter;
+ LOG(INFO) << "Processing " << documentURI << (withFlattening ? " FSM converted" : "");
+ if (withFlattening) {
+ Interpreter flatInterpreter = Interpreter::fromURI(documentURI);
+ interpreter = Interpreter::fromDOM(ChartToFSM::flatten(flatInterpreter.getDocument(), flatInterpreter.getNameSpaceInfo()), flatInterpreter.getNameSpaceInfo());
+ interpreter.setNameSpaceInfo(interpreter.getNameSpaceInfo());
+ } else {
+ interpreter = Interpreter::fromURI(documentURI);
+ }
- LOG(INFO) << "Processing " << argv[1];
- Interpreter interpreter = Interpreter::fromURI(argv[1]);
if (interpreter) {
// interpreter.setCmdLineOptions(argc, argv);
// interpreter->setCapabilities(Interpreter::CAN_NOTHING);