diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-04-09 22:51:16 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-04-09 22:51:16 (GMT) |
commit | 8a9b432d36e5748898abffe9f1607d93e45bab4b (patch) | |
tree | 0b95e832a9b3b2daf9ae45bf81084eda580752a0 /test/src | |
parent | 7d98ac1fd2e9da3162f3b6d38b22106f463edd9d (diff) | |
download | uscxml-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.cpp | 44 | ||||
-rw-r--r-- | test/src/test-w3c.cpp | 89 |
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); |