Skip to content

Commit

Permalink
review: split testfunction
Browse files Browse the repository at this point in the history
  • Loading branch information
danmar committed Mar 28, 2024
1 parent d29d9db commit 6a94749
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 26 deletions.
22 changes: 11 additions & 11 deletions cli/cmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,15 +117,6 @@ static bool addPathsToSet(const std::string& fileName, std::set<std::string>& se
return true;
}

static std::string getVersion(const Settings& settings) {
if (!settings.cppcheckCfgProductName.empty())
return settings.cppcheckCfgProductName;
const char * const extraVersion = CppCheck::extraVersion();
if (*extraVersion != '\0')
return std::string("Cppcheck ") + CppCheck::version() + " ("+ extraVersion + ')';
return std::string("Cppcheck ") + CppCheck::version();
}

namespace {
class XMLErrorMessagesLogger : public ErrorLogger
{
Expand Down Expand Up @@ -365,7 +356,7 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
if (std::strcmp(argv[i], "--version") == 0) {
if (!loadCppcheckCfg())
return Result::Fail;
const std::string version = getVersion(mSettings);
const std::string version = getVersion();
mLogger.printRaw(version);
return Result::Exit;
}
Expand Down Expand Up @@ -493,7 +484,7 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
else if (std::strncmp(argv[i], "--check-version=", 16) == 0) {
if (!loadCppcheckCfg())
return Result::Fail;
const std::string actualVersion = getVersion(mSettings);
const std::string actualVersion = getVersion();
const std::string wantedVersion = argv[i] + 16;
if (actualVersion != wantedVersion) {
mLogger.printError("--check-version check failed. Aborting.");
Expand Down Expand Up @@ -1749,6 +1740,15 @@ void CmdLineParser::printHelp() const
mLogger.printRaw(oss.str());
}

std::string CmdLineParser::getVersion() const {
if (!mSettings.cppcheckCfgProductName.empty())
return mSettings.cppcheckCfgProductName;
const char * const extraVersion = CppCheck::extraVersion();
if (*extraVersion != '\0')
return std::string("Cppcheck ") + CppCheck::version() + " ("+ extraVersion + ')';
return std::string("Cppcheck ") + CppCheck::version();
}

bool CmdLineParser::isCppcheckPremium() const {
if (mSettings.cppcheckCfgProductName.empty())
Settings::loadCppcheckCfg(mSettings, mSettings.supprs);
Expand Down
5 changes: 5 additions & 0 deletions cli/cmdlineparser.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@ class CmdLineParser {
return mIgnoredPaths;
}

/**
* Get Cppcheck version
*/
std::string getVersion() const;

protected:

/**
Expand Down
29 changes: 14 additions & 15 deletions test/testcmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ class TestCmdlineParser : public TestFixture {
TEST_CASE(versionWithCfg);
TEST_CASE(versionExclusive);
TEST_CASE(versionWithInvalidCfg);
TEST_CASE(checkVersion);
TEST_CASE(checkVersionCorrect);
TEST_CASE(checkVersionIncorrect);
TEST_CASE(onefile);
TEST_CASE(onepath);
TEST_CASE(optionwithoutfile);
Expand Down Expand Up @@ -472,20 +473,18 @@ class TestCmdlineParser : public TestFixture {
ASSERT_EQUALS("cppcheck: error: could not load cppcheck.cfg - not a valid JSON - syntax error at line 2 near: \n", logger->str());
}

void checkVersion() {
REDIRECT;
// get version
const char * const argv1[] = {"cppcheck", "--version"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Exit, parser->parseFromArgs(2, argv1));
std::string version = logger->str();
version.erase(version.find('\n'));
const std::string checkCorrectVersion = "--check-version=" + version;
// check version: correct version
const char * const argv2[] = {"cppcheck", checkCorrectVersion.c_str(), "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(3, argv2));
// check version: incorrect version
const char * const argv3[] = {"cppcheck", "--check-version=Cppcheck 2.0", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parser->parseFromArgs(3, argv3));
void checkVersionCorrect() {
REDIRECT;
const std::string version = parser->getVersion();
const std::string checkVersion = "--check-version=" + version;
const char * const argv[] = {"cppcheck", checkVersion.c_str(), "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(3, argv));
}

void checkVersionIncorrect() {
REDIRECT;
const char * const argv[] = {"cppcheck", "--check-version=Cppcheck 2.0", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parser->parseFromArgs(3, argv));
ASSERT_EQUALS("cppcheck: error: --check-version check failed. Aborting.\n", logger->str());
}

Expand Down

0 comments on commit 6a94749

Please sign in to comment.