diff options
| -rw-r--r-- | test/Makefile.am | 7 | ||||
| -rw-r--r-- | test/dgtest.cc | 37 | ||||
| -rw-r--r-- | test/dgunit.h | 58 | ||||
| -rw-r--r-- | test/drumkitparsertest.cc | 45 | 
4 files changed, 85 insertions, 62 deletions
| diff --git a/test/Makefile.am b/test/Makefile.am index bf21a0b..56b7f72 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -223,14 +223,13 @@ instrumentparsertest_SOURCES = \  	scopedfile.cc \  	test.cc -drumkitparsertest_CXXFLAGS = -DOUTPUT=\"drumkitparsertest\" $(CPPUNIT_CFLAGS) \ +drumkitparsertest_CXXFLAGS = -DOUTPUT=\"drumkitparsertest\" \  	-I$(top_srcdir)/src -I$(top_srcdir)/include -drumkitparsertest_LDFLAGS = $(CPPUNIT_LIBS) \ -	 $(top_srcdir)/src/libdg.la +drumkitparsertest_LDFLAGS = $(top_srcdir)/src/libdg.la  drumkitparsertest_SOURCES = \  	$(top_srcdir)/hugin/hugin.c \  	drumkitparsertest.cc \  	scopedfile.cc \ -	test.cc +	dgtest.cc  endif diff --git a/test/dgtest.cc b/test/dgtest.cc new file mode 100644 index 0000000..21e1543 --- /dev/null +++ b/test/dgtest.cc @@ -0,0 +1,37 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + *            dgtest.cc + * + *  Sat Jun 16 15:48:36 CEST 2018 + *  Copyright 2018 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  This file is part of DrumGizmo. + * + *  DrumGizmo 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 3 of the License, or + *  (at your option) any later version. + * + *  DrumGizmo 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 DrumGizmo; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#define DGUNIT_MAIN +#include "dgunit.h" + +#include <fstream> + +int main(int argc, char* argv[]) +{ +	std::ofstream xmlfile; +	xmlfile.open("result_" OUTPUT ".xml"); +	return DGUnit::runTests(xmlfile); +} diff --git a/test/dgunit.h b/test/dgunit.h index 4439134..5bb47bb 100644 --- a/test/dgunit.h +++ b/test/dgunit.h @@ -29,6 +29,7 @@  #include <cstddef>  #include <iostream>  #include <list> +#include <vector>  #include <functional>  #include <string>  #include <sstream> @@ -37,11 +38,19 @@  class DGUnit  {  public: -	DGUnit(const std::string& test_name, const std::string& test_suite = "all") -		: test_name(test_name) -		, test_suite(test_suite) +	DGUnit()  	{ -		suites.emplace_back(this); +		if(DGUnit::suite_list == nullptr) +		{ +			DGUnit::suite_list = this; +			return; +		} + +		auto unit = DGUnit::suite_list; +		while(unit->next_unit) +		{ +		} +		unit->next_unit = this;  	}  	//! Overload to prepare stuff for each of the tests. @@ -52,8 +61,8 @@ public:  	struct test_result  	{ -		const char* func; -		const char* file; +		std::string func; +		std::string file;  		std::size_t line;  		std::string msg;  		int id; @@ -63,9 +72,7 @@ public:  	//! \param test_suite the name of a test suite or null for all.  	//! \param test_name the name of a test name inside a test suite. Only valid  	//!  if test_suite is non-null. nullptr for all tests. -	static int runTests(std::ofstream& out, -	                    const std::string& test_suite = "all", -	                    const std::string& test_name = "all") +	static int runTests(std::ofstream& out)  	{  		std::size_t test_num{0};  		std::size_t failed{0}; @@ -73,22 +80,8 @@ public:  		std::list<test_result> failed_tests;  		std::list<test_result> successful_tests; -		std::cout << "Run tests\n"; -		for(auto suite : suites) +		for(auto suite = DGUnit::suite_list; suite; suite = suite->next_unit)  		{ -			if(test_suite != "all" && suite->test_suite != test_suite) -			{ -				continue; -			} - -			if(test_name != "all" && suite->test_name != test_name) -			{ -				continue; -			} - -			std::cout << "Test: " << suite->test_suite << "::" -			          << suite->test_name << std::endl; -  			for(auto test : suite->tests)  			{  				++test_num; @@ -115,7 +108,7 @@ public:  				fflush(stdout);  				test_result result{test.second};  				result.id = test_num; -				successful_tests.emplace_back(result); +				successful_tests.push_back(result);  			}  		} @@ -134,7 +127,7 @@ public:  			out << "			<Message>" << test.msg << "</Message>\n";  			out << "		</FailedTest>\n";  		} -		out << "	<FailedTests>\n"; +		out << "	</FailedTests>\n";  		out << "	<SuccessfulTests>\n";  		for(auto test : successful_tests)  		{ @@ -164,7 +157,7 @@ protected:  	#define DGUNIT_TEST(func)	  \  		registerTest(this, &func, #func) -	void assert(bool value, const char* expr, +	void dg_assert(bool value, const char* expr,  	           const char* file, std::size_t line)  	{  		if(!value) @@ -177,7 +170,7 @@ protected:  	}  	//! Convenience macro to pass along filename and linenumber  	#define DGUNIT_ASSERT(value)	  \ -		assert(value, #value, __FILE__, __LINE__) +		dg_assert(value, #value, __FILE__, __LINE__)  	template<typename T>  	void assert_equal(T expected, T value, @@ -197,12 +190,11 @@ protected:  		assert_equal(expected, value, __FILE__, __LINE__)  private: -	static std::list<class DGUnit*> suites; -	std::list<std::pair<std::function<void()>, const char*>> tests; -	const std::string test_name; -	const std::string test_suite; +	static DGUnit* suite_list; +	DGUnit* next_unit{nullptr}; +	std::vector<std::pair<std::function<void()>, const char*>> tests;  };  #ifdef DGUNIT_MAIN -std::list<class DGUnit*> DGUnit::suites; +DGUnit* DGUnit::suite_list{nullptr};  #endif diff --git a/test/drumkitparsertest.cc b/test/drumkitparsertest.cc index 13bb752..e2d30fc 100644 --- a/test/drumkitparsertest.cc +++ b/test/drumkitparsertest.cc @@ -24,7 +24,7 @@   *  along with DrumGizmo; if not, write to the Free Software   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ -#include <cppunit/extensions/HelperMacros.h> +#include "dgunit.h"  #include <drumkitparser.h>  #include <drumkit.h> @@ -32,23 +32,18 @@  #include "scopedfile.h"  class DrumkitParserTest -	: public CppUnit::TestFixture +	: public DGUnit  { -	CPPUNIT_TEST_SUITE(DrumkitParserTest); -	CPPUNIT_TEST(testTest); -	CPPUNIT_TEST_SUITE_END(); - -	Settings settings; -	Random rand; -  public: -	void setUp() +	DrumkitParserTest() +		: DGUnit()  	{ +		std::cout << __PRETTY_FUNCTION__ << "\n"; +		DGUNIT_TEST(DrumkitParserTest::testTest);  	} -	void tearDown() -	{ -	} +	Settings settings; +	Random rand;  	//! This just creates some drumkit.  	void testTest() @@ -120,23 +115,23 @@ public:  		DrumKit drumkit;  		DrumKitParser parser(settings, drumkit, rand); -		CPPUNIT_ASSERT_EQUAL(0, parser.parseFile(scoped_file.filename())); +		DGUNIT_ASSERT_EQUAL(0, parser.parseFile(scoped_file.filename())); -		CPPUNIT_ASSERT_EQUAL(std::size_t(2), drumkit.instruments.size()); -		CPPUNIT_ASSERT_EQUAL(std::size_t(4), drumkit.channels.size()); +		DGUNIT_ASSERT_EQUAL(std::size_t(2), drumkit.instruments.size()); +		DGUNIT_ASSERT_EQUAL(std::size_t(4), drumkit.channels.size()); -		CPPUNIT_ASSERT_EQUAL(std::string("AmbLeft"), drumkit.channels[0].name); -		CPPUNIT_ASSERT_EQUAL(std::string("AmbRight"), drumkit.channels[1].name); -		CPPUNIT_ASSERT_EQUAL(std::string("SnareTop"), drumkit.channels[2].name); -		CPPUNIT_ASSERT_EQUAL(std::string("SnareBottom"), drumkit.channels[3].name); +		DGUNIT_ASSERT_EQUAL(std::string("AmbLeft"), drumkit.channels[0].name); +		DGUNIT_ASSERT_EQUAL(std::string("AmbRight"), drumkit.channels[1].name); +		DGUNIT_ASSERT_EQUAL(std::string("SnareTop"), drumkit.channels[2].name); +		DGUNIT_ASSERT_EQUAL(std::string("SnareBottom"), drumkit.channels[3].name); -		CPPUNIT_ASSERT_EQUAL(std::string("CrocellKit"), drumkit._name); -		CPPUNIT_ASSERT_EQUAL(std::string("my description"), drumkit._description); -		CPPUNIT_ASSERT_EQUAL(std::size_t(48000), drumkit._samplerate); +		DGUNIT_ASSERT_EQUAL(std::string("CrocellKit"), drumkit._name); +		DGUNIT_ASSERT_EQUAL(std::string("my description"), drumkit._description); +		DGUNIT_ASSERT_EQUAL(std::size_t(48000), drumkit._samplerate); -		CPPUNIT_ASSERT(VersionStr("2.0.0") == drumkit._version); +		DGUNIT_ASSERT(VersionStr("2.0.0") == drumkit._version);  	}  };  // Registers the fixture into the 'registry' -CPPUNIT_TEST_SUITE_REGISTRATION(DrumkitParserTest); +DrumkitParserTest drumkit_parser_test; | 
