diff options
Diffstat (limited to 'test/src')
-rw-r--r-- | test/src/test-datamodel.cpp | 2 | ||||
-rw-r--r-- | test/src/test-lifecycle.cpp | 341 | ||||
-rw-r--r-- | test/src/test-stress.cpp | 3 |
3 files changed, 175 insertions, 171 deletions
diff --git a/test/src/test-datamodel.cpp b/test/src/test-datamodel.cpp index 2dced50..452d2b9 100644 --- a/test/src/test-datamodel.cpp +++ b/test/src/test-datamodel.cpp @@ -18,7 +18,7 @@ int main(int argc, char** argv) { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); #endif - + Interpreter interpreter = Interpreter::fromXML("<scxml></scxml>"); DataModel dm(Factory::getInstance()->createDataModel("ecmascript", interpreter.getImpl().get())); dm.evalAsString("var foo = 12"); diff --git a/test/src/test-lifecycle.cpp b/test/src/test-lifecycle.cpp index d28d1a5..4c044c4 100644 --- a/test/src/test-lifecycle.cpp +++ b/test/src/test-lifecycle.cpp @@ -48,7 +48,7 @@ void __cxa_throw (void *thrown_exception, void *pvtinfo, void (*dest)(void *)) { std::cerr << __FUNCTION__ << " will throw exception from " << std::endl; if (orig_cxa_throw == 0) load_orig_throw_code(); - + void *array[50]; size_t size = backtrace(array, 50); printBacktrace(array, size); @@ -71,204 +71,207 @@ void customTerminate() { }; } catch (const std::exception &e) { std::cerr << __FUNCTION__ << " caught unhandled exception. what(): " - << e.what() << std::endl; + << e.what() << std::endl; } catch (const uscxml::Event &e) { std::cerr << __FUNCTION__ << " caught unhandled exception. Event: " - << e << std::endl; + << e << std::endl; } catch (...) { std::cerr << __FUNCTION__ << " caught unknown/unhandled exception." - << std::endl; + << std::endl; } - + #ifdef HAS_EXECINFO_H void * array[50]; int size = backtrace(array, 50); - + printBacktrace(array, size); #endif abort(); } int main(int argc, char** argv) { using namespace uscxml; - + std::set_terminate(customTerminate); - + #if defined(HAS_SIGNAL_H) && !defined(WIN32) signal(SIGPIPE, SIG_IGN); #endif - + google::InitGoogleLogging(argv[0]); google::LogToStderr(); InterpreterState state; - if (1) { - // syntactic xml parse error - const char* xml = "<invalid>"; - Interpreter interpreter = Interpreter::fromXML(xml); - state = interpreter.getState(); - assert(!interpreter); - assert(state == uscxml::InterpreterState::USCXML_FAULTED); - std::cout << interpreter.getState() << std::endl; - } + int iterations = 1; - if (1) { - // semantic xml parse error - const char* xml = "<invalid />"; - Interpreter interpreter = Interpreter::fromXML(xml); - state = interpreter.getState(); - assert(state == uscxml::InterpreterState::USCXML_INSTANTIATED); - - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FAULTED); - std::cout << interpreter.getState() << std::endl; - } + while(iterations--) { + if (1) { + // syntactic xml parse error + const char* xml = "<invalid>"; + Interpreter interpreter = Interpreter::fromXML(xml); + state = interpreter.getState(); + assert(!interpreter); + assert(state == uscxml::InterpreterState::USCXML_FAULTED); + std::cout << interpreter.getState() << std::endl; + } - if (1) { - // single macrostep, multiple runs - const char* xml = - "<scxml>" - " <state id=\"start\">" - " <transition target=\"done\" />" - " </state>" - " <final id=\"done\" />" - "</scxml>"; - - Interpreter interpreter = Interpreter::fromXML(xml); - assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); - interpreter.reset(); - assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); - interpreter.reset(); - assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); - interpreter.reset(); - assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); - } + if (1) { + // semantic xml parse error + const char* xml = "<invalid />"; + Interpreter interpreter = Interpreter::fromXML(xml); + state = interpreter.getState(); + assert(state == uscxml::InterpreterState::USCXML_INSTANTIATED); - if (1) { - // two microsteps - const char* xml = - "<scxml>" - " <state id=\"start\">" - " <transition target=\"s2\" />" - " </state>" - " <state id=\"s2\">" - " <transition target=\"done\" />" - " </state>" - " <final id=\"done\" />" - "</scxml>"; - - Interpreter interpreter = Interpreter::fromXML(xml); - - assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); - } + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FAULTED); + std::cout << interpreter.getState() << std::endl; + } - if (0) { - // macrostep in between - const char* xml = - "<scxml>" - " <state id=\"start\">" - " <onentry>" - " <send event=\"continue\" delay=\"2s\"/>" - " </onentry>" - " <transition target=\"s2\" event=\"continue\" />" - " </state>" - " <state id=\"s2\">" - " <transition target=\"done\" />" - " </state>" - " <final id=\"done\" />" - "</scxml>"; - - Interpreter interpreter = Interpreter::fromXML(xml); - - assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE); - assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); - interpreter.reset(); - assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE); - assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); - } + if (1) { + // single macrostep, multiple runs + const char* xml = + "<scxml>" + " <state id=\"start\">" + " <transition target=\"done\" />" + " </state>" + " <final id=\"done\" />" + "</scxml>"; - if (1) { - // macrostep in between, external event - const char* xml = - "<scxml>" - " <state id=\"start\">" - " <transition target=\"s2\" event=\"continue\" />" - " </state>" - " <state id=\"s2\">" - " <transition target=\"done\" />" - " </state>" - " <final id=\"done\" />" - "</scxml>"; - - Interpreter interpreter = Interpreter::fromXML(xml); - - assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE); - interpreter.receive(Event("continue")); - assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); - interpreter.reset(); - assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE); - interpreter.receive(Event("continue")); - assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); - assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); - } + Interpreter interpreter = Interpreter::fromXML(xml); + assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); + interpreter.reset(); + assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); + interpreter.reset(); + assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); + interpreter.reset(); + assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); + } + + if (1) { + // two microsteps + const char* xml = + "<scxml>" + " <state id=\"start\">" + " <transition target=\"s2\" />" + " </state>" + " <state id=\"s2\">" + " <transition target=\"done\" />" + " </state>" + " <final id=\"done\" />" + "</scxml>"; + + Interpreter interpreter = Interpreter::fromXML(xml); + + assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); + } + + if (0) { + // macrostep in between + const char* xml = + "<scxml>" + " <state id=\"start\">" + " <onentry>" + " <send event=\"continue\" delay=\"2s\"/>" + " </onentry>" + " <transition target=\"s2\" event=\"continue\" />" + " </state>" + " <state id=\"s2\">" + " <transition target=\"done\" />" + " </state>" + " <final id=\"done\" />" + "</scxml>"; + + Interpreter interpreter = Interpreter::fromXML(xml); + + assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE); + assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); + interpreter.reset(); + assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE); + assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); + } + + if (1) { + // macrostep in between, external event + const char* xml = + "<scxml>" + " <state id=\"start\">" + " <transition target=\"s2\" event=\"continue\" />" + " </state>" + " <state id=\"s2\">" + " <transition target=\"done\" />" + " </state>" + " <final id=\"done\" />" + "</scxml>"; + + Interpreter interpreter = Interpreter::fromXML(xml); + + assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE); + interpreter.receive(Event("continue")); + assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); + interpreter.reset(); + assert(interpreter.getState() == uscxml::InterpreterState::USCXML_INSTANTIATED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_IDLE); + interpreter.receive(Event("continue")); + assert(interpreter.step(true) == uscxml::InterpreterState::USCXML_MACROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_MICROSTEPPED); + assert(interpreter.step() == uscxml::InterpreterState::USCXML_FINISHED); + } + + if (1) { + // macrostep in between, external event + const char* xml = + "<scxml>" + " <state id=\"start\">" + " <transition target=\"s2\" event=\"continue\" />" + " </state>" + " <state id=\"s2\">" + " <transition target=\"done\" />" + " </state>" + " <final id=\"done\" />" + "</scxml>"; + + Interpreter interpreter = Interpreter::fromXML(xml); + interpreter.start(); + // assume interpreter is started + assert(interpreter.getState() & InterpreterState::USCXML_THREAD_STARTED); + tthread::this_thread::sleep_for(tthread::chrono::milliseconds(100)); + + // assume it is started and running + std::cout << interpreter.getState() << std::endl; + + assert(interpreter.getState() & InterpreterState::USCXML_THREAD_STARTED); + assert(interpreter.getState() & InterpreterState::USCXML_THREAD_RUNNING); + assert(interpreter.getState() & InterpreterState::USCXML_IDLE); + + interpreter.receive(Event("continue")); + tthread::this_thread::sleep_for(tthread::chrono::milliseconds(200)); - if (1) { - // macrostep in between, external event - const char* xml = - "<scxml>" - " <state id=\"start\">" - " <transition target=\"s2\" event=\"continue\" />" - " </state>" - " <state id=\"s2\">" - " <transition target=\"done\" />" - " </state>" - " <final id=\"done\" />" - "</scxml>"; - - Interpreter interpreter = Interpreter::fromXML(xml); - interpreter.start(); - // assume interpreter is started - assert(interpreter.getState() & InterpreterState::USCXML_THREAD_STARTED); - tthread::this_thread::sleep_for(tthread::chrono::milliseconds(100)); - - // assume it is started and running - std::cout << interpreter.getState() << std::endl; - - assert(interpreter.getState() & InterpreterState::USCXML_THREAD_STARTED); - assert(interpreter.getState() & InterpreterState::USCXML_THREAD_RUNNING); - assert(interpreter.getState() & InterpreterState::USCXML_IDLE); - - interpreter.receive(Event("continue")); - tthread::this_thread::sleep_for(tthread::chrono::milliseconds(200)); - - std::cout << interpreter.getState() << std::endl; - int state = interpreter.getState(); - assert(state & InterpreterState::USCXML_FINISHED); - assert(!(state & InterpreterState::USCXML_THREAD_STARTED)); - assert(!(state & InterpreterState::USCXML_THREAD_RUNNING)); + std::cout << interpreter.getState() << std::endl; + int state = interpreter.getState(); + assert(state & InterpreterState::USCXML_FINISHED); + assert(!(state & InterpreterState::USCXML_THREAD_STARTED)); + assert(!(state & InterpreterState::USCXML_THREAD_RUNNING)); + } } - return EXIT_SUCCESS; }
\ No newline at end of file diff --git a/test/src/test-stress.cpp b/test/src/test-stress.cpp index 6d28829..6782328 100644 --- a/test/src/test-stress.cpp +++ b/test/src/test-stress.cpp @@ -124,6 +124,7 @@ int main(int argc, char** argv) { google::InitGoogleLogging(argv[0]); google::LogToStderr(); + HTTPServer::getInstance(8088, 8089); #ifndef _WIN32 opterr = 0; #endif @@ -150,7 +151,7 @@ int main(int argc, char** argv) { interpreter.interpret(); } #else - + DirectoryWatch* watcher = new DirectoryWatch(argv[optind], true); watcher->updateEntries(true); std::map<std::string, struct stat> entries = watcher->getAllEntries(); |