Add mock classes for prefs and qofquery

This commit is contained in:
Christian Gruber 2020-04-08 22:32:49 +02:00
parent 584ccd333d
commit 43d2c80107
6 changed files with 214 additions and 0 deletions

View File

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

View File

@ -0,0 +1,47 @@
#include <config.h>
#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);
}

View File

@ -0,0 +1,47 @@
#ifndef GMOCK_GNC_PREFS_H
#define GMOCK_GNC_PREFS_H
#include <gmock/gmock.h>
extern "C"
{
#include <gnc-prefs.h>
#include <gnc-prefs-p.h>
}
// 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

View File

@ -0,0 +1,68 @@
#include <config.h>
#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<gpointer>(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();
}

View File

@ -0,0 +1,46 @@
#ifndef GMOCK_QOFQUERY_H
#define GMOCK_QOFQUERY_H
#include <gmock/gmock.h>
#include <qofquery.h>
#include <qofquery-p.h>
extern "C"
{
#include <Query.h>
}
// 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<void*>());
};
/*
// typed mock up for QofQuery
template <typename T>
class MockQofQueryWithType : MockQofQuery
{
public:
// \todo: write constructor
MOCK_METHOD0_T(run, std::list<T*>());
};
*/
class QofQueryFactory
{
public:
// MOCK_METHOD0(createForSplit, MockQofQueryWithType<Split>*());
MOCK_METHOD0(create, QofMockQuery*());
} qof_query_factory;
#endif

View File

@ -9,6 +9,7 @@ extern "C"
#include <import-backend.h>
}
#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;