diff --git a/gnucash/import-export/test/CMakeLists.txt b/gnucash/import-export/test/CMakeLists.txt index 4e9d1efae2..3f14f754d9 100644 --- a/gnucash/import-export/test/CMakeLists.txt +++ b/gnucash/import-export/test/CMakeLists.txt @@ -69,10 +69,12 @@ set(gtest_import_backend_SOURCES ${CMAKE_SOURCE_DIR}/gnucash/import-export/import-settings.c ${CMAKE_SOURCE_DIR}/gnucash/import-export/import-utilities.c gmock-qofinstance.cpp + gmock-gnc-prefs.cpp gmock-qofbook.cpp gmock-Account.cpp gmock-Transaction.cpp gmock-Split.cpp + gmock-qofquery.cpp ${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-numeric.cpp ${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-rational.cpp ${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-int128.cpp diff --git a/gnucash/import-export/test/gmock-gnc-prefs.cpp b/gnucash/import-export/test/gmock-gnc-prefs.cpp new file mode 100644 index 0000000000..d08dc6925f --- /dev/null +++ b/gnucash/import-export/test/gmock-gnc-prefs.cpp @@ -0,0 +1,47 @@ +#include + +#include "gmock-gnc-prefs.h" + +PrefsBackend* prefsbackend = NULL; + +gboolean +gnc_prefs_get_bool (const gchar *group, const gchar *pref_name) +{ + return ((MockPrefsBackend*)prefsbackend)->getBool(group, pref_name); +} + +gint +gnc_prefs_get_int (const gchar *group, const gchar *pref_name) +{ + return ((MockPrefsBackend*)prefsbackend)->getInt(group, pref_name); +} + +gint64 +gnc_prefs_get_int64 (const gchar *group, const gchar *pref_name) +{ + return ((MockPrefsBackend*)prefsbackend)->getInt64(group, pref_name); +} + +gdouble +gnc_prefs_get_float (const gchar *group, const gchar *pref_name) +{ + return ((MockPrefsBackend*)prefsbackend)->getFloat(group, pref_name); +} + +gchar * +gnc_prefs_get_string (const gchar *group, const gchar *pref_name) +{ + return ((MockPrefsBackend*)prefsbackend)->getString(group, pref_name); +} + +gint +gnc_prefs_get_enum (const gchar *group, const gchar *pref_name) +{ + return ((MockPrefsBackend*)prefsbackend)->getEnum(group, pref_name); +} + +void +gnc_prefs_get_coords (const gchar *group, const gchar *pref_name, gdouble *x, gdouble *y) +{ + ((MockPrefsBackend*)prefsbackend)->getCoords(group, pref_name, x, y); +} diff --git a/gnucash/import-export/test/gmock-gnc-prefs.h b/gnucash/import-export/test/gmock-gnc-prefs.h new file mode 100644 index 0000000000..6382224cdd --- /dev/null +++ b/gnucash/import-export/test/gmock-gnc-prefs.h @@ -0,0 +1,47 @@ +#ifndef GMOCK_GNC_PREFS_H +#define GMOCK_GNC_PREFS_H + +#include + +extern "C" +{ +#include +#include +} + + +// mock up for PrefsBackend (singleton class) +class MockPrefsBackend : PrefsBackend +{ +public: + MockPrefsBackend(MockPrefsBackend const&) = delete; + MockPrefsBackend& operator=(MockPrefsBackend const&) = delete; + + static MockPrefsBackend* getInstance() + { + static MockPrefsBackend prefs; // preferences object + + // register preferences object + if (prefsbackend == NULL) + prefsbackend = (PrefsBackend*)&prefs; + + // check that preferences object is correctly registered + EXPECT_EQ((MockPrefsBackend*)prefsbackend, &prefs); + + return &prefs; + } + + MOCK_METHOD2(getBool, gboolean(const gchar *, const gchar *)); + MOCK_METHOD2(getInt, gint(const gchar *, const gchar *)); + MOCK_METHOD2(getInt64, gint64(const gchar *, const gchar *)); + MOCK_METHOD2(getFloat, gdouble(const gchar *, const gchar *)); + MOCK_METHOD2(getString, gchar*(const gchar *, const gchar *)); + MOCK_METHOD2(getEnum, gint(const gchar *, const gchar *)); + MOCK_METHOD4(getCoords, void(const gchar *, const gchar *, gdouble *, gdouble *)); + +private: + MockPrefsBackend() {} + ~MockPrefsBackend() {} +}; + +#endif diff --git a/gnucash/import-export/test/gmock-qofquery.cpp b/gnucash/import-export/test/gmock-qofquery.cpp new file mode 100644 index 0000000000..65a545f14b --- /dev/null +++ b/gnucash/import-export/test/gmock-qofquery.cpp @@ -0,0 +1,68 @@ +#include + +#include "gmock-qofquery.h" +#include "gmock-qofbook.h" + +QofQuery * +qof_query_create_for (QofIdTypeConst obj_type) +{ + return (QofQuery*)qof_query_factory.create(); +/* + // \todo create typed query objects + QofQuery *ret = NULL; + + if (g_strcmp0(obj_type, GNC_ID_SPLIT) == 0) + ret = (QofQuery*)qof_query_factory.createForSplit(); +// else +// FAIL(); + + return ret; +*/ +} + +void +qof_query_set_book (QofQuery *query, QofBook *book) +{ + g_return_if_fail(QOF_IS_MOCK_BOOK(book)); + ((QofMockQuery*)query)->setBook(book); +} + +GList * +qof_query_run (QofQuery *query) +{ + GList *matching_objects = NULL; + + // \todo use typed mock objects + auto matchingObjects = ((QofMockQuery*)query)->run(); + + for (auto object : matchingObjects) + { + matching_objects = g_list_append(matching_objects, static_cast(object)); + } + + return matching_objects; +} + +void +xaccQueryAddDateMatchTT ( + QofQuery *query, + gboolean use_start, + time64 stt, + gboolean use_end, + time64 ett, + QofQueryOp op) +{ + ((QofMockQuery*)query)->addDateMatchTT(use_start, stt, use_end, ett, op); +} + +void +xaccQueryAddSingleAccountMatch(QofQuery *query, Account *acc, QofQueryOp op) +{ + ((QofMockQuery*)query)->addSingleAccountMatch(acc, op); +} + +void +qof_query_destroy (QofQuery *query) +{ + ((QofMockQuery*)query)->destroy(); +} diff --git a/gnucash/import-export/test/gmock-qofquery.h b/gnucash/import-export/test/gmock-qofquery.h new file mode 100644 index 0000000000..e019ef339a --- /dev/null +++ b/gnucash/import-export/test/gmock-qofquery.h @@ -0,0 +1,46 @@ +#ifndef GMOCK_QOFQUERY_H +#define GMOCK_QOFQUERY_H + +#include + +#include +#include + +extern "C" +{ +#include +} + +// mock up for QofQuery +// hint: class QofMockQuery can not be derived from QofQuery, since struct _QofQuery is not public +class QofMockQuery +{ +public: + QofMockQuery() {}; + + MOCK_METHOD1(setBook, void(QofBook*)); + MOCK_METHOD0(destroy, void()); + MOCK_METHOD5(addDateMatchTT, void(gboolean, time64, gboolean, time64, QofQueryOp)); + MOCK_METHOD2(addSingleAccountMatch, void(Account*, QofQueryOp)); + MOCK_METHOD0(run, std::vector()); +}; + +/* +// typed mock up for QofQuery +template +class MockQofQueryWithType : MockQofQuery +{ +public: + // \todo: write constructor + MOCK_METHOD0_T(run, std::list()); +}; +*/ + +class QofQueryFactory +{ +public: +// MOCK_METHOD0(createForSplit, MockQofQueryWithType*()); + MOCK_METHOD0(create, QofMockQuery*()); +} qof_query_factory; + +#endif diff --git a/gnucash/import-export/test/gtest-import-backend.cpp b/gnucash/import-export/test/gtest-import-backend.cpp index 1ee3e2d4c9..1f917d9fa8 100644 --- a/gnucash/import-export/test/gtest-import-backend.cpp +++ b/gnucash/import-export/test/gtest-import-backend.cpp @@ -9,6 +9,7 @@ extern "C" #include } +#include "gmock-gnc-prefs.h" #include "gmock-qofbook.h" #include "gmock-Account.h" #include "gmock-Transaction.h" @@ -43,6 +44,8 @@ class ImportBackendTest : public testing::Test protected: void SetUp() { + m_prefs = MockPrefsBackend::getInstance(); + ASSERT_NE(m_prefs, nullptr); m_import_acc = new MockAccount(); m_dest_acc = new MockAccount(); m_trans = new MockTransaction(); @@ -63,6 +66,7 @@ protected: m_split->free(); } + MockPrefsBackend* m_prefs; MockAccount* m_import_acc; MockAccount* m_dest_acc; MockTransaction* m_trans;