同步操作将从 Gitee 极速下载/Cppcheck 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/** Cppcheck - A tool for static C/C++ code analysis* Copyright (C) 2007-2020 Cppcheck team.** This program is free software: you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation, either version 3 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program. If not, see <http://www.gnu.org/licenses/>.*/#include "importproject.h"#include "settings.h"#include "testsuite.h"#include <list>#include <map>#include <string>class TestImporter : public ImportProject {public:using ImportProject::importCompileCommands;using ImportProject::importCppcheckGuiProject;};class TestImportProject : public TestFixture {public:TestImportProject() : TestFixture("TestImportProject") {}private:void run() OVERRIDE {TEST_CASE(setDefines);TEST_CASE(setIncludePaths1);TEST_CASE(setIncludePaths2);TEST_CASE(setIncludePaths3); // macro names are case insensitiveTEST_CASE(importCompileCommands1);TEST_CASE(importCompileCommands2); // #8563TEST_CASE(importCompileCommands3); // check with existing trailing / in directoryTEST_CASE(importCompileCommands4); // only accept certain file typesTEST_CASE(importCompileCommandsArgumentsSection); // Handle arguments sectionTEST_CASE(importCompileCommandsNoCommandSection); // gracefully handles malformed jsonTEST_CASE(importCppcheckGuiProject);TEST_CASE(ignorePaths);}void setDefines() const {ImportProject::FileSettings fs;fs.setDefines("A");ASSERT_EQUALS("A=1", fs.defines);fs.setDefines("A;B;");ASSERT_EQUALS("A=1;B=1", fs.defines);fs.setDefines("A;;B;");ASSERT_EQUALS("A=1;B=1", fs.defines);fs.setDefines("A;;B");ASSERT_EQUALS("A=1;B=1", fs.defines);}void setIncludePaths1() const {ImportProject::FileSettings fs;std::list<std::string> in(1, "../include");std::map<std::string, std::string, cppcheck::stricmp> variables;fs.setIncludePaths("abc/def/", in, variables);ASSERT_EQUALS(1U, fs.includePaths.size());ASSERT_EQUALS("abc/include/", fs.includePaths.front());}void setIncludePaths2() const {ImportProject::FileSettings fs;std::list<std::string> in(1, "$(SolutionDir)other");std::map<std::string, std::string, cppcheck::stricmp> variables;variables["SolutionDir"] = "c:/abc/";fs.setIncludePaths("/home/fred", in, variables);ASSERT_EQUALS(1U, fs.includePaths.size());ASSERT_EQUALS("c:/abc/other/", fs.includePaths.front());}void setIncludePaths3() const { // macro names are case insensitiveImportProject::FileSettings fs;std::list<std::string> in(1, "$(SOLUTIONDIR)other");std::map<std::string, std::string, cppcheck::stricmp> variables;variables["SolutionDir"] = "c:/abc/";fs.setIncludePaths("/home/fred", in, variables);ASSERT_EQUALS(1U, fs.includePaths.size());ASSERT_EQUALS("c:/abc/other/", fs.includePaths.front());}void importCompileCommands1() const {const char json[] = "[ { \"directory\": \"/tmp\",""\"command\": \"gcc -I/tmp -DFILESDIR=\\\\\\\"/usr/local/share/Cppcheck\\\\\\\" -DTEST1 -DTEST2=2 -o /tmp/src.o -c /tmp/src.c\",""\"file\": \"/tmp/src.c\" } ]";std::istringstream istr(json);TestImporter importer;importer.importCompileCommands(istr);ASSERT_EQUALS(1, importer.fileSettings.size());ASSERT_EQUALS("FILESDIR=\"/usr/local/share/Cppcheck\";TEST1=1;TEST2=2", importer.fileSettings.begin()->defines);}void importCompileCommands2() const {const char json[] = "[ { \"directory\": \"/tmp\",""\"command\": \"gcc -c src.c\",""\"file\": \"src.c\" } ]";std::istringstream istr(json);TestImporter importer;importer.importCompileCommands(istr);ASSERT_EQUALS(1, importer.fileSettings.size());ASSERT_EQUALS("/tmp/src.c", importer.fileSettings.begin()->filename);}void importCompileCommands3() const {const char json[] = "[ { \"directory\": \"/tmp/\",""\"command\": \"gcc -c src.c\",""\"file\": \"src.c\" } ]";std::istringstream istr(json);TestImporter importer;importer.importCompileCommands(istr);ASSERT_EQUALS(1, importer.fileSettings.size());ASSERT_EQUALS("/tmp/src.c", importer.fileSettings.begin()->filename);}void importCompileCommands4() const {const char json[] = "[ { \"directory\": \"/tmp/\",""\"command\": \"gcc -c src.mm\",""\"file\": \"src.mm\" } ]";std::istringstream istr(json);TestImporter importer;importer.importCompileCommands(istr);ASSERT_EQUALS(0, importer.fileSettings.size());}void importCompileCommandsArgumentsSection() const {const char json[] = "[ { \"directory\": \"/tmp/\",""\"arguments\": [\"gcc\", \"-c\", \"src.c\"],""\"file\": \"src.c\" } ]";std::istringstream istr(json);TestImporter importer;importer.importCompileCommands(istr);ASSERT_EQUALS(1, importer.fileSettings.size());ASSERT_EQUALS("/tmp/src.c", importer.fileSettings.begin()->filename);}void importCompileCommandsNoCommandSection() const {const char json[] = "[ { \"directory\": \"/tmp/\",""\"file\": \"src.mm\" } ]";std::istringstream istr(json);TestImporter importer;importer.importCompileCommands(istr);ASSERT_EQUALS(0, importer.fileSettings.size());}void importCppcheckGuiProject() const {const char xml[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n""<project version=\"1\">\n"" <root name=\".\"/>\n"" <builddir>out1</builddir>\n"" <analyze-all-vs-configs>true</analyze-all-vs-configs>\n"" <includedir>\n"" <dir name=\"lib/\"/>\n"" </includedir>\n"" <paths>\n"" <dir name=\"cli/\"/>\n"" </paths>\n"" <exclude>\n"" <path name=\"gui/temp/\"/>\n"" </exclude>\n""</project>\n";std::istringstream istr(xml);Settings s;TestImporter project;ASSERT_EQUALS(true, project.importCppcheckGuiProject(istr, &s));ASSERT_EQUALS(1, project.guiProject.pathNames.size());ASSERT_EQUALS("cli/", project.guiProject.pathNames[0]);ASSERT_EQUALS(1, s.includePaths.size());ASSERT_EQUALS("lib/", s.includePaths.front());}void ignorePaths() {ImportProject::FileSettings fs1, fs2;fs1.filename = "foo/bar";fs2.filename = "qwe/rty";TestImporter project;project.fileSettings = {fs1, fs2};project.ignorePaths({"*foo", "bar*"});ASSERT_EQUALS(2, project.fileSettings.size());project.ignorePaths({"foo/*"});ASSERT_EQUALS(1, project.fileSettings.size());ASSERT_EQUALS("qwe/rty", project.fileSettings.front().filename);project.ignorePaths({ "*e/r*" });ASSERT_EQUALS(0, project.fileSettings.size());}};REGISTER_TEST(TestImportProject)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。