同步操作将从 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 "config.h"#include "cppcheckexecutor.h"#include "errorlogger.h"#include "filelister.h"#include "path.h"#include "pathmatch.h"#include "redirect.h"#include "settings.h"#include "testsuite.h"#include <algorithm>#include <cstddef>#include <cstring>#include <fstream>#include <iterator>#include <map>#include <sstream>#include <string>#include <utility>#include <vector>class TestSamples : public TestFixture {public:TestSamples() : TestFixture("TestSamples") {}private:void run() OVERRIDE {TEST_CASE(runSamples);TEST_CASE(runConsoleCodePageTranslationOnWindows);}void runSamples() const {REDIRECT;std::map<std::string, std::size_t> files;const std::vector<std::string> masks;const PathMatch matcher(masks);#ifdef _WIN32FileLister::recursiveAddFiles(files, "..\\samples", matcher);#elseFileLister::recursiveAddFiles(files, "samples", matcher);#endiffor (std::map<std::string, std::size_t>::const_iterator i = files.begin(); i != files.end(); ++i) {if (i->first.find("memleak") != std::string::npos)continue;CLEAR_REDIRECT_ERROUT;const char* const path = i->first.c_str();const char * const argv[] = {#ifdef _WIN32".\\..\\testrunner",#else"./testrunner",#endif"--enable=style,warning,performance,portability", "--inconclusive", "-rp", "-f", "-q", path};std::string filename = i->first.substr(i->first.find_last_of("/\\")+1);if (filename == "good.cpp" || filename == "good.c") {CppCheckExecutor exec;exec.check(7, argv);ASSERT_EQUALS_MSG("", GET_REDIRECT_ERROUT, i->first);} else if (filename == "bad.cpp" || filename == "bad.c") {CppCheckExecutor exec;exec.check(7, argv);std::string expected_filename = Path::getPathFromFilename(i->first) + "out.txt";std::ifstream ifs(expected_filename);std::string expected((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());std::string actual = GET_REDIRECT_ERROUT;// We need some uniformization to make this work on Unix and Windowsstd::replace(actual.begin(), actual.end(), '/', '\\'); // Uniformize slashes.while (actual.find("..\\") != std::string::npos)actual.erase(actual.find("..\\"), 3); // Remove '..\'ASSERT_EQUALS_MSG(expected, actual, i->first);}}}class CppCheckExecutor2 : public CppCheckExecutor {public:void settings(const Settings &set) {setSettings(set);}};void runConsoleCodePageTranslationOnWindows() const {REDIRECT;std::vector<std::string> msgs = {"ASCII", // first entry should be using only ASCII"kääk","Português"// "日本語",// "한국어",// "Русский",// "中文",};Settings set1;Settings setXML;setXML.xml = true;setXML.xml_version = 2;CppCheckExecutor2 exec;exec.settings(set1);CppCheckExecutor2 execXML;execXML.settings(setXML);for (std::vector<std::string>::const_iterator i = msgs.begin(); i != msgs.end(); ++i) {CLEAR_REDIRECT_OUTPUT;CLEAR_REDIRECT_ERROUT;exec.reportOut(*i);ErrorMessage errMessage;errMessage.setmsg(*i);// no xml optionexec.reportInfo(errMessage);#ifdef _WIN32// expect changes through code page translation except for the 'ASCII' caseif (i == msgs.begin()) {ASSERT_EQUALS(*i + "\n", GET_REDIRECT_OUTPUT);ASSERT_EQUALS(*i + "\n", GET_REDIRECT_ERROUT);} else {ASSERT(*i + "\n" != GET_REDIRECT_OUTPUT);ASSERT(*i + "\n" != GET_REDIRECT_ERROUT);}#else// do not expect any code page translationASSERT_EQUALS(*i + "\n", GET_REDIRECT_OUTPUT);ASSERT_EQUALS(*i + "\n", GET_REDIRECT_ERROUT);#endifCLEAR_REDIRECT_ERROUT;// possible change of msg for xml option// with ErrorMessage::fixInvalidChars(), plus additional XML formattingexecXML.reportInfo(errMessage);// undo the effects of "ErrorMessage::fixInvalidChars()"// replacing octal constants with charactersstd::string myErr;std::string myErrOrg = GET_REDIRECT_ERROUT;std::string::const_iterator from = myErrOrg.begin();while (from != myErrOrg.end()) {if (*from == '\\') {++from;unsigned c;// expect three digitsstd::istringstream es(std::string(from, from + 3));es >> std::oct >> c;++from;++from;myErr.push_back(c);} else {myErr.push_back(*from);}++from;}ASSERT(std::string::npos != myErr.find(*i));}}};REGISTER_TEST(TestSamples)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。