From 766f88c02d6b8837fdf09d0b8660da6251cf68a3 Mon Sep 17 00:00:00 2001 From: Christian Gruber Date: Wed, 10 Jun 2020 21:47:50 +0200 Subject: [PATCH] Replace singleton class MockPrefsBackend by an ordinary class --- .../test/gtest-import-backend.cpp | 7 ++-- .../app-utils/mocks/gmock-gnc-prefs.cpp | 22 ++++++++----- libgnucash/app-utils/mocks/gmock-gnc-prefs.h | 32 +++++-------------- 3 files changed, 25 insertions(+), 36 deletions(-) diff --git a/gnucash/import-export/test/gtest-import-backend.cpp b/gnucash/import-export/test/gtest-import-backend.cpp index 0f67ee9095..850102b02e 100644 --- a/gnucash/import-export/test/gtest-import-backend.cpp +++ b/gnucash/import-export/test/gtest-import-backend.cpp @@ -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(); @@ -136,7 +135,7 @@ protected: m_split->free(); } - MockPrefsBackend* m_prefs; + MockPrefsBackend m_prefs; MockAccount* m_import_acc; MockAccount* m_dest_acc; MockTransaction* m_trans; @@ -196,7 +195,7 @@ protected: 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)); } diff --git a/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp b/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp index d08dc6925f..e45b48519f 100644 --- a/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp +++ b/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp @@ -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); } diff --git a/libgnucash/app-utils/mocks/gmock-gnc-prefs.h b/libgnucash/app-utils/mocks/gmock-gnc-prefs.h index 6382224cdd..7540f36714 100644 --- a/libgnucash/app-utils/mocks/gmock-gnc-prefs.h +++ b/libgnucash/app-utils/mocks/gmock-gnc-prefs.h @@ -6,31 +6,13 @@ extern "C" { #include -#include } -// 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 *)); @@ -38,10 +20,12 @@ public: 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