gnucash/libgnucash/engine/mocks/fake-qofquery.h

72 lines
2.3 KiB
C++

/**
* @file fake-qofquery.h
*
* @brief Mocking qof queries
*/
#ifndef FAKE_QOFQUERY_H
#define FAKE_QOFQUERY_H
#include <gmock/gmock.h>
#include <qofquery.h>
extern "C"
{
#include <Query.h>
}
/** 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:
QofFakeQuery(QofIdTypeConst obj_type);
~QofFakeQuery();
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;
};
#endif