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; |