TestSingleExecutor: test clang-tidy invocation (#5294)

This commit is contained in:
Oliver Stöneberg 2023-08-07 20:47:24 +02:00 committed by GitHub
parent dcdf67a694
commit 988edd24c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 59 additions and 5 deletions

View File

@ -280,9 +280,11 @@ unsigned int ProcessExecutor::check()
if (iFileSettings != mSettings.project.fileSettings.end()) { if (iFileSettings != mSettings.project.fileSettings.end()) {
resultOfCheck = fileChecker.check(*iFileSettings); resultOfCheck = fileChecker.check(*iFileSettings);
// TODO: call analyseClangTidy()
} else { } else {
// Read file from a file // Read file from a file
resultOfCheck = fileChecker.check(iFile->first); resultOfCheck = fileChecker.check(iFile->first);
// TODO: call analyseClangTidy()?
} }
pipewriter.writeEnd(std::to_string(resultOfCheck)); pipewriter.writeEnd(std::to_string(resultOfCheck));

View File

@ -61,7 +61,7 @@ unsigned int SingleExecutor::check()
processedsize += i->second; processedsize += i->second;
if (!mSettings.quiet) if (!mSettings.quiet)
reportStatus(c + 1, mFiles.size(), processedsize, totalfilesize); reportStatus(c + 1, mFiles.size(), processedsize, totalfilesize);
// TODO: call analyseClangTidy() // TODO: call analyseClangTidy()?
c++; c++;
} }
} }
@ -92,7 +92,7 @@ unsigned int SingleExecutor::check()
processedsize += i->second; processedsize += i->second;
if (!mSettings.quiet) if (!mSettings.quiet)
reportStatus(c + 1, mFiles.size(), processedsize, totalfilesize); reportStatus(c + 1, mFiles.size(), processedsize, totalfilesize);
// TODO: call analyseClangTidy() // TODO: call analyseClangTidy()?
c++; c++;
} }
} }

View File

@ -129,6 +129,7 @@ public:
} else { } else {
// Read file from a file // Read file from a file
result = fileChecker.check(*file); result = fileChecker.check(*file);
// TODO: call analyseClangTidy()?
} }
return result; return result;
} }

View File

@ -229,6 +229,9 @@ private:
output.str());*/ output.str());*/
settings = settingsOld; settings = settingsOld;
} }
// TODO: test clang-tidy
// TODO: test whole program analysis
}; };
REGISTER_TEST(TestProcessExecutor) REGISTER_TEST(TestProcessExecutor)

View File

@ -67,6 +67,9 @@ private:
SHOWTIME_MODES showtime = SHOWTIME_MODES::SHOWTIME_NONE; SHOWTIME_MODES showtime = SHOWTIME_MODES::SHOWTIME_NONE;
const char* plistOutput = nullptr; const char* plistOutput = nullptr;
std::vector<std::string> filesList; std::vector<std::string> filesList;
bool executeCommandCalled = false;
std::string exe;
std::vector<std::string> args;
}; };
void check(int files, int result, const std::string &data, const CheckOptions &opt = {}) { void check(int files, int result, const std::string &data, const CheckOptions &opt = {}) {
@ -101,9 +104,16 @@ private:
settings.showtime = opt.showtime; settings.showtime = opt.showtime;
if (opt.plistOutput) if (opt.plistOutput)
settings.plistOutput = opt.plistOutput; settings.plistOutput = opt.plistOutput;
bool executeCommandCalled = false;
std::string exe;
std::vector<std::string> args;
// NOLINTNEXTLINE(performance-unnecessary-value-param) // NOLINTNEXTLINE(performance-unnecessary-value-param)
CppCheck cppcheck(*this, true, [](std::string,std::vector<std::string>,std::string,std::string&){ CppCheck cppcheck(*this, true, [&executeCommandCalled, &exe, &args](std::string e,std::vector<std::string> a,std::string,std::string&){
return false; executeCommandCalled = true;
exe = std::move(e);
args = std::move(a);
return true;
}); });
cppcheck.settings() = settings; cppcheck.settings() = settings;
@ -119,6 +129,13 @@ private:
// TODO: test with settings.project.fileSettings; // TODO: test with settings.project.fileSettings;
SingleExecutor executor(cppcheck, filemap, settings, settings.nomsg, *this); SingleExecutor executor(cppcheck, filemap, settings, settings.nomsg, *this);
ASSERT_EQUALS(result, executor.check()); ASSERT_EQUALS(result, executor.check());
ASSERT_EQUALS(opt.executeCommandCalled, executeCommandCalled);
ASSERT_EQUALS(opt.exe, exe);
ASSERT_EQUALS(opt.args.size(), args.size());
for (int i = 0; i < args.size(); ++i)
{
ASSERT_EQUALS(opt.args[i], args[i]);
}
} }
void run() override { void run() override {
@ -131,6 +148,7 @@ private:
TEST_CASE(one_error_less_files); TEST_CASE(one_error_less_files);
TEST_CASE(one_error_several_files); TEST_CASE(one_error_several_files);
TEST_CASE(markup); TEST_CASE(markup);
TEST_CASE(clangTidy);
} }
void many_files() { void many_files() {
@ -246,7 +264,34 @@ private:
settings = settingsOld; settings = settingsOld;
} }
// TODO: test clang-tidy void clangTidy() {
// TODO: we currently only invoke it with ImportProject::FileSettings
if (!useFS)
return;
const Settings settingsOld = settings;
settings.clangTidy = true;
#ifdef _WIN32
const char exe[] = "clang-tidy.exe";
#else
const char exe[] = "clang-tidy";
#endif
const std::string file = fprefix() + "_001.cpp";
check(1, 0,
"int main()\n"
"{\n"
" return 0;\n"
"}",
dinit(CheckOptions,
$.executeCommandCalled = true,
$.exe = exe,
$.args = {"-quiet", "-checks=*,-clang-analyzer-*,-llvm*", file, "--"}));
ASSERT_EQUALS("Checking " + file + " ...\n", output.str());
settings = settingsOld;
}
// TODO: test whole program analysis // TODO: test whole program analysis
}; };

View File

@ -228,6 +228,9 @@ private:
output.str());*/ output.str());*/
settings = settingsOld; settings = settingsOld;
} }
// TODO: test clang-tidy
// TODO: test whole program analysis
}; };
REGISTER_TEST(TestThreadExecutor) REGISTER_TEST(TestThreadExecutor)