// Standard
#include <string>
#include <vector>
+#include <map>
// Project
#include <anna/core/DataBlock.hpp>
}
}
-class RealmNode;
+class OriginHost;
class TestCase {
anna::xml::Node* asXML(anna::xml::Node* parent) const throw();
};
- TestCase(unsigned int id) : a_id(id), a_state(State::Initialized), a_startTime(0) { /*a_stepsIt = a_steps.end()*/;}
+ TestCase(unsigned int id);
~TestCase();
struct State { enum _v { Initialized, InProgress, Failed, Success }; };
bool inProgress() const throw() { return (getState() == State::InProgress); }
bool hasSameCondition(const TestCondition &condition) const throw();
+ // Interactivity:
+ void makeInteractive(bool yes = true) throw() { a_interactiveAmount = (yes ? 0:-1); }
+ void addInteractiveAmount(unsigned int amount) throw() {
+ if (a_interactiveAmount == -1) makeInteractive();
+ if (amount == 0) return;
+ a_interactiveAmount += amount;
+ process();
+ }
+ int interactiveAmount() const throw() { return a_interactiveAmount; }
+ void interactiveExecution() throw() { a_interactiveAmount --; }
+
// Step type & information
void addTimeout(const anna::Millisecond &timeout) throw(anna::RuntimeException);
- void addSendxml2e(const anna::DataBlock &db, RealmNode *realm, int stepNumber) throw(anna::RuntimeException);
- void addSendxml2c(const anna::DataBlock &db, RealmNode *realm, int stepNumber) throw(anna::RuntimeException);
+ void addSendxml2e(const anna::DataBlock &db, OriginHost *host, int stepNumber) throw(anna::RuntimeException);
+ void addSendxml2c(const anna::DataBlock &db, OriginHost *host, int stepNumber) throw(anna::RuntimeException);
void addDelay(const anna::Millisecond &delay) throw(anna::RuntimeException);
void addWait(bool fromEntity,
const std::string &code, const std::string &bitR, const std::string &hopByHop, const std::string &applicationId,
const std::string &msisdn, const std::string &imsi, const std::string &serviceContextId) throw(anna::RuntimeException);
void addWaitAnswer(bool fromEntity, int stepNumber) throw(anna::RuntimeException);
void addWaitRegexp(bool fromEntity, const std::string ®exp) throw(anna::RuntimeException);
- void addCmd(const std::string &script, const std::string ¶meters) throw(anna::RuntimeException);
+ void addCommand(const std::string &cmd) throw(anna::RuntimeException);
// Process:
//helpers
int steps() const throw() { return a_steps.size(); }
+ void addStep(TestStep *step) throw() { a_steps.push_back(step); }
+
TestStepWait *searchNextWaitConditionFulfilled(const anna::DataBlock &message, bool waitFromEntity) throw();
// When a message arrives, we identify the test case by mean the Session-Id. Then, from the current step iterator (included),
// we search for a fulfilling condition for that message. The first found, is 'completed' and then breaks the search.
State::_v a_state;
anna::Millisecond a_startTime;
DebugSummary a_debugSummary; // used when a test case has failed, uncovered message conditions, and any other hint.
+ int a_interactiveAmount;
friend class TestStep;
};