⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testsuite.cpp

📁 cppcheck is a static C/C++ code analyzer that checks for memory leaks, mismatching allocation-deallo
💻 CPP
字号:
/* * Cppcheck - A tool for static C/C++ code analysis * Copyright (C) 2007-2009 Daniel Marjamäki, Reijo Tomperi, Nicolas Le Cam, * Leandro Penz, Kimmo Varis, Vesa Pikki * * 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 "testsuite.h"#include <iostream>#include <list>std::ostringstream errout;/** * TestRegistry **/class TestRegistry{private:    std::list<TestFixture *> _tests;public:    static TestRegistry &theInstance()    {        static TestRegistry testreg;        return testreg;    }    void addTest(TestFixture *t)    {        _tests.push_back(t);    }    const std::list<TestFixture *> &tests() const    {        return _tests;    }};/** * TestFixture **/std::ostringstream TestFixture::errmsg;unsigned int       TestFixture::countTests;TestFixture::TestFixture(const std::string &_name) : classname(_name){    TestRegistry::theInstance().addTest(this);}bool TestFixture::runTest(const char testname[]){    if (testToRun.empty() || testToRun == testname)    {        ++countTests;        std::cout << classname << "::" << testname << "\n";        return true;    }    return false;}static std::string writestr(const std::string &str){    std::ostringstream ostr;    ostr << "\"";    for (unsigned int i = 0; i < str.length(); ++i)    {        char ch = str[i];        if (ch == '\n')            ostr << "\\n";        else if (ch == '\t')            ostr << "\\t";        else if (ch == '\"')            ostr << "\\\"";        else            ostr << std::string(1, ch);    }    ostr << "\"";    return ostr.str();}void TestFixture::assertEquals(const char *filename, int linenr, const std::string &expected, const std::string &actual){    if (expected != actual)    {        errmsg << "Assertion failed in " << filename << " at line " << linenr << std::endl        << "Expected:" << std::endl        << writestr(expected) << std::endl        << "Actual:" << std::endl        << writestr(actual) << std::endl;    }}void TestFixture::assertEquals(const char *filename, int linenr, unsigned int expected, unsigned int actual){    std::ostringstream ostr1;    ostr1 << expected;    std::ostringstream ostr2;    ostr2 << actual;    assertEquals(filename, linenr, ostr1.str(), ostr2.str());}void TestFixture::printTests(){    const std::list<TestFixture *> &tests = TestRegistry::theInstance().tests();    for (std::list<TestFixture *>::const_iterator it = tests.begin(); it != tests.end(); ++it)    {        std::cout << (*it)->classname << std::endl;    }}void TestFixture::run(const std::string &str){    testToRun = str;    run();}void TestFixture::runTests(const char cmd[]){    std::string classname(cmd ? cmd : "");    std::string testname("");    if (classname.find("::") != std::string::npos)    {        testname = classname.substr(classname.find("::") + 2);        classname.erase(classname.find("::"));    }    countTests = 0;    errmsg.str("");    const std::list<TestFixture *> &tests = TestRegistry::theInstance().tests();    for (std::list<TestFixture *>::const_iterator it = tests.begin(); it != tests.end(); ++it)    {        if (classname.empty() || (*it)->classname == classname)        {            (*it)->run(testname);        }    }    std::cout << "\n\nTesting Complete\nNumber of tests: " << countTests << "\n";    std::cerr << errmsg.str();}void TestFixture::reportOut(const std::string & /*outmsg*/){    // These can probably be ignored}void TestFixture::reportErr(const ErrorLogger::ErrorMessage &msg){    errout << msg.toText() << std::endl;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -