Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 6 additions & 8 deletions cli/cmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1257,14 +1257,12 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
// --std
else if (std::strncmp(argv[i], "--std=", 6) == 0) {
const std::string std = argv[i] + 6;
// TODO: print error when standard is unknown
if (std::strncmp(std.c_str(), "c++", 3) == 0) {
mSettings.standards.cpp = Standards::getCPP(std);
}
else if (std::strncmp(std.c_str(), "c", 1) == 0) {
mSettings.standards.c = Standards::getC(std);
}
else {
Standards tmp;
if (tmp.setC(std)) {
mSettings.standards.c = tmp.c;
} else if (tmp.setCPP(std)) {
mSettings.standards.cpp = tmp.cpp;
} else {
mLogger.printError("unknown --std value '" + std + "'");
return Result::Fail;
}
Expand Down
58 changes: 56 additions & 2 deletions test/testcmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,12 @@ class TestCmdlineParser : public TestFixture {
TEST_CASE(stdcpp11);
TEST_CASE(stdunknown1);
TEST_CASE(stdunknown2);
TEST_CASE(stdoverwrite1);
TEST_CASE(stdoverwrite2);
TEST_CASE(stdoverwrite3);
TEST_CASE(stdoverwrite4);
TEST_CASE(stdmulti1);
TEST_CASE(stdmulti2);
TEST_CASE(platformWin64);
TEST_CASE(platformWin32A);
TEST_CASE(platformWin32W);
Expand Down Expand Up @@ -1369,8 +1375,56 @@ class TestCmdlineParser : public TestFixture {
void stdunknown2() {
REDIRECT;
const char *const argv[] = {"cppcheck", "--std=cplusplus11", "file.cpp"};
TODO_ASSERT_EQUALS(static_cast<int>(CmdLineParser::Result::Fail), static_cast<int>(CmdLineParser::Result::Success), static_cast<int>(parser->parseFromArgs(3, argv)));
TODO_ASSERT_EQUALS("cppcheck: error: unknown --std value 'cplusplus11'\n", "", logger->str());
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parser->parseFromArgs(3, argv));
ASSERT_EQUALS("cppcheck: error: unknown --std value 'cplusplus11'\n", logger->str());
}

void stdoverwrite1() {
REDIRECT;
const char *const argv[] = {"cppcheck", "--std=c++11", "--std=c++23", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(4, argv));
ASSERT_EQUALS_ENUM(Standards::CPP23, settings->standards.cpp);
ASSERT_EQUALS_ENUM(Standards::CLatest, settings->standards.c);
}

void stdoverwrite2() {
REDIRECT;
const char *const argv[] = {"cppcheck", "--std=c99", "--std=c11", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(4, argv));
ASSERT_EQUALS_ENUM(Standards::C11, settings->standards.c);
ASSERT_EQUALS_ENUM(Standards::CPPLatest, settings->standards.cpp);
}

void stdoverwrite3() {
REDIRECT;
const char *const argv[] = {"cppcheck", "--std=c99", "--std=c++11", "--std=c11", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(5, argv));
ASSERT_EQUALS_ENUM(Standards::C11, settings->standards.c);
ASSERT_EQUALS_ENUM(Standards::CPP11, settings->standards.cpp);
}

void stdoverwrite4() {
REDIRECT;
const char *const argv[] = {"cppcheck", "--std=c++11", "--std=c99", "--std=c++23", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(5, argv));
ASSERT_EQUALS_ENUM(Standards::CPP23, settings->standards.cpp);
ASSERT_EQUALS_ENUM(Standards::C99, settings->standards.c);
}

void stdmulti1() {
REDIRECT;
const char *const argv[] = {"cppcheck", "--std=c99", "--std=c++11", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(4, argv));
ASSERT_EQUALS_ENUM(Standards::C99, settings->standards.c);
ASSERT_EQUALS_ENUM(Standards::CPP11, settings->standards.cpp);
}

void stdmulti2() {
REDIRECT;
const char *const argv[] = {"cppcheck", "--std=c++20", "--std=c11", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(4, argv));
ASSERT_EQUALS_ENUM(Standards::C11, settings->standards.c);
ASSERT_EQUALS_ENUM(Standards::CPP20, settings->standards.cpp);
}

void platformWin64() {
Expand Down