diff --git a/Makefile b/Makefile index 0590c4910d7..efea319d3dc 100644 --- a/Makefile +++ b/Makefile @@ -667,13 +667,13 @@ cli/stacktrace.o: cli/stacktrace.cpp cli/stacktrace.h lib/config.h lib/utils.h cli/threadexecutor.o: cli/threadexecutor.cpp cli/cppcheckexecutor.h cli/executor.h cli/threadexecutor.h lib/analyzerinfo.h lib/check.h lib/color.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/threadexecutor.cpp -test/fixture.o: test/fixture.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/suppressions.h test/fixture.h test/options.h test/redirect.h +test/fixture.o: test/fixture.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h test/options.h test/redirect.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/fixture.cpp -test/helpers.o: test/helpers.cpp externals/simplecpp/simplecpp.h lib/config.h lib/errortypes.h lib/mathlib.h lib/path.h lib/preprocessor.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/helpers.h +test/helpers.o: test/helpers.cpp externals/simplecpp/simplecpp.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/helpers.cpp -test/main.o: test/main.cpp externals/simplecpp/simplecpp.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/preprocessor.h lib/suppressions.h test/fixture.h test/options.h +test/main.o: test/main.cpp externals/simplecpp/simplecpp.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h test/options.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/main.cpp test/options.o: test/options.cpp test/options.h @@ -682,7 +682,7 @@ test/options.o: test/options.cpp test/options.h test/test64bit.o: test/test64bit.cpp lib/check.h lib/check64bit.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/test64bit.cpp -test/testanalyzerinformation.o: test/testanalyzerinformation.cpp lib/analyzerinfo.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/platform.h lib/suppressions.h lib/utils.h test/fixture.h +test/testanalyzerinformation.o: test/testanalyzerinformation.cpp lib/analyzerinfo.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testanalyzerinformation.cpp test/testassert.o: test/testassert.cpp lib/check.h lib/checkassert.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h @@ -715,7 +715,7 @@ test/testclass.o: test/testclass.cpp externals/simplecpp/simplecpp.h lib/check.h test/testcmdlineparser.o: test/testcmdlineparser.cpp cli/cmdlineparser.h cli/cppcheckexecutor.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/fixture.h test/redirect.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testcmdlineparser.cpp -test/testcolor.o: test/testcolor.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/suppressions.h test/fixture.h +test/testcolor.o: test/testcolor.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testcolor.cpp test/testcondition.o: test/testcondition.cpp externals/simplecpp/simplecpp.h lib/check.h lib/checkcondition.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h @@ -733,7 +733,7 @@ test/testerrorlogger.o: test/testerrorlogger.cpp externals/tinyxml2/tinyxml2.h l test/testexceptionsafety.o: test/testexceptionsafety.cpp lib/check.h lib/checkexceptionsafety.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testexceptionsafety.cpp -test/testfilelister.o: test/testfilelister.cpp cli/filelister.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/pathmatch.h lib/suppressions.h test/fixture.h +test/testfilelister.o: test/testfilelister.cpp cli/filelister.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/pathmatch.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testfilelister.cpp test/testfunctions.o: test/testfunctions.cpp lib/check.h lib/checkfunctions.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h @@ -760,7 +760,7 @@ test/testleakautovar.o: test/testleakautovar.cpp externals/simplecpp/simplecpp.h test/testlibrary.o: test/testlibrary.cpp externals/tinyxml2/tinyxml2.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testlibrary.cpp -test/testmathlib.o: test/testmathlib.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/mathlib.h lib/suppressions.h test/fixture.h +test/testmathlib.o: test/testmathlib.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testmathlib.cpp test/testmemleak.o: test/testmemleak.cpp lib/check.h lib/checkmemoryleak.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h @@ -769,19 +769,19 @@ test/testmemleak.o: test/testmemleak.cpp lib/check.h lib/checkmemoryleak.h lib/c test/testnullpointer.o: test/testnullpointer.cpp externals/simplecpp/simplecpp.h lib/check.h lib/checknullpointer.h lib/color.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testnullpointer.cpp -test/testoptions.o: test/testoptions.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/suppressions.h test/fixture.h test/options.h +test/testoptions.o: test/testoptions.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h test/options.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testoptions.cpp test/testother.o: test/testother.cpp externals/simplecpp/simplecpp.h lib/check.h lib/checkother.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testother.cpp -test/testpath.o: test/testpath.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/path.h lib/suppressions.h test/fixture.h +test/testpath.o: test/testpath.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testpath.cpp -test/testpathmatch.o: test/testpathmatch.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/pathmatch.h lib/suppressions.h test/fixture.h +test/testpathmatch.o: test/testpathmatch.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/pathmatch.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testpathmatch.cpp -test/testplatform.o: test/testplatform.cpp externals/tinyxml2/tinyxml2.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/platform.h lib/suppressions.h test/fixture.h +test/testplatform.o: test/testplatform.cpp externals/tinyxml2/tinyxml2.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testplatform.cpp test/testpostfixoperator.o: test/testpostfixoperator.cpp lib/check.h lib/checkpostfixoperator.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h @@ -832,7 +832,7 @@ test/testsymboldatabase.o: test/testsymboldatabase.cpp lib/check.h lib/color.h l test/testthreadexecutor.o: test/testthreadexecutor.cpp cli/executor.h cli/threadexecutor.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h test/redirect.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testthreadexecutor.cpp -test/testtimer.o: test/testtimer.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/suppressions.h lib/timer.h test/fixture.h +test/testtimer.o: test/testtimer.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testtimer.cpp test/testtoken.o: test/testtoken.cpp lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h diff --git a/test/fixture.cpp b/test/fixture.cpp index 5e4289c7f9b..692cb67672f 100644 --- a/test/fixture.cpp +++ b/test/fixture.cpp @@ -20,6 +20,7 @@ #include "errortypes.h" #include "options.h" +#include "path.h" #include "redirect.h" #include @@ -74,7 +75,6 @@ unsigned int TestFixture::countTests; std::size_t TestFixture::fails_counter = 0; std::size_t TestFixture::todos_counter = 0; std::size_t TestFixture::succeeded_todos_counter = 0; -std::set TestFixture::missingLibs; TestFixture::TestFixture(const char * const _name) : mVerbose(false), @@ -284,11 +284,6 @@ void TestFixture::assertNoThrowFail(const char * const filename, const unsigned } -void TestFixture::complainMissingLib(const char * const libname) -{ - missingLibs.insert(libname); -} - void TestFixture::printHelp() { std::cout << "Testrunner - run Cppcheck tests\n" @@ -372,12 +367,6 @@ std::size_t TestFixture::runTests(const options& args) std::cerr << "Tests failed: " << fails_counter << std::endl << std::endl; std::cerr << errmsg.str(); - if (!missingLibs.empty()) { - std::cerr << "Missing libraries: "; - for (const std::string & missingLib : missingLibs) - std::cerr << missingLib << " "; - std::cerr << std::endl << std::endl; - } std::cerr.flush(); return fails_counter + succeeded_todos_counter; } @@ -409,3 +398,16 @@ void TestFixture::setTemplateFormat(const std::string &templateFormat) mTemplateLocation = ""; } } + +TestFixture::SettingsBuilder& TestFixture::SettingsBuilder::library(const char lib[]) { + // TODO: exename is not yet set + LOAD_LIB_2_EXE(settings.library, lib, fixture.exename.c_str()); + // strip extension + std::string lib_s(lib); + const std::string ext(".cfg"); + const auto pos = lib_s.find(ext); + if (pos != std::string::npos) + lib_s.erase(pos, ext.size()); + settings.libraries.emplace_back(lib_s); + return *this; +} diff --git a/test/fixture.h b/test/fixture.h index d37a949d44a..9af1d7d4c9d 100644 --- a/test/fixture.h +++ b/test/fixture.h @@ -24,6 +24,7 @@ #include "color.h" #include "config.h" #include "errorlogger.h" +#include "settings.h" #include #include @@ -43,7 +44,6 @@ class TestFixture : public ErrorLogger { static std::size_t fails_counter; static std::size_t todos_counter; static std::size_t succeeded_todos_counter; - static std::set missingLibs; bool mVerbose; std::string mTemplateFormat; std::string mTemplateLocation; @@ -95,7 +95,6 @@ class TestFixture : public ErrorLogger { void assertThrow(const char * const filename, const unsigned int linenr) const; void assertThrowFail(const char * const filename, const unsigned int linenr) const; void assertNoThrowFail(const char * const filename, const unsigned int linenr) const; - static void complainMissingLib(const char * const libname); static std::string deleteLineNumber(const std::string &message); void setVerbose(bool v) { @@ -127,6 +126,72 @@ class TestFixture : public ErrorLogger { T& check = getCheck(); check.runChecks(tokenizer, settings, errorLogger); } + + // TODO: bail out on redundant settings + class SettingsBuilder + { + public: + explicit SettingsBuilder(const TestFixture &fixture) : fixture(fixture) {} + SettingsBuilder(const TestFixture &fixture, Settings settings) : fixture(fixture), settings(std::move(settings)) {} + + SettingsBuilder& severity(Severity::SeverityType sev) { + settings.severity.enable(sev); + return *this; + } + + SettingsBuilder& certainty(Certainty cert, bool b = true) { + settings.certainty.setEnabled(cert, b); + return *this; + } + + SettingsBuilder& clang() { + settings.clang = true; + return *this; + } + + SettingsBuilder& checkLibrary() { + settings.checkLibrary = true; + return *this; + } + + SettingsBuilder& checkUnusedTemplates() { + settings.checkUnusedTemplates = true; + return *this; + } + + SettingsBuilder& debugwarnings(bool b = true) { + settings.debugwarnings = b; + return *this; + } + + SettingsBuilder& c(Standards::cstd_t std) { + settings.standards.c = std; + return *this; + } + + SettingsBuilder& cpp(Standards::cppstd_t std) { + settings.standards.cpp = std; + return *this; + } + + SettingsBuilder& library(const char lib[]); + + Settings build() { + return std::move(settings); + } + private: + const TestFixture &fixture; + Settings settings; + }; + + SettingsBuilder settingsBuilder() const { + return SettingsBuilder(*this); + } + + SettingsBuilder settingsBuilder(Settings settings) const { + return SettingsBuilder(*this, std::move(settings)); + } + public: void reportOut(const std::string &outmsg, Color c = Color::Reset) override; void reportErr(const ErrorMessage &msg) override; @@ -165,13 +230,8 @@ extern std::ostringstream output; #define EXPECT_EQ( EXPECTED, ACTUAL ) assertEquals(__FILE__, __LINE__, EXPECTED, ACTUAL) #define REGISTER_TEST( CLASSNAME ) namespace { CLASSNAME instance_ ## CLASSNAME; } -#define LOAD_LIB_2(LIB, NAME) \ - do { \ - if (((LIB).load(exename.c_str(), NAME).errorcode != Library::ErrorCode::OK)) { \ - complainMissingLib(NAME); \ - abort(); \ - } \ - } while (false) +#define LOAD_LIB_2_EXE( LIB, NAME, EXE ) do { if (((LIB).load((EXE), NAME).errorcode != Library::ErrorCode::OK)) throw std::runtime_error("library '" + std::string(NAME) + "' not found"); } while (false) +#define LOAD_LIB_2( LIB, NAME ) LOAD_LIB_2_EXE(LIB, NAME, exename.c_str()) #define PLATFORM( P, T ) do { std::string errstr; assertEquals(__FILE__, __LINE__, true, P.set(cppcheck::Platform::toString(T), errstr, {exename}), errstr); } while (false) diff --git a/test/helpers.h b/test/helpers.h index 10e50042f55..0907e207cf8 100644 --- a/test/helpers.h +++ b/test/helpers.h @@ -19,6 +19,7 @@ #ifndef helpersH #define helpersH +#include "settings.h" #include "tokenize.h" #include "tokenlist.h" @@ -27,13 +28,12 @@ class Token; class Preprocessor; -class Settings; class Suppressions; class givenACodeSampleToTokenize { private: Tokenizer tokenizer; - static const Settings settings; + const Settings settings; public: explicit givenACodeSampleToTokenize(const char sample[], bool createOnly = false, bool cpp = true) diff --git a/test/test64bit.cpp b/test/test64bit.cpp index 0cd7f51cc52..4a2a5461342 100644 --- a/test/test64bit.cpp +++ b/test/test64bit.cpp @@ -30,11 +30,9 @@ class Test64BitPortability : public TestFixture { Test64BitPortability() : TestFixture("Test64BitPortability") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::portability).library("std.cfg").build(); void run() override { - settings.severity.enable(Severity::portability); - TEST_CASE(novardecl); TEST_CASE(functionpar); TEST_CASE(structmember); @@ -51,7 +49,6 @@ class Test64BitPortability : public TestFixture { // Tokenize.. Tokenizer tokenizer(&settings, this); - LOAD_LIB_2(settings.library, "std.cfg"); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); diff --git a/test/testassert.cpp b/test/testassert.cpp index 5cc1d83b1c6..8c18720ed04 100644 --- a/test/testassert.cpp +++ b/test/testassert.cpp @@ -32,7 +32,7 @@ class TestAssert : public TestFixture { TestAssert() : TestFixture("TestAssert") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::warning).build(); #define check(...) check_(__FILE__, __LINE__, __VA_ARGS__) void check_(const char* file, int line, const char code[], const char *filename = "test.cpp") { @@ -49,8 +49,6 @@ class TestAssert : public TestFixture { } void run() override { - settings.severity.enable(Severity::warning); - TEST_CASE(assignmentInAssert); TEST_CASE(functionCallInAssert); TEST_CASE(memberFunctionCallInAssert); diff --git a/test/testastutils.cpp b/test/testastutils.cpp index bce65c48cce..91e44a7628d 100644 --- a/test/testastutils.cpp +++ b/test/testastutils.cpp @@ -50,7 +50,7 @@ class TestAstUtils : public TestFixture { #define findLambdaEndToken(code) findLambdaEndToken_(code, __FILE__, __LINE__) bool findLambdaEndToken_(const char code[], const char* file, int line) { - Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); @@ -84,7 +84,7 @@ class TestAstUtils : public TestFixture { #define findLambdaStartToken(code) findLambdaStartToken_(code, __FILE__, __LINE__) bool findLambdaStartToken_(const char code[], const char* file, int line) { - Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); @@ -117,7 +117,7 @@ class TestAstUtils : public TestFixture { #define isNullOperand(code) isNullOperand_(code, __FILE__, __LINE__) bool isNullOperand_(const char code[], const char* file, int line) { - Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); @@ -139,7 +139,7 @@ class TestAstUtils : public TestFixture { #define isReturnScope(code, offset) isReturnScope_(code, offset, __FILE__, __LINE__) bool isReturnScope_(const char code[], int offset, const char* file, int line) { - Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); @@ -170,7 +170,7 @@ class TestAstUtils : public TestFixture { #define isSameExpression(code, tokStr1, tokStr2) isSameExpression_(code, tokStr1, tokStr2, __FILE__, __LINE__) bool isSameExpression_(const char code[], const char tokStr1[], const char tokStr2[], const char* file, int line) { - Settings settings; + const Settings settings; Library library; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); @@ -210,7 +210,7 @@ class TestAstUtils : public TestFixture { #define isVariableChanged(code, startPattern, endPattern) isVariableChanged_(code, startPattern, endPattern, __FILE__, __LINE__) bool isVariableChanged_(const char code[], const char startPattern[], const char endPattern[], const char* file, int line) { - Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); @@ -240,7 +240,7 @@ class TestAstUtils : public TestFixture { #define isVariableChangedByFunctionCall(code, pattern, inconclusive) isVariableChangedByFunctionCall_(code, pattern, inconclusive, __FILE__, __LINE__) bool isVariableChangedByFunctionCall_(const char code[], const char pattern[], bool *inconclusive, const char* file, int line) { - Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); @@ -416,7 +416,7 @@ class TestAstUtils : public TestFixture { #define nextAfterAstRightmostLeaf(code, parentPattern, rightPattern) nextAfterAstRightmostLeaf_(code, parentPattern, rightPattern, __FILE__, __LINE__) bool nextAfterAstRightmostLeaf_(const char code[], const char parentPattern[], const char rightPattern[], const char* file, int line) { - Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); @@ -441,7 +441,7 @@ class TestAstUtils : public TestFixture { enum class Result {False, True, Fail}; Result isUsedAsBool(const char code[], const char pattern[]) { - Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); if (!tokenizer.tokenize(istr, "test.cpp")) diff --git a/test/testautovariables.cpp b/test/testautovariables.cpp index 9aef983538d..9f2dd2105ef 100644 --- a/test/testautovariables.cpp +++ b/test/testautovariables.cpp @@ -32,30 +32,24 @@ class TestAutoVariables : public TestFixture { TestAutoVariables() : TestFixture("TestAutoVariables") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::style).library("std.cfg").library("qt.cfg").build(); #define check(...) check_(__FILE__, __LINE__, __VA_ARGS__) void check_(const char* file, int line, const char code[], bool inconclusive = true, const char* filename = "test.cpp") { // Clear the error buffer.. errout.str(""); - settings.certainty.setEnabled(Certainty::inconclusive, inconclusive); + const Settings settings1 = settingsBuilder(settings).certainty(Certainty::inconclusive, inconclusive).build(); // Tokenize.. - Tokenizer tokenizer(&settings, this); + Tokenizer tokenizer(&settings1, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, filename), file, line); - runChecks(&tokenizer, &settings, this); + runChecks(&tokenizer, &settings1, this); } void run() override { - settings.severity.enable(Severity::warning); - settings.severity.enable(Severity::style); - LOAD_LIB_2(settings.library, "std.cfg"); - LOAD_LIB_2(settings.library, "qt.cfg"); - settings.libraries.emplace_back("qt"); - TEST_CASE(testautovar1); TEST_CASE(testautovar2); TEST_CASE(testautovar3); // ticket #2925 diff --git a/test/testbool.cpp b/test/testbool.cpp index cd5af1b6617..2e3b2106754 100644 --- a/test/testbool.cpp +++ b/test/testbool.cpp @@ -31,13 +31,9 @@ class TestBool : public TestFixture { TestBool() : TestFixture("TestBool") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::style).severity(Severity::warning).certainty(Certainty::inconclusive).build(); void run() override { - settings.severity.enable(Severity::style); - settings.severity.enable(Severity::warning); - settings.certainty.enable(Certainty::inconclusive); - TEST_CASE(bitwiseOnBoolean); // if (bool & bool) TEST_CASE(incrementBoolean); TEST_CASE(assignBoolToPointer); diff --git a/test/testboost.cpp b/test/testboost.cpp index f2b919dcdc5..e82feb4f638 100644 --- a/test/testboost.cpp +++ b/test/testboost.cpp @@ -31,12 +31,9 @@ class TestBoost : public TestFixture { TestBoost() : TestFixture("TestBoost") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::style).severity(Severity::performance).build(); void run() override { - settings.severity.enable(Severity::style); - settings.severity.enable(Severity::performance); - TEST_CASE(BoostForeachContainerModification); } diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index e0b1aa5c98d..881117ce9bc 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -42,22 +42,22 @@ class TestBufferOverrun : public TestFixture { TestBufferOverrun() : TestFixture("TestBufferOverrun") {} private: - Settings settings0; + Settings settings0 = settingsBuilder().library("std.cfg").severity(Severity::warning).severity(Severity::style).severity(Severity::portability).build(); #define check(...) check_(__FILE__, __LINE__, __VA_ARGS__) void check_(const char* file, int line, const char code[], const char filename[] = "test.cpp") { // Clear the error buffer.. errout.str(""); - settings0.certainty.enable(Certainty::inconclusive); + const Settings settings = settingsBuilder(settings0).certainty(Certainty::inconclusive).build(); // Tokenize.. - Tokenizer tokenizer(&settings0, this); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, filename), file, line); // Check for buffer overruns.. - runChecks(&tokenizer, &settings0, this); + runChecks(&tokenizer, &settings, this); } void check_(const char* file, int line, const char code[], const Settings &settings, const char filename[] = "test.cpp") { @@ -77,14 +77,14 @@ class TestBufferOverrun : public TestFixture { // Clear the error buffer.. errout.str(""); - Settings* settings = &settings0; - settings->severity.enable(Severity::style); - settings->severity.enable(Severity::warning); - settings->severity.enable(Severity::portability); - settings->severity.enable(Severity::performance); - settings->standards.c = Standards::CLatest; - settings->standards.cpp = Standards::CPPLatest; - settings->certainty.enable(Certainty::inconclusive); + Settings settings = settings0; + settings.severity.enable(Severity::style); + settings.severity.enable(Severity::warning); + settings.severity.enable(Severity::portability); + settings.severity.enable(Severity::performance); + settings.standards.c = Standards::CLatest; + settings.standards.cpp = Standards::CPPLatest; + settings.certainty.enable(Certainty::inconclusive); // Raw tokens.. std::vector files(1, filename); @@ -97,21 +97,15 @@ class TestBufferOverrun : public TestFixture { simplecpp::preprocess(tokens2, tokens1, files, filedata, simplecpp::DUI()); // Tokenizer.. - Tokenizer tokenizer(settings, this); + Tokenizer tokenizer(&settings, this); tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Check for buffer overruns.. - runChecks(&tokenizer, settings, this); + runChecks(&tokenizer, &settings, this); } void run() override { - LOAD_LIB_2(settings0.library, "std.cfg"); - - settings0.severity.enable(Severity::warning); - settings0.severity.enable(Severity::style); - settings0.severity.enable(Severity::portability); - TEST_CASE(noerr1); TEST_CASE(noerr2); TEST_CASE(noerr3); @@ -3356,6 +3350,7 @@ class TestBufferOverrun : public TestFixture { void buffer_overrun_errorpath() { setMultiline(); + const Settings settingsOld = settings0; settings0.templateLocation = "{file}:{line}:note:{info}"; check("void f() {\n" @@ -3365,6 +3360,10 @@ class TestBufferOverrun : public TestFixture { ASSERT_EQUALS("test.cpp:3:error:Buffer is accessed out of bounds: p\n" "test.cpp:2:note:Assign p, buffer with size 10\n" "test.cpp:3:note:Buffer overrun\n", errout.str()); + + // TODO: need to reset this but it breaks other tests + (void)settingsOld; + //settings0 = settingsOld; } void buffer_overrun_bailoutIfSwitch() { @@ -5526,9 +5525,7 @@ class TestBufferOverrun : public TestFixture { void checkPipeParameterSize() { // #3521 - Settings settings; - LOAD_LIB_2(settings.library, "posix.cfg"); - settings.libraries.emplace_back("posix"); + const Settings settings = settingsBuilder().library("posix.cfg").build(); check("void f(){\n" "int pipefd[1];\n" // <-- array of two integers is needed diff --git a/test/testcharvar.cpp b/test/testcharvar.cpp index 0e11e396de2..9d4ccb4ba44 100644 --- a/test/testcharvar.cpp +++ b/test/testcharvar.cpp @@ -31,12 +31,10 @@ class TestCharVar : public TestFixture { TestCharVar() : TestFixture("TestCharVar") {} private: - Settings settings; + Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::portability).build(); void run() override { PLATFORM(settings.platform, cppcheck::Platform::Type::Unspecified); - settings.severity.enable(Severity::warning); - settings.severity.enable(Severity::portability); TEST_CASE(array_index_1); TEST_CASE(array_index_2); diff --git a/test/testclangimport.cpp b/test/testclangimport.cpp index b9ec7eb9ead..73593f09511 100644 --- a/test/testclangimport.cpp +++ b/test/testclangimport.cpp @@ -137,8 +137,7 @@ class TestClangImport : public TestFixture { } std::string parse(const char clang[]) { - Settings settings; - settings.clang = true; + const Settings settings = settingsBuilder().clang().build(); Tokenizer tokenizer(&settings, this); std::istringstream istr(clang); clangimport::parseClangAstDump(&tokenizer, istr); @@ -1049,8 +1048,7 @@ class TestClangImport : public TestFixture { #define GET_SYMBOL_DB(AST) \ - Settings settings; \ - settings.clang = true; \ + Settings settings = settingsBuilder().clang().build(); \ { \ std::string errstr; \ ASSERT_EQUALS_MSG(true, settings.platform.set("unix64", errstr, {exename.c_str()}), errstr); \ diff --git a/test/testclass.cpp b/test/testclass.cpp index 2f672b91f4d..5dd41665684 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -36,13 +36,10 @@ class TestClass : public TestFixture { TestClass() : TestFixture("TestClass") {} private: - Settings settings0; - Settings settings1; + Settings settings0 = settingsBuilder().severity(Severity::style).build(); + Settings settings1 = settingsBuilder().severity(Severity::warning).build(); void run() override { - settings0.severity.enable(Severity::style); - settings1.severity.enable(Severity::warning); - // Load std.cfg configuration { const char xmldata[] = "\n" @@ -262,8 +259,7 @@ class TestClass : public TestFixture { void checkCopyCtorAndEqOperator_(const char code[], const char* file, int line) { // Clear the error log errout.str(""); - Settings settings; - settings.severity.enable(Severity::warning); + Settings settings = settingsBuilder().severity(Severity::warning).build(); Preprocessor preprocessor(settings); @@ -2890,9 +2886,7 @@ class TestClass : public TestFixture { #define checkNoMemset(...) checkNoMemset_(__FILE__, __LINE__, __VA_ARGS__) void checkNoMemset_(const char* file, int line, const char code[]) { - Settings settings; - settings.severity.enable(Severity::warning); - settings.severity.enable(Severity::portability); + Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::portability).build(); checkNoMemset_(file, line, code, settings); } @@ -3156,8 +3150,7 @@ class TestClass : public TestFixture { errout.str()); // #1655 - Settings s; - LOAD_LIB_2(s.library, "std.cfg"); + Settings s = settingsBuilder().library("std.cfg").build(); checkNoMemset("void f() {\n" " char c[] = \"abc\";\n" " std::string s;\n" @@ -7231,10 +7224,7 @@ class TestClass : public TestFixture { } void qualifiedNameMember() { // #10872 - Settings s; - s.severity.enable(Severity::style); - s.debugwarnings = true; - LOAD_LIB_2(s.library, "std.cfg"); + Settings s = settingsBuilder().severity(Severity::style).debugwarnings().library("std.cfg").build(); checkConst("struct data {};\n" " struct S {\n" " std::vector std;\n" @@ -7289,8 +7279,7 @@ class TestClass : public TestFixture { errout.str(""); // Check.. - Settings settings; - settings.severity.enable(Severity::performance); + Settings settings = settingsBuilder().severity(Severity::performance).build(); Preprocessor preprocessor(settings); @@ -7970,8 +7959,8 @@ class TestClass : public TestFixture { void checkOverride_(const char code[], const char* file, int line) { // Clear the error log errout.str(""); - Settings settings; - settings.severity.enable(Severity::style); + + Settings settings = settingsBuilder().severity(Severity::style).build(); Preprocessor preprocessor(settings); @@ -8147,9 +8136,9 @@ class TestClass : public TestFixture { void checkUnsafeClassRefMember_(const char code[], const char* file, int line) { // Clear the error log errout.str(""); - Settings settings; + + Settings settings = settingsBuilder().severity(Severity::warning).build(); settings.safeChecks.classes = true; - settings.severity.enable(Severity::warning); Preprocessor preprocessor(settings); @@ -8328,7 +8317,7 @@ class TestClass : public TestFixture { void ctu(const std::vector &code) { - Settings settings; + const Settings settings; auto &check = getCheck(); // getFileInfo diff --git a/test/testcmdlineparser.cpp b/test/testcmdlineparser.cpp index 7a34106e7b7..69e6026cae0 100644 --- a/test/testcmdlineparser.cpp +++ b/test/testcmdlineparser.cpp @@ -37,9 +37,8 @@ class TestCmdlineParser : public TestFixture { public: - TestCmdlineParser() - : TestFixture("TestCmdlineParser") - , defParser(settings, settings.nomsg, settings.nofail) { + TestCmdlineParser() : TestFixture("TestCmdlineParser") + { #if defined(_WIN64) || defined(_WIN32) CmdLineParser::SHOW_DEF_PLATFORM_MSG = false; #endif @@ -53,7 +52,7 @@ class TestCmdlineParser : public TestFixture { private: Settings settings; // TODO: reset after each test - CmdLineParser defParser; // TODO: reset after each test + CmdLineParser defParser{settings, settings.nomsg, settings.nofail}; // TODO: reset after each test void run() override { TEST_CASE(nooptions); diff --git a/test/testcondition.cpp b/test/testcondition.cpp index d34623184c0..5c036aa6c53 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -39,28 +39,19 @@ class TestCondition : public TestFixture { TestCondition() : TestFixture("TestCondition") {} private: - Settings settings0; - Settings settings1; + Settings settings0 = settingsBuilder().library("qt.cfg").library("std.cfg").severity(Severity::style).severity(Severity::warning).build(); + Settings settings1 = settingsBuilder().severity(Severity::style).severity(Severity::warning).build(); void run() override { // known platform.. PLATFORM(settings0.platform, cppcheck::Platform::Type::Native); PLATFORM(settings1.platform, cppcheck::Platform::Type::Native); - LOAD_LIB_2(settings0.library, "qt.cfg"); - settings0.libraries.emplace_back("qt"); - LOAD_LIB_2(settings0.library, "std.cfg"); - - settings0.severity.enable(Severity::style); - settings0.severity.enable(Severity::warning); - const char cfg[] = "\n" "\n" " \n" ""; ASSERT(settings1.library.loadxmldata(cfg, sizeof(cfg))); - settings1.severity.enable(Severity::style); - settings1.severity.enable(Severity::warning); TEST_CASE(assignAndCompare); // assignment and comparison don't match TEST_CASE(mismatchingBitAnd); // overlapping bitmasks @@ -5644,8 +5635,7 @@ class TestCondition : public TestFixture { } void compareOutOfTypeRange() { - Settings settingsUnix64; - settingsUnix64.severity.enable(Severity::style); + Settings settingsUnix64 = settingsBuilder().severity(Severity::style).build(); PLATFORM(settingsUnix64.platform, cppcheck::Platform::Type::Unix64); check("void f(unsigned char c) {\n" diff --git a/test/testconstructors.cpp b/test/testconstructors.cpp index 066e0463101..e3429b67407 100644 --- a/test/testconstructors.cpp +++ b/test/testconstructors.cpp @@ -32,22 +32,22 @@ class TestConstructors : public TestFixture { TestConstructors() : TestFixture("TestConstructors") {} private: - Settings settings; + Settings settings = settingsBuilder().severity(Severity::style).severity(Severity::warning).build(); #define check(...) check_(__FILE__, __LINE__, __VA_ARGS__) void check_(const char* file, int line, const char code[], bool inconclusive = false) { // Clear the error buffer.. errout.str(""); - settings.certainty.setEnabled(Certainty::inconclusive, inconclusive); + const Settings settings1 = settingsBuilder(settings).certainty(Certainty::inconclusive, inconclusive).build(); // Tokenize.. - Tokenizer tokenizer(&settings, this); + Tokenizer tokenizer(&settings1, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); // Check class constructors.. - CheckClass checkClass(&tokenizer, &settings, this); + CheckClass checkClass(&tokenizer, &settings1, this); checkClass.constructors(); } @@ -66,9 +66,6 @@ class TestConstructors : public TestFixture { } void run() override { - settings.severity.enable(Severity::style); - settings.severity.enable(Severity::warning); - TEST_CASE(simple1); TEST_CASE(simple2); TEST_CASE(simple3); @@ -1950,9 +1947,8 @@ class TestConstructors : public TestFixture { } void initvar_smartptr() { // #10237 - Settings s; - // TODO: test shuld probably not pass without library - //LOAD_LIB_2(s.library, "std.cfg"); + // TODO: test should probably not pass without library + const Settings s = settingsBuilder() /*.library("std.cfg")*/.build(); check("struct S {\n" " explicit S(const std::shared_ptr& sp) {\n" " set(*sp);\n" @@ -1994,11 +1990,7 @@ class TestConstructors : public TestFixture { "{ }", true); ASSERT_EQUALS("[test.cpp:13]: (warning, inconclusive) Member variable 'Fred::ints' is not assigned a value in 'Fred::operator='.\n", errout.str()); - Settings s; - s.certainty.setEnabled(Certainty::inconclusive, true); - s.severity.enable(Severity::style); - s.severity.enable(Severity::warning); - LOAD_LIB_2(s.library, "std.cfg"); + const Settings s = settingsBuilder().certainty(Certainty::inconclusive).severity(Severity::style).severity(Severity::warning).library("std.cfg").build(); check("struct S {\n" " S& operator=(const S& s) { return *this; }\n" " std::mutex m;\n" @@ -3610,10 +3602,8 @@ class TestConstructors : public TestFixture { } void uninitVarInheritClassInit() { - Settings s; // TODO: test should probably not pass without library - //LOAD_LIB_2(s.library, "vcl.cfg"); - //s.libraries.emplace_back("vcl"); + const Settings s = settingsBuilder() /*.library("vcl.cfg")*/.build(); check("class Fred: public TObject\n" "{\n" diff --git a/test/testerrorlogger.cpp b/test/testerrorlogger.cpp index ac1160d9b58..1f48090e802 100644 --- a/test/testerrorlogger.cpp +++ b/test/testerrorlogger.cpp @@ -31,11 +31,11 @@ class TestErrorLogger : public TestFixture { public: - TestErrorLogger() : TestFixture("TestErrorLogger"), fooCpp5("foo.cpp", 5, 1), barCpp8("bar.cpp", 8, 1) {} + TestErrorLogger() : TestFixture("TestErrorLogger") {} private: - const ErrorMessage::FileLocation fooCpp5; - const ErrorMessage::FileLocation barCpp8; + const ErrorMessage::FileLocation fooCpp5{"foo.cpp", 5, 1}; + const ErrorMessage::FileLocation barCpp8{"bar.cpp", 8, 1}; void run() override { TEST_CASE(PatternSearchReplace); diff --git a/test/testfilelister.cpp b/test/testfilelister.cpp index 9efcc9661e6..d9e43979c16 100644 --- a/test/testfilelister.cpp +++ b/test/testfilelister.cpp @@ -29,8 +29,7 @@ class TestFileLister : public TestFixture { public: - TestFileLister() - : TestFixture("TestFileLister") {} + TestFileLister() : TestFixture("TestFileLister") {} private: void run() override { diff --git a/test/testfunctions.cpp b/test/testfunctions.cpp index 5952fc79589..467ea261ce0 100644 --- a/test/testfunctions.cpp +++ b/test/testfunctions.cpp @@ -33,20 +33,10 @@ class TestFunctions : public TestFixture { TestFunctions() : TestFixture("TestFunctions") {} private: - Settings settings; + Settings settings = settingsBuilder().severity(Severity::style).severity(Severity::warning).severity(Severity::performance).severity(Severity::portability). + certainty(Certainty::inconclusive).c(Standards::C11).cpp(Standards::CPP11).library("std.cfg").library("posix.cfg").build(); void run() override { - settings.severity.enable(Severity::style); - settings.severity.enable(Severity::warning); - settings.severity.enable(Severity::performance); - settings.severity.enable(Severity::portability); - settings.certainty.enable(Certainty::inconclusive); - settings.standards.c = Standards::C11; - settings.standards.cpp = Standards::CPP11; - LOAD_LIB_2(settings.library, "std.cfg"); - LOAD_LIB_2(settings.library, "posix.cfg"); - settings.libraries.emplace_back("posix"); - // Prohibited functions TEST_CASE(prohibitedFunctions_posix); TEST_CASE(prohibitedFunctions_index); diff --git a/test/testincompletestatement.cpp b/test/testincompletestatement.cpp index 185cdb883fb..c1b50772bba 100644 --- a/test/testincompletestatement.cpp +++ b/test/testincompletestatement.cpp @@ -35,13 +35,13 @@ class TestIncompleteStatement : public TestFixture { TestIncompleteStatement() : TestFixture("TestIncompleteStatement") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::warning).build(); void check(const char code[], bool inconclusive = false) { // Clear the error buffer.. errout.str(""); - settings.certainty.setEnabled(Certainty::inconclusive, inconclusive); + const Settings settings1 = settingsBuilder(settings).certainty(Certainty::inconclusive, inconclusive).build(); // Raw tokens.. std::vector files(1, "test.cpp"); @@ -54,18 +54,16 @@ class TestIncompleteStatement : public TestFixture { simplecpp::preprocess(tokens2, tokens1, files, filedata, simplecpp::DUI()); // Tokenize.. - Tokenizer tokenizer(&settings, this); + Tokenizer tokenizer(&settings1, this); tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Check for incomplete statements.. - CheckOther checkOther(&tokenizer, &settings, this); + CheckOther checkOther(&tokenizer, &settings1, this); checkOther.checkIncompleteStatement(); } void run() override { - settings.severity.enable(Severity::warning); - TEST_CASE(test1); TEST_CASE(test2); TEST_CASE(test3); diff --git a/test/testio.cpp b/test/testio.cpp index f6d5f39fc04..23695e89999 100644 --- a/test/testio.cpp +++ b/test/testio.cpp @@ -35,14 +35,10 @@ class TestIO : public TestFixture { TestIO() : TestFixture("TestIO") {} private: - Settings settings; + const Settings settings = settingsBuilder().library("std.cfg").library("windows.cfg").library("qt.cfg").build(); + Settings settings1 = settingsBuilder().library("std.cfg").library("windows.cfg").library("qt.cfg").build(); void run() override { - LOAD_LIB_2(settings.library, "std.cfg"); - LOAD_LIB_2(settings.library, "windows.cfg"); - LOAD_LIB_2(settings.library, "qt.cfg"); - settings.libraries.emplace_back("qt"); - TEST_CASE(coutCerrMisusage); TEST_CASE(wrongMode_simple); @@ -91,22 +87,22 @@ class TestIO : public TestFixture { // Clear the error buffer.. errout.str(""); - settings.severity.clear(); - settings.severity.enable(Severity::warning); - settings.severity.enable(Severity::style); + settings1.severity.clear(); + settings1.severity.enable(Severity::warning); + settings1.severity.enable(Severity::style); if (portability) - settings.severity.enable(Severity::portability); - settings.certainty.setEnabled(Certainty::inconclusive, inconclusive); - PLATFORM(settings.platform, platform); + settings1.severity.enable(Severity::portability); + settings1.certainty.setEnabled(Certainty::inconclusive, inconclusive); + PLATFORM(settings1.platform, platform); // Tokenize.. - Tokenizer tokenizer(&settings, this); + Tokenizer tokenizer(&settings1, this); std::istringstream istr(code); const std::string file_in = cpp ? "test.cpp" : "test.c"; ASSERT_LOC(tokenizer.tokenize(istr, file_in.c_str()), file, line); // Check.. - CheckIO checkIO(&tokenizer, &settings, this); + CheckIO checkIO(&tokenizer, &settings1, this); checkIO.checkWrongPrintfScanfArguments(); if (!onlyFormatStr) { checkIO.checkCoutCerrMisusage(); diff --git a/test/testleakautovar.cpp b/test/testleakautovar.cpp index 8a7fb98d6ee..f549bcf6e5d 100644 --- a/test/testleakautovar.cpp +++ b/test/testleakautovar.cpp @@ -2654,7 +2654,7 @@ class TestLeakAutoVarRecursiveCountLimit : public TestFixture { TestLeakAutoVarRecursiveCountLimit() : TestFixture("TestLeakAutoVarRecursiveCountLimit") {} private: - Settings settings; + const Settings settings = settingsBuilder().library("std.cfg").checkLibrary().build(); void checkP(const char code[], bool cpp = false) { // Clear the error buffer.. @@ -2675,15 +2675,11 @@ class TestLeakAutoVarRecursiveCountLimit : public TestFixture { tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); - settings.checkLibrary = true; - // Check for leaks.. runChecks(&tokenizer, &settings, this); } void run() override { - LOAD_LIB_2(settings.library, "std.cfg"); - TEST_CASE(recursiveCountLimit); // #5872 #6157 #9097 } @@ -2714,7 +2710,7 @@ class TestLeakAutoVarStrcpy : public TestFixture { TestLeakAutoVarStrcpy() : TestFixture("TestLeakAutoVarStrcpy") {} private: - Settings settings; + const Settings settings = settingsBuilder().library("std.cfg").checkLibrary().build(); void check_(const char* file, int line, const char code[]) { // Clear the error buffer.. @@ -2725,15 +2721,11 @@ class TestLeakAutoVarStrcpy : public TestFixture { std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); - settings.checkLibrary = true; - // Check for leaks.. runChecks(&tokenizer, &settings, this); } void run() override { - LOAD_LIB_2(settings.library, "std.cfg"); - TEST_CASE(returnedValue); // #9298 TEST_CASE(deallocuse2); TEST_CASE(fclose_false_positive); // #9575 @@ -2778,7 +2770,7 @@ class TestLeakAutoVarWindows : public TestFixture { TestLeakAutoVarWindows() : TestFixture("TestLeakAutoVarWindows") {} private: - Settings settings; + const Settings settings = settingsBuilder().library("windows.cfg").build(); void check_(const char* file, int line, const char code[]) { // Clear the error buffer.. @@ -2794,8 +2786,6 @@ class TestLeakAutoVarWindows : public TestFixture { } void run() override { - LOAD_LIB_2(settings.library, "windows.cfg"); - TEST_CASE(heapDoubleFree); } diff --git a/test/testlibrary.cpp b/test/testlibrary.cpp index 08a4311f6f4..69e2943d3d5 100644 --- a/test/testlibrary.cpp +++ b/test/testlibrary.cpp @@ -41,7 +41,7 @@ class TestLibrary : public TestFixture { TestLibrary() : TestFixture("TestLibrary") {} private: - Settings settings; + const Settings settings; void run() override { TEST_CASE(isCompliantValidationExpression); diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index 6e45e23acaf..bfe324a36b5 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -38,7 +38,7 @@ class TestMemleak : private TestFixture { TestMemleak() : TestFixture("TestMemleak") {} private: - Settings settings; + const Settings settings; void run() override { TEST_CASE(testFunctionReturnType); @@ -125,34 +125,25 @@ class TestMemleakInFunction : public TestFixture { TestMemleakInFunction() : TestFixture("TestMemleakInFunction") {} private: - Settings settings0; - Settings settings1; - Settings settings2; + const Settings settings = settingsBuilder().library("std.cfg").library("posix.cfg").build(); #define check(...) check_(__FILE__, __LINE__, __VA_ARGS__) void check_(const char* file, int line, const char code[]) { // Clear the error buffer.. errout.str(""); - Settings *settings = &settings1; - // Tokenize.. - Tokenizer tokenizer(settings, this); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); // Check for memory leaks.. - CheckMemoryLeakInFunction checkMemoryLeak(&tokenizer, settings, this); + CheckMemoryLeakInFunction checkMemoryLeak(&tokenizer, &settings, this); checkMemoryLeak.checkReallocUsage(); } void run() override { - LOAD_LIB_2(settings1.library, "std.cfg"); - LOAD_LIB_2(settings1.library, "posix.cfg"); - settings1.libraries.emplace_back("posix"); - LOAD_LIB_2(settings2.library, "std.cfg"); - TEST_CASE(realloc1); TEST_CASE(realloc2); TEST_CASE(realloc3); @@ -470,7 +461,7 @@ class TestMemleakInClass : public TestFixture { TestMemleakInClass() : TestFixture("TestMemleakInClass") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::style).library("std.cfg").build(); /** * Tokenize and execute leak check for given code @@ -491,11 +482,6 @@ class TestMemleakInClass : public TestFixture { } void run() override { - settings.severity.enable(Severity::warning); - settings.severity.enable(Severity::style); - - LOAD_LIB_2(settings.library, "std.cfg"); - TEST_CASE(class1); TEST_CASE(class2); TEST_CASE(class3); @@ -1686,7 +1672,7 @@ class TestMemleakStructMember : public TestFixture { TestMemleakStructMember() : TestFixture("TestMemleakStructMember") {} private: - Settings settings; + const Settings settings = settingsBuilder().library("std.cfg").library("posix.cfg").build(); void check_(const char* file, int line, const char code[], bool isCPP = true) { // Clear the error buffer.. @@ -1703,10 +1689,6 @@ class TestMemleakStructMember : public TestFixture { } void run() override { - LOAD_LIB_2(settings.library, "std.cfg"); - LOAD_LIB_2(settings.library, "posix.cfg"); - settings.libraries.emplace_back("posix"); - // testing that errors are detected TEST_CASE(err); @@ -2274,7 +2256,7 @@ class TestMemleakNoVar : public TestFixture { TestMemleakNoVar() : TestFixture("TestMemleakNoVar") {} private: - Settings settings; + const Settings settings = settingsBuilder().certainty(Certainty::inconclusive).severity(Severity::warning).library("std.cfg").library("posix.cfg").build(); void check_(const char* file, int line, const char code[]) { // Clear the error buffer.. @@ -2291,13 +2273,6 @@ class TestMemleakNoVar : public TestFixture { } void run() override { - settings.certainty.setEnabled(Certainty::inconclusive, true); - settings.severity.enable(Severity::warning); - - LOAD_LIB_2(settings.library, "std.cfg"); - LOAD_LIB_2(settings.library, "posix.cfg"); - settings.libraries.emplace_back("posix"); - // pass allocated memory to function.. TEST_CASE(functionParameter); diff --git a/test/testnullpointer.cpp b/test/testnullpointer.cpp index 2452ecefbe3..e013c513ca4 100644 --- a/test/testnullpointer.cpp +++ b/test/testnullpointer.cpp @@ -41,12 +41,9 @@ class TestNullPointer : public TestFixture { TestNullPointer() : TestFixture("TestNullPointer") {} private: - Settings settings; + const Settings settings = settingsBuilder().library("std.cfg").severity(Severity::warning).build(); void run() override { - LOAD_LIB_2(settings.library, "std.cfg"); - settings.severity.enable(Severity::warning); - TEST_CASE(nullpointerAfterLoop); TEST_CASE(nullpointer1); TEST_CASE(nullpointer2); @@ -183,22 +180,22 @@ class TestNullPointer : public TestFixture { // Clear the error buffer.. errout.str(""); - settings.certainty.setEnabled(Certainty::inconclusive, inconclusive); + const Settings settings1 = settingsBuilder(settings).certainty(Certainty::inconclusive, inconclusive).build(); // Tokenize.. - Tokenizer tokenizer(&settings, this); + Tokenizer tokenizer(&settings1, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, filename), file, line); // Check for null pointer dereferences.. - runChecks(&tokenizer, &settings, this); + runChecks(&tokenizer, &settings1, this); } void checkP(const char code[]) { // Clear the error buffer.. errout.str(""); - settings.certainty.setEnabled(Certainty::inconclusive, false); + const Settings settings1 = settingsBuilder(settings).certainty(Certainty::inconclusive, false).build(); // Raw tokens.. std::vector files(1, "test.cpp"); @@ -211,12 +208,12 @@ class TestNullPointer : public TestFixture { simplecpp::preprocess(tokens2, tokens1, files, filedata, simplecpp::DUI()); // Tokenizer.. - Tokenizer tokenizer(&settings, this); + Tokenizer tokenizer(&settings1, this); tokenizer.createTokens(std::move(tokens2)); tokenizer.simplifyTokens1(""); // Check for null pointer dereferences.. - runChecks(&tokenizer, &settings, this); + runChecks(&tokenizer, &settings1, this); } @@ -4052,7 +4049,7 @@ class TestNullPointer : public TestFixture { } void functioncalllibrary() { - Settings settings1; + const Settings settings1; Tokenizer tokenizer(&settings1,this); std::istringstream code("void f() { int a,b,c; x(a,b,c); }"); ASSERT_EQUALS(true, tokenizer.tokenize(code, "test.c")); diff --git a/test/testpathmatch.cpp b/test/testpathmatch.cpp index c81162cff82..3ed2aede94a 100644 --- a/test/testpathmatch.cpp +++ b/test/testpathmatch.cpp @@ -25,18 +25,13 @@ class TestPathMatch : public TestFixture { public: - TestPathMatch() - : TestFixture("TestPathMatch") - , emptyMatcher(std::vector()) - , srcMatcher(std::vector(1, "src/")) - , fooCppMatcher(std::vector(1, "foo.cpp")) - , srcFooCppMatcher(std::vector(1, "src/foo.cpp")) {} + TestPathMatch() : TestFixture("TestPathMatch") {} private: - const PathMatch emptyMatcher; - const PathMatch srcMatcher; - const PathMatch fooCppMatcher; - const PathMatch srcFooCppMatcher; + const PathMatch emptyMatcher{std::vector()}; + const PathMatch srcMatcher{std::vector(1, "src/")}; + const PathMatch fooCppMatcher{std::vector(1, "foo.cpp")}; + const PathMatch srcFooCppMatcher{std::vector(1, "src/foo.cpp")}; void run() override { TEST_CASE(emptymaskemptyfile); diff --git a/test/testpostfixoperator.cpp b/test/testpostfixoperator.cpp index 4e542ea4082..48ff941f542 100644 --- a/test/testpostfixoperator.cpp +++ b/test/testpostfixoperator.cpp @@ -30,7 +30,7 @@ class TestPostfixOperator : public TestFixture { TestPostfixOperator() : TestFixture("TestPostfixOperator") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::performance).build(); #define check(code) check_(code, __FILE__, __LINE__) void check_(const char code[], const char* file, int line) { @@ -48,8 +48,6 @@ class TestPostfixOperator : public TestFixture { } void run() override { - settings.severity.enable(Severity::performance); - TEST_CASE(testsimple); TEST_CASE(testfor); TEST_CASE(testvolatile); diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index 21952676648..ea33f92541c 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -43,11 +43,7 @@ class ErrorLogger; class TestPreprocessor : public TestFixture { public: - TestPreprocessor() - : TestFixture("TestPreprocessor") - , preprocessor0(settings0, this) { - settings0.severity.enable(Severity::information); - } + TestPreprocessor() : TestFixture("TestPreprocessor") {} class OurPreprocessor : public Preprocessor { public: @@ -72,8 +68,8 @@ class TestPreprocessor : public TestFixture { }; private: - Settings settings0; - Preprocessor preprocessor0; + Settings settings0 = settingsBuilder().severity(Severity::information).build(); + Preprocessor preprocessor0{settings0, this}; void run() override { diff --git a/test/testsimplifytemplate.cpp b/test/testsimplifytemplate.cpp index e3db648b02b..8bec2cb02fb 100644 --- a/test/testsimplifytemplate.cpp +++ b/test/testsimplifytemplate.cpp @@ -37,14 +37,10 @@ class TestSimplifyTemplate : public TestFixture { TestSimplifyTemplate() : TestFixture("TestSimplifyTemplate") {} private: - Settings settings; + // If there are unused templates, keep those + const Settings settings = settingsBuilder().severity(Severity::portability).checkUnusedTemplates().build(); void run() override { - settings.severity.enable(Severity::portability); - - // If there are unused templates, keep those - settings.checkUnusedTemplates = true; - TEST_CASE(template1); TEST_CASE(template2); TEST_CASE(template3); @@ -313,9 +309,9 @@ class TestSimplifyTemplate : public TestFixture { std::string tok_(const char* file, int line, const char code[], bool debugwarnings = false, cppcheck::Platform::Type type = cppcheck::Platform::Type::Native) { errout.str(""); - settings.debugwarnings = debugwarnings; - PLATFORM(settings.platform, type); - Tokenizer tokenizer(&settings, this); + Settings settings1 = settingsBuilder(settings).debugwarnings(debugwarnings).build(); + PLATFORM(settings1.platform, type); + Tokenizer tokenizer(&settings1, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 1db88f2ba26..d738fb63553 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -34,24 +34,13 @@ class TestSimplifyTokens : public TestFixture { private: - Settings settings0; - Settings settings1; - Settings settings_std; - Settings settings_windows; + // If there are unused templates, keep those + const Settings settings0 = settingsBuilder().severity(Severity::portability).checkUnusedTemplates().build(); + const Settings settings1 = settingsBuilder().severity(Severity::style).checkUnusedTemplates().build(); + const Settings settings_std = settingsBuilder().library("std.cfg").checkUnusedTemplates().build(); + const Settings settings_windows = settingsBuilder().library("windows.cfg").severity(Severity::portability).checkUnusedTemplates().build(); void run() override { - LOAD_LIB_2(settings_std.library, "std.cfg"); - LOAD_LIB_2(settings_windows.library, "windows.cfg"); - settings0.severity.enable(Severity::portability); - settings1.severity.enable(Severity::style); - settings_windows.severity.enable(Severity::portability); - - // If there are unused templates, keep those - settings0.checkUnusedTemplates = true; - settings1.checkUnusedTemplates = true; - settings_std.checkUnusedTemplates = true; - settings_windows.checkUnusedTemplates = true; - TEST_CASE(combine_strings); TEST_CASE(combine_wstrings); TEST_CASE(combine_ustrings); @@ -178,14 +167,13 @@ class TestSimplifyTokens : public TestFixture { std::string tok_(const char* file, int line, const char code[], bool simplify = true, cppcheck::Platform::Type type = cppcheck::Platform::Type::Native) { errout.str(""); - PLATFORM(settings0.platform, type); - Tokenizer tokenizer(&settings0, this); + Settings settings = settings0; + PLATFORM(settings.platform, type); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); - (void)simplify; - return tokenizer.tokens()->stringifyList(nullptr, !simplify); } @@ -206,12 +194,12 @@ class TestSimplifyTokens : public TestFixture { std::string tokenizeAndStringify_(const char* file, int linenr, const char code[], bool simplify = false, bool expand = true, cppcheck::Platform::Type platform = cppcheck::Platform::Type::Native, const char* filename = "test.cpp", bool cpp11 = true) { errout.str(""); - settings1.debugwarnings = true; - PLATFORM(settings1.platform, platform); - settings1.standards.cpp = cpp11 ? Standards::CPP11 : Standards::CPP03; + Settings settings = settingsBuilder(settings1).debugwarnings().build(); + PLATFORM(settings.platform, platform); + settings.standards.cpp = cpp11 ? Standards::CPP11 : Standards::CPP03; // tokenize.. - Tokenizer tokenizer(&settings1, this); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, filename), file, linenr); diff --git a/test/testsimplifytypedef.cpp b/test/testsimplifytypedef.cpp index 88b4f1355e8..4d750148114 100644 --- a/test/testsimplifytypedef.cpp +++ b/test/testsimplifytypedef.cpp @@ -40,19 +40,12 @@ class TestSimplifyTypedef : public TestFixture { private: - Settings settings0; - Settings settings1; - Settings settings2; + // If there are unused templates, keep those + const Settings settings0 = settingsBuilder().severity(Severity::style).checkUnusedTemplates().build(); + const Settings settings1 = settingsBuilder().checkUnusedTemplates().build(); + const Settings settings2 = settingsBuilder().severity(Severity::style).checkUnusedTemplates().build(); void run() override { - settings0.severity.enable(Severity::style); - settings2.severity.enable(Severity::style); - - // If there are unused templates, keep those - settings0.checkUnusedTemplates = true; - settings1.checkUnusedTemplates = true; - settings2.checkUnusedTemplates = true; - TEST_CASE(c1); TEST_CASE(c2); TEST_CASE(canreplace1); @@ -234,10 +227,10 @@ class TestSimplifyTypedef : public TestFixture { std::string tok_(const char* file, int line, const char code[], bool simplify = true, cppcheck::Platform::Type type = cppcheck::Platform::Type::Native, bool debugwarnings = true) { errout.str(""); - settings0.certainty.enable(Certainty::inconclusive); - settings0.debugwarnings = debugwarnings; // show warnings about unhandled typedef - PLATFORM(settings0.platform, type); - Tokenizer tokenizer(&settings0, this); + // show warnings about unhandled typedef + Settings settings = settingsBuilder(settings0).certainty(Certainty::inconclusive).debugwarnings(debugwarnings).build(); + PLATFORM(settings.platform, type); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); @@ -286,9 +279,9 @@ class TestSimplifyTypedef : public TestFixture { void checkSimplifyTypedef_(const char code[], const char* file, int line) { errout.str(""); // Tokenize.. - settings2.certainty.enable(Certainty::inconclusive); - settings2.debugwarnings = true; // show warnings about unhandled typedef - Tokenizer tokenizer(&settings2, this); + // show warnings about unhandled typedef + const Settings settings = settingsBuilder(settings2).certainty(Certainty::inconclusive).debugwarnings().build(); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); } diff --git a/test/testsimplifyusing.cpp b/test/testsimplifyusing.cpp index 00a2bab8e07..9118bcc764a 100644 --- a/test/testsimplifyusing.cpp +++ b/test/testsimplifyusing.cpp @@ -39,19 +39,12 @@ class TestSimplifyUsing : public TestFixture { private: - Settings settings0; - Settings settings1; - Settings settings2; + // If there are unused templates, keep those + const Settings settings0 = settingsBuilder().severity(Severity::style).checkUnusedTemplates().build(); + const Settings settings1 = settingsBuilder().checkUnusedTemplates().build(); + const Settings settings2 = settingsBuilder().severity(Severity::style).checkUnusedTemplates().build(); void run() override { - settings0.severity.enable(Severity::style); - settings2.severity.enable(Severity::style); - - // If there are unused templates, keep those - settings0.checkUnusedTemplates = true; - settings1.checkUnusedTemplates = true; - settings2.checkUnusedTemplates = true; - TEST_CASE(simplifyUsing1); TEST_CASE(simplifyUsing2); TEST_CASE(simplifyUsing3); @@ -107,10 +100,9 @@ class TestSimplifyUsing : public TestFixture { std::string tok_(const char* file, int line, const char code[], cppcheck::Platform::Type type = cppcheck::Platform::Type::Native, bool debugwarnings = true, bool preprocess = false) { errout.str(""); - settings0.certainty.enable(Certainty::inconclusive); - settings0.debugwarnings = debugwarnings; - PLATFORM(settings0.platform, type); - Tokenizer tokenizer(&settings0, this); + Settings settings = settingsBuilder(settings0).certainty(Certainty::inconclusive).debugwarnings(debugwarnings).build(); + PLATFORM(settings.platform, type); + Tokenizer tokenizer(&settings, this); if (preprocess) { std::vector files{ "test.cpp" }; diff --git a/test/testsizeof.cpp b/test/testsizeof.cpp index 30aea3e2f44..bcf04a5db08 100644 --- a/test/testsizeof.cpp +++ b/test/testsizeof.cpp @@ -36,13 +36,9 @@ class TestSizeof : public TestFixture { TestSizeof() : TestFixture("TestSizeof") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::portability).certainty(Certainty::inconclusive).build(); void run() override { - settings.severity.enable(Severity::warning); - settings.severity.enable(Severity::portability); - settings.certainty.enable(Certainty::inconclusive); - TEST_CASE(sizeofsizeof); TEST_CASE(sizeofCalculation); TEST_CASE(sizeofFunction); diff --git a/test/teststl.cpp b/test/teststl.cpp index a62c7af0694..6595178f4e8 100644 --- a/test/teststl.cpp +++ b/test/teststl.cpp @@ -35,14 +35,9 @@ class TestStl : public TestFixture { TestStl() : TestFixture("TestStl") {} private: - Settings settings; + Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::style).severity(Severity::performance).library("std.cfg").build(); void run() override { - settings.severity.enable(Severity::warning); - settings.severity.enable(Severity::style); - settings.severity.enable(Severity::performance); - LOAD_LIB_2(settings.library, "std.cfg"); - TEST_CASE(outOfBounds); TEST_CASE(outOfBoundsSymbolic); TEST_CASE(outOfBoundsIndexExpression); @@ -185,17 +180,15 @@ class TestStl : public TestFixture { // Clear the error buffer.. errout.str(""); - settings.certainty.setEnabled(Certainty::inconclusive, inconclusive); - settings.standards.cpp = cppstandard; - + const Settings settings1 = settingsBuilder(settings).certainty(Certainty::inconclusive, inconclusive).cpp(cppstandard).build(); // Tokenize.. - Tokenizer tokenizer(&settings, this); + Tokenizer tokenizer(&settings1, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, "test.cpp"), file, line); - runChecks(&tokenizer, &settings, this); + runChecks(&tokenizer, &settings1, this); } void check_(const char* file, int line, const std::string& code, const bool inconclusive = false) { diff --git a/test/teststring.cpp b/test/teststring.cpp index a217f09259e..61bc1e5f055 100644 --- a/test/teststring.cpp +++ b/test/teststring.cpp @@ -32,12 +32,9 @@ class TestString : public TestFixture { TestString() : TestFixture("TestString") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::style).build(); void run() override { - settings.severity.enable(Severity::warning); - settings.severity.enable(Severity::style); - TEST_CASE(stringLiteralWrite); TEST_CASE(alwaysTrueFalseStringCompare); diff --git a/test/testsummaries.cpp b/test/testsummaries.cpp index 993566152b6..cfead86fdd7 100644 --- a/test/testsummaries.cpp +++ b/test/testsummaries.cpp @@ -44,7 +44,7 @@ class TestSummaries : public TestFixture { errout.str(""); // tokenize.. - Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, filename), file, line); diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index da9aa75a7ce..3a68ecb052b 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -63,16 +63,14 @@ class TestSymbolDatabase; class TestSymbolDatabase : public TestFixture { public: - TestSymbolDatabase() - : TestFixture("TestSymbolDatabase") - ,vartok(nullptr) - ,typetok(nullptr) {} + TestSymbolDatabase() : TestFixture("TestSymbolDatabase") {} private: - const Token* vartok; - const Token* typetok; - Settings settings1; - Settings settings2; + const Token* vartok{nullptr}; + const Token* typetok{nullptr}; + // If there are unused templates, keep those + Settings settings1 = settingsBuilder().library("std.cfg").checkUnusedTemplates().build(); + Settings settings2 = settingsBuilder().checkUnusedTemplates().build(); void reset() { vartok = nullptr; @@ -117,13 +115,8 @@ class TestSymbolDatabase : public TestFixture { } void run() override { - LOAD_LIB_2(settings1.library, "std.cfg"); PLATFORM(settings2.platform, cppcheck::Platform::Type::Unspecified); - // If there are unused templates, keep those - settings1.checkUnusedTemplates = true; - settings2.checkUnusedTemplates = true; - TEST_CASE(array); TEST_CASE(array_ptr); TEST_CASE(stlarray1); @@ -2311,17 +2304,15 @@ class TestSymbolDatabase : public TestFixture { errout.str(""); // Check.. - settings1.debugwarnings = debug; + const Settings settings = settingsBuilder(settings1).debugwarnings(debug).build(); // Tokenize.. - Tokenizer tokenizer(&settings1, this); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, filename), file, line); // force symbol database creation tokenizer.createSymbolDatabase(); - - settings1.debugwarnings = false; } void functionArgs1() { diff --git a/test/testthreadexecutor.cpp b/test/testthreadexecutor.cpp index 1a3ae87e8fc..68d961fa8df 100644 --- a/test/testthreadexecutor.cpp +++ b/test/testthreadexecutor.cpp @@ -39,7 +39,7 @@ class TestThreadExecutor : public TestFixture { TestThreadExecutor() : TestFixture("TestThreadExecutor") {} private: - Settings settings; + Settings settings = settingsBuilder().library("std.cfg").build(); /** * Execute check using n jobs for y files which are have @@ -64,12 +64,13 @@ class TestThreadExecutor : public TestFixture { } } - settings.jobs = jobs; - settings.showtime = showtime; + Settings settings1 = settings; + settings1.jobs = jobs; + settings1.showtime = showtime; if (plistOutput) - settings.plistOutput = plistOutput; + settings1.plistOutput = plistOutput; // TODO: test with settings.project.fileSettings; - ThreadExecutor executor(filemap, settings, *this); + ThreadExecutor executor(filemap, settings1, *this); std::vector> scopedfiles; scopedfiles.reserve(filemap.size()); for (std::map::const_iterator i = filemap.cbegin(); i != filemap.cend(); ++i) @@ -79,8 +80,6 @@ class TestThreadExecutor : public TestFixture { } void run() override { - LOAD_LIB_2(settings.library, "std.cfg"); - TEST_CASE(deadlock_with_many_errors); TEST_CASE(many_threads); TEST_CASE(many_threads_showtime); diff --git a/test/testtoken.cpp b/test/testtoken.cpp index f084c1f5a67..f6c408ad03e 100644 --- a/test/testtoken.cpp +++ b/test/testtoken.cpp @@ -135,7 +135,7 @@ class TestToken : public TestFixture { #define MatchCheck(...) MatchCheck_(__FILE__, __LINE__, __VA_ARGS__) bool MatchCheck_(const char* file, int line, const std::string& code, const std::string& pattern, unsigned int varid = 0) { - static const Settings settings; + const Settings settings; Tokenizer tokenizer(&settings, this); std::istringstream istr(";" + code + ";"); try { @@ -395,7 +395,7 @@ class TestToken : public TestFixture { void getStrSize() const { Token tok; - Settings settings; + const Settings settings; tok.str("\"\""); ASSERT_EQUALS(sizeof(""), Token::getStrSize(&tok, &settings)); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 7d50009d436..5627c7db1ff 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -44,28 +44,13 @@ class TestTokenizer : public TestFixture { TestTokenizer() : TestFixture("TestTokenizer") {} private: - Settings settings0; - Settings settings1; - Settings settings2; - Settings settings_windows; + // If there are unused templates, keep those + Settings settings0 = settingsBuilder().library("qt.cfg").checkUnusedTemplates().build(); + const Settings settings1 = settingsBuilder().library("qt.cfg").checkUnusedTemplates().build(); + const Settings settings2 = settingsBuilder().library("qt.cfg").checkUnusedTemplates().build(); + const Settings settings_windows = settingsBuilder().library("windows.cfg").checkUnusedTemplates().build(); void run() override { - LOAD_LIB_2(settings_windows.library, "windows.cfg"); - - // If there are unused templates, keep those - settings0.checkUnusedTemplates = true; - settings1.checkUnusedTemplates = true; - settings2.checkUnusedTemplates = true; - settings_windows.checkUnusedTemplates = true; - - // library=qt - LOAD_LIB_2(settings0.library, "qt.cfg"); - settings0.libraries.emplace_back("qt"); - LOAD_LIB_2(settings1.library, "qt.cfg"); - settings1.libraries.emplace_back("qt"); - LOAD_LIB_2(settings2.library, "qt.cfg"); - settings2.libraries.emplace_back("qt"); - TEST_CASE(tokenize1); TEST_CASE(tokenize2); TEST_CASE(tokenize4); @@ -471,12 +456,11 @@ class TestTokenizer : public TestFixture { std::string tokenizeAndStringify_(const char* file, int linenr, const char code[], bool expand = true, cppcheck::Platform::Type platform = cppcheck::Platform::Type::Native, const char* filename = "test.cpp", Standards::cppstd_t std = Standards::CPP11) { errout.str(""); - settings1.debugwarnings = true; - PLATFORM(settings1.platform, platform); - settings1.standards.cpp = std; + Settings settings = settingsBuilder(settings1).debugwarnings().cpp(std).build(); + PLATFORM(settings.platform, platform); // tokenize.. - Tokenizer tokenizer(&settings1, this); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, filename), file, linenr); @@ -500,12 +484,11 @@ class TestTokenizer : public TestFixture { std::string tokenizeAndStringifyWindows_(const char* file, int linenr, const char code[], bool expand = true, cppcheck::Platform::Type platform = cppcheck::Platform::Type::Native, const char* filename = "test.cpp", bool cpp11 = true) { errout.str(""); - settings_windows.debugwarnings = true; - PLATFORM(settings_windows.platform, platform); - settings_windows.standards.cpp = cpp11 ? Standards::CPP11 : Standards::CPP03; + Settings settings = settingsBuilder(settings_windows).debugwarnings().cpp(cpp11 ? Standards::CPP11 : Standards::CPP03).build(); + PLATFORM(settings.platform, platform); // tokenize.. - Tokenizer tokenizer(&settings_windows, this); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, filename), file, linenr); @@ -541,10 +524,9 @@ class TestTokenizer : public TestFixture { std::string tokenizeDebugListing_(const char* file, int line, const char code[], const char filename[] = "test.cpp") { errout.str(""); - settings2.standards.c = Standards::C89; - settings2.standards.cpp = Standards::CPP03; + const Settings settings = settingsBuilder(settings2).c(Standards::C89).cpp(Standards::CPP03).build(); - Tokenizer tokenizer(&settings2, this); + Tokenizer tokenizer(&settings, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, filename), file, line); diff --git a/test/testtokenlist.cpp b/test/testtokenlist.cpp index bc3ec7ab188..2198036838b 100644 --- a/test/testtokenlist.cpp +++ b/test/testtokenlist.cpp @@ -30,7 +30,7 @@ class TestTokenList : public TestFixture { TestTokenList() : TestFixture("TestTokenList") {} private: - Settings settings; + const Settings settings; void run() override { TEST_CASE(testaddtoken1); @@ -40,17 +40,18 @@ class TestTokenList : public TestFixture { } // inspired by #5895 - void testaddtoken1() { + void testaddtoken1() const { const std::string code = "0x89504e470d0a1a0a"; TokenList tokenlist(&settings); tokenlist.addtoken(code, 1, 1, false); ASSERT_EQUALS("0x89504e470d0a1a0a", tokenlist.front()->str()); } - void testaddtoken2() { + void testaddtoken2() const { const std::string code = "0xF0000000"; - settings.platform.int_bit = 32; - TokenList tokenlist(&settings); + Settings settings1; + settings1.platform.int_bit = 32; + TokenList tokenlist(&settings1); tokenlist.addtoken(code, 1, 1, false); ASSERT_EQUALS("0xF0000000", tokenlist.front()->str()); } @@ -68,7 +69,7 @@ class TestTokenList : public TestFixture { ASSERT(Token::simpleMatch(tokenlist.front(), "a + + 1 ; 1 + + b ;")); } - void isKeyword() { + void isKeyword() const { const char code[] = "for a int delete true"; diff --git a/test/testtokenrange.cpp b/test/testtokenrange.cpp index 155087c8aec..2598c832847 100644 --- a/test/testtokenrange.cpp +++ b/test/testtokenrange.cpp @@ -101,7 +101,7 @@ class TestTokenRange : public TestFixture { } void scopeExample() const { - Settings settings; + const Settings settings; Tokenizer tokenizer{ &settings, nullptr }; std::istringstream sample("void a(){} void main(){ if(true){a();} }"); ASSERT(tokenizer.tokenize(sample, "test.cpp")); diff --git a/test/testtype.cpp b/test/testtype.cpp index 5cf7d787bc7..e605a70092e 100644 --- a/test/testtype.cpp +++ b/test/testtype.cpp @@ -238,9 +238,8 @@ class TestType : public TestFixture { } void checkIntegerOverflow() { - Settings settings; + Settings settings = settingsBuilder().severity(Severity::warning).build(); PLATFORM(settings.platform, cppcheck::Platform::Type::Unix32); - settings.severity.enable(Severity::warning); check("x = (int)0x10000 * (int)0x10000;", &settings); ASSERT_EQUALS("[test.cpp:1]: (error) Signed integer overflow for expression '(int)0x10000*(int)0x10000'.\n", errout.str()); @@ -331,8 +330,7 @@ class TestType : public TestFixture { } void longCastAssign() { - Settings settings; - settings.severity.enable(Severity::style); + Settings settings = settingsBuilder().severity(Severity::style).build(); PLATFORM(settings.platform, cppcheck::Platform::Type::Unix64); check("long f(int x, int y) {\n" @@ -363,8 +361,7 @@ class TestType : public TestFixture { } void longCastReturn() { - Settings settings; - settings.severity.enable(Severity::style); + Settings settings = settingsBuilder().severity(Severity::style).build(); check("long f(int x, int y) {\n" " return x * y;\n" diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index fc322089214..b1d3253094e 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -35,11 +35,9 @@ class TestUninitVar : public TestFixture { TestUninitVar() : TestFixture("TestUninitVar") {} private: - Settings settings; + Settings settings = settingsBuilder().library("std.cfg").build(); void run() override { - LOAD_LIB_2(settings.library, "std.cfg"); - TEST_CASE(uninitvar1); TEST_CASE(uninitvar_warn_once); // only write 1 warning at a time TEST_CASE(uninitvar_decl); // handling various types in C and C++ files @@ -111,14 +109,15 @@ class TestUninitVar : public TestFixture { // Clear the error buffer.. errout.str(""); + const Settings settings1 = settingsBuilder(settings).debugwarnings(debugwarnings).build(); + // Tokenize.. - settings.debugwarnings = debugwarnings; - Tokenizer tokenizer(&settings, this); + Tokenizer tokenizer(&settings1, this); std::istringstream istr(code); ASSERT_LOC(tokenizer.tokenize(istr, fname), file, line); // Check for redundant code.. - CheckUninitVar checkuninitvar(&tokenizer, &settings, this); + CheckUninitVar checkuninitvar(&tokenizer, &settings1, this); checkuninitvar.check(); settings.debugwarnings = false; diff --git a/test/testunusedfunctions.cpp b/test/testunusedfunctions.cpp index acdb5ddb206..82d2b68b159 100644 --- a/test/testunusedfunctions.cpp +++ b/test/testunusedfunctions.cpp @@ -31,11 +31,9 @@ class TestUnusedFunctions : public TestFixture { TestUnusedFunctions() : TestFixture("TestUnusedFunctions") {} private: - Settings settings; + Settings settings = settingsBuilder().severity(Severity::style).build(); void run() override { - settings.severity.enable(Severity::style); - TEST_CASE(incondition); TEST_CASE(return1); TEST_CASE(return2); diff --git a/test/testunusedprivfunc.cpp b/test/testunusedprivfunc.cpp index a9aaef5bebe..ffdb0459317 100644 --- a/test/testunusedprivfunc.cpp +++ b/test/testunusedprivfunc.cpp @@ -36,11 +36,9 @@ class TestUnusedPrivateFunction : public TestFixture { TestUnusedPrivateFunction() : TestFixture("TestUnusedPrivateFunction") {} private: - Settings settings; + Settings settings = settingsBuilder().severity(Severity::style).build(); void run() override { - settings.severity.enable(Severity::style); - TEST_CASE(test1); TEST_CASE(test2); TEST_CASE(test3); diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 803fd476b42..534a34b0495 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -37,13 +37,9 @@ class TestUnusedVar : public TestFixture { TestUnusedVar() : TestFixture("TestUnusedVar") {} private: - Settings settings; + Settings settings = settingsBuilder().severity(Severity::style).checkLibrary().library("std.cfg").build(); void run() override { - settings.severity.enable(Severity::style); - settings.checkLibrary = true; - LOAD_LIB_2(settings.library, "std.cfg"); - TEST_CASE(isRecordTypeWithoutSideEffects); TEST_CASE(cleanFunction); diff --git a/test/testutils.cpp b/test/testutils.cpp index ff492ac71e4..6b61634822a 100644 --- a/test/testutils.cpp +++ b/test/testutils.cpp @@ -26,8 +26,6 @@ #include #include -const Settings givenACodeSampleToTokenize::settings; - class TestUtils : public TestFixture { public: TestUtils() : TestFixture("TestUtils") {} diff --git a/test/testvaarg.cpp b/test/testvaarg.cpp index 1db5cf73fa6..b4307c32d6e 100644 --- a/test/testvaarg.cpp +++ b/test/testvaarg.cpp @@ -31,7 +31,7 @@ class TestVaarg : public TestFixture { TestVaarg() : TestFixture("TestVaarg") {} private: - Settings settings; + const Settings settings = settingsBuilder().severity(Severity::warning).build(); #define check(code) check_(code, __FILE__, __LINE__) void check_(const char code[], const char* file, int line) { @@ -48,8 +48,6 @@ class TestVaarg : public TestFixture { } void run() override { - settings.severity.enable(Severity::warning); - TEST_CASE(wrongParameterTo_va_start); TEST_CASE(referenceAs_va_start); TEST_CASE(va_end_missing); diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index b36b82eb7a8..fb893de1d2b 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -46,7 +46,7 @@ class TestValueFlow : public TestFixture { TestValueFlow() : TestFixture("TestValueFlow") {} private: - Settings settings; + Settings settings = settingsBuilder().library("std.cfg").build(); void run() override { // strcpy, abort cfg @@ -56,7 +56,6 @@ class TestValueFlow : public TestFixture { " true \n" // abort is a noreturn function ""; ASSERT_EQUALS(true, settings.library.loadxmldata(cfg, sizeof(cfg))); - LOAD_LIB_2(settings.library, "std.cfg"); TEST_CASE(valueFlowNumber); TEST_CASE(valueFlowString); @@ -6572,8 +6571,7 @@ class TestValueFlow : public TestFixture { void valueFlowSafeFunctionParameterValues() { const char *code; std::list values; - Settings s; - LOAD_LIB_2(s.library, "std.cfg"); + Settings s = settingsBuilder().library("std.cfg").build(); s.safeChecks.classes = s.safeChecks.externalFunctions = s.safeChecks.internalFunctions = true; code = "short f(short x) {\n" @@ -6624,8 +6622,7 @@ class TestValueFlow : public TestFixture { void valueFlowUnknownFunctionReturn() { const char *code; std::list values; - Settings s; - LOAD_LIB_2(s.library, "std.cfg"); + Settings s = settingsBuilder().library("std.cfg").build(); s.checkUnknownFunctionReturn.insert("rand"); code = "x = rand();"; diff --git a/test/testvarid.cpp b/test/testvarid.cpp index 3c19a4b493e..a834cff5458 100644 --- a/test/testvarid.cpp +++ b/test/testvarid.cpp @@ -31,16 +31,13 @@ class TestVarID : public TestFixture { public: - TestVarID() : TestFixture("TestVarID") { - PLATFORM(settings.platform, cppcheck::Platform::Type::Unix64); - settings.standards.c = Standards::C89; - settings.standards.cpp = Standards::CPPLatest; - settings.checkUnusedTemplates = true; - } + TestVarID() : TestFixture("TestVarID") {} private: - Settings settings; + Settings settings = settingsBuilder().c(Standards::C89).cpp(Standards::CPPLatest).checkUnusedTemplates().build(); void run() override { + PLATFORM(settings.platform, cppcheck::Platform::Type::Unix64); + TEST_CASE(varid1); TEST_CASE(varid2); TEST_CASE(varid3);