1 #ifndef GMOCK_SPLIT_H
2 #define GMOCK_SPLIT_H
3 
4 #include <gmock/gmock.h>
5 
6 #include <Split.h>
7 extern "C"
8 {
9 #include <SplitP.h>
10 }
11 
12 #include "gmock-qofbook.h"
13 #include "gmock-gobject.h"
14 
15 
16 GType gnc_mocksplit_get_type(void);
17 
18 #define GNC_TYPE_MOCKSPLIT   (gnc_mocksplit_get_type ())
19 #define GNC_IS_MOCKSPLIT(o)  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_MOCKSPLIT))
20 
21 
22 // mock up for Split
23 class MockSplit : public Split
24 {
25 public:
MockSplit()26     MockSplit()
27     {
28         acc         = nullptr;
29         orig_acc    = nullptr;
30         parent      = nullptr;
31         orig_parent = nullptr;
32         lot         = nullptr;
33 
34         action      = nullptr;
35         memo        = nullptr;
36         reconciled  = VREC;
37         amount      = gnc_numeric_zero();
38         value       = gnc_numeric_zero();
39 
40         date_reconciled    = 0;
41 
42         balance            = gnc_numeric_zero();
43         cleared_balance    = gnc_numeric_zero();
44         reconciled_balance = gnc_numeric_zero();
45         noclosing_balance  = gnc_numeric_zero();
46 
47         gains        = GAINS_STATUS_UNKNOWN;
48         gains_split  = nullptr;
49     }
new(size_t size)50     void* operator new(size_t size)
51     {
52         return mock_g_object_new (GNC_TYPE_MOCKSPLIT, NULL, size);
53     }
54 
55     // define separate free() function since destructor is protected
free()56     void free()
57     {
58         delete this;
59     }
delete(void * split,size_t size)60     void operator delete(void* split, size_t size)
61     {
62         mock_g_object_unref(split, size);
63     }
64 
65     MOCK_METHOD0(init, void());
66     MOCK_CONST_METHOD0(get_book, QofBook *());
67     MOCK_CONST_METHOD0(get_account, Account *());
68     MOCK_METHOD1(set_account, void(Account*));
69     MOCK_CONST_METHOD0(get_amount, gnc_numeric());
70     MOCK_METHOD1(set_amount, void(gnc_numeric));
71     MOCK_CONST_METHOD0(get_value, gnc_numeric());
72     MOCK_METHOD1(set_value, void(gnc_numeric));
73     MOCK_CONST_METHOD0(get_memo, const char *());
74     MOCK_CONST_METHOD0(get_reconcile, char());
75     MOCK_METHOD1(set_reconcile, void(char));
76     MOCK_METHOD1(set_date_reconciled_secs, void(time64));
77     MOCK_CONST_METHOD0(get_action, const char *());
78     MOCK_CONST_METHOD0(get_other_split, Split *());
79     MOCK_CONST_METHOD0(get_parent, Transaction *());
80     MOCK_METHOD1(set_parent, void(Transaction*));
81 
82 protected:
83     // Protect destructor to avoid MockSplit objects to be created on stack. MockSplit
84     // objects can only be dynamically created, since they are derived from GObject.
~MockSplit()85     ~MockSplit() {}
86 };
87 
88 
89 // type conversion functions
90 static inline MockSplit*
gnc_mocksplit(Split * split)91 gnc_mocksplit (Split *split)
92 {
93     if (GNC_IS_MOCKSPLIT(split))
94         return static_cast<MockSplit*>(split);
95     ADD_FAILURE() << "Expected 'split' to be of type 'MockSplit'";
96     return nullptr;
97 }
98 
99 static inline const MockSplit*
gnc_mocksplit(const Split * split)100 gnc_mocksplit (const Split *split)
101 {
102     if (GNC_IS_MOCKSPLIT(split))
103         return static_cast<const MockSplit*>(split);
104     ADD_FAILURE() << "Expected 'split' to be of type 'MockSplit'";
105     return nullptr;
106 }
107 
108 #endif
109