added feature ignore index by parameter name

This commit is contained in:
Gabriel Schlozer 2016-07-28 12:26:28 +02:00
parent 4543b15231
commit 672b17bddd
2 changed files with 39 additions and 1 deletions

View file

@ -170,6 +170,7 @@ void ParameterizedManager::clearNonGlobalIgnoredIndexes()
void ParameterizedManager::updateParameter(TestParameterAbstract* const parameterized)
{
importIgnoredParameter(parameterized);
vector<IgnoredIndex> & ignoredIndexes = _ignoredIndexes[parameterized];
bool repeat = true;
while (repeat)
@ -232,6 +233,24 @@ vector<ParameterizedManager::IgnoredIndex>::iterator ParameterizedManager::findI
}
void ParameterizedManager::importIgnoredParameter(TestParameterAbstract* const parameterized)
{
IgnoredIndexesByNameMap::iterator it = _pendingIgnoredIndexes.find(parameterized->getName());
if (it == _pendingIgnoredIndexes.end())
{
return;
}
vector<IgnoredIndex> & pendingIgnoredIndexes = it->second;
while (!pendingIgnoredIndexes.empty())
{
const IgnoredIndex & iIgnored = pendingIgnoredIndexes.back();
ignoreIndex(parameterized, iIgnored.index, iIgnored.global ? GLOBAL : LOCAL);
pendingIgnoredIndexes.pop_back();
}
}
bool ParameterizedManager::isGlobal(IgnoreScope scope)
{
switch (scope)
@ -280,6 +299,21 @@ ParameterizedManager & ParameterizedManager::ignoreIndex(TestParameterAbstract*
}
ParameterizedManager & ParameterizedManager::ignoreIndex(const string & parameterName, size_t index, IgnoreScope scope)
{
if (parameterName.empty())
{
throw invalid_argument("Empty parameter name given in ignore index");
}
// Note: do not care about duplicates indexes for now
bool global = isGlobal(scope);
_pendingIgnoredIndexes[parameterName].push_back(IgnoredIndex(index, global));
return *this;
}
bool ParameterizedManager::isIndexIgnored(TestParameterAbstract* const parameterized, size_t index)
{
vector<IgnoredIndex> & ignoredIndexes = _ignoredIndexes[parameterized];

View file

@ -21,6 +21,7 @@ namespace UnitTest
void endExecute(TestDetails const * const details);
void updateParameter(TestParameterAbstract* const parameterized);
ParameterizedManager & ignoreIndex(TestParameterAbstract* const parameterized, size_t index, IgnoreScope scope = AUTO);
ParameterizedManager & ignoreIndex(const string & parameterName, size_t index, IgnoreScope scope = AUTO);
bool isIndexIgnored(TestParameterAbstract* const parameterized, size_t index);
const vector<TestParameterAbstract*> & getStack(TestDetails const * const details) const;
@ -31,8 +32,9 @@ namespace UnitTest
size_t index;
bool global;
};
typedef unordered_map<TestParameterAbstract*, vector<IgnoredIndex>> IgnoredIndexesMap;
typedef unordered_map<string, vector<IgnoredIndex>> IgnoredIndexesByNameMap;
ParameterizedManager();
virtual ~ParameterizedManager();
@ -42,12 +44,14 @@ namespace UnitTest
bool hasMoreIndexes(TestParameterAbstract* const parameterized);
bool isGlobal(IgnoreScope scope);
vector<IgnoredIndex>::iterator findIgnored(vector<IgnoredIndex> & ignoredIndexes, size_t index);
void importIgnoredParameter(TestParameterAbstract* const parameterized);
void clearNonGlobalIgnoredIndexes();
TestListNode* _currentTest;
TestListNode* _nextTestBackup;
vector<TestParameterAbstract*> _stack;
IgnoredIndexesMap _ignoredIndexes;
IgnoredIndexesByNameMap _pendingIgnoredIndexes;
volatile bool _iterationDone;
volatile bool _executing;
};