Skip to content

Commit

Permalink
Replace singleton class MockPrefsBackend by an ordinary class
Browse files Browse the repository at this point in the history
  • Loading branch information
Christian Gruber committed Jul 9, 2020
1 parent 8ac640d commit 766f88c
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 36 deletions.
7 changes: 3 additions & 4 deletions gnucash/import-export/test/gtest-import-backend.cpp
Expand Up @@ -114,8 +114,7 @@ class ImportBackendTest : public testing::Test
protected:
void SetUp()
{
m_prefs = MockPrefsBackend::getInstance();
ASSERT_NE(m_prefs, nullptr);
gmock_gnc_prefs_set_backend(&m_prefs);
m_import_acc = new MockAccount();
m_dest_acc = new MockAccount();
m_trans = new MockTransaction();
Expand All @@ -136,7 +135,7 @@ class ImportBackendTest : public testing::Test
m_split->free();
}

MockPrefsBackend* m_prefs;
MockPrefsBackend m_prefs;
MockAccount* m_import_acc;
MockAccount* m_dest_acc;
MockTransaction* m_trans;
Expand Down Expand Up @@ -196,7 +195,7 @@ class ImportBackendBayesTest : public ImportBackendTest
using namespace testing;

// set bayesian import matching in preferences
ON_CALL(*m_prefs, getBool(StrEq(GNC_PREFS_GROUP_IMPORT), StrEq(GNC_PREF_USE_BAYES)))
ON_CALL(m_prefs, getBool(StrEq(GNC_PREFS_GROUP_IMPORT), StrEq(GNC_PREF_USE_BAYES)))
.WillByDefault(Return(true));
}

Expand Down
22 changes: 14 additions & 8 deletions libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
Expand Up @@ -2,46 +2,52 @@

#include "gmock-gnc-prefs.h"

PrefsBackend* prefsbackend = NULL;
static MockPrefsBackend* prefsbackend = nullptr;

void
gmock_gnc_prefs_set_backend(MockPrefsBackend *backend)
{
prefsbackend = backend;
}

gboolean
gnc_prefs_get_bool (const gchar *group, const gchar *pref_name)
{
return ((MockPrefsBackend*)prefsbackend)->getBool(group, pref_name);
return prefsbackend->getBool(group, pref_name);
}

gint
gnc_prefs_get_int (const gchar *group, const gchar *pref_name)
{
return ((MockPrefsBackend*)prefsbackend)->getInt(group, pref_name);
return prefsbackend->getInt(group, pref_name);
}

gint64
gnc_prefs_get_int64 (const gchar *group, const gchar *pref_name)
{
return ((MockPrefsBackend*)prefsbackend)->getInt64(group, pref_name);
return prefsbackend->getInt64(group, pref_name);
}

gdouble
gnc_prefs_get_float (const gchar *group, const gchar *pref_name)
{
return ((MockPrefsBackend*)prefsbackend)->getFloat(group, pref_name);
return prefsbackend->getFloat(group, pref_name);
}

gchar *
gnc_prefs_get_string (const gchar *group, const gchar *pref_name)
{
return ((MockPrefsBackend*)prefsbackend)->getString(group, pref_name);
return prefsbackend->getString(group, pref_name);
}

gint
gnc_prefs_get_enum (const gchar *group, const gchar *pref_name)
{
return ((MockPrefsBackend*)prefsbackend)->getEnum(group, pref_name);
return 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);
prefsbackend->getCoords(group, pref_name, x, y);
}
32 changes: 8 additions & 24 deletions libgnucash/app-utils/mocks/gmock-gnc-prefs.h
Expand Up @@ -6,42 +6,26 @@
extern "C"
{
#include <gnc-prefs.h>
#include <gnc-prefs-p.h>
}


// mock up for PrefsBackend (singleton class)
class MockPrefsBackend : PrefsBackend
// mock up class implementing preferences backend (see struct PrefBackend in gnc-prefs-p.h)
class MockPrefsBackend
{
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() {}
};

/** Define a preferences backend.
*
* \attention Each call to this function overwrites a previously set backend.
*/
void gmock_gnc_prefs_set_backend(MockPrefsBackend *backend);

#endif

0 comments on commit 766f88c

Please sign in to comment.