mirror of
https://github.com/unittest-cpp/unittest-cpp
synced 2026-09-26 16:19:30 +03:00
Partially extracted ArgumentsReader
This commit is contained in:
parent
83b3040364
commit
53c478d501
2 changed files with 80 additions and 50 deletions
69
UnitTest++/ArgumentsReader.h
Normal file
69
UnitTest++/ArgumentsReader.h
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace UnitTest {
|
||||
|
||||
using namespace std;
|
||||
|
||||
class ArgumentsReader
|
||||
{
|
||||
public:
|
||||
ArgumentsReader(int argc, char**argv)
|
||||
{
|
||||
_arguments.reserve(argc);
|
||||
for (int i = 1; i < argc; i++)
|
||||
{
|
||||
_arguments.push_back(argv[i]);
|
||||
}
|
||||
}
|
||||
|
||||
bool findArgumentListIndex(const string & argumentName, int & outFrom, int & outCount)
|
||||
{
|
||||
if (_arguments.empty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
outCount = 0;
|
||||
if (argumentName.empty())
|
||||
{
|
||||
outFrom = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
outFrom = 0;
|
||||
for (size_t i = 1; i < _arguments.size(); i++)
|
||||
{
|
||||
if (argumentName == _arguments[i])
|
||||
{
|
||||
outFrom = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (outFrom == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i = outFrom; i < _arguments.size(); i++)
|
||||
{
|
||||
string value = _arguments[i];
|
||||
if (value.size() >= 2 && value.substr(0, 2) == "--")
|
||||
{
|
||||
break;
|
||||
}
|
||||
outCount++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
string getArgument(int index)
|
||||
{
|
||||
return _arguments[index];
|
||||
}
|
||||
|
||||
private:
|
||||
vector<string> _arguments;
|
||||
};
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
#include "TimeHelpers.h"
|
||||
#include "MemoryOutStream.h"
|
||||
#include "SuitePredicate.h"
|
||||
#include "ArgumentsReader.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
|
|
@ -18,84 +19,44 @@ namespace UnitTest {
|
|||
return runner.RunTestsIf(Test::GetTestList(), NULL, True(), 0);
|
||||
}
|
||||
|
||||
bool findArgumentListIndex(int argc, char**argv, char const* argument, int & outFrom, int & outCount)
|
||||
{
|
||||
if (argc <= 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
outCount = 0;
|
||||
if (strlen(argument) > 0)
|
||||
{
|
||||
outFrom = 0;
|
||||
for (int i = 1; i < argc; i++)
|
||||
{
|
||||
if (strcmp(argument, argv[i]) == 0)
|
||||
{
|
||||
outFrom = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (outFrom == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
outFrom = 1;
|
||||
}
|
||||
|
||||
for (int i = outFrom; i < argc; i++)
|
||||
{
|
||||
char* value = argv[i];
|
||||
if (strlen(value) >= 2 && value[0] == '-'&& value[1] == '-')
|
||||
{
|
||||
break;
|
||||
}
|
||||
outCount++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool readSuiteArgument(SuitePredicate & predicate, int argc, char**argv, char const* argument)
|
||||
bool readSuiteArgument(ArgumentsReader & arguments, SuitePredicate & predicate, char const* argument)
|
||||
{
|
||||
int from, count;
|
||||
if (!findArgumentListIndex(argc, argv, argument, from, count))
|
||||
if (!arguments.findArgumentListIndex(argument, from, count))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
for (int i = from; i < from + count; i++)
|
||||
{
|
||||
predicate.addSuite(argv[i]);
|
||||
predicate.addSuite(arguments.getArgument(i).c_str());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool readTestArgument(SuitePredicate & predicate, int argc, char**argv, char const* argument)
|
||||
bool readTestArgument(ArgumentsReader & arguments, SuitePredicate & predicate, char const* argument)
|
||||
{
|
||||
int from, count;
|
||||
if (!findArgumentListIndex(argc, argv, argument, from, count))
|
||||
if (!arguments.findArgumentListIndex(argument, from, count))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
for (int i = from; i < from + count; i++)
|
||||
{
|
||||
predicate.addTest(argv[i]);
|
||||
predicate.addTest(arguments.getArgument(i).c_str());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int RunTestsCmd(int argc, char**argv)
|
||||
{
|
||||
ArgumentsReader arguments(argc, argv);
|
||||
SuitePredicate predicate;
|
||||
|
||||
bool specific = false;
|
||||
specific |= readSuiteArgument(predicate, argc, argv, "--suite");
|
||||
specific |= readTestArgument(predicate, argc, argv, "--test");
|
||||
specific |= readTestArgument(predicate, argc, argv, "");
|
||||
specific |= readSuiteArgument(arguments, predicate, "--suite");
|
||||
specific |= readTestArgument(arguments, predicate, "--test");
|
||||
specific |= readTestArgument(arguments, predicate, "");
|
||||
|
||||
if (!specific)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue