From 53c478d5010b860cfbe6271c8fe3470c0a269c04 Mon Sep 17 00:00:00 2001 From: Gabriel Schlozer Date: Mon, 29 Aug 2016 23:56:40 +0200 Subject: [PATCH] Partially extracted ArgumentsReader --- UnitTest++/ArgumentsReader.h | 69 ++++++++++++++++++++++++++++++++++++ UnitTest++/TestRunner.cpp | 61 ++++++------------------------- 2 files changed, 80 insertions(+), 50 deletions(-) create mode 100644 UnitTest++/ArgumentsReader.h diff --git a/UnitTest++/ArgumentsReader.h b/UnitTest++/ArgumentsReader.h new file mode 100644 index 0000000..6acaa22 --- /dev/null +++ b/UnitTest++/ArgumentsReader.h @@ -0,0 +1,69 @@ +#include +#include + +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 _arguments; + }; +} \ No newline at end of file diff --git a/UnitTest++/TestRunner.cpp b/UnitTest++/TestRunner.cpp index 1f7556c..2e3539a 100644 --- a/UnitTest++/TestRunner.cpp +++ b/UnitTest++/TestRunner.cpp @@ -5,6 +5,7 @@ #include "TimeHelpers.h" #include "MemoryOutStream.h" #include "SuitePredicate.h" +#include "ArgumentsReader.h" #include @@ -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) {