spinn-off: collecting some frequently used bits to support unit testing
This commit is contained in:
parent
20a1268683
commit
e0ad992f30
7 changed files with 254 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -16,6 +16,7 @@ scripts/*
|
||||||
configure
|
configure
|
||||||
config.log
|
config.log
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
|
autom4te.cache
|
||||||
semantic.cache
|
semantic.cache
|
||||||
wiki/backups/*
|
wiki/backups/*
|
||||||
doc/devel/draw/*.png
|
doc/devel/draw/*.png
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ liblumiera_la_SOURCES = \
|
||||||
$(liblumiera_la_srcdir)/query.cpp \
|
$(liblumiera_la_srcdir)/query.cpp \
|
||||||
$(liblumiera_la_srcdir)/streamtype.cpp \
|
$(liblumiera_la_srcdir)/streamtype.cpp \
|
||||||
$(liblumiera_la_srcdir)/test/testoption.cpp \
|
$(liblumiera_la_srcdir)/test/testoption.cpp \
|
||||||
|
$(liblumiera_la_srcdir)/test/test-helper.cpp \
|
||||||
$(liblumiera_la_srcdir)/test/suite.cpp \
|
$(liblumiera_la_srcdir)/test/suite.cpp \
|
||||||
$(liblumiera_la_srcdir)/cmdline.cpp \
|
$(liblumiera_la_srcdir)/cmdline.cpp \
|
||||||
$(liblumiera_la_srcdir)/logging.cpp
|
$(liblumiera_la_srcdir)/logging.cpp
|
||||||
|
|
@ -92,5 +93,6 @@ noinst_HEADERS += \
|
||||||
$(liblumiera_la_srcdir)/test/mockinjector.hpp \
|
$(liblumiera_la_srcdir)/test/mockinjector.hpp \
|
||||||
$(liblumiera_la_srcdir)/test/suite.hpp \
|
$(liblumiera_la_srcdir)/test/suite.hpp \
|
||||||
$(liblumiera_la_srcdir)/test/testoption.hpp \
|
$(liblumiera_la_srcdir)/test/testoption.hpp \
|
||||||
|
$(liblumiera_la_srcdir)/test/test-helper.hpp \
|
||||||
$(liblumiera_la_srcdir)/test/run.hpp
|
$(liblumiera_la_srcdir)/test/run.hpp
|
||||||
|
|
||||||
|
|
|
||||||
46
src/lib/test/test-helper.cpp
Normal file
46
src/lib/test/test-helper.cpp
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
Test-Helper - collection of functions supporting unit testing
|
||||||
|
|
||||||
|
Copyright (C) Lumiera.org
|
||||||
|
2009, Hermann Vosseler <Ichthyostega@web.de>
|
||||||
|
|
||||||
|
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 2 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, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
* *****************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "lib/test/test-helper.hpp"
|
||||||
|
|
||||||
|
//#include "lib/error.hpp"
|
||||||
|
#include <boost/format.hpp>
|
||||||
|
#include <typeinfo>
|
||||||
|
|
||||||
|
using boost::format;
|
||||||
|
using boost::str;
|
||||||
|
|
||||||
|
namespace lib {
|
||||||
|
namespace test{
|
||||||
|
|
||||||
|
|
||||||
|
string
|
||||||
|
showSizeof (size_t siz, Symbol name)
|
||||||
|
{
|
||||||
|
static format fmt ("sizeof( %s ) %|30t|= %3d");
|
||||||
|
return str (fmt % (name? name:"?") % siz);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}} // namespace lib::test
|
||||||
101
src/lib/test/test-helper.hpp
Normal file
101
src/lib/test/test-helper.hpp
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
TEST-HELPER.hpp - collection of functions supporting unit testing
|
||||||
|
|
||||||
|
Copyright (C) Lumiera.org
|
||||||
|
2009, Hermann Vosseler <Ichthyostega@web.de>
|
||||||
|
|
||||||
|
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 2 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, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef LIB_TEST_TESTHELPER_H
|
||||||
|
#define LIB_TEST_TESTHELPER_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "include/symbol.hpp"
|
||||||
|
|
||||||
|
#include <typeinfo>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace lib {
|
||||||
|
namespace test{
|
||||||
|
|
||||||
|
using lumiera::Symbol;
|
||||||
|
using std::string;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** get a sensible display for a type or object
|
||||||
|
* @param obj object of the type in question
|
||||||
|
* @param name optional name to be used literally
|
||||||
|
* @return either the literal name without any further magic,
|
||||||
|
* or the result of compile-time or run time
|
||||||
|
* type identification as implemented by the compiler.
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
const char*
|
||||||
|
showType (T const& obj, Symbol name=0)
|
||||||
|
{
|
||||||
|
return name? name : typeid(obj).name();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** get a sensible display for a type
|
||||||
|
* @param name optional name to be used literally
|
||||||
|
* @return either the literal name without any further magic,
|
||||||
|
* or the result of compile-time or run time
|
||||||
|
* type identification as implemented by the compiler.
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
const char*
|
||||||
|
showType (Symbol name=0)
|
||||||
|
{
|
||||||
|
return name? name : typeid(T).name();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** for printing sizeof().
|
||||||
|
* prints the given size and name litterally, without any further magic */
|
||||||
|
string
|
||||||
|
showSizeof (size_t siz, Symbol name);
|
||||||
|
|
||||||
|
/** for printing sizeof(), trying to figure out the type name automatically */
|
||||||
|
template<typename T>
|
||||||
|
string
|
||||||
|
showSizeof(Symbol name=0)
|
||||||
|
{
|
||||||
|
return showSizeof (sizeof (T), showType<T> (name));
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
string
|
||||||
|
showSizeof(T const& obj, Symbol name=0)
|
||||||
|
{
|
||||||
|
return showSizeof (sizeof (obj), showType (obj,name));
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
string
|
||||||
|
showSizeof(T *obj, Symbol name=0)
|
||||||
|
{
|
||||||
|
return obj? showSizeof (*obj, name)
|
||||||
|
: showSizeof<T> (name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}} // namespace lib::test
|
||||||
|
#endif
|
||||||
|
|
@ -366,6 +366,12 @@ return: 0
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
TEST "Test support functions" TestHelper_test <<END
|
||||||
|
out: Displaying types and sizes....
|
||||||
|
out: --> Testgroup=ALL
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
TEST "TestOption_test" TestOption_test <<END
|
TEST "TestOption_test" TestOption_test <<END
|
||||||
out: Testing invocation with cmdline: ...
|
out: Testing invocation with cmdline: ...
|
||||||
out: --> Testgroup=ALL
|
out: --> Testgroup=ALL
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ test_lib_SOURCES = \
|
||||||
$(testlib_srcdir)/thread-wrapper-join-test.cpp \
|
$(testlib_srcdir)/thread-wrapper-join-test.cpp \
|
||||||
$(testlib_srcdir)/test/cmdlinewrappertest.cpp \
|
$(testlib_srcdir)/test/cmdlinewrappertest.cpp \
|
||||||
$(testlib_srcdir)/test/testoptiontest.cpp \
|
$(testlib_srcdir)/test/testoptiontest.cpp \
|
||||||
|
$(testlib_srcdir)/test/test-helper-test.cpp \
|
||||||
$(testlib_srcdir)/vectortransfertest.cpp \
|
$(testlib_srcdir)/vectortransfertest.cpp \
|
||||||
$(testlib_srcdir)/visitingtoolconcept.cpp \
|
$(testlib_srcdir)/visitingtoolconcept.cpp \
|
||||||
$(testlib_srcdir)/visitingtoolextendedtest.cpp \
|
$(testlib_srcdir)/visitingtoolextendedtest.cpp \
|
||||||
|
|
|
||||||
97
tests/lib/test/test-helper-test.cpp
Normal file
97
tests/lib/test/test-helper-test.cpp
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
TestHelper(Test) - validate the unittest support functions
|
||||||
|
|
||||||
|
Copyright (C) Lumiera.org
|
||||||
|
2008, Hermann Vosseler <Ichthyostega@web.de>
|
||||||
|
|
||||||
|
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 2 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, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
* *****************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "lib/test/run.hpp"
|
||||||
|
#include "lib/test/test-helper.hpp"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using std::cout;
|
||||||
|
using std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
namespace lib {
|
||||||
|
namespace test{
|
||||||
|
namespace test{
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
class Wrmrmpft
|
||||||
|
{
|
||||||
|
T tt_;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Murpf { };
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************
|
||||||
|
* verifies the proper working of helper functions
|
||||||
|
* frequently used within the Lumiera testsuite.
|
||||||
|
* @see test-helper.hpp
|
||||||
|
*/
|
||||||
|
class TestHelper_test : public Test
|
||||||
|
{
|
||||||
|
void
|
||||||
|
run (Arg)
|
||||||
|
{
|
||||||
|
checkTypeDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** @test prints "sizeof()" including some type name. */
|
||||||
|
void
|
||||||
|
checkTypeDisplay ()
|
||||||
|
{
|
||||||
|
std::cout << "Displaying types and sizes....\n";
|
||||||
|
|
||||||
|
typedef Wrmrmpft<Murpf> Wrmpf1;
|
||||||
|
typedef Wrmrmpft<char[2]> Wrmpf2;
|
||||||
|
typedef Wrmrmpft<char[3]> Wrmpf3;
|
||||||
|
|
||||||
|
Wrmpf1 rmpf1;
|
||||||
|
Wrmpf2 rmpf2;
|
||||||
|
Wrmpf3 rmpf3;
|
||||||
|
Murpf murpf;
|
||||||
|
|
||||||
|
ASSERT (1 == sizeof (rmpf1));
|
||||||
|
ASSERT (2 == sizeof (rmpf2));
|
||||||
|
ASSERT (3 == sizeof (rmpf3));
|
||||||
|
|
||||||
|
cout << showSizeof(42,"theUniverse") << endl;
|
||||||
|
cout << showSizeof<char>("just a char") << endl;
|
||||||
|
cout << showSizeof(murpf) << endl;
|
||||||
|
cout << showSizeof(rmpf1) << endl;
|
||||||
|
cout << showSizeof(rmpf2) << endl;
|
||||||
|
cout << showSizeof<Wrmpf3>() << endl;
|
||||||
|
|
||||||
|
Wrmpf1 *p1 = &rmpf1;
|
||||||
|
Wrmpf1 *p2 = 0;
|
||||||
|
cout << showSizeof(p1) << endl;
|
||||||
|
cout << showSizeof(p2) << endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
LAUNCHER (TestHelper_test, "unit common");
|
||||||
|
|
||||||
|
|
||||||
|
}}} // namespace lib::test::test
|
||||||
|
|
||||||
Loading…
Reference in a new issue