X-Git-Url: http://git.euphorik.ch/index.cgi?a=blobdiff_plain;f=WCudaMSE%2FAPI_CppTest%2FSRC%2Fcore%2Fcpptest-suite.h;fp=WCudaMSE%2FAPI_CppTest%2FSRC%2Fcore%2Fcpptest-suite.h;h=6e9aefc0abfe70e99acd0dc86490012b2536cad0;hb=8d08c12b29c2a14684f35c023ee39e694bb80d25;hp=0000000000000000000000000000000000000000;hpb=226de81f7e1f1fbf4ac79d0d089e8a05ec7159a0;p=GPU.git diff --git a/WCudaMSE/API_CppTest/SRC/core/cpptest-suite.h b/WCudaMSE/API_CppTest/SRC/core/cpptest-suite.h new file mode 100755 index 0000000..6e9aefc --- /dev/null +++ b/WCudaMSE/API_CppTest/SRC/core/cpptest-suite.h @@ -0,0 +1,140 @@ +// --- +// +// $Id: cpptest-suite.h,v 1.4 2010/03/26 04:45:14 hartwork Exp $ +// +// CppTest - A C++ Unit Testing Framework +// Copyright (c) 2003 Niklas Lundell +// +// --- +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the +// Free Software Foundation, Inc., 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. +// +// --- + +/** \file */ + +#ifndef CPPTEST_SUITE_H +#define CPPTEST_SUITE_H + +#include +#include +#include + +#include "cpptest-time.h" +#include "cpptest-source.h" + +namespace Test +{ + class Output; + + /// \brief Unit testing suite. + /// + /// Base class for all suites. Derive from this class to create own + /// test suites. + /// + /// %Test functions in derived classes are registered as tests using the + /// TEST_ADD(func). Testing is started by run(). Note that suites may be + /// embedded in other suites using add(). + /// + class Suite + { + public: + Suite(); + virtual ~Suite(); + + void add(std::auto_ptr suite); + + bool run(Output& output, bool cont_after_fail = true); + + protected: + /// Pointer to a test function. + /// + typedef void (Suite::*Func)(); + + bool continue_after_failure() const { return _continue; } + + virtual void setup() {} + virtual void tear_down() {} + + void register_test(Func func, const std::string& name); + void assertment(Source s); + + private: + struct DoRun; + struct ExecTests; + struct SubSuiteTests; + struct SuiteTime; + struct SubSuiteTime; + + friend struct DoRun; + friend struct ExecTests; + friend struct SubSuiteTests; + friend struct SubSuiteTime; + + struct Data + { + Func _func; + std::string _name; + Time _time; + + Data(Func func, const std::string& name) + : _func(func), _name(name) {} + }; + + typedef std::list Tests; + typedef std::list Suites; + + std::string _name; // Suite name + const std::string* _cur_test; // Current test func name + Suites _suites; // External test suites + Tests _tests; // All tests + Output* _output; // Output handler + bool _result : 1; // Test result + bool _success : 1; // Set if no test failed + bool _continue : 1; // Continue func after failures + + void do_run(Output* os, bool cont_after_fail); + int total_tests() const; + Time total_time(bool recursive) const; + + // Disable + // + Suite(const Suite&); + Suite& operator=(const Suite&); + }; + + /// Adds a test function to the enclosing suite. Note that test functions + /// should be added in the suites constructor. + /// + /// \param func Function to add, must be of type Suite::Func. + /// + /// \par Example: + /// \code + /// MySuite::MySuite() + /// { + /// TEST_ADD(&MySuite::test_1) + /// TEST_ADD(&MySuite::test_2) + /// ... + /// } + /// \endcode + /// + #define TEST_ADD(func)\ + register_test(static_cast(&func), #func); + +} // namespace Test + +#endif // #ifndef CPPTEST_SUITE_H +