diff --git a/test/helpers.cpp b/test/helpers.cpp index 8a9e02ac63f..18ea4d426e0 100644 --- a/test/helpers.cpp +++ b/test/helpers.cpp @@ -50,12 +50,22 @@ class SuppressionList; const Settings SimpleTokenizer::s_settings; +std::set ScopedFile::s_scopedfiles; + // TODO: better path-only usage ScopedFile::ScopedFile(std::string name, const std::string &content, std::string path) : mName(std::move(name)) , mPath(Path::toNativeSeparators(std::move(path))) , mFullPath(Path::join(mPath, mName)) { + if (mPath.empty() && mName.empty()) { + throw std::runtime_error("ScopedFile(" + mFullPath + ") - no file specified"); + } + + if (!s_scopedfiles.emplace(mFullPath).second) { + throw std::runtime_error("ScopedFile(" + mFullPath + ") - file not unique"); + } + if (!mPath.empty() && mPath != Path::getCurrentPath()) { if (Path::isDirectory(mPath)) throw std::runtime_error("ScopedFile(" + mFullPath + ") - directory already exists"); diff --git a/test/helpers.h b/test/helpers.h index d62696986df..928e721f113 100644 --- a/test/helpers.h +++ b/test/helpers.h @@ -157,6 +157,8 @@ class ScopedFile { const std::string mName; const std::string mPath; const std::string mFullPath; + + static std::set s_scopedfiles; }; class PreprocessorHelper diff --git a/test/testcmdlineparser.cpp b/test/testcmdlineparser.cpp index 65bf6906841..ffa0584fcc3 100644 --- a/test/testcmdlineparser.cpp +++ b/test/testcmdlineparser.cpp @@ -1183,10 +1183,10 @@ class TestCmdlineParser : public TestFixture { void exitcodeSuppressions() { REDIRECT; - ScopedFile file("suppr.txt", + ScopedFile file("suppr_ec.txt", "uninitvar\n" "unusedFunction\n"); - const char * const argv[] = {"cppcheck", "--exitcode-suppressions=suppr.txt", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--exitcode-suppressions=suppr_ec.txt", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv)); const auto supprsNofail = supprs->nofail.getSuppressions(); ASSERT_EQUALS(2, supprsNofail.size()); @@ -1836,10 +1836,10 @@ class TestCmdlineParser : public TestFixture { void suppressions() { REDIRECT; - ScopedFile file("suppr.txt", + ScopedFile file("supprs.txt", "uninitvar\n" "unusedFunction\n"); - const char * const argv[] = {"cppcheck", "--suppressions-list=suppr.txt", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--suppressions-list=supprs.txt", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv)); const auto supprsNomsg = supprs->nomsg.getSuppressions(); ASSERT_EQUALS(2, supprsNomsg.size()); @@ -2467,16 +2467,16 @@ class TestCmdlineParser : public TestFixture { void projectMultiple() { REDIRECT; - ScopedFile file("project.cppcheck", ""); - const char * const argv[] = {"cppcheck", "--project=project.cppcheck", "--project=project.cppcheck", "file.cpp"}; + ScopedFile file("project_multi.cppcheck", ""); + const char * const argv[] = {"cppcheck", "--project=project_multi.cppcheck", "--project=project.cppcheck", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); ASSERT_EQUALS("cppcheck: error: multiple --project options are not supported.\n", logger->str()); } void projectAndSource() { REDIRECT; - ScopedFile file("project.cppcheck", ""); - const char * const argv[] = {"cppcheck", "--project=project.cppcheck", "file.cpp"}; + ScopedFile file("project_src.cppcheck", ""); + const char * const argv[] = {"cppcheck", "--project=project_src.cppcheck", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); ASSERT_EQUALS("cppcheck: error: --project cannot be used in conjunction with source files.\n", logger->str()); } @@ -2496,8 +2496,8 @@ class TestCmdlineParser : public TestFixture { } void projectNoPaths() { - ScopedFile file("project.cppcheck", ""); - const char * const argv[] = {"cppcheck", "--project=project.cppcheck"}; + ScopedFile file("project_nopaths.cppcheck", ""); + const char * const argv[] = {"cppcheck", "--project=project_nopaths.cppcheck"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); ASSERT_EQUALS("cppcheck: error: no C or C++ source files found.\n", logger->str()); } @@ -2582,7 +2582,7 @@ class TestCmdlineParser : public TestFixture { #ifdef HAVE_RULES void ruleFileMulti() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_multi.xml", "\n" "\n" "raw\n" @@ -2603,7 +2603,7 @@ class TestCmdlineParser : public TestFixture { "\n" "\n" ""); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_multi.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv)); ASSERT_EQUALS(2, settings->rules.size()); auto it = settings->rules.cbegin(); @@ -2622,7 +2622,7 @@ class TestCmdlineParser : public TestFixture { void ruleFileSingle() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_single.xml", "\n" "define\n" ".+\n" @@ -2632,7 +2632,7 @@ class TestCmdlineParser : public TestFixture { "ruleSummary\n" "\n" "\n"); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_single.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv)); ASSERT_EQUALS(1, settings->rules.size()); auto it = settings->rules.cbegin(); @@ -2659,37 +2659,37 @@ class TestCmdlineParser : public TestFixture { void ruleFileInvalid() { REDIRECT; - ScopedFile file("rule.xml", ""); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + ScopedFile file("rule_invalid.xml", ""); + const char * const argv[] = {"cppcheck", "--rule-file=rule_invalid.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' (XML_ERROR_EMPTY_DOCUMENT).\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_invalid.xml' (XML_ERROR_EMPTY_DOCUMENT).\n", logger->str()); } void ruleFileNoRoot() { REDIRECT; - ScopedFile file("rule.xml", ""); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + ScopedFile file("rule_noroot.xml", ""); + const char * const argv[] = {"cppcheck", "--rule-file=rule_noroot.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv)); ASSERT_EQUALS(0, settings->rules.size()); } void ruleFileEmptyElements1() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_empty_elems_1.xml", "" "" "" "" "" ); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_empty_elems_1.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); // do not crash - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - a rule is lacking a pattern.\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_empty_elems_1.xml' - a rule is lacking a pattern.\n", logger->str()); } void ruleFileEmptyElements2() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_empty_elems_2.xml", "" "" "" @@ -2698,101 +2698,101 @@ class TestCmdlineParser : public TestFixture { "" "" ); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_empty_elems_2.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); // do not crash - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - a rule is lacking a pattern.\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_empty_elems_2.xml' - a rule is lacking a pattern.\n", logger->str()); } void ruleFileUnknownElement1() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_unk_elems_1.xml", "" "" "" ); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_unk_elems_1.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - unknown element 'messages' encountered in 'rule'.\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_unk_elems_1.xml' - unknown element 'messages' encountered in 'rule'.\n", logger->str()); } void ruleFileUnknownElement2() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_unk_elems_2.xml", "" "" "" "" "" ); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_unk_elems_2.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - unknown element 'pattern' encountered in 'message'.\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_unk_elems_2.xml' - unknown element 'pattern' encountered in 'message'.\n", logger->str()); } void ruleFileMissingTokenList() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_missing_toklist.xml", "\n" "\n" ".+\n" "\n"); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_missing_toklist.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - a rule is lacking a tokenlist.\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_missing_toklist.xml' - a rule is lacking a tokenlist.\n", logger->str()); } void ruleFileUnknownTokenList() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_unk_toklist.xml", "\n" "simple\n" ".+\n" "\n"); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_unk_toklist.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - a rule is using the unsupported tokenlist 'simple'.\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_unk_toklist.xml' - a rule is using the unsupported tokenlist 'simple'.\n", logger->str()); } void ruleFileMissingId() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_missing_id.xml", "\n" ".+\n" "\n" "" "\n" "\n"); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_missing_id.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - a rule is lacking an id.\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_missing_id.xml' - a rule is lacking an id.\n", logger->str()); } void ruleFileInvalidSeverity1() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_invalid_sev_1.xml", "\n" ".+\n" "\n" "" "\n" "\n"); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_invalid_sev_1.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - a rule has an invalid severity.\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_invalid_sev_1.xml' - a rule has an invalid severity.\n", logger->str()); } void ruleFileInvalidSeverity2() { REDIRECT; - ScopedFile file("rule.xml", + ScopedFile file("rule_invalid_sev_2.xml", "\n" ".+\n" "\n" "none" "\n" "\n"); - const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"}; + const char * const argv[] = {"cppcheck", "--rule-file=rule_invalid_sev_2.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - a rule has an invalid severity.\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule_invalid_sev_2.xml' - a rule has an invalid severity.\n", logger->str()); } #else void ruleFileNotSupported() { @@ -2876,18 +2876,18 @@ class TestCmdlineParser : public TestFixture { void suppressXmlInvalid() { REDIRECT; - ScopedFile file("suppress.xml", ""); - const char * const argv[] = {"cppcheck", "--suppress-xml=suppress.xml", "file.cpp"}; + ScopedFile file("suppress_invalid.xml", ""); + const char * const argv[] = {"cppcheck", "--suppress-xml=suppress_invalid.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: failed to load suppressions XML 'suppress.xml' (XML_ERROR_EMPTY_DOCUMENT).\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: failed to load suppressions XML 'suppress_invalid.xml' (XML_ERROR_EMPTY_DOCUMENT).\n", logger->str()); } void suppressXmlNoRoot() { REDIRECT; - ScopedFile file("suppress.xml", ""); - const char * const argv[] = {"cppcheck", "--suppress-xml=suppress.xml", "file.cpp"}; + ScopedFile file("suppress_noroot.xml", ""); + const char * const argv[] = {"cppcheck", "--suppress-xml=suppress_noroot.xml", "file.cpp"}; ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv)); - ASSERT_EQUALS("cppcheck: error: failed to load suppressions XML 'suppress.xml' (no root node found).\n", logger->str()); + ASSERT_EQUALS("cppcheck: error: failed to load suppressions XML 'suppress_noroot.xml' (no root node found).\n", logger->str()); } void executorDefault() { diff --git a/test/testpath.cpp b/test/testpath.cpp index 44d5f10a30b..98e1418a6e2 100644 --- a/test/testpath.cpp +++ b/test/testpath.cpp @@ -180,21 +180,21 @@ class TestPath : public TestFixture { } void isDirectory() const { - ScopedFile file("testpath.txt", "", "testpath"); - ScopedFile file2("testpath2.txt", ""); - ASSERT_EQUALS(false, Path::isDirectory("testpath.txt")); + ScopedFile file("testpath_dir.txt", "", "testpath"); + ScopedFile file2("testpath_dir_2.txt", ""); + ASSERT_EQUALS(false, Path::isDirectory("testpath_dir.txt")); ASSERT_EQUALS(true, Path::isDirectory("testpath")); - ASSERT_EQUALS(false, Path::isDirectory("testpath/testpath.txt")); - ASSERT_EQUALS(false, Path::isDirectory("testpath2.txt")); + ASSERT_EQUALS(false, Path::isDirectory("testpath/testpath_dir.txt")); + ASSERT_EQUALS(false, Path::isDirectory("testpath_dir_2.txt")); } void isFile() const { - ScopedFile file("testpath.txt", "", "testpath"); - ScopedFile file2("testpath2.txt", ""); + ScopedFile file("testpath_file.txt", "", "testpath"); + ScopedFile file2("testpath_file_2.txt", ""); ASSERT_EQUALS(false, Path::isFile("testpath")); - ASSERT_EQUALS(false, Path::isFile("testpath.txt")); - ASSERT_EQUALS(true, Path::isFile("testpath/testpath.txt")); - ASSERT_EQUALS(true, Path::isFile("testpath2.txt")); + ASSERT_EQUALS(false, Path::isFile("testpath_file.txt")); + ASSERT_EQUALS(true, Path::isFile("testpath/testpath_file.txt")); + ASSERT_EQUALS(true, Path::isFile("testpath_file_2.txt")); } void sameFileName() const { @@ -373,7 +373,7 @@ class TestPath : public TestFixture { " /*-*-C++-*-*/", }; - for (const auto& f : { "cppprobe.h", "cppprobe" }) { + for (const auto& f : { "cppprobe_cpp.h", "cppprobe_cpp" }) { for (const auto& m : markers_cpp) { identifyWithCppProbeInternal(f, m, Standards::Language::CPP); } @@ -407,10 +407,10 @@ class TestPath : public TestFixture { }; for (const auto& m : markers_c) { - identifyWithCppProbeInternal("cppprobe.h", m, Standards::Language::C); + identifyWithCppProbeInternal("cppprobe_c.h", m, Standards::Language::C); } for (const auto& m : markers_c) { - identifyWithCppProbeInternal("cppprobe", m, Standards::Language::None); + identifyWithCppProbeInternal("cppprobe_none", m, Standards::Language::None); } } @@ -555,11 +555,11 @@ class TestPath : public TestFixture { } void exists() const { - ScopedFile file("testpath.txt", "", "testpath"); - ScopedFile file2("testpath2.txt", ""); + ScopedFile file("testpath_exists.txt", "", "testpath"); + ScopedFile file2("testpath_exists_2.txt", ""); ASSERT_EQUALS(true, Path::exists("testpath")); - ASSERT_EQUALS(true, Path::exists("testpath2.txt")); + ASSERT_EQUALS(true, Path::exists("testpath_exists_2.txt")); ASSERT_EQUALS(false, Path::exists("testpath2")); @@ -567,9 +567,9 @@ class TestPath : public TestFixture { ASSERT_EQUALS(true, Path::exists("testpath", &b)); ASSERT_EQUALS(true, b); - ASSERT_EQUALS(true, Path::exists("testpath/testpath.txt", &b)); + ASSERT_EQUALS(true, Path::exists("testpath/testpath_exists.txt", &b)); ASSERT_EQUALS(false, b); - ASSERT_EQUALS(true, Path::exists("testpath2.txt", &b)); + ASSERT_EQUALS(true, Path::exists("testpath_exists_2.txt", &b)); ASSERT_EQUALS(false, b); ASSERT_EQUALS(false, Path::exists("testpath2", &b)); diff --git a/test/testsuppressions.cpp b/test/testsuppressions.cpp index b9ad2122839..a77b3e49318 100644 --- a/test/testsuppressions.cpp +++ b/test/testsuppressions.cpp @@ -1555,16 +1555,16 @@ class TestSuppressions : public TestFixture { // empty file { - ScopedFile file("suppressparsexml.xml", + ScopedFile file("suppressparsexml_empty.xml", ""); SuppressionList supprList; - ASSERT_EQUALS("failed to load suppressions XML 'suppressparsexml.xml' (XML_ERROR_EMPTY_DOCUMENT).", supprList.parseXmlFile(file.path().c_str())); + ASSERT_EQUALS("failed to load suppressions XML 'suppressparsexml_empty.xml' (XML_ERROR_EMPTY_DOCUMENT).", supprList.parseXmlFile(file.path().c_str())); } // wrong root node { - ScopedFile file("suppressparsexml.xml", + ScopedFile file("suppressparsexml_wrong_root.xml", "\n"); SuppressionList supprList; @@ -1573,16 +1573,16 @@ class TestSuppressions : public TestFixture { // no root node { - ScopedFile file("suppressparsexml.xml", + ScopedFile file("suppressparsexml_noroot.xml", "\n"); SuppressionList supprList; - ASSERT_EQUALS("failed to load suppressions XML 'suppressparsexml.xml' (no root node found).", supprList.parseXmlFile(file.path().c_str())); + ASSERT_EQUALS("failed to load suppressions XML 'suppressparsexml_noroot.xml' (no root node found).", supprList.parseXmlFile(file.path().c_str())); } // unknown element { - ScopedFile file("suppressparsexml.xml", + ScopedFile file("suppressparsexml_unk_elem.xml", "\n" "\n" "uninitvar\n" @@ -1590,7 +1590,7 @@ class TestSuppressions : public TestFixture { ""); SuppressionList supprList; - ASSERT_EQUALS("unknown element 'eid' in suppressions XML 'suppressparsexml.xml', expected id/fileName/lineNumber/symbolName/hash.", supprList.parseXmlFile(file.path().c_str())); + ASSERT_EQUALS("unknown element 'eid' in suppressions XML 'suppressparsexml_unk_elem.xml', expected id/fileName/lineNumber/symbolName/hash.", supprList.parseXmlFile(file.path().c_str())); } }