mirror of
https://github.com/unittest-cpp/unittest-cpp
synced 2026-09-26 16:19:30 +03:00
global ignore + tests
This commit is contained in:
parent
e583e3df17
commit
7df39dd501
3 changed files with 81 additions and 6 deletions
|
|
@ -9,7 +9,8 @@ using namespace UnitTest;
|
|||
ParameterizedManager::ParameterizedManager()
|
||||
: _currentTest(nullptr),
|
||||
_nextTestBackup(nullptr),
|
||||
_iterationDone(false)
|
||||
_iterationDone(false),
|
||||
_executing(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -69,11 +70,16 @@ void ParameterizedManager::beginExecute(TestDetails const * const details)
|
|||
{
|
||||
if (_currentTest != nullptr)
|
||||
{
|
||||
if (isCurrentTest(details))
|
||||
{
|
||||
_executing = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
_currentTest = retrieveTest(details);
|
||||
_nextTestBackup = _currentTest->m_next;
|
||||
_iterationDone = false;
|
||||
_executing = true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -106,6 +112,29 @@ void ParameterizedManager::endExecute(TestDetails const * const details)
|
|||
}
|
||||
|
||||
_iterationDone = false;
|
||||
_executing = false;
|
||||
}
|
||||
|
||||
|
||||
void ParameterizedManager::dumpGlobalIgnoredIndexes(ParameterizedTestAbstract* const parameterized)
|
||||
{
|
||||
ParameterizedIndexes::iterator it = _ignoredIndexesGlobal.find(parameterized);
|
||||
if (it == _ignoredIndexesGlobal.end())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
vector<size_t> & ignoredIndexesLocal = _ignoredIndexes[parameterized];
|
||||
|
||||
const vector<size_t> & ignoredIndexesGlobal = it->second;
|
||||
for (size_t i = 0; i < ignoredIndexesGlobal.size(); i++)
|
||||
{
|
||||
size_t iIndex = ignoredIndexesGlobal[i];
|
||||
if (find(ignoredIndexesLocal.begin(), ignoredIndexesLocal.end(), iIndex) == ignoredIndexesLocal.end())
|
||||
{
|
||||
ignoredIndexesLocal.push_back(iIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -131,6 +160,10 @@ void ParameterizedManager::iterate(ParameterizedTestAbstract* const parameterize
|
|||
bool firstIteration = false;
|
||||
if (registerParameter(parameterized, firstIteration))
|
||||
{
|
||||
if (firstIteration)
|
||||
{
|
||||
dumpGlobalIgnoredIndexes(parameterized);
|
||||
}
|
||||
parameterized->onNewIteration(firstIteration);
|
||||
}
|
||||
}
|
||||
|
|
@ -159,14 +192,16 @@ bool ParameterizedManager::registerParameter(ParameterizedTestAbstract* const pa
|
|||
}
|
||||
|
||||
|
||||
void ParameterizedManager::ignoreIndex(ParameterizedTestAbstract* const parameterized, size_t index)
|
||||
ParameterizedManager & ParameterizedManager::ignoreIndex(ParameterizedTestAbstract* const parameterized, size_t index)
|
||||
{
|
||||
if (_iterationDone)
|
||||
{
|
||||
throw runtime_error("can not ignore indexes after iteration began");
|
||||
}
|
||||
|
||||
vector<size_t> & ignoredIndexes = _ignoredIndexes[parameterized];
|
||||
vector<size_t> & ignoredIndexes = (_executing)
|
||||
? _ignoredIndexes[parameterized]
|
||||
: _ignoredIndexesGlobal[parameterized];
|
||||
|
||||
if (index >= parameterized->parametersCount())
|
||||
{
|
||||
|
|
@ -175,7 +210,7 @@ void ParameterizedManager::ignoreIndex(ParameterizedTestAbstract* const paramete
|
|||
|
||||
if (find(ignoredIndexes.begin(), ignoredIndexes.end(), index) != ignoredIndexes.end())
|
||||
{
|
||||
return; // already inserted
|
||||
return *this; // already inserted
|
||||
}
|
||||
|
||||
if (ignoredIndexes.size() + 1 == parameterized->parametersCount())
|
||||
|
|
@ -184,6 +219,7 @@ void ParameterizedManager::ignoreIndex(ParameterizedTestAbstract* const paramete
|
|||
}
|
||||
|
||||
ignoredIndexes.push_back(index);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -20,21 +20,26 @@ namespace UnitTest
|
|||
void beginExecute(TestDetails const * const details);
|
||||
void endExecute(TestDetails const * const details);
|
||||
void updateParameter(ParameterizedTestAbstract* const parameterized);
|
||||
void ignoreIndex(ParameterizedTestAbstract* const parameterized, size_t index);
|
||||
ParameterizedManager & ignoreIndex(ParameterizedTestAbstract* const parameterized, size_t index);
|
||||
const vector<ParameterizedTestAbstract*> & getStack(TestDetails const * const details) const;
|
||||
|
||||
private:
|
||||
typedef unordered_map<ParameterizedTestAbstract*, vector<size_t>> ParameterizedIndexes;
|
||||
|
||||
ParameterizedManager();
|
||||
virtual ~ParameterizedManager();
|
||||
TestListNode* const retrieveTest(TestDetails const * const details);
|
||||
void dumpGlobalIgnoredIndexes(ParameterizedTestAbstract* const parameterized);
|
||||
void iterate(ParameterizedTestAbstract* const parameterized);
|
||||
bool registerParameter(ParameterizedTestAbstract* const parameterized, bool & outFirst);
|
||||
|
||||
TestListNode* _currentTest;
|
||||
TestListNode* _nextTestBackup;
|
||||
vector<ParameterizedTestAbstract*> _stack;
|
||||
unordered_map<ParameterizedTestAbstract*, vector<size_t>> _ignoredIndexes;
|
||||
ParameterizedIndexes _ignoredIndexes;
|
||||
ParameterizedIndexes _ignoredIndexesGlobal;
|
||||
volatile bool _iterationDone;
|
||||
volatile bool _executing;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <string>
|
||||
#include "UnitTest++/ParameterizedTest.h"
|
||||
#include "UnitTest++/ParameterizedManager.h"
|
||||
#include "ScopedCurrentTest.h"
|
||||
#include "RecordingReporter.h"
|
||||
|
||||
|
|
@ -274,4 +275,37 @@ SUITE(ParameterizedTestSimple)
|
|||
{
|
||||
CHECK_EQUAL("AIOY", ignoreSomeVowelsByValue);
|
||||
}
|
||||
|
||||
//////////
|
||||
|
||||
SET_SUITE_PARAMETERS(string, pzVowelPartial, {
|
||||
parameters = vowel.parameters();
|
||||
});
|
||||
|
||||
struct Initializer
|
||||
{
|
||||
Initializer()
|
||||
{
|
||||
ParameterizedManager::getInstance()
|
||||
.ignoreIndex(&pzVowelPartial, 1) // "E"
|
||||
.ignoreIndex(&pzVowelPartial, 4); // "U"
|
||||
}
|
||||
} initializerInstance;
|
||||
|
||||
string globalIgnoreSomeVowels;
|
||||
|
||||
// Note: the test is executed twice (A/B)
|
||||
TEST(GlobalIgnore_IgnoreSome_A)
|
||||
{
|
||||
globalIgnoreSomeVowels += pzVowelPartial();
|
||||
}
|
||||
TEST(GlobalIgnore_IgnoreSome_B)
|
||||
{
|
||||
globalIgnoreSomeVowels += pzVowelPartial();
|
||||
}
|
||||
|
||||
TEST(GlobalIgnore_IgnoreSome_Verify)
|
||||
{
|
||||
CHECK_EQUAL("AIOYAIOY", globalIgnoreSomeVowels);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue