26 #include <glib/gprintf.h> 29 #include "test-stuff.h" 31 #define OBJ_NAME "somename" 32 #define OBJ_AMOUNT "anamount" 33 #define OBJ_DATE "nottoday" 34 #define OBJ_GUID "unique" 35 #define OBJ_DISCOUNT "hefty" 36 #define OBJ_VERSION "early" 37 #define OBJ_MINOR "tiny" 38 #define OBJ_ACTIVE "ofcourse" 39 #define OBJ_FLAG "tiny_flag" 40 #define OBJ_EVENT_NAME "test-event-object" 41 #define OBJ_EVENT_DESC "test object for events" 45 static gboolean debug = FALSE;
50 static guint test, foo;
71 g_return_val_if_fail (book, NULL);
72 e = g_new0 (event_obj, 1);
75 e->discount = get_random_double ();
76 e->active = get_random_boolean ();
77 e->version = get_random_int_in_range (1, 10000);
78 e->minor = get_random_int_in_range (100000, 99999999);
79 e->flag = get_random_character ();
80 e->Name = get_random_string ();
81 e->Amount = get_random_qof_numeric ();
87 event_setFlag (event_obj * e, gchar f)
94 event_getFlag (event_obj * e)
96 g_return_val_if_fail (e,
'n');
101 event_setMinor (event_obj * e, gint64 h)
103 g_return_if_fail (e != NULL);
108 event_getMinor (event_obj * e)
110 g_return_val_if_fail (e, 0);
115 event_setVersion (event_obj * e, gint32 h)
117 g_return_if_fail (e);
122 event_getVersion (event_obj * e)
130 event_setActive (event_obj * e, gboolean h)
138 event_getActive (event_obj * e)
146 event_setDiscount (event_obj * e,
double h)
154 event_getDiscount (event_obj * e)
162 event_setDate (event_obj * e,
QofTime *h)
170 event_getDate (event_obj * e)
178 event_setName (event_obj * e, gchar * h)
182 e->Name = strdup (h);
186 event_getName (event_obj * e)
202 event_getAmount (event_obj * e)
211 .e_type = OBJ_EVENT_NAME,
212 .type_label = OBJ_EVENT_DESC,
213 .create = (gpointer) event_create,
220 .version_cmp = (gint (*)(gpointer, gpointer))
225 event_objRegister (
void)
230 {OBJ_AMOUNT, QOF_TYPE_NUMERIC, (
QofAccessFunc) event_getAmount,
234 {OBJ_DISCOUNT, QOF_TYPE_DOUBLE, (
QofAccessFunc) event_getDiscount,
236 {OBJ_ACTIVE, QOF_TYPE_BOOLEAN, (
QofAccessFunc) event_getActive,
238 {OBJ_VERSION, QOF_TYPE_INT32, (
QofAccessFunc) event_getVersion,
248 {NULL, NULL, NULL, NULL, NULL},
256 typedef struct event_context_s
262 gboolean destroy_used;
270 gpointer handler_data,
271 gpointer user_data __attribute__ ((unused)))
273 event_context *context;
275 context = (event_context *) handler_data;
276 do_test ((ent != NULL),
"Null ent in test");
277 do_test ((context != NULL),
"Null context");
290 do_test ((context->entity_original != NULL),
291 "No original entity");
293 "wrong event sent: test (QOF_EVENT_MODIFY)");
298 do_test ((context->entity_original != NULL),
299 "No original entity");
301 "wrong event sent: test (QOF_EVENT_DESTROY)");
302 do_test ((context->destroy_used),
303 "destroy sent without being called");
310 do_test ((context->entity_original != NULL),
311 "No original entity: test");
314 case QOF_EVENT_REMOVE:
316 do_test ((context->entity_original != NULL),
317 "No original entity: test");
322 do_test ((context->entity_original != NULL),
323 "No original entity: test");
331 gpointer handler_data,
332 gpointer user_data __attribute__ ((unused)))
334 event_context *context;
336 context = (event_context *) handler_data;
337 do_test ((context != NULL),
"Null context");
338 do_test ((ent != NULL),
"Null entity for foo");
355 do_test ((context->entity_original != NULL),
356 "No original entity");
358 "wrong event sent: foo (QOF_EVENT_DESTROY)");
359 do_test ((context->destroy_used),
360 "destroy sent without being called");
369 case QOF_EVENT_REMOVE:
381 create_data (
QofSession * original, event_context * context)
386 start = qof_session_get_book (original);
388 do_test ((NULL != &e->inst),
"instance init");
390 switch (context->counter)
394 do_test ((e != NULL),
"empty check");
401 do_test ((context->old_foo_id == foo),
"forward foo");
402 do_test ((context->old_test_id == test),
"forward test");
403 context->entity_original = (
QofEntity *) e;
406 do_test ((NULL != &e1->inst),
"temporary instance init");
407 context->entity_modified = (
QofEntity *) e1;
411 event_setName (e, event_getName (e1));
414 context->destroy_used = TRUE;
421 context->destroy_used = FALSE;
423 context->entity_modified = NULL;
424 context->param = NULL;
433 do_test ((context->old_foo_id < foo),
"reverse foo");
434 do_test ((context->old_test_id < test),
"reverse test");
438 context->entity_modified = (
QofEntity *) e1;
440 context->destroy_used = TRUE;
445 context->destroy_used = FALSE;
447 context->entity_original = NULL;
448 context->entity_modified = NULL;
452 context->old_foo_id = foo;
453 context->old_test_id = test;
458 context->entity_original = (
QofEntity *) e;
459 do_test ((NULL != &e2->inst),
"second instance init");
460 context->entity_modified = (
QofEntity *) e2;
466 context->destroy_used = TRUE;
471 context->destroy_used = FALSE;
473 context->entity_modified = NULL;
479 context->destroy_used = TRUE;
484 context->destroy_used = FALSE;
486 context->entity_original = NULL;
496 event_context context;
500 event_objRegister ();
501 original = qof_session_new ();
507 context.entity_original = NULL;
508 context.entity_modified = NULL;
509 context.destroy_used = FALSE;
510 context.param = NULL;
517 context.old_test_id = test;
518 context.old_foo_id = foo;
519 for (count = 0; count < 25; count++)
521 context.counter = (count % 5);
522 create_data (original, &context);
524 print_test_results ();
gpointer qof_object_new_instance(QofIdTypeConst type_name, QofBook *book)
#define QOF_OBJECT_VERSION
#define QOF_EVENT_DESTROY
void qof_class_register(QofIdTypeConst obj_name, QofSortFunc default_sort_function, const QofParam *params)
registers a new object class with the Qof subsystem.
This file declares testing functions for the engine.
QofBook * qof_instance_get_book(QofInstance *inst)
void qof_event_gen(QofEntity *entity, QofEventId event_id, gpointer event_data)
Invoke all registered event handlers using the given arguments.
void(* QofSetterFunc)(gpointer, gpointer)
QofTime * qof_time_get_current(void)
Get the current QofTime.
const QofParam * qof_class_get_parameter(QofIdTypeConst obj_name, const gchar *parameter)
gint qof_event_register_handler(QofEventHandler handler, gpointer user_data)
Register a handler for events.
const GUID * qof_instance_get_guid(QofInstance *inst)
void qof_session_begin(QofSession *session, const gchar *book_id, gboolean ignore_lock, gboolean create_if_nonexistent)
void qof_collection_foreach(QofCollection *col, QofEntityForeachCB cb_func, gpointer user_data)
void qof_event_unregister_handler(gint handler_id)
Unregister an event handler.
void qof_entity_release(QofEntity *ent)
gpointer(* QofAccessFunc)(gpointer object, const QofParam *param)
#define QOF_EVENT_MODIFY
an entity is about to be modified.
gboolean qof_object_register(const QofObject *object)
void qof_close(void)
Safely close down the Query Object Framework.
#define QOF_STDOUT
Allow session data to be printed to stdout.
struct QofTime64 QofTime
Use a 64-bit signed int QofTime.
static QofNumeric qof_numeric_zero(void)
int qof_instance_version_cmp(QofInstance *left, QofInstance *right)
void qof_instance_init(QofInstance *inst, QofIdType type, QofBook *book)
void qof_init(void)
Initialise the Query Object Framework.