From 9ab8eae0415b1e325e05a76404d1ed37dd1d87f2 Mon Sep 17 00:00:00 2001 From: Pavol Marko Date: Sat, 30 Apr 2005 15:52:26 +0000 Subject: [PATCH] Initial checkin --HG-- extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%4044 --- sourcehook/test/testevents.h | 69 ++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 sourcehook/test/testevents.h diff --git a/sourcehook/test/testevents.h b/sourcehook/test/testevents.h new file mode 100644 index 0000000..1c086c4 --- /dev/null +++ b/sourcehook/test/testevents.h @@ -0,0 +1,69 @@ +#ifndef __TESTEVENTS_H__ +#define __TESTEVENTS_H__ + +struct State +{ + virtual ~State() + { + + } + + virtual bool IsEqual(State *other) + { + return (typeid(other) == typeid(this)) ? true : false; + } +}; + +typedef std::list StateList; +StateList g_States; + +#define ADD_STATE(name) g_States.push_back(new name) + + +bool StatesOk(StateList *sl, ...) +{ + StateList requiredstates; + va_list argptr; + va_start(argptr, sl); + while (true) + { + State *cs = va_arg(argptr, State*); + if (!cs) + break; + requiredstates.push_back(cs); + } + va_end(argptr); + + if (requiredstates.size() != sl->size()) + { + for (StateList::iterator iter = requiredstates.begin(); iter != requiredstates.end(); ++iter) + delete *iter; + for (StateList::iterator iter = sl->begin(); iter != sl->end(); ++iter) + delete *iter; + sl->clear(); + return false; + } + + bool ok = true; + StateList::iterator req_iter = requiredstates.begin(); + for (StateList::iterator o_iter = sl->begin(); o_iter != sl->end(); ++o_iter, ++req_iter) + { + if (!(*o_iter)->IsEqual(*req_iter)) + { + ok = false; + break; + } + } + + for (StateList::iterator iter = requiredstates.begin(); iter != requiredstates.end(); ++iter) + delete *iter; + for (StateList::iterator iter = sl->begin(); iter != sl->end(); ++iter) + delete *iter; + sl->clear(); + + return ok; +} + +#define CHECK_STATES(mwah, myerr) if (!StatesOk mwah) { error=myerr; return false; } + +#endif \ No newline at end of file