gnucash maint: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Sun Nov 8 17:28:15 EST 2020


Updated	 via  https://github.com/Gnucash/gnucash/commit/e09a26ba (commit)
	 via  https://github.com/Gnucash/gnucash/commit/6394b649 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/feba6462 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/e44cf9c6 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/63969e86 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/d673c32e (commit)
	 via  https://github.com/Gnucash/gnucash/commit/0e634c54 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/99256c38 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/833edd0b (commit)
	 via  https://github.com/Gnucash/gnucash/commit/bc80bbb3 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/b0906b5e (commit)
	 via  https://github.com/Gnucash/gnucash/commit/5408854c (commit)
	 via  https://github.com/Gnucash/gnucash/commit/41c147a9 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/df6621f2 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/861a2482 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/3d92d539 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/1fa90a54 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/af3353a1 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/1e2236af (commit)
	 via  https://github.com/Gnucash/gnucash/commit/fa82a8bc (commit)
	 via  https://github.com/Gnucash/gnucash/commit/2639cdef (commit)
	 via  https://github.com/Gnucash/gnucash/commit/841111e3 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/bbfc30d7 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/8425af78 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/766f88c0 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/8ac640d5 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/610bbda2 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/53c294f9 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/bb0088c4 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/967cf0b4 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/d0842798 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/67f63053 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/a9d85e8f (commit)
	from  https://github.com/Gnucash/gnucash/commit/26fa239f (commit)



commit e09a26ba3ae9658af50122143cd19787137d5b61
Merge: 26fa239f8 6394b6491
Author: John Ralls <jralls at ceridwen.us>
Date:   Sun Nov 8 14:04:29 2020 -0800

    Merge Christian Gruber's 'test_import_backend' into maint.

diff --cc gnucash/import-export/test/gtest-import-backend.cpp
index 345f46eb2,5adb2adf9..01f01ac7c
--- a/gnucash/import-export/test/gtest-import-backend.cpp
+++ b/gnucash/import-export/test/gtest-import-backend.cpp
@@@ -161,12 -164,10 +167,12 @@@ TEST_F(ImportBackendTest, CreateTransIn
      //qof_instance_get (QOF_INSTANCE (split), "online-id", &online_id, NULL);
  
      // Define first split
-     ON_CALL(*m_trans, getSplit(0))
+     ON_CALL(*m_trans, get_split(0))
          .WillByDefault(Return(m_split));
-     ON_CALL(*m_trans, getSplitList())
++    ON_CALL(*m_trans, get_split_list())
 +        .WillByDefault(Return(m_splitList));
      // define description of the transaction
-     ON_CALL(*m_trans, getDescription())
+     ON_CALL(*m_trans, get_description())
          .WillByDefault(Return("This is the description"));
  
      // function gnc_import_TransInfo_new() should try to find account using the description from the transaction
@@@ -231,12 -232,10 +237,12 @@@ TEST_F(ImportBackendBayesTest, CreateTr
      gnc_tm_free(tm_struct);
  
      // Define first split
-     ON_CALL(*m_trans, getSplit(0))
+     ON_CALL(*m_trans, get_split(0))
          .WillByDefault(Return(m_split));
-     ON_CALL(*m_trans, getSplitList())
++    ON_CALL(*m_trans, get_split_list())
 +        .WillByDefault(Return(m_splitList));
      // Transaction has no further splits
-     ON_CALL(*m_trans, getSplit(Gt(0)))
+     ON_CALL(*m_trans, get_split(Gt(0)))
          .WillByDefault(Return(nullptr));
      // Define description and memo of first split
      // This transaction is used for testing tokenization of its content.
diff --cc libgnucash/engine/mocks/gmock-Transaction.cpp
index ae3483cf1,3bd1e65df..40cfdec3a
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@@ -42,17 -48,11 +48,18 @@@ xaccTransCommitEdit (Transaction *trans
  Split *
  xaccTransGetSplit (const Transaction *trans, int i)
  {
-     g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), NULL);
-     return ((MockTransaction*)trans)->getSplit(i);
+     SCOPED_TRACE("");
+     auto mocktrans = gnc_mocktransaction(trans);
+     return mocktrans ? mocktrans->get_split(i) : nullptr;
  }
  
 +SplitList *
 +xaccTransGetSplitList (const Transaction *trans)
 +{
-     g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), NULL);
-     return trans ? ((MockTransaction*)trans)->getSplitList() : NULL;
++    g_return_val_if_fail(GNC_IS_MOCKTRANSACTION(trans), NULL);
++    return trans ? ((MockTransaction*)trans)->get_split_list() : NULL;
 +}
 +
  Split *
  xaccTransFindSplitByAccount(const Transaction *trans, const Account *acc)
  {
diff --cc libgnucash/engine/mocks/gmock-Transaction.h
index 5cb26a250,125012100..885eebf68
--- a/libgnucash/engine/mocks/gmock-Transaction.h
+++ b/libgnucash/engine/mocks/gmock-Transaction.h
@@@ -49,20 -51,19 +51,20 @@@ public
          mock_g_object_unref(trans, size);
      }
  
-     MOCK_METHOD0(beginEdit, void());
-     MOCK_METHOD0(commitEdit, void());
-     MOCK_METHOD1(getSplit, Split *(int));
-     MOCK_METHOD0(getSplitList, SplitList *());
-     MOCK_METHOD1(findSplitByAccount, Split *(const Account*));
-     MOCK_METHOD0(getDate, time64());
-     MOCK_METHOD1(setDatePostedSecsNormalized, void(time64));
-     MOCK_METHOD0(getDescription, const char *());
-     MOCK_METHOD1(setDescription, void(const char*));
-     MOCK_METHOD0(getNotes, const char *());
-     MOCK_METHOD1(setNotes, void(const char*));
-     MOCK_METHOD0(getImbalanceValue, gnc_numeric());
-     MOCK_METHOD0(getNum, const char *());
-     MOCK_METHOD0(isOpen, gboolean());
+     MOCK_METHOD0(begin_edit, void());
+     MOCK_METHOD0(commit_edit, void());
+     MOCK_CONST_METHOD1(get_split, Split *(int));
++    MOCK_CONST_METHOD0(get_split_list, GList*());
+     MOCK_CONST_METHOD1(find_split_by_account, Split *(const Account*));
+     MOCK_CONST_METHOD0(get_date, time64());
+     MOCK_METHOD1(set_date_posted_secs_normalized, void(time64));
+     MOCK_CONST_METHOD0(get_description, const char *());
+     MOCK_METHOD1(set_description, void(const char*));
+     MOCK_CONST_METHOD0(get_notes, const char *());
+     MOCK_METHOD1(set_notes, void(const char*));
+     MOCK_CONST_METHOD0(get_imbalance_value, gnc_numeric());
+     MOCK_CONST_METHOD0(get_num, const char *());
+     MOCK_CONST_METHOD0(is_open, gboolean());
      MOCK_METHOD0(destroy, void());
  
  protected:

commit 6394b6491b719089aeb83917bc7dd0714c880e98
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Mon Oct 5 22:48:52 2020 +0200

    fixup! Simplify type checking for GObject mockups

diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index 1b5f30a4a..b4dd7d28f 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -47,7 +47,7 @@ QofBook *
 gnc_account_get_book(const Account *account)
 {
     SCOPED_TRACE("");
-    const MockAccount* mockaccount = gnc_mockaccount(account);
+    auto mockaccount = gnc_mockaccount(account);
     return mockaccount ? mockaccount->get_book() : nullptr;
 }
 
@@ -56,7 +56,7 @@ xaccAccountForEachTransaction(const Account *acc, TransactionCallback proc,
                               void *data)
 {
     SCOPED_TRACE("");
-    const MockAccount* mockaccount = gnc_mockaccount(acc);
+    auto mockaccount = gnc_mockaccount(acc);
     return mockaccount ? mockaccount->for_each_transaction(proc, data) : 0;
 }
 
@@ -64,7 +64,7 @@ GncImportMatchMap *
 gnc_account_imap_create_imap (Account *acc)
 {
     SCOPED_TRACE("");
-    MockAccount* mockaccount = gnc_mockaccount(acc);
+    auto mockaccount = gnc_mockaccount(acc);
     return mockaccount ? mockaccount->create_imap() : nullptr;
 }
 
diff --git a/libgnucash/engine/mocks/gmock-Split.cpp b/libgnucash/engine/mocks/gmock-Split.cpp
index 1355f121d..de67a40f5 100644
--- a/libgnucash/engine/mocks/gmock-Split.cpp
+++ b/libgnucash/engine/mocks/gmock-Split.cpp
@@ -45,7 +45,7 @@ QofBook *
 xaccSplitGetBook (const Split *split)
 {
     SCOPED_TRACE("");
-    const MockSplit* mocksplit = gnc_mocksplit(split);
+    auto mocksplit = gnc_mocksplit(split);
     return mocksplit ? mocksplit->get_book() : nullptr;
 }
 
@@ -53,7 +53,7 @@ Account *
 xaccSplitGetAccount (const Split *split)
 {
     SCOPED_TRACE("");
-    const MockSplit* mocksplit = gnc_mocksplit(split);
+    auto mocksplit = gnc_mocksplit(split);
     return mocksplit ? mocksplit->get_account() : nullptr;
 }
 
@@ -69,7 +69,7 @@ gnc_numeric
 xaccSplitGetAmount (const Split *split)
 {
     SCOPED_TRACE("");
-    const MockSplit* mocksplit = gnc_mocksplit(split);
+    auto mocksplit = gnc_mocksplit(split);
     return mocksplit ? mocksplit->get_amount() : gnc_numeric_zero();
 }
 
@@ -84,7 +84,7 @@ gnc_numeric
 xaccSplitGetValue (const Split *split)
 {
     SCOPED_TRACE("");
-    const MockSplit* mocksplit = gnc_mocksplit(split);
+    auto mocksplit = gnc_mocksplit(split);
     return mocksplit ? mocksplit->get_value() : gnc_numeric_zero();
 }
 
@@ -99,7 +99,7 @@ const char *
 xaccSplitGetMemo (const Split *split)
 {
     SCOPED_TRACE("");
-    const MockSplit* mocksplit = gnc_mocksplit(split);
+    auto mocksplit = gnc_mocksplit(split);
     return mocksplit ? mocksplit->get_memo() : "";
 }
 
@@ -107,7 +107,7 @@ char
 xaccSplitGetReconcile (const Split *split)
 {
     SCOPED_TRACE("");
-    const MockSplit* mocksplit = gnc_mocksplit(split);
+    auto mocksplit = gnc_mocksplit(split);
     return mocksplit ? mocksplit->get_reconcile() : VREC;
 }
 
@@ -129,7 +129,7 @@ const char *
 xaccSplitGetAction (const Split *split)
 {
     SCOPED_TRACE("");
-    const MockSplit* mocksplit = gnc_mocksplit(split);
+    auto mocksplit = gnc_mocksplit(split);
     return mocksplit ? mocksplit->get_action() : "";
 }
 
@@ -137,7 +137,7 @@ Split *
 xaccSplitGetOtherSplit (const Split *split)
 {
     SCOPED_TRACE("");
-    const MockSplit* mocksplit = gnc_mocksplit(split);
+    auto mocksplit = gnc_mocksplit(split);
     return mocksplit ? mocksplit->get_other_split() : nullptr;
 }
 
@@ -145,7 +145,7 @@ Transaction *
 xaccSplitGetParent (const Split *split)
 {
     SCOPED_TRACE("");
-    const MockSplit* mocksplit = gnc_mocksplit(split);
+    auto mocksplit = gnc_mocksplit(split);
     return mocksplit ? mocksplit->get_parent() : nullptr;
 }
 
diff --git a/libgnucash/engine/mocks/gmock-Transaction.cpp b/libgnucash/engine/mocks/gmock-Transaction.cpp
index b185640b0..3bd1e65df 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@ -49,7 +49,7 @@ Split *
 xaccTransGetSplit (const Transaction *trans, int i)
 {
     SCOPED_TRACE("");
-    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    auto mocktrans = gnc_mocktransaction(trans);
     return mocktrans ? mocktrans->get_split(i) : nullptr;
 }
 
@@ -57,7 +57,7 @@ Split *
 xaccTransFindSplitByAccount(const Transaction *trans, const Account *acc)
 {
     SCOPED_TRACE("");
-    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    auto mocktrans = gnc_mocktransaction(trans);
     EXPECT_TRUE(GNC_IS_ACCOUNT(acc));
     return mocktrans ? mocktrans->find_split_by_account(acc) : nullptr;
 }
@@ -66,7 +66,7 @@ time64
 xaccTransGetDate (const Transaction *trans)
 {
     SCOPED_TRACE("");
-    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    auto mocktrans = gnc_mocktransaction(trans);
     return mocktrans ? mocktrans->get_date() : 0;
 }
 
@@ -81,7 +81,7 @@ const char *
 xaccTransGetDescription (const Transaction *trans)
 {
     SCOPED_TRACE("");
-    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    auto mocktrans = gnc_mocktransaction(trans);
     return mocktrans ? mocktrans->get_description() : "";
 }
 
@@ -96,7 +96,7 @@ const char *
 xaccTransGetNotes (const Transaction *trans)
 {
     SCOPED_TRACE("");
-    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    auto mocktrans = gnc_mocktransaction(trans);
     return mocktrans ? mocktrans->get_notes() : "";
 }
 
@@ -111,7 +111,7 @@ gnc_numeric
 xaccTransGetImbalanceValue (const Transaction * trans)
 {
     SCOPED_TRACE("");
-    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    auto mocktrans = gnc_mocktransaction(trans);
     return mocktrans ? mocktrans->get_imbalance_value() : gnc_numeric_zero();
 }
 
@@ -119,7 +119,7 @@ const char *
 xaccTransGetNum (const Transaction *trans)
 {
     SCOPED_TRACE("");
-    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    auto mocktrans = gnc_mocktransaction(trans);
     return mocktrans ? mocktrans->get_num() : "";
 }
 
@@ -127,7 +127,7 @@ gboolean
 xaccTransIsOpen (const Transaction *trans)
 {
     SCOPED_TRACE("");
-    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    auto mocktrans = gnc_mocktransaction(trans);
     return mocktrans ? mocktrans->is_open() : FALSE;
 }
 
diff --git a/libgnucash/engine/mocks/gmock-qofbook.cpp b/libgnucash/engine/mocks/gmock-qofbook.cpp
index d2c389d9a..1ea7d7215 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.cpp
+++ b/libgnucash/engine/mocks/gmock-qofbook.cpp
@@ -30,7 +30,7 @@ gboolean
 qof_book_use_split_action_for_num_field (const QofBook *book)
 {
     SCOPED_TRACE("");
-    const QofMockBook* mockbook = qof_mockbook(book);
+    auto mockbook = qof_mockbook(book);
     return mockbook ? mockbook->use_split_action_for_num_field() : FALSE;
 }
 

commit feba64624c360ec992f3f11a78732cf9f2461e99
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Mon Oct 5 22:20:02 2020 +0200

    Fix xaccTransSetNotes()
    
    This is a bugfix for commit 954ce9577f4de5f77956e4cdc1d79d51ef8afb1f

diff --git a/libgnucash/engine/mocks/gmock-Transaction.cpp b/libgnucash/engine/mocks/gmock-Transaction.cpp
index bde81b33c..b185640b0 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@ -104,7 +104,7 @@ void
 xaccTransSetNotes (Transaction *trans, const char *notes)
 {
     ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    gnc_mocktransaction(trans)->set_description(notes);
+    gnc_mocktransaction(trans)->set_notes(notes);
 }
 
 gnc_numeric

commit e44cf9c61f36ef29c16dafbad443d9c1a8cfdf3f
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Wed Sep 23 19:59:40 2020 +0200

    Add missing C linkage statements

diff --git a/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp b/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
index d9e090068..7711d8608 100644
--- a/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
+++ b/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
@@ -10,6 +10,8 @@ gmock_gnc_prefs_set_backend(MockPrefsBackend *backend)
     prefsbackend = backend;
 }
 
+extern "C"
+{
 gboolean
 gnc_prefs_get_bool (const gchar *group, const gchar *pref_name)
 {
@@ -63,3 +65,5 @@ gnc_prefs_get_coords (const gchar *group, const gchar *pref_name, gdouble *x, gd
     if (prefsbackend != nullptr)
         prefsbackend->get_coords(group, pref_name, x, y);
 }
+
+} // extern "C"
diff --git a/libgnucash/engine/mocks/fake-qofquery.cpp b/libgnucash/engine/mocks/fake-qofquery.cpp
index 53dddfd80..15341189a 100644
--- a/libgnucash/engine/mocks/fake-qofquery.cpp
+++ b/libgnucash/engine/mocks/fake-qofquery.cpp
@@ -124,6 +124,8 @@ qof_query_set_book (QofQuery *query, QofBook *book)
     ((QofFakeQuery*)query)->set_book(book);
 }
 
+extern "C"
+{
 void
 xaccQueryAddDateMatchTT (
         QofQuery *query,
@@ -144,6 +146,8 @@ xaccQueryAddSingleAccountMatch(QofQuery *query, Account *acc, QofQueryOp op)
     ((QofFakeQuery*)query)->add_single_account_match(acc, op);
 }
 
+} // extern "C"
+
 GList *
 qof_query_run (QofQuery *query)
 {
diff --git a/libgnucash/engine/mocks/gmock-Split.h b/libgnucash/engine/mocks/gmock-Split.h
index b60da9387..d70652a5a 100644
--- a/libgnucash/engine/mocks/gmock-Split.h
+++ b/libgnucash/engine/mocks/gmock-Split.h
@@ -4,7 +4,10 @@
 #include <gmock/gmock.h>
 
 #include <Split.h>
+extern "C"
+{
 #include <SplitP.h>
+}
 
 #include "gmock-qofbook.h"
 #include "gmock-gobject.h"
diff --git a/libgnucash/engine/mocks/gmock-Transaction.h b/libgnucash/engine/mocks/gmock-Transaction.h
index d5c518d64..125012100 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.h
+++ b/libgnucash/engine/mocks/gmock-Transaction.h
@@ -4,7 +4,10 @@
 #include <gmock/gmock.h>
 
 #include <Transaction.h>
+extern "C"
+{
 #include <TransactionP.h>
+}
 
 #include "gmock-gobject.h"
 
diff --git a/libgnucash/engine/mocks/gmock-qofinstance.cpp b/libgnucash/engine/mocks/gmock-qofinstance.cpp
index eb6f8aeb5..e6e0c2c82 100644
--- a/libgnucash/engine/mocks/gmock-qofinstance.cpp
+++ b/libgnucash/engine/mocks/gmock-qofinstance.cpp
@@ -23,6 +23,8 @@ qof_instance_class_init(QofInstanceClass *klass)
     // function is unused, class functions are defined in C++ code
 }
 
+extern "C"
+{
 // This is a reimplementation of the function from qofinstance.cpp
 void
 qof_instance_get (const QofInstance *inst, const gchar *first_prop, ...)
@@ -48,3 +50,4 @@ qof_instance_set (QofInstance *inst, const gchar *first_prop, ...)
     va_end (ap);
 }
 
+} // extern "C"

commit 63969e8628d4ac5ae53c8d2a72bf6bcf717b3c03
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Tue Sep 22 22:25:45 2020 +0200

    Remove unecessary include

diff --git a/libgnucash/engine/mocks/gmock-Transaction.h b/libgnucash/engine/mocks/gmock-Transaction.h
index f0901fb1b..d5c518d64 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.h
+++ b/libgnucash/engine/mocks/gmock-Transaction.h
@@ -6,7 +6,6 @@
 #include <Transaction.h>
 #include <TransactionP.h>
 
-#include "gmock-qofbook.h"
 #include "gmock-gobject.h"
 
 

commit d673c32e358c53a49ff8b5ff8d17a661003dc582
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Tue Sep 22 22:24:57 2020 +0200

    Mock methods should not neccessarily return mock objects

diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index 608e11cad..6b7bbaefa 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -5,8 +5,8 @@
 
 #include <Account.h>
 #include <AccountP.h>
+#include <qofbook.h>
 
-#include "gmock-qofbook.h"
 #include "gmock-gobject.h"
 
 
@@ -41,7 +41,7 @@ public:
 
     MOCK_METHOD0(begin_edit, void());
     MOCK_METHOD0(commit_edit, void());
-    MOCK_CONST_METHOD0(get_book, QofMockBook*());
+    MOCK_CONST_METHOD0(get_book, QofBook*());
     MOCK_CONST_METHOD2(for_each_transaction, gint(TransactionCallback, void*));
     MOCK_METHOD0(create_imap, GncImportMatchMap*());
 

commit 0e634c54460463de2c8bc1204835041d03a014e0
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Tue Sep 22 22:20:38 2020 +0200

    Relax runtime type checks
    
    Runtime type checks should only check for the mock up type, if
    neccessary. If objects of another class than the mocked object itself
    are processed, runtime type check should only check for the base-class
    type. It should be possible to use mockup objects and non-mockup objects
    within the same application.
    
    The included headers are adapted accordingly.

diff --git a/libgnucash/engine/mocks/fake-qofquery.cpp b/libgnucash/engine/mocks/fake-qofquery.cpp
index dc8445d4d..53dddfd80 100644
--- a/libgnucash/engine/mocks/fake-qofquery.cpp
+++ b/libgnucash/engine/mocks/fake-qofquery.cpp
@@ -4,10 +4,11 @@
 
 #include <config.h>
 
+#include <qofbook.h>
+
 #include <list>
 
 #include "fake-qofquery.h"
-#include "gmock-qofbook.h"
 
 
 
@@ -119,7 +120,7 @@ void
 qof_query_set_book (QofQuery *query, QofBook *book)
 {
     ASSERT_TRUE(queryPool.query_used(query));
-    ASSERT_TRUE(QOF_IS_MOCKBOOK(book));
+    ASSERT_TRUE(QOF_IS_BOOK(book));
     ((QofFakeQuery*)query)->set_book(book);
 }
 
diff --git a/libgnucash/engine/mocks/gmock-Split.cpp b/libgnucash/engine/mocks/gmock-Split.cpp
index 2cf34bc22..1355f121d 100644
--- a/libgnucash/engine/mocks/gmock-Split.cpp
+++ b/libgnucash/engine/mocks/gmock-Split.cpp
@@ -1,9 +1,10 @@
 #include <config.h>
 
+#include <Transaction.h>
+#include <Account.h>
+
 #include "gmock-Split.h"
 #include "gmock-qofbook.h"
-#include "gmock-Account.h"
-#include "gmock-Transaction.h"
 
 
 struct _MockSplitClass
@@ -60,7 +61,7 @@ void
 xaccSplitSetAccount (Split *split, Account *acc)
 {
     ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
-    ASSERT_TRUE(GNC_IS_MOCKACCOUNT(acc));
+    ASSERT_TRUE(GNC_IS_ACCOUNT(acc));
     gnc_mocksplit(split)->set_account(acc);
 }
 
@@ -152,6 +153,6 @@ void
 xaccSplitSetParent(Split *split, Transaction *trans)
 {
     ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
-    ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_TRANSACTION(trans));
     gnc_mocksplit(split)->set_parent(trans);
 }
diff --git a/libgnucash/engine/mocks/gmock-Transaction.cpp b/libgnucash/engine/mocks/gmock-Transaction.cpp
index 597971b6e..bde81b33c 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@ -1,7 +1,8 @@
 #include <config.h>
 
+#include <Account.h>
+
 #include "gmock-Transaction.h"
-#include "gmock-Account.h"
 
 
 struct _MockTransactionClass
@@ -57,7 +58,7 @@ xaccTransFindSplitByAccount(const Transaction *trans, const Account *acc)
 {
     SCOPED_TRACE("");
     const MockTransaction* mocktrans = gnc_mocktransaction(trans);
-    EXPECT_TRUE(GNC_IS_MOCKACCOUNT(acc));
+    EXPECT_TRUE(GNC_IS_ACCOUNT(acc));
     return mocktrans ? mocktrans->find_split_by_account(acc) : nullptr;
 }
 
diff --git a/libgnucash/engine/mocks/gmock-qofbook.h b/libgnucash/engine/mocks/gmock-qofbook.h
index 035eb1a9c..7001697af 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.h
+++ b/libgnucash/engine/mocks/gmock-qofbook.h
@@ -5,9 +5,9 @@
 
 #include <qofbook.h>
 #include <qofbook-p.h>
+#include <Split.h>
 
 #include "gmock-gobject.h"
-#include "gmock-Split.h"
 
 
 GType qof_mockbook_get_type(void);

commit 99256c385b21efa920650089c5ea4d948dbb4ffe
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Tue Sep 22 22:07:21 2020 +0200

    Add missing _get_type() functions of all mocked GObject classes
    
    If a GObject is replaced by a mock up, its _get_type() function has to
    be replaced as well. The replaced _get_type() functions have to return
    the type of the mock up now.

diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index d92679f4a..1b5f30a4a 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -23,6 +23,12 @@ gnc_mockaccount_class_init(MockAccountClass *klass)
     // function is unused, class functions are defined in C++ code
 }
 
+
+GType gnc_account_get_type(void)
+{
+    return gnc_mockaccount_get_type();
+}
+
 void
 xaccAccountBeginEdit (Account *account)
 {
diff --git a/libgnucash/engine/mocks/gmock-Split.cpp b/libgnucash/engine/mocks/gmock-Split.cpp
index 5db4cad97..2cf34bc22 100644
--- a/libgnucash/engine/mocks/gmock-Split.cpp
+++ b/libgnucash/engine/mocks/gmock-Split.cpp
@@ -27,6 +27,11 @@ gnc_mocksplit_class_init (MockSplitClass *klass)
 }
 
 
+GType gnc_split_get_type(void)
+{
+    return gnc_mocksplit_get_type();
+}
+
 Split *
 xaccMallocSplit (QofBook *book)
 {
diff --git a/libgnucash/engine/mocks/gmock-Transaction.cpp b/libgnucash/engine/mocks/gmock-Transaction.cpp
index 487a5b4d8..597971b6e 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@ -25,6 +25,11 @@ gnc_mocktransaction_class_init(MockTransactionClass *klass)
 }
 
 
+GType gnc_transaction_get_type(void)
+{
+    return gnc_mocktransaction_get_type();
+}
+
 void
 xaccTransBeginEdit (Transaction *trans)
 {
diff --git a/libgnucash/engine/mocks/gmock-qofbook.cpp b/libgnucash/engine/mocks/gmock-qofbook.cpp
index 17a7f0061..d2c389d9a 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.cpp
+++ b/libgnucash/engine/mocks/gmock-qofbook.cpp
@@ -20,6 +20,12 @@ qof_mockbook_class_init(QofMockBookClass *klass)
     // function is unused, class functions are defined in C++ code
 }
 
+
+GType qof_book_get_type(void)
+{
+    return qof_mockbook_get_type();
+}
+
 gboolean
 qof_book_use_split_action_for_num_field (const QofBook *book)
 {

commit 833edd0b29dcc936ec77ece9bf6a331d8cffdd75
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Mon Sep 21 00:50:24 2020 +0200

    Add missing comment

diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index 04a48b5d8..608e11cad 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -52,6 +52,7 @@ protected:
 };
 
 
+// mock up for GncImportMatchMap
 class GncMockImportMatchMap : public GncImportMatchMap
 {
 public:

commit bc80bbb325d1814489d72bd1bc0760e8f7423a2f
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Mon Sep 21 00:47:53 2020 +0200

    Simplify type checking for GObject mockups
    
    A type conversion function is introduced for each GObject mockup. This
    function does a runtime type check and generates a GoogleTest failure in
    case of any type error. This avoids checking GObject type twice.

diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index c25b1157f..d92679f4a 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -27,45 +27,39 @@ void
 xaccAccountBeginEdit (Account *account)
 {
     ASSERT_TRUE(GNC_IS_MOCKACCOUNT(account));
-    ((MockAccount*)account)->begin_edit();
+    gnc_mockaccount(account)->begin_edit();
 }
 
 void
 xaccAccountCommitEdit (Account *account)
 {
     ASSERT_TRUE(GNC_IS_MOCKACCOUNT(account));
-    ((MockAccount*)account)->commit_edit();
+    gnc_mockaccount(account)->commit_edit();
 }
 
 QofBook *
 gnc_account_get_book(const Account *account)
 {
-    EXPECT_TRUE(GNC_IS_MOCKACCOUNT(account));
-    if (GNC_IS_MOCKACCOUNT(account))
-        return ((MockAccount*)account)->get_book();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockAccount* mockaccount = gnc_mockaccount(account);
+    return mockaccount ? mockaccount->get_book() : nullptr;
 }
 
 gint
 xaccAccountForEachTransaction(const Account *acc, TransactionCallback proc,
                               void *data)
 {
-    EXPECT_TRUE(GNC_IS_MOCKACCOUNT(acc));
-    if (GNC_IS_MOCKACCOUNT(acc))
-        return ((MockAccount*)acc)->for_each_transaction(proc, data);
-    else
-        return 0;
+    SCOPED_TRACE("");
+    const MockAccount* mockaccount = gnc_mockaccount(acc);
+    return mockaccount ? mockaccount->for_each_transaction(proc, data) : 0;
 }
 
 GncImportMatchMap *
 gnc_account_imap_create_imap (Account *acc)
 {
-    EXPECT_TRUE(GNC_IS_MOCKACCOUNT(acc));
-    if (GNC_IS_MOCKACCOUNT(acc))
-        return ((MockAccount*)acc)->create_imap();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    MockAccount* mockaccount = gnc_mockaccount(acc);
+    return mockaccount ? mockaccount->create_imap() : nullptr;
 }
 
 Account*
diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index 9552301a5..04a48b5d8 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -67,4 +67,24 @@ public:
     MOCK_METHOD2(add_account_bayes, void(std::vector<const char*>&, Account*));
 };
 
+
+// type conversion functions
+static inline MockAccount*
+gnc_mockaccount (Account *account)
+{
+    if (GNC_IS_MOCKACCOUNT(account))
+        return static_cast<MockAccount*>(account);
+    ADD_FAILURE() << "Expected 'account' to be of type 'MockAccount'";
+    return nullptr;
+}
+
+static inline const MockAccount*
+gnc_mockaccount (const Account *account)
+{
+    if (GNC_IS_MOCKACCOUNT(account))
+        return static_cast<const MockAccount*>(account);
+    ADD_FAILURE() << "Expected 'account' to be of type 'MockAccount'";
+    return nullptr;
+}
+
 #endif
diff --git a/libgnucash/engine/mocks/gmock-Split.cpp b/libgnucash/engine/mocks/gmock-Split.cpp
index d33a44a1d..5db4cad97 100644
--- a/libgnucash/engine/mocks/gmock-Split.cpp
+++ b/libgnucash/engine/mocks/gmock-Split.cpp
@@ -30,31 +30,25 @@ gnc_mocksplit_class_init (MockSplitClass *klass)
 Split *
 xaccMallocSplit (QofBook *book)
 {
-    EXPECT_TRUE(QOF_IS_MOCKBOOK(book));
-    if (QOF_IS_MOCKBOOK(book))
-        return ((QofMockBook*)book)->malloc_split();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    QofMockBook* mockbook = qof_mockbook(book);
+    return mockbook ? mockbook->malloc_split() : nullptr;
 }
 
 QofBook *
 xaccSplitGetBook (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
-    if (GNC_IS_MOCKSPLIT(split))
-        return ((MockSplit*)split)->get_book();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockSplit* mocksplit = gnc_mocksplit(split);
+    return mocksplit ? mocksplit->get_book() : nullptr;
 }
 
 Account *
 xaccSplitGetAccount (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
-    if (GNC_IS_MOCKSPLIT(split))
-        return ((MockSplit*)split)->get_account();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockSplit* mocksplit = gnc_mocksplit(split);
+    return mocksplit ? mocksplit->get_account() : nullptr;
 }
 
 void
@@ -62,105 +56,91 @@ xaccSplitSetAccount (Split *split, Account *acc)
 {
     ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
     ASSERT_TRUE(GNC_IS_MOCKACCOUNT(acc));
-    ((MockSplit*)split)->set_account(acc);
+    gnc_mocksplit(split)->set_account(acc);
 }
 
 gnc_numeric
 xaccSplitGetAmount (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
-    if (GNC_IS_MOCKSPLIT(split))
-        return ((MockSplit*)split)->get_amount();
-    else
-        return gnc_numeric_zero();
+    SCOPED_TRACE("");
+    const MockSplit* mocksplit = gnc_mocksplit(split);
+    return mocksplit ? mocksplit->get_amount() : gnc_numeric_zero();
 }
 
 void
 xaccSplitSetAmount (Split *split, gnc_numeric amt)
 {
     ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
-    ((MockSplit*)split)->set_amount(amt);
+    gnc_mocksplit(split)->set_amount(amt);
 }
 
 gnc_numeric
 xaccSplitGetValue (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
-    if (GNC_IS_MOCKSPLIT(split))
-        return ((MockSplit*)split)->get_value();
-    else
-        return gnc_numeric_zero();
+    SCOPED_TRACE("");
+    const MockSplit* mocksplit = gnc_mocksplit(split);
+    return mocksplit ? mocksplit->get_value() : gnc_numeric_zero();
 }
 
 void
 xaccSplitSetValue (Split *split, gnc_numeric val)
 {
     ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
-    ((MockSplit*)split)->set_value(val);
+    gnc_mocksplit(split)->set_value(val);
 }
 
 const char *
 xaccSplitGetMemo (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
-    if (GNC_IS_MOCKSPLIT(split))
-        return ((MockSplit*)split)->get_memo();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockSplit* mocksplit = gnc_mocksplit(split);
+    return mocksplit ? mocksplit->get_memo() : "";
 }
 
 char
 xaccSplitGetReconcile (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
-    if (GNC_IS_MOCKSPLIT(split))
-        return ((MockSplit*)split)->get_reconcile();
-    else
-        return VREC;
+    SCOPED_TRACE("");
+    const MockSplit* mocksplit = gnc_mocksplit(split);
+    return mocksplit ? mocksplit->get_reconcile() : VREC;
 }
 
 void
 xaccSplitSetReconcile (Split *split, char recn)
 {
     ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
-    ((MockSplit*)split)->set_reconcile(recn);
+    gnc_mocksplit(split)->set_reconcile(recn);
 }
 
 void
 xaccSplitSetDateReconciledSecs (Split *split, time64 secs)
 {
     ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
-    ((MockSplit*)split)->set_date_reconciled_secs(secs);
+    gnc_mocksplit(split)->set_date_reconciled_secs(secs);
 }
 
 const char *
 xaccSplitGetAction (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
-    if (GNC_IS_MOCKSPLIT(split))
-        return ((MockSplit*)split)->get_action();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockSplit* mocksplit = gnc_mocksplit(split);
+    return mocksplit ? mocksplit->get_action() : "";
 }
 
 Split *
 xaccSplitGetOtherSplit (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
-    if (GNC_IS_MOCKSPLIT(split))
-        return ((MockSplit*)split)->get_other_split();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockSplit* mocksplit = gnc_mocksplit(split);
+    return mocksplit ? mocksplit->get_other_split() : nullptr;
 }
 
 Transaction *
 xaccSplitGetParent (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
-    if (GNC_IS_MOCKSPLIT(split))
-        return ((MockSplit*)split)->get_parent();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockSplit* mocksplit = gnc_mocksplit(split);
+    return mocksplit ? mocksplit->get_parent() : nullptr;
 }
 
 void
@@ -168,5 +148,5 @@ xaccSplitSetParent(Split *split, Transaction *trans)
 {
     ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
     ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    ((MockSplit*)split)->set_parent(trans);
+    gnc_mocksplit(split)->set_parent(trans);
 }
diff --git a/libgnucash/engine/mocks/gmock-Split.h b/libgnucash/engine/mocks/gmock-Split.h
index c8ed05ab4..b60da9387 100644
--- a/libgnucash/engine/mocks/gmock-Split.h
+++ b/libgnucash/engine/mocks/gmock-Split.h
@@ -82,4 +82,24 @@ protected:
     ~MockSplit() {}
 };
 
+
+// type conversion functions
+static inline MockSplit*
+gnc_mocksplit (Split *split)
+{
+    if (GNC_IS_MOCKSPLIT(split))
+        return static_cast<MockSplit*>(split);
+    ADD_FAILURE() << "Expected 'split' to be of type 'MockSplit'";
+    return nullptr;
+}
+
+static inline const MockSplit*
+gnc_mocksplit (const Split *split)
+{
+    if (GNC_IS_MOCKSPLIT(split))
+        return static_cast<const MockSplit*>(split);
+    ADD_FAILURE() << "Expected 'split' to be of type 'MockSplit'";
+    return nullptr;
+}
+
 #endif
diff --git a/libgnucash/engine/mocks/gmock-Transaction.cpp b/libgnucash/engine/mocks/gmock-Transaction.cpp
index 5310ef526..487a5b4d8 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@ -29,121 +29,105 @@ void
 xaccTransBeginEdit (Transaction *trans)
 {
     ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    ((MockTransaction*)trans)->begin_edit();
+    gnc_mocktransaction(trans)->begin_edit();
 }
 
 void
 xaccTransCommitEdit (Transaction *trans)
 {
     ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    ((MockTransaction*)trans)->commit_edit();
+    gnc_mocktransaction(trans)->commit_edit();
 }
 
 Split *
 xaccTransGetSplit (const Transaction *trans, int i)
 {
-    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    if (GNC_IS_MOCKTRANSACTION(trans))
-        return ((MockTransaction*)trans)->get_split(i);
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    return mocktrans ? mocktrans->get_split(i) : nullptr;
 }
 
 Split *
 xaccTransFindSplitByAccount(const Transaction *trans, const Account *acc)
 {
-    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    SCOPED_TRACE("");
+    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
     EXPECT_TRUE(GNC_IS_MOCKACCOUNT(acc));
-    if (GNC_IS_MOCKTRANSACTION(trans))
-        return ((MockTransaction*)trans)->find_split_by_account(acc);
-    else
-        return nullptr;
+    return mocktrans ? mocktrans->find_split_by_account(acc) : nullptr;
 }
 
 time64
 xaccTransGetDate (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    if (GNC_IS_MOCKTRANSACTION(trans))
-        return ((MockTransaction*)trans)->get_date();
-    else
-        return 0;
+    SCOPED_TRACE("");
+    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    return mocktrans ? mocktrans->get_date() : 0;
 }
 
 void
 xaccTransSetDatePostedSecsNormalized (Transaction *trans, time64 time)
 {
     ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    ((MockTransaction*)trans)->set_date_posted_secs_normalized(time);
+    gnc_mocktransaction(trans)->set_date_posted_secs_normalized(time);
 }
 
 const char *
 xaccTransGetDescription (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    if (GNC_IS_MOCKTRANSACTION(trans))
-        return ((MockTransaction*)trans)->get_description();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    return mocktrans ? mocktrans->get_description() : "";
 }
 
 void
 xaccTransSetDescription (Transaction *trans, const char *desc)
 {
     ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    ((MockTransaction*)trans)->set_description(desc);
+    gnc_mocktransaction(trans)->set_description(desc);
 }
 
 const char *
 xaccTransGetNotes (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    if (GNC_IS_MOCKTRANSACTION(trans))
-        return ((MockTransaction*)trans)->get_notes();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    return mocktrans ? mocktrans->get_notes() : "";
 }
 
 void
 xaccTransSetNotes (Transaction *trans, const char *notes)
 {
     ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    ((MockTransaction*)trans)->set_description(notes);
+    gnc_mocktransaction(trans)->set_description(notes);
 }
 
 gnc_numeric
 xaccTransGetImbalanceValue (const Transaction * trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    if (GNC_IS_MOCKTRANSACTION(trans))
-        return ((MockTransaction*)trans)->get_imbalance_value();
-    else
-        return gnc_numeric_zero();
+    SCOPED_TRACE("");
+    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    return mocktrans ? mocktrans->get_imbalance_value() : gnc_numeric_zero();
 }
 
 const char *
 xaccTransGetNum (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    if (GNC_IS_MOCKTRANSACTION(trans))
-        return ((MockTransaction*)trans)->get_num();
-    else
-        return nullptr;
+    SCOPED_TRACE("");
+    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    return mocktrans ? mocktrans->get_num() : "";
 }
 
 gboolean
 xaccTransIsOpen (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    if (GNC_IS_MOCKTRANSACTION(trans))
-        return ((MockTransaction*)trans)->is_open();
-    else
-        return FALSE;
+    SCOPED_TRACE("");
+    const MockTransaction* mocktrans = gnc_mocktransaction(trans);
+    return mocktrans ? mocktrans->is_open() : FALSE;
 }
 
 void
 xaccTransDestroy (Transaction *trans)
 {
     ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
-    ((MockTransaction*)trans)->destroy();
+    gnc_mocktransaction(trans)->destroy();
 }
diff --git a/libgnucash/engine/mocks/gmock-Transaction.h b/libgnucash/engine/mocks/gmock-Transaction.h
index 150f168a2..f0901fb1b 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.h
+++ b/libgnucash/engine/mocks/gmock-Transaction.h
@@ -70,4 +70,24 @@ protected:
     ~MockTransaction() {}
 };
 
+
+// type conversion functions
+static inline MockTransaction*
+gnc_mocktransaction (Transaction *trans)
+{
+    if (GNC_IS_MOCKTRANSACTION(trans))
+        return static_cast<MockTransaction*>(trans);
+    ADD_FAILURE() << "Expected 'trans' to be of type 'MockTransaction'";
+    return nullptr;
+}
+
+static inline const MockTransaction*
+gnc_mocktransaction (const Transaction *trans)
+{
+    if (GNC_IS_MOCKTRANSACTION(trans))
+        return static_cast<const MockTransaction*>(trans);
+    ADD_FAILURE() << "Expected 'trans' to be of type 'MockTransaction'";
+    return nullptr;
+}
+
 #endif
diff --git a/libgnucash/engine/mocks/gmock-qofbook.cpp b/libgnucash/engine/mocks/gmock-qofbook.cpp
index 72b755e69..17a7f0061 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.cpp
+++ b/libgnucash/engine/mocks/gmock-qofbook.cpp
@@ -23,7 +23,8 @@ qof_mockbook_class_init(QofMockBookClass *klass)
 gboolean
 qof_book_use_split_action_for_num_field (const QofBook *book)
 {
-    g_return_val_if_fail(QOF_IS_MOCKBOOK(book), FALSE);
-    return ((QofMockBook*)book)->use_split_action_for_num_field();
+    SCOPED_TRACE("");
+    const QofMockBook* mockbook = qof_mockbook(book);
+    return mockbook ? mockbook->use_split_action_for_num_field() : FALSE;
 }
 
diff --git a/libgnucash/engine/mocks/gmock-qofbook.h b/libgnucash/engine/mocks/gmock-qofbook.h
index 8be7cb331..035eb1a9c 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.h
+++ b/libgnucash/engine/mocks/gmock-qofbook.h
@@ -59,4 +59,25 @@ protected:
     ~QofMockBook() {}
 };
 
+
+// type conversion functions
+static inline QofMockBook*
+qof_mockbook (QofBook *book)
+{
+    if (QOF_IS_MOCKBOOK(book))
+        return static_cast<QofMockBook*>(book);
+    ADD_FAILURE() << "Expected 'book' to be of type 'QofMockBook'";
+    return nullptr;
+}
+
+static inline const QofMockBook*
+qof_mockbook (const QofBook *book)
+{
+    if (QOF_IS_MOCKBOOK(book))
+        return static_cast<const QofMockBook*>(book);
+    ADD_FAILURE() << "Expected 'book' to be of type 'QofMockBook'";
+    return nullptr;
+}
+
+
 #endif

commit b0906b5e2ac000255e6e9f58def36634edc93e0e
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Sun Sep 20 23:36:34 2020 +0200

    Use MOCK_CONST_METHODn() macro instead of MOCK_METHODn() macro if necessary

diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index ac5d9931b..9552301a5 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -41,8 +41,8 @@ public:
 
     MOCK_METHOD0(begin_edit, void());
     MOCK_METHOD0(commit_edit, void());
-    MOCK_METHOD0(get_book, QofMockBook*());
-    MOCK_METHOD2(for_each_transaction, gint(TransactionCallback, void*));
+    MOCK_CONST_METHOD0(get_book, QofMockBook*());
+    MOCK_CONST_METHOD2(for_each_transaction, gint(TransactionCallback, void*));
     MOCK_METHOD0(create_imap, GncImportMatchMap*());
 
 protected:
diff --git a/libgnucash/engine/mocks/gmock-Split.h b/libgnucash/engine/mocks/gmock-Split.h
index 5fe8b29e4..c8ed05ab4 100644
--- a/libgnucash/engine/mocks/gmock-Split.h
+++ b/libgnucash/engine/mocks/gmock-Split.h
@@ -60,20 +60,20 @@ public:
     }
 
     MOCK_METHOD0(init, void());
-    MOCK_METHOD0(get_book, QofBook *());
-    MOCK_METHOD0(get_account, Account *());
+    MOCK_CONST_METHOD0(get_book, QofBook *());
+    MOCK_CONST_METHOD0(get_account, Account *());
     MOCK_METHOD1(set_account, void(Account*));
-    MOCK_METHOD0(get_amount, gnc_numeric());
+    MOCK_CONST_METHOD0(get_amount, gnc_numeric());
     MOCK_METHOD1(set_amount, void(gnc_numeric));
-    MOCK_METHOD0(get_value, gnc_numeric());
+    MOCK_CONST_METHOD0(get_value, gnc_numeric());
     MOCK_METHOD1(set_value, void(gnc_numeric));
-    MOCK_METHOD0(get_memo, const char *());
-    MOCK_METHOD0(get_reconcile, char());
+    MOCK_CONST_METHOD0(get_memo, const char *());
+    MOCK_CONST_METHOD0(get_reconcile, char());
     MOCK_METHOD1(set_reconcile, void(char));
     MOCK_METHOD1(set_date_reconciled_secs, void(time64));
-    MOCK_METHOD0(get_action, const char *());
-    MOCK_METHOD0(get_other_split, Split *());
-    MOCK_METHOD0(get_parent, Transaction *());
+    MOCK_CONST_METHOD0(get_action, const char *());
+    MOCK_CONST_METHOD0(get_other_split, Split *());
+    MOCK_CONST_METHOD0(get_parent, Transaction *());
     MOCK_METHOD1(set_parent, void(Transaction*));
 
 protected:
diff --git a/libgnucash/engine/mocks/gmock-Transaction.h b/libgnucash/engine/mocks/gmock-Transaction.h
index 50d5ac9c5..150f168a2 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.h
+++ b/libgnucash/engine/mocks/gmock-Transaction.h
@@ -51,17 +51,17 @@ public:
 
     MOCK_METHOD0(begin_edit, void());
     MOCK_METHOD0(commit_edit, void());
-    MOCK_METHOD1(get_split, Split *(int));
-    MOCK_METHOD1(find_split_by_account, Split *(const Account*));
-    MOCK_METHOD0(get_date, time64());
+    MOCK_CONST_METHOD1(get_split, Split *(int));
+    MOCK_CONST_METHOD1(find_split_by_account, Split *(const Account*));
+    MOCK_CONST_METHOD0(get_date, time64());
     MOCK_METHOD1(set_date_posted_secs_normalized, void(time64));
-    MOCK_METHOD0(get_description, const char *());
+    MOCK_CONST_METHOD0(get_description, const char *());
     MOCK_METHOD1(set_description, void(const char*));
-    MOCK_METHOD0(get_notes, const char *());
+    MOCK_CONST_METHOD0(get_notes, const char *());
     MOCK_METHOD1(set_notes, void(const char*));
-    MOCK_METHOD0(get_imbalance_value, gnc_numeric());
-    MOCK_METHOD0(get_num, const char *());
-    MOCK_METHOD0(is_open, gboolean());
+    MOCK_CONST_METHOD0(get_imbalance_value, gnc_numeric());
+    MOCK_CONST_METHOD0(get_num, const char *());
+    MOCK_CONST_METHOD0(is_open, gboolean());
     MOCK_METHOD0(destroy, void());
 
 protected:
diff --git a/libgnucash/engine/mocks/gmock-qofbook.h b/libgnucash/engine/mocks/gmock-qofbook.h
index c51c3c3d9..8be7cb331 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.h
+++ b/libgnucash/engine/mocks/gmock-qofbook.h
@@ -51,7 +51,7 @@ public:
     }
 
     MOCK_METHOD0(malloc_split, Split *());
-    MOCK_METHOD0(use_split_action_for_num_field, gboolean());
+    MOCK_CONST_METHOD0(use_split_action_for_num_field, gboolean());
 
 protected:
     // Protect destructor to avoid MockQofBook objects to be created on stack. MockQofBook

commit 5408854c28aa9bb47a243eed887b4bcfdc5eb049
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Sun Sep 20 22:33:51 2020 +0200

    Rename GObject type names of mock classes
    
    According to a remark in PR #738 the lower case type name is changed.
    Underscores should only be used between namespace and type name and
    between type name and suffixes.

diff --git a/libgnucash/engine/mocks/fake-qofquery.cpp b/libgnucash/engine/mocks/fake-qofquery.cpp
index d8eca210a..dc8445d4d 100644
--- a/libgnucash/engine/mocks/fake-qofquery.cpp
+++ b/libgnucash/engine/mocks/fake-qofquery.cpp
@@ -119,7 +119,7 @@ void
 qof_query_set_book (QofQuery *query, QofBook *book)
 {
     ASSERT_TRUE(queryPool.query_used(query));
-    ASSERT_TRUE(QOF_IS_MOCK_BOOK(book));
+    ASSERT_TRUE(QOF_IS_MOCKBOOK(book));
     ((QofFakeQuery*)query)->set_book(book);
 }
 
diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index 74a7a5b74..c25b1157f 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -9,16 +9,16 @@ struct _MockAccountClass
 };
 typedef struct _MockAccountClass MockAccountClass;
 
-G_DEFINE_TYPE(MockAccount, gnc_mock_account, QOF_TYPE_INSTANCE);
+G_DEFINE_TYPE(MockAccount, gnc_mockaccount, QOF_TYPE_INSTANCE);
 
 static void
-gnc_mock_account_init (MockAccount *inst)
+gnc_mockaccount_init (MockAccount *inst)
 {
     // function is unused, initialization is done in the MockAccount's C++ constructor
 }
 
 static void
-gnc_mock_account_class_init(MockAccountClass *klass)
+gnc_mockaccount_class_init(MockAccountClass *klass)
 {
     // function is unused, class functions are defined in C++ code
 }
@@ -26,22 +26,22 @@ gnc_mock_account_class_init(MockAccountClass *klass)
 void
 xaccAccountBeginEdit (Account *account)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_ACCOUNT(account));
+    ASSERT_TRUE(GNC_IS_MOCKACCOUNT(account));
     ((MockAccount*)account)->begin_edit();
 }
 
 void
 xaccAccountCommitEdit (Account *account)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_ACCOUNT(account));
+    ASSERT_TRUE(GNC_IS_MOCKACCOUNT(account));
     ((MockAccount*)account)->commit_edit();
 }
 
 QofBook *
 gnc_account_get_book(const Account *account)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(account));
-    if (GNC_IS_MOCK_ACCOUNT(account))
+    EXPECT_TRUE(GNC_IS_MOCKACCOUNT(account));
+    if (GNC_IS_MOCKACCOUNT(account))
         return ((MockAccount*)account)->get_book();
     else
         return nullptr;
@@ -51,8 +51,8 @@ gint
 xaccAccountForEachTransaction(const Account *acc, TransactionCallback proc,
                               void *data)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
-    if (GNC_IS_MOCK_ACCOUNT(acc))
+    EXPECT_TRUE(GNC_IS_MOCKACCOUNT(acc));
+    if (GNC_IS_MOCKACCOUNT(acc))
         return ((MockAccount*)acc)->for_each_transaction(proc, data);
     else
         return 0;
@@ -61,8 +61,8 @@ xaccAccountForEachTransaction(const Account *acc, TransactionCallback proc,
 GncImportMatchMap *
 gnc_account_imap_create_imap (Account *acc)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
-    if (GNC_IS_MOCK_ACCOUNT(acc))
+    EXPECT_TRUE(GNC_IS_MOCKACCOUNT(acc));
+    if (GNC_IS_MOCKACCOUNT(acc))
         return ((MockAccount*)acc)->create_imap();
     else
         return nullptr;
diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index 360a8059e..ac5d9931b 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -10,10 +10,10 @@
 #include "gmock-gobject.h"
 
 
-GType gnc_mock_account_get_type(void);
+GType gnc_mockaccount_get_type(void);
 
-#define GNC_TYPE_MOCK_ACCOUNT   (gnc_mock_account_get_type ())
-#define GNC_IS_MOCK_ACCOUNT(o)  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_MOCK_ACCOUNT))
+#define GNC_TYPE_MOCKACCOUNT   (gnc_mockaccount_get_type ())
+#define GNC_IS_MOCKACCOUNT(o)  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_MOCKACCOUNT))
 
 
 // mock up for Account
@@ -26,7 +26,7 @@ public:
     MockAccount() {}
     void* operator new(size_t size)
     {
-        return mock_g_object_new (GNC_TYPE_MOCK_ACCOUNT, NULL, size);
+        return mock_g_object_new (GNC_TYPE_MOCKACCOUNT, NULL, size);
     }
 
     // define separate free() function since destructor is protected
diff --git a/libgnucash/engine/mocks/gmock-Split.cpp b/libgnucash/engine/mocks/gmock-Split.cpp
index 7156ff4fe..d33a44a1d 100644
--- a/libgnucash/engine/mocks/gmock-Split.cpp
+++ b/libgnucash/engine/mocks/gmock-Split.cpp
@@ -12,16 +12,16 @@ struct _MockSplitClass
 };
 typedef struct _MockSplitClass MockSplitClass;
 
-G_DEFINE_TYPE(MockSplit, gnc_mock_split, QOF_TYPE_INSTANCE);
+G_DEFINE_TYPE(MockSplit, gnc_mocksplit, QOF_TYPE_INSTANCE);
 
 static void
-gnc_mock_split_init (MockSplit *inst)
+gnc_mocksplit_init (MockSplit *inst)
 {
     // function is unused, initialization is done in the MockSplit's C++ constructor
 }
 
 static void
-gnc_mock_split_class_init (MockSplitClass *klass)
+gnc_mocksplit_class_init (MockSplitClass *klass)
 {
     // function is unused, class functions are defined in C++ code
 }
@@ -30,8 +30,8 @@ gnc_mock_split_class_init (MockSplitClass *klass)
 Split *
 xaccMallocSplit (QofBook *book)
 {
-    EXPECT_TRUE(QOF_IS_MOCK_BOOK(book));
-    if (QOF_IS_MOCK_BOOK(book))
+    EXPECT_TRUE(QOF_IS_MOCKBOOK(book));
+    if (QOF_IS_MOCKBOOK(book))
         return ((QofMockBook*)book)->malloc_split();
     else
         return nullptr;
@@ -40,8 +40,8 @@ xaccMallocSplit (QofBook *book)
 QofBook *
 xaccSplitGetBook (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    if (GNC_IS_MOCK_SPLIT(split))
+    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
+    if (GNC_IS_MOCKSPLIT(split))
         return ((MockSplit*)split)->get_book();
     else
         return nullptr;
@@ -50,8 +50,8 @@ xaccSplitGetBook (const Split *split)
 Account *
 xaccSplitGetAccount (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    if (GNC_IS_MOCK_SPLIT(split))
+    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
+    if (GNC_IS_MOCKSPLIT(split))
         return ((MockSplit*)split)->get_account();
     else
         return nullptr;
@@ -60,16 +60,16 @@ xaccSplitGetAccount (const Split *split)
 void
 xaccSplitSetAccount (Split *split, Account *acc)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    ASSERT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
+    ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCKACCOUNT(acc));
     ((MockSplit*)split)->set_account(acc);
 }
 
 gnc_numeric
 xaccSplitGetAmount (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    if (GNC_IS_MOCK_SPLIT(split))
+    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
+    if (GNC_IS_MOCKSPLIT(split))
         return ((MockSplit*)split)->get_amount();
     else
         return gnc_numeric_zero();
@@ -78,15 +78,15 @@ xaccSplitGetAmount (const Split *split)
 void
 xaccSplitSetAmount (Split *split, gnc_numeric amt)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
     ((MockSplit*)split)->set_amount(amt);
 }
 
 gnc_numeric
 xaccSplitGetValue (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    if (GNC_IS_MOCK_SPLIT(split))
+    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
+    if (GNC_IS_MOCKSPLIT(split))
         return ((MockSplit*)split)->get_value();
     else
         return gnc_numeric_zero();
@@ -95,15 +95,15 @@ xaccSplitGetValue (const Split *split)
 void
 xaccSplitSetValue (Split *split, gnc_numeric val)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
     ((MockSplit*)split)->set_value(val);
 }
 
 const char *
 xaccSplitGetMemo (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    if (GNC_IS_MOCK_SPLIT(split))
+    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
+    if (GNC_IS_MOCKSPLIT(split))
         return ((MockSplit*)split)->get_memo();
     else
         return nullptr;
@@ -112,8 +112,8 @@ xaccSplitGetMemo (const Split *split)
 char
 xaccSplitGetReconcile (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    if (GNC_IS_MOCK_SPLIT(split))
+    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
+    if (GNC_IS_MOCKSPLIT(split))
         return ((MockSplit*)split)->get_reconcile();
     else
         return VREC;
@@ -122,22 +122,22 @@ xaccSplitGetReconcile (const Split *split)
 void
 xaccSplitSetReconcile (Split *split, char recn)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
     ((MockSplit*)split)->set_reconcile(recn);
 }
 
 void
 xaccSplitSetDateReconciledSecs (Split *split, time64 secs)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
     ((MockSplit*)split)->set_date_reconciled_secs(secs);
 }
 
 const char *
 xaccSplitGetAction (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    if (GNC_IS_MOCK_SPLIT(split))
+    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
+    if (GNC_IS_MOCKSPLIT(split))
         return ((MockSplit*)split)->get_action();
     else
         return nullptr;
@@ -146,8 +146,8 @@ xaccSplitGetAction (const Split *split)
 Split *
 xaccSplitGetOtherSplit (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    if (GNC_IS_MOCK_SPLIT(split))
+    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
+    if (GNC_IS_MOCKSPLIT(split))
         return ((MockSplit*)split)->get_other_split();
     else
         return nullptr;
@@ -156,8 +156,8 @@ xaccSplitGetOtherSplit (const Split *split)
 Transaction *
 xaccSplitGetParent (const Split *split)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    if (GNC_IS_MOCK_SPLIT(split))
+    EXPECT_TRUE(GNC_IS_MOCKSPLIT(split));
+    if (GNC_IS_MOCKSPLIT(split))
         return ((MockSplit*)split)->get_parent();
     else
         return nullptr;
@@ -166,7 +166,7 @@ xaccSplitGetParent (const Split *split)
 void
 xaccSplitSetParent(Split *split, Transaction *trans)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCKSPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
     ((MockSplit*)split)->set_parent(trans);
 }
diff --git a/libgnucash/engine/mocks/gmock-Split.h b/libgnucash/engine/mocks/gmock-Split.h
index 9ff7dfd63..5fe8b29e4 100644
--- a/libgnucash/engine/mocks/gmock-Split.h
+++ b/libgnucash/engine/mocks/gmock-Split.h
@@ -10,10 +10,10 @@
 #include "gmock-gobject.h"
 
 
-GType gnc_mock_split_get_type(void);
+GType gnc_mocksplit_get_type(void);
 
-#define GNC_TYPE_MOCK_SPLIT   (gnc_mock_split_get_type ())
-#define GNC_IS_MOCK_SPLIT(o)  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_MOCK_SPLIT))
+#define GNC_TYPE_MOCKSPLIT   (gnc_mocksplit_get_type ())
+#define GNC_IS_MOCKSPLIT(o)  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_MOCKSPLIT))
 
 
 // mock up for Split
@@ -46,7 +46,7 @@ public:
     }
     void* operator new(size_t size)
     {
-        return mock_g_object_new (GNC_TYPE_MOCK_SPLIT, NULL, size);
+        return mock_g_object_new (GNC_TYPE_MOCKSPLIT, NULL, size);
     }
 
     // define separate free() function since destructor is protected
diff --git a/libgnucash/engine/mocks/gmock-Transaction.cpp b/libgnucash/engine/mocks/gmock-Transaction.cpp
index 4bb176375..5310ef526 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@ -10,16 +10,16 @@ struct _MockTransactionClass
 };
 typedef struct _MockTransactionClass MockTransactionClass;
 
-G_DEFINE_TYPE(MockTransaction, gnc_mock_transaction, QOF_TYPE_INSTANCE);
+G_DEFINE_TYPE(MockTransaction, gnc_mocktransaction, QOF_TYPE_INSTANCE);
 
 static void
-gnc_mock_transaction_init (MockTransaction *inst)
+gnc_mocktransaction_init (MockTransaction *inst)
 {
     // function is unused, initialization is done in the MockTransaction's C++ constructor
 }
 
 static void
-gnc_mock_transaction_class_init(MockTransactionClass *klass)
+gnc_mocktransaction_class_init(MockTransactionClass *klass)
 {
     // function is unused, class functions are defined in C++ code
 }
@@ -28,22 +28,22 @@ gnc_mock_transaction_class_init(MockTransactionClass *klass)
 void
 xaccTransBeginEdit (Transaction *trans)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
     ((MockTransaction*)trans)->begin_edit();
 }
 
 void
 xaccTransCommitEdit (Transaction *trans)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
     ((MockTransaction*)trans)->commit_edit();
 }
 
 Split *
 xaccTransGetSplit (const Transaction *trans, int i)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    if (GNC_IS_MOCK_TRANSACTION(trans))
+    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    if (GNC_IS_MOCKTRANSACTION(trans))
         return ((MockTransaction*)trans)->get_split(i);
     else
         return nullptr;
@@ -52,9 +52,9 @@ xaccTransGetSplit (const Transaction *trans, int i)
 Split *
 xaccTransFindSplitByAccount(const Transaction *trans, const Account *acc)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
-    if (GNC_IS_MOCK_TRANSACTION(trans))
+    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    EXPECT_TRUE(GNC_IS_MOCKACCOUNT(acc));
+    if (GNC_IS_MOCKTRANSACTION(trans))
         return ((MockTransaction*)trans)->find_split_by_account(acc);
     else
         return nullptr;
@@ -63,8 +63,8 @@ xaccTransFindSplitByAccount(const Transaction *trans, const Account *acc)
 time64
 xaccTransGetDate (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    if (GNC_IS_MOCK_TRANSACTION(trans))
+    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    if (GNC_IS_MOCKTRANSACTION(trans))
         return ((MockTransaction*)trans)->get_date();
     else
         return 0;
@@ -73,15 +73,15 @@ xaccTransGetDate (const Transaction *trans)
 void
 xaccTransSetDatePostedSecsNormalized (Transaction *trans, time64 time)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
     ((MockTransaction*)trans)->set_date_posted_secs_normalized(time);
 }
 
 const char *
 xaccTransGetDescription (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    if (GNC_IS_MOCK_TRANSACTION(trans))
+    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    if (GNC_IS_MOCKTRANSACTION(trans))
         return ((MockTransaction*)trans)->get_description();
     else
         return nullptr;
@@ -90,15 +90,15 @@ xaccTransGetDescription (const Transaction *trans)
 void
 xaccTransSetDescription (Transaction *trans, const char *desc)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
     ((MockTransaction*)trans)->set_description(desc);
 }
 
 const char *
 xaccTransGetNotes (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    if (GNC_IS_MOCK_TRANSACTION(trans))
+    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    if (GNC_IS_MOCKTRANSACTION(trans))
         return ((MockTransaction*)trans)->get_notes();
     else
         return nullptr;
@@ -107,15 +107,15 @@ xaccTransGetNotes (const Transaction *trans)
 void
 xaccTransSetNotes (Transaction *trans, const char *notes)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
     ((MockTransaction*)trans)->set_description(notes);
 }
 
 gnc_numeric
 xaccTransGetImbalanceValue (const Transaction * trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    if (GNC_IS_MOCK_TRANSACTION(trans))
+    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    if (GNC_IS_MOCKTRANSACTION(trans))
         return ((MockTransaction*)trans)->get_imbalance_value();
     else
         return gnc_numeric_zero();
@@ -124,8 +124,8 @@ xaccTransGetImbalanceValue (const Transaction * trans)
 const char *
 xaccTransGetNum (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    if (GNC_IS_MOCK_TRANSACTION(trans))
+    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    if (GNC_IS_MOCKTRANSACTION(trans))
         return ((MockTransaction*)trans)->get_num();
     else
         return nullptr;
@@ -134,8 +134,8 @@ xaccTransGetNum (const Transaction *trans)
 gboolean
 xaccTransIsOpen (const Transaction *trans)
 {
-    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    if (GNC_IS_MOCK_TRANSACTION(trans))
+    EXPECT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
+    if (GNC_IS_MOCKTRANSACTION(trans))
         return ((MockTransaction*)trans)->is_open();
     else
         return FALSE;
@@ -144,6 +144,6 @@ xaccTransIsOpen (const Transaction *trans)
 void
 xaccTransDestroy (Transaction *trans)
 {
-    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCKTRANSACTION(trans));
     ((MockTransaction*)trans)->destroy();
 }
diff --git a/libgnucash/engine/mocks/gmock-Transaction.h b/libgnucash/engine/mocks/gmock-Transaction.h
index d40850ee6..50d5ac9c5 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.h
+++ b/libgnucash/engine/mocks/gmock-Transaction.h
@@ -10,10 +10,10 @@
 #include "gmock-gobject.h"
 
 
-GType gnc_mock_transaction_get_type(void);
+GType gnc_mocktransaction_get_type(void);
 
-#define GNC_TYPE_MOCK_TRANSACTION   (gnc_mock_transaction_get_type ())
-#define GNC_IS_MOCK_TRANSACTION(o)  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_MOCK_TRANSACTION))
+#define GNC_TYPE_MOCKTRANSACTION   (gnc_mocktransaction_get_type ())
+#define GNC_IS_MOCKTRANSACTION(o)  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_MOCKTRANSACTION))
 
 
 // mock up for Transaction
@@ -36,7 +36,7 @@ public:
     }
     void* operator new(size_t size)
     {
-        return mock_g_object_new (GNC_TYPE_MOCK_TRANSACTION, NULL, size);
+        return mock_g_object_new (GNC_TYPE_MOCKTRANSACTION, NULL, size);
     }
 
     // define separate free() function since destructor is protected
diff --git a/libgnucash/engine/mocks/gmock-qofbook.cpp b/libgnucash/engine/mocks/gmock-qofbook.cpp
index ad186f863..72b755e69 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.cpp
+++ b/libgnucash/engine/mocks/gmock-qofbook.cpp
@@ -6,16 +6,16 @@ struct _QofMockBookClass
 };
 typedef struct _QofMockBookClass QofMockBookClass;
 
-G_DEFINE_TYPE(QofMockBook, qof_mock_book, QOF_TYPE_INSTANCE);
+G_DEFINE_TYPE(QofMockBook, qof_mockbook, QOF_TYPE_INSTANCE);
 
 static void
-qof_mock_book_init (QofMockBook *inst)
+qof_mockbook_init (QofMockBook *inst)
 {
     // function is unused, initialization is done in the QofMockBook's C++ constructor
 }
 
 static void
-qof_mock_book_class_init(QofMockBookClass *klass)
+qof_mockbook_class_init(QofMockBookClass *klass)
 {
     // function is unused, class functions are defined in C++ code
 }
@@ -23,7 +23,7 @@ qof_mock_book_class_init(QofMockBookClass *klass)
 gboolean
 qof_book_use_split_action_for_num_field (const QofBook *book)
 {
-    g_return_val_if_fail(QOF_IS_MOCK_BOOK(book), FALSE);
+    g_return_val_if_fail(QOF_IS_MOCKBOOK(book), FALSE);
     return ((QofMockBook*)book)->use_split_action_for_num_field();
 }
 
diff --git a/libgnucash/engine/mocks/gmock-qofbook.h b/libgnucash/engine/mocks/gmock-qofbook.h
index 9b4b5cd67..c51c3c3d9 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.h
+++ b/libgnucash/engine/mocks/gmock-qofbook.h
@@ -10,10 +10,10 @@
 #include "gmock-Split.h"
 
 
-GType qof_mock_book_get_type(void);
+GType qof_mockbook_get_type(void);
 
-#define QOF_TYPE_MOCK_BOOK   (qof_mock_book_get_type ())
-#define QOF_IS_MOCK_BOOK(o)  (G_TYPE_CHECK_INSTANCE_TYPE ((o), QOF_TYPE_MOCK_BOOK))
+#define QOF_TYPE_MOCKBOOK   (qof_mockbook_get_type ())
+#define QOF_IS_MOCKBOOK(o)  (G_TYPE_CHECK_INSTANCE_TYPE ((o), QOF_TYPE_MOCKBOOK))
 
 
 // mock up for QofBook
@@ -37,7 +37,7 @@ public:
     }
     void* operator new(size_t size)
     {
-        return mock_g_object_new (QOF_TYPE_MOCK_BOOK, NULL, size);
+        return mock_g_object_new (QOF_TYPE_MOCKBOOK, NULL, size);
     }
 
     // define separate free() function since destructor is protected

commit 41c147a91803b93a891c9a4da1f29b1fd7d302fa
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Mon Aug 24 23:31:08 2020 +0200

    Use /* ... */ for multi-line comments

diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index e5c6d8a94..360a8059e 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -20,9 +20,9 @@ GType gnc_mock_account_get_type(void);
 class MockAccount : public Account
 {
 public:
-    // note: don't use default constructor instead of empty constructor, since
-    // it does zero initialization, which would overwrite GObject
-    // initialization, which is already done in the new operator.
+    /* note: don't use default constructor instead of empty constructor, since
+     * it does zero initialization, which would overwrite GObject
+     * initialization, which is already done in the new operator. */
     MockAccount() {}
     void* operator new(size_t size)
     {
@@ -46,8 +46,8 @@ public:
     MOCK_METHOD0(create_imap, GncImportMatchMap*());
 
 protected:
-    // Protect destructor to avoid MockAccount objects to be created on stack. MockAccount
-    // objects can only be dynamically created, since they are derived from GObject.
+    /* Protect destructor to avoid MockAccount objects to be created on stack. MockAccount
+     * objects can only be dynamically created, since they are derived from GObject. */
     ~MockAccount() {}
 };
 

commit df6621f2b54aa488468ac64f6147572cb1f50eb4
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Fri Jul 10 23:50:10 2020 +0200

    Add doxygen documentation to QofFakeQuery and QofFakeQueryPool

diff --git a/libgnucash/engine/mocks/fake-qofquery.cpp b/libgnucash/engine/mocks/fake-qofquery.cpp
index a6479040c..d8eca210a 100644
--- a/libgnucash/engine/mocks/fake-qofquery.cpp
+++ b/libgnucash/engine/mocks/fake-qofquery.cpp
@@ -1,3 +1,7 @@
+/**
+ * @file fake-qofquery.cpp
+*/
+
 #include <config.h>
 
 #include <list>
@@ -12,11 +16,14 @@
 static class QofFakeQueryPool
 {
 public:
+
+    /* Add QofFakeQuery object to the pool */
     void add_query(QofFakeQuery *query)
     {
         m_queriesNew.push_back(query);
     }
 
+    /* Request to use a QofFakeQuery object */
     QofFakeQuery* request_query(QofIdTypeConst obj_type)
     {
         QofFakeQuery* query = nullptr;
@@ -36,6 +43,8 @@ public:
         return query;
     }
 
+    /* Check if a QofFakeQuery object is currently used, i.e. it has been
+     * requested before */
     bool query_used(QofQuery *query)
     {
         auto it = std::find(m_queriesUsed.begin(), m_queriesUsed.end(), (QofFakeQuery*)query);
@@ -43,6 +52,8 @@ public:
         return (it != m_queriesUsed.end());
     }
 
+    /* Release a formerly requested QofFakeQuery object, which is not used
+     * anymore */
     void release_query(QofFakeQuery *query)
     {
         ASSERT_TRUE(query_used((QofQuery*)query));
@@ -51,6 +62,7 @@ public:
         m_queriesConsumed.push_back(*it);
     }
 
+    /* Remove a formerly added QofFakeQueryObject from the pool */
     void remove_query(QofFakeQuery *query)
     {
         ASSERT_FALSE(query_used((QofQuery*)query));
diff --git a/libgnucash/engine/mocks/fake-qofquery.h b/libgnucash/engine/mocks/fake-qofquery.h
index 13a5df2bd..803f56dbd 100644
--- a/libgnucash/engine/mocks/fake-qofquery.h
+++ b/libgnucash/engine/mocks/fake-qofquery.h
@@ -1,3 +1,9 @@
+/**
+ * @file fake-qofquery.h
+ *
+ * @brief Mocking qof queries
+*/
+
 #ifndef FAKE_QOFQUERY_H
 #define FAKE_QOFQUERY_H
 
@@ -10,8 +16,44 @@ extern "C"
 #include <Query.h>
 }
 
-// Fake object providing functionality similar to QofQuery
-// Note: QofQuery is a typedef for struct _QofQuery, which is is not public
+/** Fake object providing functionality similar to QofQuery
+ *
+ * @note QofQuery is a @c typedef for @c struct _QofQuery, which is not
+ * public. Therefore class QofFakeQuery is not derived from QofQuery.
+ *
+ * To use a QofFakeQuery object simply create it before the GnuCash code
+ * performs a query. Check that the QofFakeQuery object is created with the
+ * correct object type. Also define all expectations and return values on the
+ * created QofFakeQuery object before the GnuCash code performs the query.
+ *
+ * After the query is finished, the QofFakeQuery object can be destroyed. A
+ * QofFakeQuery object can only be used once.
+ *
+ * Internally each created QofFakeQuery object is registered at a
+ * QofFakeQueryPool, which provides it to the GnuCash code on request. This
+ * pool observes the life-cycle of each QofFakeQuery object. The following
+ * steps are expected to be done on each QofFakeQuery object in the
+ * specified order:
+ *    -# create QofFakeQuery object (test application)
+ *    -# call qof_query_create_for() (GnuCash code)
+ *    -# call qof_query_run() (GnuCash code)
+ *    -# call qof_query_destroy() (GnuCash code)
+ *    -# destroy QofFakeQuery object (test application)
+ *
+ * The calls to qof_query_create_for(), qof_query_run() and qof_query_destroy()
+ * are optional, but
+ *    -  qof_query_create_for() and qof_query_destroy() have to be called in
+ *       pairs
+ *    -  if qof_query_run() is called, qof_query_create_for() has to be called
+ *       before as well
+ *
+ * Several GTest assertions are implemented to signal violations of the
+ * QofFakeQuery object life-cycle.
+ *
+ * @note If you want to check, that a certain query is run by the GnuCash code,
+ * then define the appropriate expectations on the QofFakeQuery object in your
+ * test application.
+ */
 class QofFakeQuery
 {
 public:

commit 861a2482fe72786c3a6023b4d496fb781fb34836
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Fri Jul 10 23:03:01 2020 +0200

    Add a comment on using empty ctor for mock classes derived from GObjects

diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index 9908b1e32..e5c6d8a94 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -20,6 +20,9 @@ GType gnc_mock_account_get_type(void);
 class MockAccount : public Account
 {
 public:
+    // note: don't use default constructor instead of empty constructor, since
+    // it does zero initialization, which would overwrite GObject
+    // initialization, which is already done in the new operator.
     MockAccount() {}
     void* operator new(size_t size)
     {

commit 3d92d539176e80cc5630729e02a81b57fe0e39a6
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Thu Jul 9 21:36:01 2020 +0200

    Rename all class methods using snake_case instead of camelCase

diff --git a/gnucash/import-export/test/gtest-import-backend.cpp b/gnucash/import-export/test/gtest-import-backend.cpp
index c175cea99..5adb2adf9 100644
--- a/gnucash/import-export/test/gtest-import-backend.cpp
+++ b/gnucash/import-export/test/gtest-import-backend.cpp
@@ -130,7 +130,7 @@ protected:
         using namespace testing;
 
         // define behaviour of m_import_acc
-        ON_CALL(*m_import_acc, getBook())
+        ON_CALL(*m_import_acc, get_book())
             .WillByDefault(Return(((TestEnvironment*)env)->m_book));
     }
 
@@ -164,14 +164,14 @@ TEST_F(ImportBackendTest, CreateTransInfo)
     //qof_instance_get (QOF_INSTANCE (split), "online-id", &online_id, NULL);
 
     // Define first split
-    ON_CALL(*m_trans, getSplit(0))
+    ON_CALL(*m_trans, get_split(0))
         .WillByDefault(Return(m_split));
     // define description of the transaction
-    ON_CALL(*m_trans, getDescription())
+    ON_CALL(*m_trans, get_description())
         .WillByDefault(Return("This is the description"));
 
     // function gnc_import_TransInfo_new() should try to find account using the description from the transaction
-    EXPECT_CALL(imap, findAccount(_, StrEq("This is the description")))
+    EXPECT_CALL(imap, find_account(_, StrEq("This is the description")))
         .WillOnce(Return(m_dest_acc));
 
     // call function to be tested
@@ -182,7 +182,7 @@ TEST_F(ImportBackendTest, CreateTransInfo)
     EXPECT_EQ(gnc_import_TransInfo_get_destacc(trans_info), m_dest_acc);
 
     // transaction is not open anymore
-    ON_CALL(*m_trans, isOpen())
+    ON_CALL(*m_trans, is_open())
         .WillByDefault(Return(false));
 
     // delete transaction info
@@ -202,7 +202,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, get_bool(StrEq(GNC_PREFS_GROUP_IMPORT), StrEq(GNC_PREF_USE_BAYES)))
             .WillByDefault(Return(true));
     }
 
@@ -232,10 +232,10 @@ TEST_F(ImportBackendBayesTest, CreateTransInfo)
     gnc_tm_free(tm_struct);
 
     // Define first split
-    ON_CALL(*m_trans, getSplit(0))
+    ON_CALL(*m_trans, get_split(0))
         .WillByDefault(Return(m_split));
     // Transaction has no further splits
-    ON_CALL(*m_trans, getSplit(Gt(0)))
+    ON_CALL(*m_trans, get_split(Gt(0)))
         .WillByDefault(Return(nullptr));
     // Define description and memo of first split
     // This transaction is used for testing tokenization of its content.
@@ -244,16 +244,16 @@ TEST_F(ImportBackendBayesTest, CreateTransInfo)
     //   * separators at the beginning and end of string
     //   * duplicated tokens within and between description text end memo
     // The token separator is space.
-    ON_CALL(*m_trans, getDescription())
+    ON_CALL(*m_trans, get_description())
         .WillByDefault(Return(" test  tokens within   description  tokens  "));
-    ON_CALL(*m_split, getMemo())
+    ON_CALL(*m_split, get_memo())
         .WillByDefault(Return("  test   the memo test "));
     // Define transaction date
-    ON_CALL(*m_trans, getDate())
+    ON_CALL(*m_trans, get_date())
         .WillByDefault(Return(date));
 
     // check tokens created from transaction
-    EXPECT_CALL(imap, findAccountBayes(AllOf(
+    EXPECT_CALL(imap, find_account_bayes(AllOf(
             Each(Not(StrEq(""))),                // tokens must not be empty strings
             Each(Not(HasSubstr(" "))),           // tokens must not contain separator
             Not(HasDuplicates()),                // tokens must be unique
@@ -271,7 +271,7 @@ TEST_F(ImportBackendBayesTest, CreateTransInfo)
     EXPECT_EQ(gnc_import_TransInfo_get_destacc(trans_info), m_dest_acc);
 
     // transaction is not open anymore
-    ON_CALL(*m_trans, isOpen())
+    ON_CALL(*m_trans, is_open())
         .WillByDefault(Return(false));
 
     // delete transaction info
diff --git a/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp b/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
index 0bb403874..d9e090068 100644
--- a/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
+++ b/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
@@ -14,42 +14,42 @@ gboolean
 gnc_prefs_get_bool (const gchar *group, const gchar *pref_name)
 {
     EXPECT_NE(prefsbackend, nullptr);
-    return prefsbackend ? prefsbackend->getBool(group, pref_name) : FALSE;
+    return prefsbackend ? prefsbackend->get_bool(group, pref_name) : FALSE;
 }
 
 gint
 gnc_prefs_get_int (const gchar *group, const gchar *pref_name)
 {
     EXPECT_NE(prefsbackend, nullptr);
-    return prefsbackend ? prefsbackend->getInt(group, pref_name) : 0;
+    return prefsbackend ? prefsbackend->get_int(group, pref_name) : 0;
 }
 
 gint64
 gnc_prefs_get_int64 (const gchar *group, const gchar *pref_name)
 {
     EXPECT_NE(prefsbackend, nullptr);
-    return prefsbackend ? prefsbackend->getInt64(group, pref_name) : 0;
+    return prefsbackend ? prefsbackend->get_int64(group, pref_name) : 0;
 }
 
 gdouble
 gnc_prefs_get_float (const gchar *group, const gchar *pref_name)
 {
     EXPECT_NE(prefsbackend, nullptr);
-    return prefsbackend ? prefsbackend->getFloat(group, pref_name) : 0.0;
+    return prefsbackend ? prefsbackend->get_float(group, pref_name) : 0.0;
 }
 
 gchar *
 gnc_prefs_get_string (const gchar *group, const gchar *pref_name)
 {
     EXPECT_NE(prefsbackend, nullptr);
-    return prefsbackend ? prefsbackend->getString(group, pref_name) : NULL;
+    return prefsbackend ? prefsbackend->get_string(group, pref_name) : NULL;
 }
 
 gint
 gnc_prefs_get_enum (const gchar *group, const gchar *pref_name)
 {
     EXPECT_NE(prefsbackend, nullptr);
-    return prefsbackend ? prefsbackend->getEnum(group, pref_name) : 0;
+    return prefsbackend ? prefsbackend->get_enum(group, pref_name) : 0;
 }
 
 void
@@ -61,5 +61,5 @@ gnc_prefs_get_coords (const gchar *group, const gchar *pref_name, gdouble *x, gd
     *y = 0.0;
 
     if (prefsbackend != nullptr)
-        prefsbackend->getCoords(group, pref_name, x, y);
+        prefsbackend->get_coords(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 7540f3671..56da9e6c4 100644
--- a/libgnucash/app-utils/mocks/gmock-gnc-prefs.h
+++ b/libgnucash/app-utils/mocks/gmock-gnc-prefs.h
@@ -13,13 +13,13 @@ extern "C"
 class MockPrefsBackend
 {
 public:
-    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 *));
+    MOCK_METHOD2(get_bool, gboolean(const gchar *, const gchar *));
+    MOCK_METHOD2(get_int, gint(const gchar *, const gchar *));
+    MOCK_METHOD2(get_int64, gint64(const gchar *, const gchar *));
+    MOCK_METHOD2(get_float, gdouble(const gchar *, const gchar *));
+    MOCK_METHOD2(get_string, gchar*(const gchar *, const gchar *));
+    MOCK_METHOD2(get_enum, gint(const gchar *, const gchar *));
+    MOCK_METHOD4(get_coords, void(const gchar *, const gchar *, gdouble *, gdouble *));
 };
 
 /** Define a preferences backend.
diff --git a/libgnucash/engine/mocks/fake-qofquery.cpp b/libgnucash/engine/mocks/fake-qofquery.cpp
index f3d2be34f..a6479040c 100644
--- a/libgnucash/engine/mocks/fake-qofquery.cpp
+++ b/libgnucash/engine/mocks/fake-qofquery.cpp
@@ -12,12 +12,12 @@
 static class QofFakeQueryPool
 {
 public:
-    void addQuery(QofFakeQuery *query)
+    void add_query(QofFakeQuery *query)
     {
         m_queriesNew.push_back(query);
     }
 
-    QofFakeQuery* requestQuery(QofIdTypeConst obj_type)
+    QofFakeQuery* request_query(QofIdTypeConst obj_type)
     {
         QofFakeQuery* query = nullptr;
 
@@ -36,14 +36,14 @@ public:
         return query;
     }
 
-    bool queryUsed(QofQuery *query)
+    bool query_used(QofQuery *query)
     {
         auto it = std::find(m_queriesUsed.begin(), m_queriesUsed.end(), (QofFakeQuery*)query);
 
         return (it != m_queriesUsed.end());
     }
 
-    void releaseQuery(QofFakeQuery *query)
+    void release_query(QofFakeQuery *query)
     {
         ASSERT_TRUE(query_used((QofQuery*)query));
         auto it = std::find(m_queriesUsed.begin(), m_queriesUsed.end(), query);
@@ -51,9 +51,9 @@ public:
         m_queriesConsumed.push_back(*it);
     }
 
-    void removeQuery(QofFakeQuery *query)
+    void remove_query(QofFakeQuery *query)
     {
-        ASSERT_FALSE(queryUsed((QofQuery*)query));
+        ASSERT_FALSE(query_used((QofQuery*)query));
         auto it = std::find(m_queriesConsumed.begin(), m_queriesConsumed.end(), (QofFakeQuery*)query);
         if (it != m_queriesConsumed.end())
             m_queriesConsumed.erase(it);
@@ -79,12 +79,12 @@ private:
 QofFakeQuery::QofFakeQuery(QofIdTypeConst obj_type) :
     m_obj_type(obj_type)
 {
-    queryPool.addQuery(this);
+    queryPool.add_query(this);
 }
 
 QofFakeQuery::~QofFakeQuery()
 {
-    queryPool.removeQuery(this);
+    queryPool.remove_query(this);
 }
 
 
@@ -94,21 +94,21 @@ QofFakeQuery::~QofFakeQuery()
 QofQuery *
 qof_query_create_for (QofIdTypeConst obj_type)
 {
-    return (QofQuery*)queryPool.requestQuery(obj_type);
+    return (QofQuery*)queryPool.request_query(obj_type);
 }
 
 void
 qof_query_destroy (QofQuery *query)
 {
-    queryPool.releaseQuery((QofFakeQuery*)query);
+    queryPool.release_query((QofFakeQuery*)query);
 }
 
 void
 qof_query_set_book (QofQuery *query, QofBook *book)
 {
-    ASSERT_TRUE(queryPool.queryUsed(query));
+    ASSERT_TRUE(queryPool.query_used(query));
     ASSERT_TRUE(QOF_IS_MOCK_BOOK(book));
-    ((QofFakeQuery*)query)->setBook(book);
+    ((QofFakeQuery*)query)->set_book(book);
 }
 
 void
@@ -120,22 +120,22 @@ xaccQueryAddDateMatchTT (
         time64 ett,
         QofQueryOp op)
 {
-    ASSERT_TRUE(queryPool.queryUsed(query));
-    ((QofFakeQuery*)query)->addDateMatchTT(use_start, stt, use_end, ett, op);
+    ASSERT_TRUE(queryPool.query_used(query));
+    ((QofFakeQuery*)query)->add_date_match_tt(use_start, stt, use_end, ett, op);
 }
 
 void
 xaccQueryAddSingleAccountMatch(QofQuery *query, Account *acc, QofQueryOp op)
 {
-    ASSERT_TRUE(queryPool.queryUsed(query));
-    ((QofFakeQuery*)query)->addSingleAccountMatch(acc, op);
+    ASSERT_TRUE(queryPool.query_used(query));
+    ((QofFakeQuery*)query)->add_single_account_match(acc, op);
 }
 
 GList *
 qof_query_run (QofQuery *query)
 {
     GList *matching_objects = NULL;
-    bool  query_used        = queryPool.queryUsed(query);
+    bool  query_used        = queryPool.query_used(query);
 
     EXPECT_TRUE(query_used);
     if (query_used)
diff --git a/libgnucash/engine/mocks/fake-qofquery.h b/libgnucash/engine/mocks/fake-qofquery.h
index fbf914a09..13a5df2bd 100644
--- a/libgnucash/engine/mocks/fake-qofquery.h
+++ b/libgnucash/engine/mocks/fake-qofquery.h
@@ -18,9 +18,9 @@ public:
     QofFakeQuery(QofIdTypeConst obj_type);
     ~QofFakeQuery();
 
-    MOCK_METHOD1(setBook, void(QofBook*));
-    MOCK_METHOD5(addDateMatchTT, void(gboolean, time64, gboolean, time64, QofQueryOp));
-    MOCK_METHOD2(addSingleAccountMatch, void(Account*, QofQueryOp));
+    MOCK_METHOD1(set_book, void(QofBook*));
+    MOCK_METHOD5(add_date_match_tt, void(gboolean, time64, gboolean, time64, QofQueryOp));
+    MOCK_METHOD2(add_single_account_match, void(Account*, QofQueryOp));
     MOCK_METHOD0(run, std::vector<void*>());
 
     QofIdTypeConst m_obj_type;
diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index d06877bb5..74a7a5b74 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -27,14 +27,14 @@ void
 xaccAccountBeginEdit (Account *account)
 {
     ASSERT_TRUE(GNC_IS_MOCK_ACCOUNT(account));
-    ((MockAccount*)account)->beginEdit();
+    ((MockAccount*)account)->begin_edit();
 }
 
 void
 xaccAccountCommitEdit (Account *account)
 {
     ASSERT_TRUE(GNC_IS_MOCK_ACCOUNT(account));
-    ((MockAccount*)account)->commitEdit();
+    ((MockAccount*)account)->commit_edit();
 }
 
 QofBook *
@@ -42,7 +42,7 @@ gnc_account_get_book(const Account *account)
 {
     EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(account));
     if (GNC_IS_MOCK_ACCOUNT(account))
-        return ((MockAccount*)account)->getBook();
+        return ((MockAccount*)account)->get_book();
     else
         return nullptr;
 }
@@ -53,7 +53,7 @@ xaccAccountForEachTransaction(const Account *acc, TransactionCallback proc,
 {
     EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
     if (GNC_IS_MOCK_ACCOUNT(acc))
-        return ((MockAccount*)acc)->forEachTransaction(proc, data);
+        return ((MockAccount*)acc)->for_each_transaction(proc, data);
     else
         return 0;
 }
@@ -63,7 +63,7 @@ gnc_account_imap_create_imap (Account *acc)
 {
     EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
     if (GNC_IS_MOCK_ACCOUNT(acc))
-        return ((MockAccount*)acc)->imapCreateImap();
+        return ((MockAccount*)acc)->create_imap();
     else
         return nullptr;
 }
@@ -74,7 +74,7 @@ gnc_account_imap_find_account (
         const char* category,
         const char *key)
 {
-    return ((GncMockImportMatchMap*)imap)->findAccount(category, key);
+    return ((GncMockImportMatchMap*)imap)->find_account(category, key);
 }
 
 void
@@ -84,7 +84,7 @@ gnc_account_imap_add_account (
         const char *key,
         Account *acc)
 {
-    ((GncMockImportMatchMap*)imap)->addAccount(category, key, acc);
+    ((GncMockImportMatchMap*)imap)->add_account(category, key, acc);
 }
 
 Account*
@@ -99,7 +99,7 @@ gnc_account_imap_find_account_bayes (
         tokenVec.push_back(static_cast <char const *> (token->data));
     }
 
-    return ((GncMockImportMatchMap*)imap)->findAccountBayes(tokenVec);
+    return ((GncMockImportMatchMap*)imap)->find_account_bayes(tokenVec);
 }
 
 void
@@ -115,6 +115,6 @@ gnc_account_imap_add_account_bayes (
         tokenVec.push_back(static_cast <char const *> (token->data));
     }
 
-    ((GncMockImportMatchMap*)imap)->addAccountBayes(tokenVec, acc);
+    ((GncMockImportMatchMap*)imap)->add_account_bayes(tokenVec, acc);
 }
 
diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index 0783bb46a..9908b1e32 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -36,11 +36,11 @@ public:
         mock_g_object_unref(acc, size);
     }
 
-    MOCK_METHOD0(beginEdit, void());
-    MOCK_METHOD0(commitEdit, void());
-    MOCK_METHOD0(getBook, QofMockBook*());
-    MOCK_METHOD2(forEachTransaction, gint(TransactionCallback, void*));
-    MOCK_METHOD0(imapCreateImap, GncImportMatchMap*());
+    MOCK_METHOD0(begin_edit, void());
+    MOCK_METHOD0(commit_edit, void());
+    MOCK_METHOD0(get_book, QofMockBook*());
+    MOCK_METHOD2(for_each_transaction, gint(TransactionCallback, void*));
+    MOCK_METHOD0(create_imap, GncImportMatchMap*());
 
 protected:
     // Protect destructor to avoid MockAccount objects to be created on stack. MockAccount
@@ -55,13 +55,13 @@ public:
     GncMockImportMatchMap(MockAccount* account)
     {
         acc  = account;
-        book = account->getBook();
+        book = account->get_book();
     };
 
-    MOCK_METHOD2(findAccount, Account *(const char*, const char*));
-    MOCK_METHOD3(addAccount, void(const char*, const char*, Account*));
-    MOCK_METHOD1(findAccountBayes, Account *(std::vector<const char*>&));
-    MOCK_METHOD2(addAccountBayes, void(std::vector<const char*>&, Account*));
+    MOCK_METHOD2(find_account, Account *(const char*, const char*));
+    MOCK_METHOD3(add_account, void(const char*, const char*, Account*));
+    MOCK_METHOD1(find_account_bayes, Account *(std::vector<const char*>&));
+    MOCK_METHOD2(add_account_bayes, void(std::vector<const char*>&, Account*));
 };
 
 #endif
diff --git a/libgnucash/engine/mocks/gmock-Split.cpp b/libgnucash/engine/mocks/gmock-Split.cpp
index 7f1f14903..7156ff4fe 100644
--- a/libgnucash/engine/mocks/gmock-Split.cpp
+++ b/libgnucash/engine/mocks/gmock-Split.cpp
@@ -32,7 +32,7 @@ xaccMallocSplit (QofBook *book)
 {
     EXPECT_TRUE(QOF_IS_MOCK_BOOK(book));
     if (QOF_IS_MOCK_BOOK(book))
-        return ((QofMockBook*)book)->mallocSplit();
+        return ((QofMockBook*)book)->malloc_split();
     else
         return nullptr;
 }
@@ -42,7 +42,7 @@ xaccSplitGetBook (const Split *split)
 {
     EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
     if (GNC_IS_MOCK_SPLIT(split))
-        return ((MockSplit*)split)->getBook();
+        return ((MockSplit*)split)->get_book();
     else
         return nullptr;
 }
@@ -52,7 +52,7 @@ xaccSplitGetAccount (const Split *split)
 {
     EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
     if (GNC_IS_MOCK_SPLIT(split))
-        return ((MockSplit*)split)->getAccount();
+        return ((MockSplit*)split)->get_account();
     else
         return nullptr;
 }
@@ -62,7 +62,7 @@ xaccSplitSetAccount (Split *split, Account *acc)
 {
     ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
     ASSERT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
-    ((MockSplit*)split)->setAccount(acc);
+    ((MockSplit*)split)->set_account(acc);
 }
 
 gnc_numeric
@@ -70,7 +70,7 @@ xaccSplitGetAmount (const Split *split)
 {
     EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
     if (GNC_IS_MOCK_SPLIT(split))
-        return ((MockSplit*)split)->getAmount();
+        return ((MockSplit*)split)->get_amount();
     else
         return gnc_numeric_zero();
 }
@@ -79,7 +79,7 @@ void
 xaccSplitSetAmount (Split *split, gnc_numeric amt)
 {
     ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    ((MockSplit*)split)->setAmount(amt);
+    ((MockSplit*)split)->set_amount(amt);
 }
 
 gnc_numeric
@@ -87,7 +87,7 @@ xaccSplitGetValue (const Split *split)
 {
     EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
     if (GNC_IS_MOCK_SPLIT(split))
-        return ((MockSplit*)split)->getValue();
+        return ((MockSplit*)split)->get_value();
     else
         return gnc_numeric_zero();
 }
@@ -96,7 +96,7 @@ void
 xaccSplitSetValue (Split *split, gnc_numeric val)
 {
     ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    ((MockSplit*)split)->setValue(val);
+    ((MockSplit*)split)->set_value(val);
 }
 
 const char *
@@ -104,7 +104,7 @@ xaccSplitGetMemo (const Split *split)
 {
     EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
     if (GNC_IS_MOCK_SPLIT(split))
-        return ((MockSplit*)split)->getMemo();
+        return ((MockSplit*)split)->get_memo();
     else
         return nullptr;
 }
@@ -114,7 +114,7 @@ xaccSplitGetReconcile (const Split *split)
 {
     EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
     if (GNC_IS_MOCK_SPLIT(split))
-        return ((MockSplit*)split)->getReconcile();
+        return ((MockSplit*)split)->get_reconcile();
     else
         return VREC;
 }
@@ -123,14 +123,14 @@ void
 xaccSplitSetReconcile (Split *split, char recn)
 {
     ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    ((MockSplit*)split)->setReconcile(recn);
+    ((MockSplit*)split)->set_reconcile(recn);
 }
 
 void
 xaccSplitSetDateReconciledSecs (Split *split, time64 secs)
 {
     ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
-    ((MockSplit*)split)->setDateReconciledSecs(secs);
+    ((MockSplit*)split)->set_date_reconciled_secs(secs);
 }
 
 const char *
@@ -138,7 +138,7 @@ xaccSplitGetAction (const Split *split)
 {
     EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
     if (GNC_IS_MOCK_SPLIT(split))
-        return ((MockSplit*)split)->getAction();
+        return ((MockSplit*)split)->get_action();
     else
         return nullptr;
 }
@@ -148,7 +148,7 @@ xaccSplitGetOtherSplit (const Split *split)
 {
     EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
     if (GNC_IS_MOCK_SPLIT(split))
-        return ((MockSplit*)split)->getOtherSplit();
+        return ((MockSplit*)split)->get_other_split();
     else
         return nullptr;
 }
@@ -158,7 +158,7 @@ xaccSplitGetParent (const Split *split)
 {
     EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
     if (GNC_IS_MOCK_SPLIT(split))
-        return ((MockSplit*)split)->getParent();
+        return ((MockSplit*)split)->get_parent();
     else
         return nullptr;
 }
@@ -168,5 +168,5 @@ xaccSplitSetParent(Split *split, Transaction *trans)
 {
     ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
     ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    ((MockSplit*)split)->setParent(trans);
+    ((MockSplit*)split)->set_parent(trans);
 }
diff --git a/libgnucash/engine/mocks/gmock-Split.h b/libgnucash/engine/mocks/gmock-Split.h
index 569d2fce1..9ff7dfd63 100644
--- a/libgnucash/engine/mocks/gmock-Split.h
+++ b/libgnucash/engine/mocks/gmock-Split.h
@@ -60,21 +60,21 @@ public:
     }
 
     MOCK_METHOD0(init, void());
-    MOCK_METHOD0(getBook, QofBook *());
-    MOCK_METHOD0(getAccount, Account *());
-    MOCK_METHOD1(setAccount, void(Account*));
-    MOCK_METHOD0(getAmount, gnc_numeric());
-    MOCK_METHOD1(setAmount, void(gnc_numeric));
-    MOCK_METHOD0(getValue, gnc_numeric());
-    MOCK_METHOD1(setValue, void(gnc_numeric));
-    MOCK_METHOD0(getMemo, const char *());
-    MOCK_METHOD0(getReconcile, char());
-    MOCK_METHOD1(setReconcile, void(char));
-    MOCK_METHOD1(setDateReconciledSecs, void(time64));
-    MOCK_METHOD0(getAction, const char *());
-    MOCK_METHOD0(getOtherSplit, Split *());
-    MOCK_METHOD0(getParent, Transaction *());
-    MOCK_METHOD1(setParent, void(Transaction*));
+    MOCK_METHOD0(get_book, QofBook *());
+    MOCK_METHOD0(get_account, Account *());
+    MOCK_METHOD1(set_account, void(Account*));
+    MOCK_METHOD0(get_amount, gnc_numeric());
+    MOCK_METHOD1(set_amount, void(gnc_numeric));
+    MOCK_METHOD0(get_value, gnc_numeric());
+    MOCK_METHOD1(set_value, void(gnc_numeric));
+    MOCK_METHOD0(get_memo, const char *());
+    MOCK_METHOD0(get_reconcile, char());
+    MOCK_METHOD1(set_reconcile, void(char));
+    MOCK_METHOD1(set_date_reconciled_secs, void(time64));
+    MOCK_METHOD0(get_action, const char *());
+    MOCK_METHOD0(get_other_split, Split *());
+    MOCK_METHOD0(get_parent, Transaction *());
+    MOCK_METHOD1(set_parent, void(Transaction*));
 
 protected:
     // Protect destructor to avoid MockSplit objects to be created on stack. MockSplit
diff --git a/libgnucash/engine/mocks/gmock-Transaction.cpp b/libgnucash/engine/mocks/gmock-Transaction.cpp
index 723ebb614..4bb176375 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@ -29,14 +29,14 @@ void
 xaccTransBeginEdit (Transaction *trans)
 {
     ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    ((MockTransaction*)trans)->beginEdit();
+    ((MockTransaction*)trans)->begin_edit();
 }
 
 void
 xaccTransCommitEdit (Transaction *trans)
 {
     ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    ((MockTransaction*)trans)->commitEdit();
+    ((MockTransaction*)trans)->commit_edit();
 }
 
 Split *
@@ -44,7 +44,7 @@ xaccTransGetSplit (const Transaction *trans, int i)
 {
     EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     if (GNC_IS_MOCK_TRANSACTION(trans))
-        return ((MockTransaction*)trans)->getSplit(i);
+        return ((MockTransaction*)trans)->get_split(i);
     else
         return nullptr;
 }
@@ -55,7 +55,7 @@ xaccTransFindSplitByAccount(const Transaction *trans, const Account *acc)
     EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
     if (GNC_IS_MOCK_TRANSACTION(trans))
-        return ((MockTransaction*)trans)->findSplitByAccount(acc);
+        return ((MockTransaction*)trans)->find_split_by_account(acc);
     else
         return nullptr;
 }
@@ -65,7 +65,7 @@ xaccTransGetDate (const Transaction *trans)
 {
     EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     if (GNC_IS_MOCK_TRANSACTION(trans))
-        return ((MockTransaction*)trans)->getDate();
+        return ((MockTransaction*)trans)->get_date();
     else
         return 0;
 }
@@ -74,7 +74,7 @@ void
 xaccTransSetDatePostedSecsNormalized (Transaction *trans, time64 time)
 {
     ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    ((MockTransaction*)trans)->setDatePostedSecsNormalized(time);
+    ((MockTransaction*)trans)->set_date_posted_secs_normalized(time);
 }
 
 const char *
@@ -82,7 +82,7 @@ xaccTransGetDescription (const Transaction *trans)
 {
     EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     if (GNC_IS_MOCK_TRANSACTION(trans))
-        return ((MockTransaction*)trans)->getDescription();
+        return ((MockTransaction*)trans)->get_description();
     else
         return nullptr;
 }
@@ -91,7 +91,7 @@ void
 xaccTransSetDescription (Transaction *trans, const char *desc)
 {
     ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    ((MockTransaction*)trans)->setDescription(desc);
+    ((MockTransaction*)trans)->set_description(desc);
 }
 
 const char *
@@ -99,7 +99,7 @@ xaccTransGetNotes (const Transaction *trans)
 {
     EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     if (GNC_IS_MOCK_TRANSACTION(trans))
-        return ((MockTransaction*)trans)->getNotes();
+        return ((MockTransaction*)trans)->get_notes();
     else
         return nullptr;
 }
@@ -108,7 +108,7 @@ void
 xaccTransSetNotes (Transaction *trans, const char *notes)
 {
     ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
-    ((MockTransaction*)trans)->setDescription(notes);
+    ((MockTransaction*)trans)->set_description(notes);
 }
 
 gnc_numeric
@@ -116,7 +116,7 @@ xaccTransGetImbalanceValue (const Transaction * trans)
 {
     EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     if (GNC_IS_MOCK_TRANSACTION(trans))
-        return ((MockTransaction*)trans)->getImbalanceValue();
+        return ((MockTransaction*)trans)->get_imbalance_value();
     else
         return gnc_numeric_zero();
 }
@@ -126,7 +126,7 @@ xaccTransGetNum (const Transaction *trans)
 {
     EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     if (GNC_IS_MOCK_TRANSACTION(trans))
-        return ((MockTransaction*)trans)->getNum();
+        return ((MockTransaction*)trans)->get_num();
     else
         return nullptr;
 }
@@ -136,7 +136,7 @@ xaccTransIsOpen (const Transaction *trans)
 {
     EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     if (GNC_IS_MOCK_TRANSACTION(trans))
-        return ((MockTransaction*)trans)->isOpen();
+        return ((MockTransaction*)trans)->is_open();
     else
         return FALSE;
 }
diff --git a/libgnucash/engine/mocks/gmock-Transaction.h b/libgnucash/engine/mocks/gmock-Transaction.h
index 0790a7c03..d40850ee6 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.h
+++ b/libgnucash/engine/mocks/gmock-Transaction.h
@@ -49,19 +49,19 @@ public:
         mock_g_object_unref(trans, size);
     }
 
-    MOCK_METHOD0(beginEdit, void());
-    MOCK_METHOD0(commitEdit, void());
-    MOCK_METHOD1(getSplit, Split *(int));
-    MOCK_METHOD1(findSplitByAccount, Split *(const Account*));
-    MOCK_METHOD0(getDate, time64());
-    MOCK_METHOD1(setDatePostedSecsNormalized, void(time64));
-    MOCK_METHOD0(getDescription, const char *());
-    MOCK_METHOD1(setDescription, void(const char*));
-    MOCK_METHOD0(getNotes, const char *());
-    MOCK_METHOD1(setNotes, void(const char*));
-    MOCK_METHOD0(getImbalanceValue, gnc_numeric());
-    MOCK_METHOD0(getNum, const char *());
-    MOCK_METHOD0(isOpen, gboolean());
+    MOCK_METHOD0(begin_edit, void());
+    MOCK_METHOD0(commit_edit, void());
+    MOCK_METHOD1(get_split, Split *(int));
+    MOCK_METHOD1(find_split_by_account, Split *(const Account*));
+    MOCK_METHOD0(get_date, time64());
+    MOCK_METHOD1(set_date_posted_secs_normalized, void(time64));
+    MOCK_METHOD0(get_description, const char *());
+    MOCK_METHOD1(set_description, void(const char*));
+    MOCK_METHOD0(get_notes, const char *());
+    MOCK_METHOD1(set_notes, void(const char*));
+    MOCK_METHOD0(get_imbalance_value, gnc_numeric());
+    MOCK_METHOD0(get_num, const char *());
+    MOCK_METHOD0(is_open, gboolean());
     MOCK_METHOD0(destroy, void());
 
 protected:
diff --git a/libgnucash/engine/mocks/gmock-qofbook.cpp b/libgnucash/engine/mocks/gmock-qofbook.cpp
index ee83a518f..ad186f863 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.cpp
+++ b/libgnucash/engine/mocks/gmock-qofbook.cpp
@@ -24,6 +24,6 @@ gboolean
 qof_book_use_split_action_for_num_field (const QofBook *book)
 {
     g_return_val_if_fail(QOF_IS_MOCK_BOOK(book), FALSE);
-    return ((QofMockBook*)book)->useSplitActionForNumField();
+    return ((QofMockBook*)book)->use_split_action_for_num_field();
 }
 
diff --git a/libgnucash/engine/mocks/gmock-qofbook.h b/libgnucash/engine/mocks/gmock-qofbook.h
index e4d4536b3..9b4b5cd67 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.h
+++ b/libgnucash/engine/mocks/gmock-qofbook.h
@@ -50,8 +50,8 @@ public:
         mock_g_object_unref(book, size);
     }
 
-    MOCK_METHOD0(mallocSplit, Split *());
-    MOCK_METHOD0(useSplitActionForNumField, gboolean());
+    MOCK_METHOD0(malloc_split, Split *());
+    MOCK_METHOD0(use_split_action_for_num_field, gboolean());
 
 protected:
     // Protect destructor to avoid MockQofBook objects to be created on stack. MockQofBook

commit 1fa90a54298682944abfb7504a9f74bd2bfc7b64
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Mon Jun 15 22:53:08 2020 +0200

    Cleanup some comments

diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index 02afcd37c..d06877bb5 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -84,7 +84,6 @@ gnc_account_imap_add_account (
         const char *key,
         Account *acc)
 {
-    // not used at the moment
     ((GncMockImportMatchMap*)imap)->addAccount(category, key, acc);
 }
 

commit af3353a1da2659fcf705bc7b430e84899c0a16f4
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Mon Jun 15 22:52:54 2020 +0200

    Correct comments on fake functions of the test application

diff --git a/gnucash/import-export/test/gtest-import-backend.cpp b/gnucash/import-export/test/gtest-import-backend.cpp
index 850102b02..c175cea99 100644
--- a/gnucash/import-export/test/gtest-import-backend.cpp
+++ b/gnucash/import-export/test/gtest-import-backend.cpp
@@ -43,8 +43,9 @@ testing::Environment* const env = testing::AddGlobalTestEnvironment(new TestEnvi
 
 
 
-/* mock functions, which can not be mocked by mock classes */
+/* required fake functions from engine sources, which should not be linked to the test application */
 
+// fake function from qofutil.cpp
 gint
 safe_strcasecmp (const gchar * da, const gchar * db)
 {
@@ -52,6 +53,7 @@ safe_strcasecmp (const gchar * da, const gchar * db)
     return g_strcmp0(da, db);
 }
 
+// fake function from qoflog.cpp
 const char *
 qof_log_prettify (const char *name)
 {
@@ -59,7 +61,8 @@ qof_log_prettify (const char *name)
     return name;
 }
 
-// this is a slightly modified version of the function from engine-helpers.c
+// fake function from engine-helpers.c
+// this is a slightly modified version of the original function
 const char *
 gnc_get_num_action (const Transaction *trans, const Split *split)
 {
@@ -79,6 +82,10 @@ gnc_get_num_action (const Transaction *trans, const Split *split)
     else return NULL;
 }
 
+
+/* required fake functions from app-utils sources, which should not be linked to the test application */
+
+// fake function from gnc-ui-util.c
 QofBook *
 gnc_get_current_book (void)
 {

commit 1e2236afdcd216c42be4ab316470628598e830ec
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Mon Jun 15 22:36:13 2020 +0200

    Use typed queries

diff --git a/libgnucash/engine/mocks/fake-qofquery.cpp b/libgnucash/engine/mocks/fake-qofquery.cpp
index d76685460..f3d2be34f 100644
--- a/libgnucash/engine/mocks/fake-qofquery.cpp
+++ b/libgnucash/engine/mocks/fake-qofquery.cpp
@@ -17,14 +17,18 @@ public:
         m_queriesNew.push_back(query);
     }
 
-    QofFakeQuery* requestQuery()
+    QofFakeQuery* requestQuery(QofIdTypeConst obj_type)
     {
         QofFakeQuery* query = nullptr;
 
-        if (!m_queriesNew.empty())
+        auto it = std::find_if(m_queriesNew.begin(), m_queriesNew.end(),
+            [obj_type](QofFakeQuery const* query) {
+                return (g_strcmp0(query->m_obj_type, obj_type) == 0);
+            });
+        if (it != m_queriesNew.end())
         {
-            query = m_queriesNew.front();
-            m_queriesNew.pop_front();
+            query = *it;
+            m_queriesNew.erase(it);
             m_queriesUsed.push_back(query);
         }
 
@@ -72,7 +76,8 @@ private:
 
 /* class QofFakeQuery */
 
-QofFakeQuery::QofFakeQuery()
+QofFakeQuery::QofFakeQuery(QofIdTypeConst obj_type) :
+    m_obj_type(obj_type)
 {
     queryPool.addQuery(this);
 }
@@ -89,7 +94,7 @@ QofFakeQuery::~QofFakeQuery()
 QofQuery *
 qof_query_create_for (QofIdTypeConst obj_type)
 {
-    return (QofQuery*)queryPool.requestQuery();
+    return (QofQuery*)queryPool.requestQuery(obj_type);
 }
 
 void
diff --git a/libgnucash/engine/mocks/fake-qofquery.h b/libgnucash/engine/mocks/fake-qofquery.h
index a695bb3e1..fbf914a09 100644
--- a/libgnucash/engine/mocks/fake-qofquery.h
+++ b/libgnucash/engine/mocks/fake-qofquery.h
@@ -15,14 +15,15 @@ extern "C"
 class QofFakeQuery
 {
 public:
-    QofFakeQuery();
+    QofFakeQuery(QofIdTypeConst obj_type);
     ~QofFakeQuery();
 
     MOCK_METHOD1(setBook, void(QofBook*));
     MOCK_METHOD5(addDateMatchTT, void(gboolean, time64, gboolean, time64, QofQueryOp));
     MOCK_METHOD2(addSingleAccountMatch, void(Account*, QofQueryOp));
     MOCK_METHOD0(run, std::vector<void*>());
-};
 
+    QofIdTypeConst m_obj_type;
+};
 
 #endif

commit fa82a8bcce5328c6aeb20c8fc3b57949b0548c08
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Mon Jun 15 22:06:08 2020 +0200

    Replace query factory by a query pool
    
    Query factory was implemented using a public global variable
    qof_query_factory.
    
    Furthermore a query pool is easier to handle than a factory, since the
    whole management can be hidden from the user.

diff --git a/libgnucash/engine/mocks/fake-qofquery.cpp b/libgnucash/engine/mocks/fake-qofquery.cpp
index b2542a786..d76685460 100644
--- a/libgnucash/engine/mocks/fake-qofquery.cpp
+++ b/libgnucash/engine/mocks/fake-qofquery.cpp
@@ -1,46 +1,109 @@
 #include <config.h>
 
+#include <list>
+
 #include "fake-qofquery.h"
 #include "gmock-qofbook.h"
 
+
+
+/* class QofFakeQueryPool */
+
+static class QofFakeQueryPool
+{
+public:
+    void addQuery(QofFakeQuery *query)
+    {
+        m_queriesNew.push_back(query);
+    }
+
+    QofFakeQuery* requestQuery()
+    {
+        QofFakeQuery* query = nullptr;
+
+        if (!m_queriesNew.empty())
+        {
+            query = m_queriesNew.front();
+            m_queriesNew.pop_front();
+            m_queriesUsed.push_back(query);
+        }
+
+        EXPECT_NE(query, nullptr);
+        return query;
+    }
+
+    bool queryUsed(QofQuery *query)
+    {
+        auto it = std::find(m_queriesUsed.begin(), m_queriesUsed.end(), (QofFakeQuery*)query);
+
+        return (it != m_queriesUsed.end());
+    }
+
+    void releaseQuery(QofFakeQuery *query)
+    {
+        ASSERT_TRUE(query_used((QofQuery*)query));
+        auto it = std::find(m_queriesUsed.begin(), m_queriesUsed.end(), query);
+        m_queriesUsed.erase(it);
+        m_queriesConsumed.push_back(*it);
+    }
+
+    void removeQuery(QofFakeQuery *query)
+    {
+        ASSERT_FALSE(queryUsed((QofQuery*)query));
+        auto it = std::find(m_queriesConsumed.begin(), m_queriesConsumed.end(), (QofFakeQuery*)query);
+        if (it != m_queriesConsumed.end())
+            m_queriesConsumed.erase(it);
+        else
+        {
+            it = std::find(m_queriesNew.begin(), m_queriesNew.end(), (QofFakeQuery*)query);
+            bool query_found = (it != m_queriesNew.end());
+            ASSERT_TRUE(query_found);
+            m_queriesNew.erase(it);
+        }
+    }
+
+private:
+    std::list<QofFakeQuery*> m_queriesNew {};
+    std::list<QofFakeQuery*> m_queriesUsed {};
+    std::list<QofFakeQuery*> m_queriesConsumed {};
+} queryPool;
+
+
+
+/* class QofFakeQuery */
+
+QofFakeQuery::QofFakeQuery()
+{
+    queryPool.addQuery(this);
+}
+
+QofFakeQuery::~QofFakeQuery()
+{
+    queryPool.removeQuery(this);
+}
+
+
+
+/* mock functions */
+
 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;
-*/
+    return (QofQuery*)queryPool.requestQuery();
 }
 
 void
-qof_query_set_book (QofQuery *query, QofBook *book)
+qof_query_destroy (QofQuery *query)
 {
-    ASSERT_TRUE(QOF_IS_MOCK_BOOK(book));
-    ((QofFakeQuery*)query)->setBook(book);
+    queryPool.releaseQuery((QofFakeQuery*)query);
 }
 
-GList *
-qof_query_run (QofQuery *query)
+void
+qof_query_set_book (QofQuery *query, QofBook *book)
 {
-    GList *matching_objects = NULL;
-
-    // \todo use typed mock objects
-    auto matchingObjects = ((QofFakeQuery*)query)->run();
-
-    for (auto object : matchingObjects)
-    {
-        matching_objects = g_list_append(matching_objects, static_cast<gpointer>(object));
-    }
-
-    return matching_objects;
+    ASSERT_TRUE(queryPool.queryUsed(query));
+    ASSERT_TRUE(QOF_IS_MOCK_BOOK(book));
+    ((QofFakeQuery*)query)->setBook(book);
 }
 
 void
@@ -52,17 +115,33 @@ xaccQueryAddDateMatchTT (
         time64 ett,
         QofQueryOp op)
 {
+    ASSERT_TRUE(queryPool.queryUsed(query));
     ((QofFakeQuery*)query)->addDateMatchTT(use_start, stt, use_end, ett, op);
 }
 
 void
 xaccQueryAddSingleAccountMatch(QofQuery *query, Account *acc, QofQueryOp op)
 {
+    ASSERT_TRUE(queryPool.queryUsed(query));
     ((QofFakeQuery*)query)->addSingleAccountMatch(acc, op);
 }
 
-void
-qof_query_destroy (QofQuery *query)
+GList *
+qof_query_run (QofQuery *query)
 {
-    ((QofFakeQuery*)query)->destroy();
+    GList *matching_objects = NULL;
+    bool  query_used        = queryPool.queryUsed(query);
+
+    EXPECT_TRUE(query_used);
+    if (query_used)
+    {
+        auto matchingObjects = ((QofFakeQuery*)query)->run();
+
+        for (auto object : matchingObjects)
+        {
+            matching_objects = g_list_append(matching_objects, static_cast<gpointer>(object));
+        }
+    }
+
+    return matching_objects;
 }
diff --git a/libgnucash/engine/mocks/fake-qofquery.h b/libgnucash/engine/mocks/fake-qofquery.h
index 6454fc33d..a695bb3e1 100644
--- a/libgnucash/engine/mocks/fake-qofquery.h
+++ b/libgnucash/engine/mocks/fake-qofquery.h
@@ -15,31 +15,14 @@ extern "C"
 class QofFakeQuery
 {
 public:
-    QofFakeQuery() {};
+    QofFakeQuery();
+    ~QofFakeQuery();
 
     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, QofFakeQuery*());
-} qof_query_factory;
 
 #endif

commit 2639cdefdfac9dadce946b14ea7ebbfa0048fce4
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Sun Jun 14 21:38:22 2020 +0200

    Remove unnecessary inclusion of qofquery-p.h

diff --git a/libgnucash/engine/mocks/fake-qofquery.h b/libgnucash/engine/mocks/fake-qofquery.h
index ba851ee8c..6454fc33d 100644
--- a/libgnucash/engine/mocks/fake-qofquery.h
+++ b/libgnucash/engine/mocks/fake-qofquery.h
@@ -4,7 +4,6 @@
 #include <gmock/gmock.h>
 
 #include <qofquery.h>
-#include <qofquery-p.h>
 
 extern "C"
 {

commit 841111e37e9c72099e881afe6157c99cc3e39a85
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Wed Jun 10 22:55:29 2020 +0200

    Rename class QofMockQuery to QofFakeQuery

diff --git a/libgnucash/engine/mocks/fake-qofquery.cpp b/libgnucash/engine/mocks/fake-qofquery.cpp
index 178844ba8..b2542a786 100644
--- a/libgnucash/engine/mocks/fake-qofquery.cpp
+++ b/libgnucash/engine/mocks/fake-qofquery.cpp
@@ -24,7 +24,7 @@ void
 qof_query_set_book (QofQuery *query, QofBook *book)
 {
     ASSERT_TRUE(QOF_IS_MOCK_BOOK(book));
-    ((QofMockQuery*)query)->setBook(book);
+    ((QofFakeQuery*)query)->setBook(book);
 }
 
 GList *
@@ -33,7 +33,7 @@ qof_query_run (QofQuery *query)
     GList *matching_objects = NULL;
 
     // \todo use typed mock objects
-    auto matchingObjects = ((QofMockQuery*)query)->run();
+    auto matchingObjects = ((QofFakeQuery*)query)->run();
 
     for (auto object : matchingObjects)
     {
@@ -52,17 +52,17 @@ xaccQueryAddDateMatchTT (
         time64 ett,
         QofQueryOp op)
 {
-    ((QofMockQuery*)query)->addDateMatchTT(use_start, stt, use_end, ett, op);
+    ((QofFakeQuery*)query)->addDateMatchTT(use_start, stt, use_end, ett, op);
 }
 
 void
 xaccQueryAddSingleAccountMatch(QofQuery *query, Account *acc, QofQueryOp op)
 {
-    ((QofMockQuery*)query)->addSingleAccountMatch(acc, op);
+    ((QofFakeQuery*)query)->addSingleAccountMatch(acc, op);
 }
 
 void
 qof_query_destroy (QofQuery *query)
 {
-    ((QofMockQuery*)query)->destroy();
+    ((QofFakeQuery*)query)->destroy();
 }
diff --git a/libgnucash/engine/mocks/fake-qofquery.h b/libgnucash/engine/mocks/fake-qofquery.h
index 0ab724e3c..ba851ee8c 100644
--- a/libgnucash/engine/mocks/fake-qofquery.h
+++ b/libgnucash/engine/mocks/fake-qofquery.h
@@ -11,12 +11,12 @@ 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
+// Fake object providing functionality similar to QofQuery
+// Note: QofQuery is a typedef for struct _QofQuery, which is is not public
+class QofFakeQuery
 {
 public:
-    QofMockQuery() {};
+    QofFakeQuery() {};
 
     MOCK_METHOD1(setBook, void(QofBook*));
     MOCK_METHOD0(destroy, void());
@@ -40,7 +40,7 @@ class QofQueryFactory
 {
 public:
 //    MOCK_METHOD0(createForSplit, MockQofQueryWithType<Split>*());
-    MOCK_METHOD0(create, QofMockQuery*());
+    MOCK_METHOD0(create, QofFakeQuery*());
 } qof_query_factory;
 
 #endif

commit bbfc30d70b669a3e7279377c355ada8205f7fb7b
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Wed Jun 10 22:59:02 2020 +0200

    Rename gmock-qofquery to fake-qofquery

diff --git a/gnucash/import-export/test/CMakeLists.txt b/gnucash/import-export/test/CMakeLists.txt
index 93447f8ba..7ac4fc969 100644
--- a/gnucash/import-export/test/CMakeLists.txt
+++ b/gnucash/import-export/test/CMakeLists.txt
@@ -68,7 +68,7 @@ set(gtest_import_backend_SOURCES
   ${CMAKE_SOURCE_DIR}/libgnucash/engine/mocks/gmock-Account.cpp
   ${CMAKE_SOURCE_DIR}/libgnucash/engine/mocks/gmock-Transaction.cpp
   ${CMAKE_SOURCE_DIR}/libgnucash/engine/mocks/gmock-Split.cpp
-  ${CMAKE_SOURCE_DIR}/libgnucash/engine/mocks/gmock-qofquery.cpp
+  ${CMAKE_SOURCE_DIR}/libgnucash/engine/mocks/fake-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/libgnucash/engine/mocks/gmock-qofquery.cpp b/libgnucash/engine/mocks/fake-qofquery.cpp
similarity index 98%
rename from libgnucash/engine/mocks/gmock-qofquery.cpp
rename to libgnucash/engine/mocks/fake-qofquery.cpp
index f2991807e..178844ba8 100644
--- a/libgnucash/engine/mocks/gmock-qofquery.cpp
+++ b/libgnucash/engine/mocks/fake-qofquery.cpp
@@ -1,6 +1,6 @@
 #include <config.h>
 
-#include "gmock-qofquery.h"
+#include "fake-qofquery.h"
 #include "gmock-qofbook.h"
 
 QofQuery *
diff --git a/libgnucash/engine/mocks/gmock-qofquery.h b/libgnucash/engine/mocks/fake-qofquery.h
similarity index 94%
rename from libgnucash/engine/mocks/gmock-qofquery.h
rename to libgnucash/engine/mocks/fake-qofquery.h
index e019ef339..0ab724e3c 100644
--- a/libgnucash/engine/mocks/gmock-qofquery.h
+++ b/libgnucash/engine/mocks/fake-qofquery.h
@@ -1,5 +1,5 @@
-#ifndef GMOCK_QOFQUERY_H
-#define GMOCK_QOFQUERY_H
+#ifndef FAKE_QOFQUERY_H
+#define FAKE_QOFQUERY_H
 
 #include <gmock/gmock.h>
 

commit 8425af784e1ef9c5ab62cff82f76f999b9012bb4
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Wed Jun 10 22:04:30 2020 +0200

    Check pointer to preferences backend before using it

diff --git a/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp b/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
index e45b48519..0bb403874 100644
--- a/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
+++ b/libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp
@@ -13,41 +13,53 @@ gmock_gnc_prefs_set_backend(MockPrefsBackend *backend)
 gboolean
 gnc_prefs_get_bool (const gchar *group, const gchar *pref_name)
 {
-    return prefsbackend->getBool(group, pref_name);
+    EXPECT_NE(prefsbackend, nullptr);
+    return prefsbackend ? prefsbackend->getBool(group, pref_name) : FALSE;
 }
 
 gint
 gnc_prefs_get_int (const gchar *group, const gchar *pref_name)
 {
-    return prefsbackend->getInt(group, pref_name);
+    EXPECT_NE(prefsbackend, nullptr);
+    return prefsbackend ? prefsbackend->getInt(group, pref_name) : 0;
 }
 
 gint64
 gnc_prefs_get_int64 (const gchar *group, const gchar *pref_name)
 {
-    return prefsbackend->getInt64(group, pref_name);
+    EXPECT_NE(prefsbackend, nullptr);
+    return prefsbackend ? prefsbackend->getInt64(group, pref_name) : 0;
 }
 
 gdouble
 gnc_prefs_get_float (const gchar *group, const gchar *pref_name)
 {
-    return prefsbackend->getFloat(group, pref_name);
+    EXPECT_NE(prefsbackend, nullptr);
+    return prefsbackend ? prefsbackend->getFloat(group, pref_name) : 0.0;
 }
 
 gchar *
 gnc_prefs_get_string (const gchar *group, const gchar *pref_name)
 {
-    return prefsbackend->getString(group, pref_name);
+    EXPECT_NE(prefsbackend, nullptr);
+    return prefsbackend ? prefsbackend->getString(group, pref_name) : NULL;
 }
 
 gint
 gnc_prefs_get_enum (const gchar *group, const gchar *pref_name)
 {
-    return prefsbackend->getEnum(group, pref_name);
+    EXPECT_NE(prefsbackend, nullptr);
+    return prefsbackend ? prefsbackend->getEnum(group, pref_name) : 0;
 }
 
 void
 gnc_prefs_get_coords (const gchar *group, const gchar *pref_name, gdouble *x, gdouble *y)
 {
-    prefsbackend->getCoords(group, pref_name, x, y);
+    EXPECT_NE(prefsbackend, nullptr);
+
+    *x = 0.0;
+    *y = 0.0;
+
+    if (prefsbackend != nullptr)
+        prefsbackend->getCoords(group, pref_name, x, y);
 }

commit 766f88c02d6b8837fdf09d0b8660da6251cf68a3
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Wed Jun 10 21:47:50 2020 +0200

    Replace singleton class MockPrefsBackend by an ordinary class

diff --git a/gnucash/import-export/test/gtest-import-backend.cpp b/gnucash/import-export/test/gtest-import-backend.cpp
index 0f67ee909..850102b02 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 d08dc6925..e45b48519 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 6382224cd..7540f3671 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 <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 *));
@@ -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

commit 8ac640d5fab740d4f99866c87bc6a7f08dd71c41
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Sun Jun 7 22:53:18 2020 +0200

    Fix typo

diff --git a/libgnucash/engine/mocks/gmock-qofinstance.cpp b/libgnucash/engine/mocks/gmock-qofinstance.cpp
index 272f6a32a..eb6f8aeb5 100644
--- a/libgnucash/engine/mocks/gmock-qofinstance.cpp
+++ b/libgnucash/engine/mocks/gmock-qofinstance.cpp
@@ -36,7 +36,7 @@ qof_instance_get (const QofInstance *inst, const gchar *first_prop, ...)
 }
 
 // This is a reimplementation of the function from qofinstance.cpp
-// with calling qof_instance_set_dirty()
+// without calling qof_instance_set_dirty()
 void
 qof_instance_set (QofInstance *inst, const gchar *first_prop, ...)
 {

commit 610bbda23f19e4ae3a20796c30f907a4275e84e8
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Sun Jun 7 22:52:24 2020 +0200

    Add glib-object.h to includes

diff --git a/libgnucash/engine/mocks/gmock-gobject.h b/libgnucash/engine/mocks/gmock-gobject.h
index fa09c8dcf..e09898f7d 100644
--- a/libgnucash/engine/mocks/gmock-gobject.h
+++ b/libgnucash/engine/mocks/gmock-gobject.h
@@ -2,6 +2,7 @@
 #define GMOCK_GOBJECT_H
 
 #include <glib.h>
+#include <glib-object.h>
 
 static gpointer
 mock_g_object_new (GType object_type, const gchar *first_property_name, size_t size)

commit 53c294f9e83295ccd2d9294aaba9b46e22010967
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Sun Jun 7 22:52:19 2020 +0200

    Remove unnecessary type check

diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index 271dac16c..0783bb46a 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -54,8 +54,6 @@ class GncMockImportMatchMap : public GncImportMatchMap
 public:
     GncMockImportMatchMap(MockAccount* account)
     {
-        g_return_if_fail(GNC_IS_MOCK_ACCOUNT(account));
-
         acc  = account;
         book = account->getBook();
     };

commit bb0088c43c79fbf3c5a8763f66d0b44a491f774f
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Sun Jun 7 22:50:56 2020 +0200

    Replace g_return_if_fail() and g_return_val_if_fail() by ASSERT_TRUE and EXPECT_TRUE

diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index 301d1b37f..02afcd37c 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -26,37 +26,46 @@ gnc_mock_account_class_init(MockAccountClass *klass)
 void
 xaccAccountBeginEdit (Account *account)
 {
-    g_return_if_fail(GNC_IS_MOCK_ACCOUNT(account));
+    ASSERT_TRUE(GNC_IS_MOCK_ACCOUNT(account));
     ((MockAccount*)account)->beginEdit();
 }
 
 void
 xaccAccountCommitEdit (Account *account)
 {
-    g_return_if_fail(GNC_IS_MOCK_ACCOUNT(account));
+    ASSERT_TRUE(GNC_IS_MOCK_ACCOUNT(account));
     ((MockAccount*)account)->commitEdit();
 }
 
 QofBook *
 gnc_account_get_book(const Account *account)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_ACCOUNT(account), NULL);
-    return ((MockAccount*)account)->getBook();
+    EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(account));
+    if (GNC_IS_MOCK_ACCOUNT(account))
+        return ((MockAccount*)account)->getBook();
+    else
+        return nullptr;
 }
 
 gint
 xaccAccountForEachTransaction(const Account *acc, TransactionCallback proc,
                               void *data)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_ACCOUNT(acc), 0);
-    return ((MockAccount*)acc)->forEachTransaction(proc, data);
+    EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
+    if (GNC_IS_MOCK_ACCOUNT(acc))
+        return ((MockAccount*)acc)->forEachTransaction(proc, data);
+    else
+        return 0;
 }
 
 GncImportMatchMap *
 gnc_account_imap_create_imap (Account *acc)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_ACCOUNT(acc), NULL);
-    return ((MockAccount*)acc)->imapCreateImap();
+    EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
+    if (GNC_IS_MOCK_ACCOUNT(acc))
+        return ((MockAccount*)acc)->imapCreateImap();
+    else
+        return nullptr;
 }
 
 Account*
diff --git a/libgnucash/engine/mocks/gmock-Split.cpp b/libgnucash/engine/mocks/gmock-Split.cpp
index 680749bf7..7f1f14903 100644
--- a/libgnucash/engine/mocks/gmock-Split.cpp
+++ b/libgnucash/engine/mocks/gmock-Split.cpp
@@ -30,113 +30,143 @@ gnc_mock_split_class_init (MockSplitClass *klass)
 Split *
 xaccMallocSplit (QofBook *book)
 {
-    g_return_val_if_fail(QOF_IS_MOCK_BOOK(book), NULL);
-    return ((QofMockBook*)book)->mallocSplit();
+    EXPECT_TRUE(QOF_IS_MOCK_BOOK(book));
+    if (QOF_IS_MOCK_BOOK(book))
+        return ((QofMockBook*)book)->mallocSplit();
+    else
+        return nullptr;
 }
 
 QofBook *
 xaccSplitGetBook (const Split *split)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_SPLIT(split), NULL);
-    return ((MockSplit*)split)->getBook();
+    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    if (GNC_IS_MOCK_SPLIT(split))
+        return ((MockSplit*)split)->getBook();
+    else
+        return nullptr;
 }
 
 Account *
 xaccSplitGetAccount (const Split *split)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_SPLIT(split), NULL);
-    return ((MockSplit*)split)->getAccount();
+    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    if (GNC_IS_MOCK_SPLIT(split))
+        return ((MockSplit*)split)->getAccount();
+    else
+        return nullptr;
 }
 
 void
 xaccSplitSetAccount (Split *split, Account *acc)
 {
-    g_return_if_fail(GNC_IS_MOCK_SPLIT(split));
-    g_return_if_fail(GNC_IS_MOCK_ACCOUNT(acc));
+    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
     ((MockSplit*)split)->setAccount(acc);
 }
 
 gnc_numeric
 xaccSplitGetAmount (const Split *split)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_SPLIT(split), gnc_numeric_zero());
-    return ((MockSplit*)split)->getAmount();
+    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    if (GNC_IS_MOCK_SPLIT(split))
+        return ((MockSplit*)split)->getAmount();
+    else
+        return gnc_numeric_zero();
 }
 
 void
 xaccSplitSetAmount (Split *split, gnc_numeric amt)
 {
-    g_return_if_fail(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
     ((MockSplit*)split)->setAmount(amt);
 }
 
 gnc_numeric
 xaccSplitGetValue (const Split *split)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_SPLIT(split), gnc_numeric_zero());
-    return ((MockSplit*)split)->getValue();
+    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    if (GNC_IS_MOCK_SPLIT(split))
+        return ((MockSplit*)split)->getValue();
+    else
+        return gnc_numeric_zero();
 }
 
 void
 xaccSplitSetValue (Split *split, gnc_numeric val)
 {
-    g_return_if_fail(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
     ((MockSplit*)split)->setValue(val);
 }
 
 const char *
 xaccSplitGetMemo (const Split *split)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_SPLIT(split), NULL);
-    return ((MockSplit*)split)->getMemo();
+    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    if (GNC_IS_MOCK_SPLIT(split))
+        return ((MockSplit*)split)->getMemo();
+    else
+        return nullptr;
 }
 
 char
 xaccSplitGetReconcile (const Split *split)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_SPLIT(split), VREC);
-    return ((MockSplit*)split)->getReconcile();
+    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    if (GNC_IS_MOCK_SPLIT(split))
+        return ((MockSplit*)split)->getReconcile();
+    else
+        return VREC;
 }
 
 void
 xaccSplitSetReconcile (Split *split, char recn)
 {
-    g_return_if_fail(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
     ((MockSplit*)split)->setReconcile(recn);
 }
 
 void
 xaccSplitSetDateReconciledSecs (Split *split, time64 secs)
 {
-    g_return_if_fail(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
     ((MockSplit*)split)->setDateReconciledSecs(secs);
 }
 
 const char *
 xaccSplitGetAction (const Split *split)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_SPLIT(split), NULL);
-    return ((MockSplit*)split)->getAction();
+    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    if (GNC_IS_MOCK_SPLIT(split))
+        return ((MockSplit*)split)->getAction();
+    else
+        return nullptr;
 }
 
 Split *
 xaccSplitGetOtherSplit (const Split *split)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_SPLIT(split), NULL);
-    return ((MockSplit*)split)->getOtherSplit();
+    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    if (GNC_IS_MOCK_SPLIT(split))
+        return ((MockSplit*)split)->getOtherSplit();
+    else
+        return nullptr;
 }
 
 Transaction *
 xaccSplitGetParent (const Split *split)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_SPLIT(split), NULL);
-    return ((MockSplit*)split)->getParent();
+    EXPECT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    if (GNC_IS_MOCK_SPLIT(split))
+        return ((MockSplit*)split)->getParent();
+    else
+        return nullptr;
 }
 
 void
 xaccSplitSetParent(Split *split, Transaction *trans)
 {
-    g_return_if_fail(GNC_IS_MOCK_SPLIT(split));
-    g_return_if_fail(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCK_SPLIT(split));
+    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     ((MockSplit*)split)->setParent(trans);
 }
diff --git a/libgnucash/engine/mocks/gmock-Transaction.cpp b/libgnucash/engine/mocks/gmock-Transaction.cpp
index b54dc6c03..723ebb614 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@ -28,98 +28,122 @@ gnc_mock_transaction_class_init(MockTransactionClass *klass)
 void
 xaccTransBeginEdit (Transaction *trans)
 {
-    g_return_if_fail(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     ((MockTransaction*)trans)->beginEdit();
 }
 
 void
 xaccTransCommitEdit (Transaction *trans)
 {
-    g_return_if_fail(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     ((MockTransaction*)trans)->commitEdit();
 }
 
 Split *
 xaccTransGetSplit (const Transaction *trans, int i)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), NULL);
-    return ((MockTransaction*)trans)->getSplit(i);
+    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    if (GNC_IS_MOCK_TRANSACTION(trans))
+        return ((MockTransaction*)trans)->getSplit(i);
+    else
+        return nullptr;
 }
 
 Split *
 xaccTransFindSplitByAccount(const Transaction *trans, const Account *acc)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), NULL);
-    g_return_val_if_fail(GNC_IS_MOCK_ACCOUNT(acc), NULL);
-    return ((MockTransaction*)trans)->findSplitByAccount(acc);
+    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    EXPECT_TRUE(GNC_IS_MOCK_ACCOUNT(acc));
+    if (GNC_IS_MOCK_TRANSACTION(trans))
+        return ((MockTransaction*)trans)->findSplitByAccount(acc);
+    else
+        return nullptr;
 }
 
 time64
 xaccTransGetDate (const Transaction *trans)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), 0);
-    return ((MockTransaction*)trans)->getDate();
+    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    if (GNC_IS_MOCK_TRANSACTION(trans))
+        return ((MockTransaction*)trans)->getDate();
+    else
+        return 0;
 }
 
 void
 xaccTransSetDatePostedSecsNormalized (Transaction *trans, time64 time)
 {
-    g_return_if_fail(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     ((MockTransaction*)trans)->setDatePostedSecsNormalized(time);
 }
 
 const char *
 xaccTransGetDescription (const Transaction *trans)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), NULL);
-    return ((MockTransaction*)trans)->getDescription();
+    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    if (GNC_IS_MOCK_TRANSACTION(trans))
+        return ((MockTransaction*)trans)->getDescription();
+    else
+        return nullptr;
 }
 
 void
 xaccTransSetDescription (Transaction *trans, const char *desc)
 {
-    g_return_if_fail(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     ((MockTransaction*)trans)->setDescription(desc);
 }
 
 const char *
 xaccTransGetNotes (const Transaction *trans)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), NULL);
-    return ((MockTransaction*)trans)->getNotes();
+    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    if (GNC_IS_MOCK_TRANSACTION(trans))
+        return ((MockTransaction*)trans)->getNotes();
+    else
+        return nullptr;
 }
 
 void
 xaccTransSetNotes (Transaction *trans, const char *notes)
 {
-    g_return_if_fail(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     ((MockTransaction*)trans)->setDescription(notes);
 }
 
 gnc_numeric
 xaccTransGetImbalanceValue (const Transaction * trans)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), gnc_numeric_zero());
-    return ((MockTransaction*)trans)->getImbalanceValue();
+    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    if (GNC_IS_MOCK_TRANSACTION(trans))
+        return ((MockTransaction*)trans)->getImbalanceValue();
+    else
+        return gnc_numeric_zero();
 }
 
 const char *
 xaccTransGetNum (const Transaction *trans)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), NULL);
-    return ((MockTransaction*)trans)->getNum();
+    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    if (GNC_IS_MOCK_TRANSACTION(trans))
+        return ((MockTransaction*)trans)->getNum();
+    else
+        return nullptr;
 }
 
 gboolean
 xaccTransIsOpen (const Transaction *trans)
 {
-    g_return_val_if_fail(GNC_IS_MOCK_TRANSACTION(trans), FALSE);
-    return ((MockTransaction*)trans)->isOpen();
+    EXPECT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
+    if (GNC_IS_MOCK_TRANSACTION(trans))
+        return ((MockTransaction*)trans)->isOpen();
+    else
+        return FALSE;
 }
 
 void
 xaccTransDestroy (Transaction *trans)
 {
-    g_return_if_fail(GNC_IS_MOCK_TRANSACTION(trans));
+    ASSERT_TRUE(GNC_IS_MOCK_TRANSACTION(trans));
     ((MockTransaction*)trans)->destroy();
 }
diff --git a/libgnucash/engine/mocks/gmock-qofinstance.cpp b/libgnucash/engine/mocks/gmock-qofinstance.cpp
index 9669ef4af..272f6a32a 100644
--- a/libgnucash/engine/mocks/gmock-qofinstance.cpp
+++ b/libgnucash/engine/mocks/gmock-qofinstance.cpp
@@ -1,5 +1,7 @@
 #include <glib.h>
 
+#include <gmock/gmock.h>
+
 extern "C"
 {
 #include <qofinstance.h>
@@ -26,7 +28,7 @@ void
 qof_instance_get (const QofInstance *inst, const gchar *first_prop, ...)
 {
     va_list ap;
-    g_return_if_fail (QOF_IS_INSTANCE (inst));
+    ASSERT_TRUE (QOF_IS_INSTANCE (inst));
 
     va_start (ap, first_prop);
     g_object_get_valist (G_OBJECT (inst), first_prop, ap);
@@ -39,7 +41,7 @@ void
 qof_instance_set (QofInstance *inst, const gchar *first_prop, ...)
 {
     va_list ap;
-    g_return_if_fail (QOF_IS_INSTANCE (inst));
+    ASSERT_TRUE (QOF_IS_INSTANCE (inst));
 
     va_start (ap, first_prop);
     g_object_set_valist (G_OBJECT (inst), first_prop, ap);
diff --git a/libgnucash/engine/mocks/gmock-qofquery.cpp b/libgnucash/engine/mocks/gmock-qofquery.cpp
index 65a545f14..f2991807e 100644
--- a/libgnucash/engine/mocks/gmock-qofquery.cpp
+++ b/libgnucash/engine/mocks/gmock-qofquery.cpp
@@ -23,7 +23,7 @@ qof_query_create_for (QofIdTypeConst obj_type)
 void
 qof_query_set_book (QofQuery *query, QofBook *book)
 {
-    g_return_if_fail(QOF_IS_MOCK_BOOK(book));
+    ASSERT_TRUE(QOF_IS_MOCK_BOOK(book));
     ((QofMockQuery*)query)->setBook(book);
 }
 

commit 967cf0b4304ad1412fbc3970a4dbac68a15356c5
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Wed Jun 3 23:41:04 2020 +0200

    Pass std::vector arguments by reference instead of by value

diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index ee0036604..271dac16c 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -62,8 +62,8 @@ public:
 
     MOCK_METHOD2(findAccount, Account *(const char*, const char*));
     MOCK_METHOD3(addAccount, void(const char*, const char*, Account*));
-    MOCK_METHOD1(findAccountBayes, Account *(std::vector<const char*>));
-    MOCK_METHOD2(addAccountBayes, void(std::vector<const char*>, Account*));
+    MOCK_METHOD1(findAccountBayes, Account *(std::vector<const char*>&));
+    MOCK_METHOD2(addAccountBayes, void(std::vector<const char*>&, Account*));
 };
 
 #endif

commit d0842798917b78db777c20bf6181d2bf056a1b3a
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Wed Jun 3 23:36:48 2020 +0200

    State comment on unused GObject instance init function more precisely

diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index 5763284c4..301d1b37f 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -14,7 +14,7 @@ G_DEFINE_TYPE(MockAccount, gnc_mock_account, QOF_TYPE_INSTANCE);
 static void
 gnc_mock_account_init (MockAccount *inst)
 {
-    // function is unused, initialization is done in the MockAccount's constructor
+    // function is unused, initialization is done in the MockAccount's C++ constructor
 }
 
 static void
diff --git a/libgnucash/engine/mocks/gmock-Split.cpp b/libgnucash/engine/mocks/gmock-Split.cpp
index c6ec5ecb7..680749bf7 100644
--- a/libgnucash/engine/mocks/gmock-Split.cpp
+++ b/libgnucash/engine/mocks/gmock-Split.cpp
@@ -17,7 +17,7 @@ G_DEFINE_TYPE(MockSplit, gnc_mock_split, QOF_TYPE_INSTANCE);
 static void
 gnc_mock_split_init (MockSplit *inst)
 {
-    // function is unused since it's overwritten by MockSplit's constructor anyway
+    // function is unused, initialization is done in the MockSplit's C++ constructor
 }
 
 static void
diff --git a/libgnucash/engine/mocks/gmock-Transaction.cpp b/libgnucash/engine/mocks/gmock-Transaction.cpp
index dd02f6ea8..b54dc6c03 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.cpp
+++ b/libgnucash/engine/mocks/gmock-Transaction.cpp
@@ -15,7 +15,7 @@ G_DEFINE_TYPE(MockTransaction, gnc_mock_transaction, QOF_TYPE_INSTANCE);
 static void
 gnc_mock_transaction_init (MockTransaction *inst)
 {
-    // function is unused, initialization is done in the MockTransaction's constructor
+    // function is unused, initialization is done in the MockTransaction's C++ constructor
 }
 
 static void
diff --git a/libgnucash/engine/mocks/gmock-qofbook.cpp b/libgnucash/engine/mocks/gmock-qofbook.cpp
index 7c3c6d7c7..ee83a518f 100644
--- a/libgnucash/engine/mocks/gmock-qofbook.cpp
+++ b/libgnucash/engine/mocks/gmock-qofbook.cpp
@@ -11,7 +11,7 @@ G_DEFINE_TYPE(QofMockBook, qof_mock_book, QOF_TYPE_INSTANCE);
 static void
 qof_mock_book_init (QofMockBook *inst)
 {
-    // function is unused, initialization is done in the QofMockBook's constructor
+    // function is unused, initialization is done in the QofMockBook's C++ constructor
 }
 
 static void

commit 67f63053fbae56029a71d8010fed83dc3623f4ff
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Wed Jun 3 23:26:49 2020 +0200

    Remove todo comments on replacement of std::vector by std::list
    
    Replacing std::vector by std::list wouldn't have any advantage

diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index 2e5f37060..5763284c4 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -84,7 +84,6 @@ gnc_account_imap_find_account_bayes (
         GncImportMatchMap *imap,
         GList *tokens)
 {
-    // \todo use std::list instead of std::vector, since GList is a double-linked list like std::list
     std::vector<const char*> tokenVec;
 
     for (auto token = tokens; token; token = token->next)
@@ -101,7 +100,6 @@ gnc_account_imap_add_account_bayes (
         GList *tokens,
         Account *acc)
 {
-    // \todo use std::list instead of std::vector, since GList is a double-linked list like std::list
     std::vector<const char*> tokenVec;
 
     for (auto token = tokens; token; token = token->next)

commit a9d85e8f8ea8ffb75bdf0927fa263fd01d9308be
Author: Christian Gruber <christian.gruber at posteo.de>
Date:   Tue Jun 2 08:16:50 2020 +0200

    Use std::vector of const char* instead of std::string where meaningful
    
    This avoids additional string allocation

diff --git a/gnucash/import-export/test/gtest-import-backend.cpp b/gnucash/import-export/test/gtest-import-backend.cpp
index eedcfba92..0f67ee909 100644
--- a/gnucash/import-export/test/gtest-import-backend.cpp
+++ b/gnucash/import-export/test/gtest-import-backend.cpp
@@ -248,7 +248,7 @@ TEST_F(ImportBackendBayesTest, CreateTransInfo)
 
     // check tokens created from transaction
     EXPECT_CALL(imap, findAccountBayes(AllOf(
-            Each(Not(IsEmpty())),                // tokens must not be empty strings
+            Each(Not(StrEq(""))),                // tokens must not be empty strings
             Each(Not(HasSubstr(" "))),           // tokens must not contain separator
             Not(HasDuplicates()),                // tokens must be unique
             Contains(StrEq(local_day_of_week)),  // tokens must contain local day of week
diff --git a/libgnucash/engine/mocks/gmock-Account.cpp b/libgnucash/engine/mocks/gmock-Account.cpp
index 5152d8866..2e5f37060 100644
--- a/libgnucash/engine/mocks/gmock-Account.cpp
+++ b/libgnucash/engine/mocks/gmock-Account.cpp
@@ -85,7 +85,7 @@ gnc_account_imap_find_account_bayes (
         GList *tokens)
 {
     // \todo use std::list instead of std::vector, since GList is a double-linked list like std::list
-    std::vector<std::string> tokenVec;
+    std::vector<const char*> tokenVec;
 
     for (auto token = tokens; token; token = token->next)
     {
@@ -102,7 +102,7 @@ gnc_account_imap_add_account_bayes (
         Account *acc)
 {
     // \todo use std::list instead of std::vector, since GList is a double-linked list like std::list
-    std::vector<std::string> tokenVec;
+    std::vector<const char*> tokenVec;
 
     for (auto token = tokens; token; token = token->next)
     {
diff --git a/libgnucash/engine/mocks/gmock-Account.h b/libgnucash/engine/mocks/gmock-Account.h
index 2a39efe6f..ee0036604 100644
--- a/libgnucash/engine/mocks/gmock-Account.h
+++ b/libgnucash/engine/mocks/gmock-Account.h
@@ -62,8 +62,8 @@ public:
 
     MOCK_METHOD2(findAccount, Account *(const char*, const char*));
     MOCK_METHOD3(addAccount, void(const char*, const char*, Account*));
-    MOCK_METHOD1(findAccountBayes, Account *(std::vector<std::string>));
-    MOCK_METHOD2(addAccountBayes, void(std::vector<std::string>, Account*));
+    MOCK_METHOD1(findAccountBayes, Account *(std::vector<const char*>));
+    MOCK_METHOD2(addAccountBayes, void(std::vector<const char*>, Account*));
 };
 
 #endif



Summary of changes:
 gnucash/import-export/test/CMakeLists.txt          |   2 +-
 .../import-export/test/gtest-import-backend.cpp    |  48 +++---
 libgnucash/app-utils/mocks/gmock-gnc-prefs.cpp     |  38 ++++-
 libgnucash/app-utils/mocks/gmock-gnc-prefs.h       |  46 ++----
 libgnucash/engine/mocks/fake-qofquery.cpp          | 169 +++++++++++++++++++++
 libgnucash/engine/mocks/fake-qofquery.h            |  71 +++++++++
 libgnucash/engine/mocks/gmock-Account.cpp          |  52 ++++---
 libgnucash/engine/mocks/gmock-Account.h            |  60 +++++---
 libgnucash/engine/mocks/gmock-Split.cpp            |  96 +++++++-----
 libgnucash/engine/mocks/gmock-Split.h              |  61 +++++---
 libgnucash/engine/mocks/gmock-Transaction.cpp      |  86 ++++++-----
 libgnucash/engine/mocks/gmock-Transaction.h        |  60 +++++---
 libgnucash/engine/mocks/gmock-gobject.h            |   1 +
 libgnucash/engine/mocks/gmock-qofbook.cpp          |  19 ++-
 libgnucash/engine/mocks/gmock-qofbook.h            |  35 ++++-
 libgnucash/engine/mocks/gmock-qofinstance.cpp      |  11 +-
 libgnucash/engine/mocks/gmock-qofquery.cpp         |  68 ---------
 libgnucash/engine/mocks/gmock-qofquery.h           |  46 ------
 18 files changed, 622 insertions(+), 347 deletions(-)
 create mode 100644 libgnucash/engine/mocks/fake-qofquery.cpp
 create mode 100644 libgnucash/engine/mocks/fake-qofquery.h
 delete mode 100644 libgnucash/engine/mocks/gmock-qofquery.cpp
 delete mode 100644 libgnucash/engine/mocks/gmock-qofquery.h



More information about the gnucash-changes mailing list