diff options
-rw-r--r-- | libdbpp/Jamfile.jam | 18 | ||||
-rw-r--r-- | libdbpp/testCore.cpp | 81 | ||||
-rw-r--r-- | libdbpp/testCore.h | 29 |
3 files changed, 126 insertions, 2 deletions
diff --git a/libdbpp/Jamfile.jam b/libdbpp/Jamfile.jam index 3eedb10..5aaa15f 100644 --- a/libdbpp/Jamfile.jam +++ b/libdbpp/Jamfile.jam @@ -9,9 +9,10 @@ lib boost_date_time : : <name>boost_date_time ; lib boost_filesystem ; lib boost_system ; lib adhocutil : : : : <include>/usr/include/adhocutil ; +lib boost_utf : : <name>boost_unit_test_framework ; lib dbppcore : - [ glob *.cpp *.ll ] : + [ glob *.cpp *.ll : test*.cpp ] : <library>glibmm <library>adhocutil <library>boost_system @@ -27,7 +28,20 @@ lib dbppcore : <library>boost_filesystem ; +lib dbpptestcore : + [ glob test*.cpp ] + : + <define>BOOST_TEST_DYN_LINK + <library>dbppcore + <library>boost_utf + <cflags>-fvisibility=hidden + <variant>release:<cflags>-flto + : : + <include>. + ; + build-project unittests ; -package.install install : <install-source-root>. : : dbppcore : [ glob *.h ] ; +package.install install : <install-source-root>. : : dbppcore : [ glob *.h : test*.h ] ; +package.install install : <install-source-root>. : : dbpptestcore : [ glob test*.h ] ; diff --git a/libdbpp/testCore.cpp b/libdbpp/testCore.cpp new file mode 100644 index 0000000..5029025 --- /dev/null +++ b/libdbpp/testCore.cpp @@ -0,0 +1,81 @@ +#include "testCore.h" +#include <selectcommand.h> +#include <boost/date_time/posix_time/posix_time.hpp> +#include <boost/test/test_tools.hpp> +#include <boost/utility/enable_if.hpp> + +namespace DB { + +TestCore::TestCore() : + testInt(43), + testDouble(3.14), + testString("Some C String"), + testBool(false), + testDateTime(boost::posix_time::from_time_t(1430530593)), + testInterval(boost::posix_time::time_duration(1, 2, 3)) +{ +} + +template<typename T> +class Assert : public DB::HandleField { + public: + Assert(const T & e) : expected(e) { } + + void floatingpoint(double v) override { (*this)(v); } + void integer(int64_t v) override { (*this)(v); } + void boolean(bool v) override { (*this)(v); } + void string(const char * v, size_t len) override { (*this)(std::string(v, len)); } + void timestamp(const boost::posix_time::ptime & v) override { (*this)(v); } + void interval(const boost::posix_time::time_duration & v) override { (*this)(v); } + void null() override { } + + template <typename D, typename dummy = int> + void operator()(const D &, + typename boost::disable_if<std::is_convertible<D, T>, dummy>::type = 0) { + BOOST_ERROR("Unexpected column type " << typeid(D).name()); + } + + template <typename D, typename dummy = int> + void operator()(const D & v, + typename boost::enable_if<std::is_convertible<D, T>, dummy>::type = 0) { + BOOST_REQUIRE_EQUAL(expected, v); + } + + const T & expected; +}; + +template<typename T> +void +TestCore::assertScalarValueHelper(DB::SelectCommand & sel, const T & t) const +{ + while (sel.fetch()) { + assertColumnValueHelper(sel, 0, t); + } +} + +template<typename T> +void +TestCore::assertColumnValueHelper(DB::SelectCommand & sel, unsigned int col, const T & t) const +{ + Assert<T> a(t); + sel[col].apply(a); +} + +template void TestCore::assertScalarValueHelper<bool>(SelectCommand &, const bool &) const; +template void TestCore::assertScalarValueHelper<int64_t>(SelectCommand &, const int64_t &) const; +template void TestCore::assertScalarValueHelper<int>(SelectCommand &, const int &) const; +template void TestCore::assertScalarValueHelper<double>(SelectCommand &, const double &) const; +template void TestCore::assertScalarValueHelper<std::string>(SelectCommand &, const std::string &) const; +template void TestCore::assertScalarValueHelper<boost::posix_time::ptime>(SelectCommand &, const boost::posix_time::ptime &) const; +template void TestCore::assertScalarValueHelper<boost::posix_time::time_duration>(SelectCommand &, const boost::posix_time::time_duration &) const; + +template void TestCore::assertColumnValueHelper<bool>(SelectCommand &, unsigned int, const bool &) const; +template void TestCore::assertColumnValueHelper<int>(SelectCommand &, unsigned int, const int &) const; +template void TestCore::assertColumnValueHelper<int64_t>(SelectCommand &, unsigned int, const int64_t &) const; +template void TestCore::assertColumnValueHelper<double>(SelectCommand &, unsigned int, const double &) const; +template void TestCore::assertColumnValueHelper<std::string>(SelectCommand &, unsigned int, const std::string &) const; +template void TestCore::assertColumnValueHelper<boost::posix_time::ptime>(SelectCommand &, unsigned int, const boost::posix_time::ptime &) const; +template void TestCore::assertColumnValueHelper<boost::posix_time::time_duration>(SelectCommand &, unsigned int, const boost::posix_time::time_duration &) const; + +} + diff --git a/libdbpp/testCore.h b/libdbpp/testCore.h new file mode 100644 index 0000000..81dac8a --- /dev/null +++ b/libdbpp/testCore.h @@ -0,0 +1,29 @@ +#ifndef DB_TESTCORE_H +#define DB_TESTCORE_H + +#include <command.h> +#include <visibility.h> + +namespace DB { + +class SelectCommand; + +class DLL_PUBLIC TestCore { + protected: + TestCore(); + + int64_t testInt; + double testDouble; + std::string testString; + bool testBool; + boost::posix_time::ptime testDateTime; + boost::posix_time::time_duration testInterval; + + template<typename T> void assertScalarValueHelper(SelectCommand & sel, const T & t) const; + template<typename T> void assertColumnValueHelper(SelectCommand & sel, unsigned int col, const T & t) const; +}; + +} + +#endif + |